Przeglądaj źródła

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.
Alexandre Alapetite 12 lat temu
rodzic
commit
67531f796f
8 zmienionych plików z 66 dodań i 22 usunięć
  1. 14 0
      CHANGELOG
  2. 9 7
      README.md
  3. 18 5
      app/FreshRSS.php
  4. 1 1
      app/Models/Configuration.php
  5. 3 3
      index.html
  6. 1 1
      index.php
  7. 20 2
      p/index.html
  8. 0 3
      p/index.php

+ 14 - 0
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

+ 9 - 7
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`.

+ 18 - 5
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()) {

+ 1 - 1
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);
 		}

+ 3 - 3
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>

+ 1 - 1
index.php

@@ -1,3 +1,3 @@
 <?php
-header('Location: p/i/', true, 301);
+header('Location: p/', true, 301);
 include('index.html');

+ 20 - 2
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>

+ 0 - 3
p/index.php

@@ -1,3 +0,0 @@
-<?php
-header('Location: i/', true, 301);
-include('index.html');