Réorganisation des fichiers utilisateur

Implémente https://github.com/marienfressinaud/FreshRSS/issues/248
This commit is contained in:
Alexandre Alapetite
2013-11-17 02:56:30 +01:00
parent b8c4afadf4
commit 9c5c023e36
21 changed files with 61 additions and 62 deletions

View File

@@ -36,7 +36,7 @@ Privilégiez pour cela des demandes sur GitHub
# Sécurité et conseils
1. Pour une meilleure sécurité, faites en sorte que seul le répertoire `./public` soit accessible par le navigateur. Faites pointer un sous-domaine sur le répertoire `./public` par exemple
2. Dans tous les cas, assurez-vous que `./app/configuration/application.ini` ne puisse pas être téléchargé !
2. Dans tous les cas, assurez-vous que `./data/application.ini` ne puisse pas être téléchargé !
3. Le fichier de log peut être utile à lire si vous avez des soucis
4. Le fichier `./public/index.php` défini les chemins d'accès aux répertoires clés de l'application. Si vous les bougez, tout se passe ici.
5. Vous pouvez ajouter une tâche CRON sur le script d'actualisation des flux. Il s'agit d'un script PHP à exécuter avec la commande `php`. Par exemple, pour exécuter le script toutes les heures :

View File

@@ -20,4 +20,4 @@ $front_controller = new App_FrontController ();
$front_controller->init ();
Session::_param('mail', true); // permet de se passer de la phase de connexion
$front_controller->run ();
touch(PUBLIC_PATH . '/data/touch.txt');
touch(DATA_PATH . '/touch.txt');

View File

@@ -1 +0,0 @@
*

View File

