aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-01-01 17:01:09 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-01-01 17:01:09 +0100
commit67531f796f4c273cc9b078db788fdb51ece824ee (patch)
treed6e9971e2eae28896bdfa36856025e66d6735cf7
parenta08201c41486815de25c71f5497e939631ea68b4 (diff)
HTTP Auth : améliorations + changelog
* Affichage logo FreshRSS pendant la demande de nom d'utilisateur HTTP * Meilleure page d'erreur si utilisateur HTTP non-configuré dans FreshRSS + log Je recommande donc de placer le .htaccess pour le contrôle d'accès dans ./FreshRSS/p/i/.htaccess et pas plus haut pour une meilleure mise en cache et messages de connexion.
-rw-r--r--CHANGELOG14
-rw-r--r--README.md16
-rw-r--r--app/FreshRSS.php23
-rw-r--r--app/Models/Configuration.php2
-rw-r--r--index.html6
-rw-r--r--index.php2
-rw-r--r--p/index.html22
-rw-r--r--p/index.php3
8 files changed, 66 insertions, 22 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 108e29195..f4b168b41 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,19 @@
# Journal des modifications
+## 2014-01-xx FreshRSS 0.7.5
+
+* Nouveau mode multi-utilisateur
+ * L’utilisateur par défaut (administrateur) peut créer et supprimer d’autres utilisateurs
+ * Nécessite un contrôle d’accès, soit :
+ * par HTTP (par exemple sous Apache en créant un fichier ./p/i/.htaccess et .htpasswd)
+ * le nom d’utilisateur HTTP doit correspondre au nom d’utilisateur FreshRSS
+ * par Mozilla Persona, en renseignant l’adresse courriel des utilisateurs
+* Options
+ * Réorganisation des options
+* PHP
+ * Compatibilité PHP 5.5+ avec OPcache
+ * Amélioration des performances
+
## 2014-01-xx FreshRSS 0.7
* Installeur
diff --git a/README.md b/README.md
index cfef89781..cf1308c33 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# FreshRSS
FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de [Leed](http://projet.idleman.fr/leed/) ou de [Kriss Feed](http://tontof.net/kriss/feed/).
Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.
+Il permet de gérer plusieurs utilisateurs, et dispose d’un mode de lecture anonyme.
* Site officiel : http://freshrss.org
* Démo : http://marienfressinaud.fr/projets/freshrss/
@@ -21,11 +22,11 @@ Privilégiez pour cela des demandes sur GitHub
# Pré-requis
* Serveur Apache2 ou Nginx (non testé sur les autres)
* PHP 5.2+ (PHP 5.3.3+ recommandé)
- * Requis : [PDO_MySQL](http://php.net/pdo-mysql), [cURL](http://php.net/curl), [LibXML](http://php.net/xml), [PCRE](http://php.net/pcre), [ctype](http://php.net/ctype)
- * Recommandés : [JSON](http://php.net/json), [zlib](http://php.net/zlib), [mbstring](http://php.net/mbstring), [iconv](http://php.net/iconv)
+ * Requis : [PDO_MySQL](http://php.net/pdo-mysql), [cURL](http://php.net/curl), [LibXML](http://php.net/xml), [PCRE](http://php.net/pcre), [ctype](http://php.net/ctype)
+ * Recommandés : [JSON](http://php.net/json), [zlib](http://php.net/zlib), [mbstring](http://php.net/mbstring), [iconv](http://php.net/iconv)
* MySQL 5.0.3+ (ou SQLite 3.7.4+ à venir)
* Un navigateur Web récent tel Firefox, Chrome, Opera, Safari, Internet Explorer 9+
- * Fonctionne aussi sur mobile
+ * Fonctionne aussi sur mobile
![Capture d’écran de FreshRSS](http://marienfressinaud.fr/data/images/freshrss/freshrss_default-design.png)
@@ -37,10 +38,11 @@ Privilégiez pour cela des demandes sur GitHub
5. Tout devrait fonctionner :) En cas de problème, n’hésitez pas à me contacter.
# Contrôle d’accès
-Il est recommandé de limiter l’accès à votre FreshRSS, soit :
+Il est requis pour le mode multi-utilisateur, et recommandé dans tous les cas, de limiter l’accès à votre FreshRSS :
* En utilisant l’identification par [Mozilla Persona](https://login.persona.org/about) incluse dans FreshRSS
-* En utilisant un contrôle d’accès défini par votre serveur Web
- * Voir par exemple la [documentation d’Apache sur l’authentification](http://httpd.apache.org/docs/trunk/howto/auth.html)
+* En utilisant un contrôle d’accès HTTP défini par votre serveur Web
+ * Voir par exemple la [documentation d’Apache sur l’authentification](http://httpd.apache.org/docs/trunk/howto/auth.html)
+ * Créer dans ce cas un fichier `./p/i/.htaccess` avec un fichier `.htpasswd` correspondant.
# Rafraîchissement automatique des flux
* Vous pouvez ajouter une tâche CRON sur le script d’actualisation des flux. Par exemple, pour exécuter le script toutes les heures :
@@ -51,6 +53,6 @@ Il est recommandé de limiter l’accès à votre FreshRSS, soit :
# Conseils
* Pour une meilleure sécurité, faites en sorte que seul le répertoire `./p/` soit accessible depuis le Web, par exemple en faisant pointer un sous-domaine sur le répertoire `./p/`.
-* Les données personnelles se trouvent dans le répertoire `./data/` (déjà protégé par un .htaccess pour Apache - vérifiez que cela fonctionne -, à protéger vous-même dans le cas d’autres serveurs Web).
+ * En particulier, les données personnelles se trouvent dans le répertoire `./data/`.
* Le fichier `./constants.php` définit les chemins d’accès aux répertoires clés de l’application. Si vous les bougez, tout se passe ici.
* En cas de problème, les logs peuvent être utile à lire, soit depuis l’interface de FreshRSS, soit manuellement depuis `./data/log/*.log`.
diff --git a/app/FreshRSS.php b/app/FreshRSS.php
index 0af0c01da..4ebb6d631 100644
--- a/app/FreshRSS.php
+++ b/app/FreshRSS.php
@@ -51,12 +51,25 @@ class FreshRSS extends Minz_FrontController {
try {
$this->conf = new FreshRSS_Configuration($currentUser);
- } catch (Minz_Exception $e) {
- Minz_Session::_param('currentUser', '');
- die('Invalid configuration for user [' . $currentUser . ']! ' . $e->getMessage()); //Permission denied or conf file does not exist
+ Minz_View::_param ('conf', $this->conf);
+ Minz_Session::_param('currentUser', $currentUser);
+ } catch (Minz_Exception $me) {
+ $loginOk = false;
+ try {
+ $this->conf = new FreshRSS_Configuration(Minz_Configuration::defaultUser());
+ Minz_Session::_param('currentUser', Minz_Configuration::defaultUser());
+ Minz_View::_param('conf', $this->conf);
+ $notif = array(
+ 'type' => 'bad',
+ 'content' => 'Invalid configuration for user [' . $currentUser . ']!',
+ );
+ Minz_Session::_param ('notification', $notif);
+ Minz_Log::record ($notif['content'] . ' ' . $me->getMessage(), Minz_Log::WARNING);
+ Minz_Session::_param('currentUser', '');
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
}
- Minz_View::_param ('conf', $this->conf);
- Minz_Session::_param('currentUser', $currentUser);
if ($loginOk) {
switch (Minz_Configuration::authType()) {
diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php
index e0ae3bf6b..d44420f56 100644
--- a/app/Models/Configuration.php
+++ b/app/Models/Configuration.php
@@ -64,7 +64,7 @@ class FreshRSS_Configuration {
public function __construct ($user) {
$this->filename = DATA_PATH . '/' . $user . '_user.php';
- $data = include($this->filename);
+ $data = @include($this->filename);
if (!is_array($data)) {
throw new Minz_PermissionDeniedException($this->filename);
}
diff --git a/index.html b/index.html
index 1bfdea859..6ac025960 100644
--- a/index.html
+++ b/index.html
@@ -2,12 +2,12 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">
<head>
<meta charset="UTF-8" />
-<meta http-equiv="Refresh" content="0; url=p/i/" />
+<meta http-equiv="Refresh" content="0; url=p/" />
<title>Redirection</title>
-<meta name="robots" content="noindex" />
+<meta name="robots" content="noindex,nofollow" />
</head>
<body>
-<p><a href="p/i/">FreshRSS</a></p>
+<p><a href="p/">FreshRSS</a></p>
</body>
</html>
diff --git a/index.php b/index.php
index 3fdae4285..828cca39a 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
<?php
-header('Location: p/i/', true, 301);
+header('Location: p/', true, 301);
include('index.html');
diff --git a/p/index.html b/p/index.html
index af91b717e..eaa0d71f8 100644
--- a/p/index.html
+++ b/p/index.html
@@ -2,11 +2,29 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">
<head>
<meta charset="UTF-8" />
+<meta name="viewport" content="initial-scale=1.0" />
<meta http-equiv="Refresh" content="0; url=i/" />
-<title>Redirection</title>
+<title>FreshRSS</title>
+<meta name="robots" content="noindex,nofollow" />
+<link rel="icon" href="favicon.ico" />
+<style>
+body {
+ font-family: sans-serif;
+ text-align: center;
+}
+h1 {
+ font-size: xx-large;
+ text-shadow: 1px -1px 0 #CCCCCC;
+}
+h1 a {
+ color: #0062BE;
+ text-decoration: none;
+}
+</style>
</head>
<body>
-<p><a href="i/">FreshRSS</a></p>
+<h1><a href="i/">FreshRSS</a></h1>
+<p><a href="i/"><img class="logo" width="25%" src="themes/icons/icon.svg" alt="⊚" /></a></p>
</body>
</html>
diff --git a/p/index.php b/p/index.php
deleted file mode 100644
index e90662078..000000000
--- a/p/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-header('Location: i/', true, 301);
-include('index.html');