Réorganisation des fichiers utilisateur

Implémente https://github.com/marienfressinaud/FreshRSS/issues/248
pull/279/head
Alexandre Alapetite 11 years ago
parent b8c4afadf4
commit 9c5c023e36
  1. 2
      README.md
  2. 2
      actualize_script.php
  3. 1
      app/configuration/.gitignore
  4. 2
      app/controllers/entryController.php
  5. 4
      app/controllers/indexController.php
  6. 2
      app/i18n/en.php
  7. 2
      app/i18n/fr.php
  8. 2
      app/layout/layout.phtml
  9. 2
      app/models/Feed.php
  10. 2
      app/models/RSSConfiguration.php
  11. 1
      cache/.gitignore
  12. 13
      constants.php
  13. 6
      data/.gitignore
  14. 6
      lib/lib_rss.php
  15. 10
      lib/minz/Configuration.php
  16. 6
      lib/minz/dao/Model_pdo.php
  17. 1
      log/.gitignore
  18. 4
      public/data/.gitignore
  19. 8
      public/index.php
  20. 47
      public/install.php
  21. 0
      public/themes/icons/grey.gif

@ -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 :

@ -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');

@ -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',

@ -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');
}
}

@ -283,7 +283,7 @@ return array (
'dom_is_nok' => 'You haven’t 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.',

@ -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.',

@ -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']; ?>

@ -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)) {

@ -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

@ -1 +0,0 @@
*

@ -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

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

@ -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
);
}

@ -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
);
}

@ -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

@ -1 +0,0 @@
*

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

@ -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

@ -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>
<?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 } 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>
<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['data'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t ('ok'); ?></span> <?php echo _t ('data_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', 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') { ?>

Before

Width:  |  Height:  |  Size: 56 B

After

Width:  |  Height:  |  Size: 56 B

Loading…
Cancel
Save