@@ -84,7 +84,7 @@ class entryController extends ActionController {
$entryDAO = new EntryDAO();
$entryDAO->optimizeTable();
touch(PUBLIC_PATH . '/data/touch.txt');
touch(DATA_PATH . '/touch.txt');
$notif = array (
'type' => 'good',

View File

@@ -277,7 +277,7 @@ class indexController extends ActionController {
$res = json_decode ($result, true);
if ($res['status'] == 'okay' && $res['email'] == $this->view->conf->mailLogin ()) {
Session::_param ('mail', $res['email']);
touch(PUBLIC_PATH . '/data/touch.txt');
touch(DATA_PATH . '/touch.txt');
} else {
$res = array ();
$res['status'] = 'failure';
@@ -290,6 +290,6 @@ class indexController extends ActionController {
public function logoutAction () {
$this->view->_useLayout (false);
Session::_param ('mail');
touch(PUBLIC_PATH . '/data/touch.txt');
touch(DATA_PATH . '/touch.txt');
}
}

View File

@@ -283,7 +283,7 @@ return array (
'dom_is_nok' => 'You havent the necessary to browse the DOM (php-xml package can be useful)',
'cache_is_ok' => 'Permissions on cache directory are good',
'log_is_ok' => 'Permissions on logs directory are good',
'conf_is_ok' => 'Permissions on configuration directory are good',
'favicons_is_ok' => 'Permissions on favicons directory are good',
'data_is_ok' => 'Permissions on data directory are good',
'file_is_nok' => 'Check permissions on <em>%s</em> directory. HTTP server must have rights to write into',
'fix_errors_before' => 'Fix errors before skip to the next step.',

View File

@@ -283,7 +283,7 @@ return array (
'dom_is_nok' => 'Vous ne disposez pas du nécessaire pour parcourir le DOM (voir du côté du paquet php-xml ?)',
'cache_is_ok' => 'Les droits sur le répertoire de cache sont bons',
'log_is_ok' => 'Les droits sur le répertoire des logs sont bons',
'conf_is_ok' => 'Les droits sur le répertoire de configuration sont bons',
'favicons_is_ok' => 'Les droits sur le répertoire des favicons sont bons',
'data_is_ok' => 'Les droits sur le répertoire de data sont bons',
'file_is_nok' => 'Veuillez vérifier les droits sur le répertoire <em>%s</em>. Le serveur HTTP doit être capable décrire dedans',
'fix_errors_before' => 'Veuillez corriger les erreurs avant de passer à létape suivante.',

View File

@@ -32,7 +32,7 @@
<?php
if (isset ($this->notification)) {
touch(PUBLIC_PATH . '/data/touch.txt', time() + 1);
touch(DATA_PATH . '/touch.txt', time() + 1);
?>
<div class="notification <?php echo $this->notification['type']; ?>">
<?php echo $this->notification['content']; ?>

View File

@@ -100,7 +100,7 @@ class Feed extends Model {
return $this->nbNotRead;
}
public function favicon () {
$file = '/data/favicons/' . $this->id () . '.ico';
$file = '/favicons/' . $this->id () . '.ico';
$favicon_url = Url::display ($file);
if (!file_exists (PUBLIC_PATH . $file)) {

View File

@@ -348,7 +348,7 @@ class RSSConfigurationDAO extends Model_array {
public $bottomline_link = 'yes';
public function __construct () {
parent::__construct (PUBLIC_PATH . '/data/Configuration.array.php');
parent::__construct (DATA_PATH . '/Configuration.array.php');
// TODO : simplifier ce code, une boucle for() devrait suffir !
if (isset ($this->array['language'])) {

1
cache/.gitignore vendored
View File

@@ -1 +0,0 @@
*

View File

@@ -3,8 +3,11 @@ define('FRESHRSS_VERSION', '0.7-dev');
define('FRESHRSS_WEBSITE', 'http://marienfressinaud.github.io/FreshRSS/');
// Constantes de chemins
define ('PUBLIC_PATH', realpath (dirname (__FILE__) . '/public'));
define ('LIB_PATH', realpath (dirname (__FILE__) . '/lib'));
define ('APP_PATH', realpath (dirname (__FILE__) . '/app'));
define ('LOG_PATH', realpath (dirname (__FILE__) . '/log'));
define ('CACHE_PATH', realpath (dirname (__FILE__) . '/cache'));
define ('FRESHRSS_PATH', realpath (dirname (__FILE__)));
define ('PUBLIC_PATH', FRESHRSS_PATH . '/public');
define ('DATA_PATH', FRESHRSS_PATH . '/data');
define ('LIB_PATH', FRESHRSS_PATH . '/lib');
define ('APP_PATH', FRESHRSS_PATH . '/app');
define ('LOG_PATH', DATA_PATH . '/log');
define ('CACHE_PATH', DATA_PATH . '/cache');

6
data/.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
cache
log
application.ini
Configuration.array.php
*.sqlite
touch.txt

View File

@@ -168,9 +168,9 @@ function get_content_by_parsing ($url, $path) {
/* Télécharge le favicon d'un site, le place sur le serveur et retourne l'URL */
function dowload_favicon ($website, $id) {
$url = 'http://g.etfv.co/' . $website;
$favicons_dir = PUBLIC_PATH . '/data/favicons';
$favicons_dir = PUBLIC_PATH . '/favicons';
$dest = $favicons_dir . '/' . $id . '.ico';
$favicon_url = '/data/favicons/' . $id . '.ico';
$favicon_url = '/favicons/' . $id . '.ico';
if (!is_dir ($favicons_dir)) {
if (!mkdir ($favicons_dir, 0755, true)) {
@@ -211,7 +211,7 @@ function dowload_favicon ($website, $id) {
function lazyimg($content) {
return preg_replace(
'/<img([^>]+?)src=[\'"]([^"\']+)[\'"]([^>]*)>/i',
'<img$1src="' . Url::display('/data/grey.gif') . '" data-original="$2"$3>',
'<img$1src="' . Url::display('/themes/icons/grey.gif') . '" data-original="$2"$3>',
$content
);
}

View File

@@ -8,7 +8,7 @@
* La classe Configuration permet de gérer la configuration de l'application
*/
class Configuration {
const CONF_PATH_NAME = '/configuration/application.ini';
const CONF_PATH_NAME = '/application.ini';
/**
* VERSION est la version actuelle de MINZ
@@ -111,21 +111,21 @@ class Configuration {
* @exception BadConfigurationException si CONF_PATH_NAME mal formaté
*/
private static function parseFile () {
if (!file_exists (APP_PATH . self::CONF_PATH_NAME)) {
if (!file_exists (DATA_PATH . self::CONF_PATH_NAME)) {
throw new FileNotExistException (
APP_PATH . self::CONF_PATH_NAME,
DATA_PATH . self::CONF_PATH_NAME,
MinzException::ERROR
);
}
$ini_array = parse_ini_file (
APP_PATH . self::CONF_PATH_NAME,
DATA_PATH . self::CONF_PATH_NAME,
true
);
if (!$ini_array) {
throw new PermissionDeniedException (
APP_PATH . self::CONF_PATH_NAME,
DATA_PATH . self::CONF_PATH_NAME,
MinzException::ERROR
);
}

View File

@@ -49,9 +49,7 @@ class Model_pdo {
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
} elseif($type == 'sqlite') {
$string = $type
. ':/' . PUBLIC_PATH
. '/data/' . $db['base'] . '.sqlite'; //TODO: DEBUG UTF-8 http://www.siteduzero.com/forum/sujet/sqlite-connexion-utf-8-18797
$string = $type . ':/' . DATA_PATH . $db['base'] . '.sqlite'; //TODO: DEBUG UTF-8 http://www.siteduzero.com/forum/sujet/sqlite-connexion-utf-8-18797
}
$this->bd = new FreshPDO (
@@ -86,7 +84,7 @@ class Model_pdo {
class FreshPDO extends PDO {
private static function check($statement) {
if (preg_match('/^(?:UPDATE|INSERT|DELETE)/i', $statement)) {
touch(PUBLIC_PATH . '/data/touch.txt');
touch(DATA_PATH . '/touch.txt');
}
}

1
log/.gitignore vendored
View File

@@ -1 +0,0 @@
*

View File

@@ -1,4 +0,0 @@
favicons
Configuration.array.php
*.sqlite
touch.txt

View File

@@ -20,16 +20,16 @@
require('../constants.php');
if (file_exists (PUBLIC_PATH . '/install.php')) {
if (file_exists ('install.php')) {
include ('install.php');
} else {
session_cache_limiter('');
require (LIB_PATH . '/http-conditional.php');
$dateLastModification = max(
@filemtime(PUBLIC_PATH . '/data/touch.txt'),
@filemtime(DATA_PATH . '/touch.txt'),
@filemtime(LOG_PATH . '/application.log'),
@filemtime(PUBLIC_PATH . '/data/Configuration.array.php'),
@filemtime(APP_PATH . '/configuration/application.ini')
@filemtime(DATA_PATH . '/Configuration.array.php'),
@filemtime(DATA_PATH . '/application.ini')
);
if (httpConditional($dateLastModification, 0, 0, false, false, true)) {
exit(); //No need to send anything

View File

@@ -166,7 +166,7 @@ function saveStep2 () {
. small_hash ($_SESSION['base_url'] . $_SESSION['sel']);
}
$file_data = PUBLIC_PATH . '/data/Configuration.array.php';
$file_data = DATA_PATH . '/Configuration.array.php';
$f = fopen ($file_data, 'w');
writeLine ($f, '<?php');
@@ -199,7 +199,7 @@ function saveStep3 () {
$_SESSION['bd_name'] = addslashes ($_POST['base']);
$_SESSION['bd_prefix'] = addslashes ($_POST['prefix']);
$file_conf = APP_PATH . '/configuration/application.ini';
$file_conf = DATA_PATH . '/application.ini';
$f = fopen ($file_conf, 'w');
writeLine ($f, '[general]');
writeLine ($f, 'environment = "production"');
@@ -265,10 +265,10 @@ function checkStep1 () {
$curl = extension_loaded ('curl');
$pdo = extension_loaded ('pdo_mysql');
$dom = class_exists('DOMDocument');
$data = DATA_PATH && is_writable (DATA_PATH);
$cache = CACHE_PATH && is_writable (CACHE_PATH);
$log = LOG_PATH && is_writable (LOG_PATH);
$conf = APP_PATH && is_writable (APP_PATH . '/configuration');
$data = is_writable (PUBLIC_PATH . '/data');
$favicons = is_writable (PUBLIC_PATH . '/favicons');
return array (
'php' => $php ? 'ok' : 'ko',
@@ -276,11 +276,11 @@ function checkStep1 () {
'curl' => $curl ? 'ok' : 'ko',
'pdo-mysql' => $pdo ? 'ok' : 'ko',
'dom' => $dom ? 'ok' : 'ko',
'data' => $data ? 'ok' : 'ko',
'cache' => $cache ? 'ok' : 'ko',
'log' => $log ? 'ok' : 'ko',
'configuration' => $conf ? 'ok' : 'ko',
'data' => $data ? 'ok' : 'ko',
'all' => $php && $minz && $curl && $pdo && $dom && $cache && $log && $conf && $data ? 'ok' : 'ko'
'favicons' => $favicons ? 'ok' : 'ko',
'all' => $php && $minz && $curl && $pdo && $dom && $data && $cache && $log && $favicons ? 'ok' : 'ko'
);
}
function checkStep2 () {
@@ -289,7 +289,7 @@ function checkStep2 () {
isset ($_SESSION['title']) &&
isset ($_SESSION['old_entries']) &&
isset ($_SESSION['mail_login']);
$data = file_exists (PUBLIC_PATH . '/data/Configuration.array.php');
$data = file_exists (DATA_PATH . '/Configuration.array.php');
return array (
'conf' => $conf ? 'ok' : 'ko',
@@ -298,7 +298,7 @@ function checkStep2 () {
);
}
function checkStep3 () {
$conf = file_exists (APP_PATH . '/configuration/application.ini');
$conf = file_exists (DATA_PATH . '/application.ini');
$bd = isset ($_SESSION['bd_type']) &&
isset ($_SESSION['bd_host']) &&
isset ($_SESSION['bd_user']) &&
@@ -337,8 +337,7 @@ function checkBD () {
// on écrase la précédente connexion en sélectionnant la nouvelle BDD
$str = 'mysql:host=' . $_SESSION['bd_host'] . ';dbname=' . $_SESSION['bd_name'];
} elseif($_SESSION['bd_type'] == 'sqlite') {
$str = 'sqlite:' . PUBLIC_PATH
. '/data/' . $_SESSION['bd_name'] . '.sqlite';
$str = 'sqlite:' . DATA_PATH . $_SESSION['bd_name'] . '.sqlite';
}
$c = new PDO ($str,
@@ -370,8 +369,8 @@ function checkBD () {
$error = true;
}
if ($error && file_exists (APP_PATH . '/configuration/application.ini')) {
unlink (APP_PATH . '/configuration/application.ini');
if ($error && file_exists (DATA_PATH . '/application.ini')) {
unlink (DATA_PATH . '/application.ini');
}
return !$error;
@@ -448,28 +447,28 @@ function printStep1 () {
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('dom_is_nok'); ?></p>
<?php } ?>
<?php if ($res['data'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('data_is_ok'); ?></p>
<?php } else { ?>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', DATA_PATH); ?></p>
<?php } ?>
<?php if ($res['cache'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('cache_is_ok'); ?></p>
<?php } else { ?>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', PUBLIC_PATH . '/../cache'); ?></p>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', CACHE_PATH); ?></p>
<?php } ?>
<?php if ($res['log'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('log_is_ok'); ?></p>
<?php } else { ?>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', PUBLIC_PATH . '/../log'); ?></p>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', LOG_PATH); ?></p>
<?php } ?>
<?php if ($res['configuration'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('conf_is_ok'); ?></p>
<?php if ($res['favicons'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('favicons_is_ok'); ?></p>
<?php } else { ?>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', APP_PATH . '/configuration'); ?></p>
<?php } ?>
<?php if ($res['data'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('data_is_ok'); ?></p>
<?php } else { ?>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', PUBLIC_PATH . '/data'); ?></p>
<p class="alert alert-error"><span class="alert-head"><?php echo _t ('damn'); ?></span> <?php echo _t ('file_is_nok', PUBLIC_PATH . '/favicons'); ?></p>
<?php } ?>
<?php if ($res['all'] == 'ok') { ?>

View File

Before

Width:  |  Height:  |  Size: 56 B

After

Width:  |  Height:  |  Size: 56 B