mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-05-18 05:14:34 -04:00
Réorganisation des fichiers utilisateur
Implémente https://github.com/marienfressinaud/FreshRSS/issues/248
This commit is contained in:
@@ -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');
|
||||
|
||||
1
app/configuration/.gitignore
vendored
1
app/configuration/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*
|
||||
@@ -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
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
Normal file
6
data/.gitignore
vendored
Normal file
@@ -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
log/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*
|
||||
4
public/data/.gitignore
vendored
4
public/data/.gitignore
vendored
@@ -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>
|
||||
<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') { ?>
|
||||
|
||||
|
Before Width: | Height: | Size: 56 B After Width: | Height: | Size: 56 B |
Reference in New Issue
Block a user