Переглянути джерело

Fix issue #26 : possibilité de s'abonner à des flux derrière authentification HTTP + correction quelques traductions

Marien Fressinaud 13 роки тому
батько
коміт
0e95494e29

+ 9 - 1
app/controllers/configureController.php

@@ -90,11 +90,19 @@ class configureController extends ActionController {
 					$cat = Request::param ('category', 0);
 					$path = Request::param ('path_entries', '');
 					$priority = Request::param ('priority', 0);
+					$user = Request::param ('http_user', '');
+					$pass = Request::param ('http_pass', '');
+
+					$httpAuth = '';
+					if ($user != '' || $pass != '') {
+						$httpAuth = $user . ':' . $pass;
+					}
 
 					$values = array (
 						'category' => $cat,
 						'pathEntries' => $path,
-						'priority' => $priority
+						'priority' => $priority,
+						'httpAuth' => $httpAuth
 					);
 
 					if ($feedDAO->updateFeed ($id, $values)) {

+ 11 - 1
app/controllers/feedController.php

@@ -16,11 +16,20 @@ class feedController extends ActionController {
 			if (Request::isPost ()) {
 				$url = Request::param ('url_rss');
 				$cat = Request::param ('category');
+				$user = Request::param ('username');
+				$pass = Request::param ('password');
 				$params = array ();
 
 				try {
 					$feed = new Feed ($url);
 					$feed->_category ($cat);
+
+					$httpAuth = '';
+					if ($user != '' || $pass != '') {
+						$httpAuth = $user . ':' . $pass;
+					}
+					$feed->_httpAuth ($httpAuth);
+
 					$feed->load ();
 
 					$feedDAO = new FeedDAO ();
@@ -31,7 +40,8 @@ class feedController extends ActionController {
 						'name' => $feed->name (),
 						'website' => $feed->website (),
 						'description' => $feed->description (),
-						'lastUpdate' => time ()
+						'lastUpdate' => time (),
+						'httpAuth' => $feed->httpAuth (),
 					);
 
 					if ($feedDAO->searchByUrl ($values['url'])) {

+ 4 - 3
app/i18n/en.php

@@ -9,7 +9,7 @@ return array (
 	'configuration'			=> 'Configuration',
 	'general_and_reading'		=> 'General and reading',
 	'categories'			=> 'Categories',
-	'category'			=> 'Catégory',
+	'category'			=> 'Category',
 	'shortcuts'			=> 'Shortcuts',
 	'about'				=> 'About',
 
@@ -88,7 +88,7 @@ return array (
 	'cancel'			=> 'Cancel',
 
 	'back_to_rss_feeds'		=> '← Go back to your RSS feeds',
-	'feeds_moved_category_deleted'	=> 'When you delete a category, their feeds are automatically classified under <em>%s</ em>.',
+	'feeds_moved_category_deleted'	=> 'When you delete a category, their feeds are automatically classified under <em>%s</em>.',
 	'category_number'		=> 'Category n°%d',
 	'ask_empty'			=> 'Clear ?',
 	'number_feeds'			=> '%d feeds',
@@ -123,6 +123,7 @@ return array (
 	'no'				=> 'No',
 	'css_path_on_website'		=> 'Articles CSS path on original website',
 	'retrieve_truncated_feeds'	=> 'Retrieves truncated RSS feeds (attention, requires more time!)',
+	'http_authentication'		=> 'HTTP Authentication',
 	'http_username'			=> 'HTTP username',
 	'http_password'			=> 'HTTP password',
 	'blank_to_disable'		=> 'Leave blank to disable',
@@ -198,7 +199,7 @@ return array (
 	'september'			=> 'september',
 	'october'			=> 'october',
 	'november'			=> 'november',
-	'december'			=> 'décember',
+	'december'			=> 'december',
 	// special format for date() function
 	'Jan'				=> '\J\a\n\u\a\r\y',
 	'Feb'				=> '\F\e\b\r\u\a\r\y',

+ 2 - 1
app/i18n/fr.php

@@ -123,7 +123,8 @@ return array (
 	'no'				=> 'Non',
 	'css_path_on_website'		=> 'Chemin CSS des articles sur le site d\'origine',
 	'retrieve_truncated_feeds'	=> 'Permet de récupérer les flux tronqués (attention, demande plus de temps !)',
-	'http_username'			=> 'Username HTTP',
+	'http_authentication'		=> 'Authentification HTTP',
+	'http_username'			=> 'Identifiant HTTP',
 	'http_password'			=> 'Mot de passe HTTP',
 	'blank_to_disable'		=> 'Laissez vide pour désactiver',
 	'not_yet_implemented'		=> 'Pas encore implémenté',

+ 8 - 0
app/layout/aside_feed.phtml

@@ -21,6 +21,14 @@
 					</label>
 					</li>
 					<?php } ?>
+
+					<li class="dropdown-header"><?php echo Translate::t ('http_authentication'); ?></li>
+					<li class="input">
+						<input type="text" name="username" id="username" placeholder="<?php echo Translate::t ('username'); ?>" />
+					</li>
+					<li class="input">
+						<input type="password" name="password" id="password" placeholder="<?php echo Translate::t ('password'); ?>" />
+					</li>
 				</ul>
 			</div>
 			<button class="btn" type="submit"><i class="icon i_add"></i></button>

+ 22 - 5
app/models/Feed.php

@@ -59,9 +59,13 @@ class Feed extends Model {
 		if ($raw) {
 			return $this->httpAuth;
 		} else {
+			$pos_colon = strpos ($this->httpAuth, ':');
+			$user = substr ($this->httpAuth, 0, $pos_colon);
+			$pass = substr ($this->httpAuth, $pos_colon + 1);
+
 			return array (
-				'username' => '',
-				'password' => ''
+				'username' => $user,
+				'password' => $pass
 			);
 		}
 	}
@@ -134,7 +138,12 @@ class Feed extends Model {
 				);
 			} else {
 				$feed = new SimplePie ();
-				$feed->set_feed_url (preg_replace ('/&amp;/', '&', $this->url));
+				$url = preg_replace ('/&amp;/', '&', $this->url);
+				if ($this->httpAuth != '') {
+					$url = preg_replace ('#((.+)://)(.+)#', '${1}' . $this->httpAuth . '@${3}', $url);
+				}
+
+				$feed->set_feed_url ($url);
 				$feed->set_cache_location (CACHE_PATH);
 				$feed->init ();
 
@@ -144,6 +153,9 @@ class Feed extends Model {
 
 				$subscribe_url = $feed->subscribe_url ();
 				if (!is_null ($subscribe_url) && $subscribe_url != $this->url) {
+					if ($this->httpAuth != '') {
+						$subscribe_url = preg_replace ('#((.+)://)((.+)@)(.+)#', '${1}${5}', $subscribe_url);
+					}
 					$this->_url ($subscribe_url);
 				}
 				$title = $feed->get_title ();
@@ -205,7 +217,7 @@ class Feed extends Model {
 
 class FeedDAO extends Model_pdo {
 	public function addFeed ($valuesTmp) {
-		$sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate, priority, error) VALUES(?, ?, ?, ?, ?, ?, ?, 10, 0)';
+		$sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate, priority, httpAuth, error) VALUES(?, ?, ?, ?, ?, ?, ?, 10, ?, 0)';
 		$stm = $this->bd->prepare ($sql);
 
 		$values = array (
@@ -216,6 +228,7 @@ class FeedDAO extends Model_pdo {
 			$valuesTmp['website'],
 			$valuesTmp['description'],
 			$valuesTmp['lastUpdate'],
+			base64_encode ($valuesTmp['httpAuth']),
 		);
 
 		if ($stm && $stm->execute ($values)) {
@@ -231,6 +244,10 @@ class FeedDAO extends Model_pdo {
 		$set = '';
 		foreach ($valuesTmp as $key => $v) {
 			$set .= $key . '=?, ';
+
+			if ($key == 'httpAuth') {
+				$valuesTmp[$key] = base64_encode ($v);
+			}
 		}
 		$set = substr ($set, 0, -2);
 
@@ -408,7 +425,7 @@ class HelperFeed {
 			$list[$key]->_lastUpdate ($dao['lastUpdate']);
 			$list[$key]->_priority ($dao['priority']);
 			$list[$key]->_pathEntries ($dao['pathEntries']);
-			$list[$key]->_httpAuth ($dao['httpAuth']);
+			$list[$key]->_httpAuth (base64_decode ($dao['httpAuth']));
 
 			if (isset ($dao['id'])) {
 				$list[$key]->_id ($dao['id']);

+ 6 - 5
app/views/configure/feed.phtml

@@ -58,20 +58,21 @@
 				<i class="icon i_help"></i> <?php echo Translate::t ('retrieve_truncated_feeds'); ?>
 			</div>
 		</div>
-<!--
+
+		<?php $auth = $this->flux->httpAuth (false); ?>
 		<div class="form-group">
 			<label class="group-name" for="http_user"><?php echo Translate::t ('http_username'); ?></label>
 			<div class="group-controls">
-				<input type="text" name="http_user" id="http_user" value="<?php echo Translate::t ('not_yet_implemented'); ?>" />
+				<input type="text" name="http_user" id="http_user" value="<?php echo $auth['username']; ?>" />
 				<i class="icon i_help"></i> <?php echo Translate::t ('access_protected_feeds'); ?>
 			</div>
 
 			<label class="group-name" for="http_pass"><?php echo Translate::t ('http_password'); ?></label>
 			<div class="group-controls">
-				<input type="text" name="http_pass" id="http_pass" value="<?php echo Translate::t ('not_yet_implemented'); ?>" />
+				<input type="password" name="http_pass" id="http_pass" value="<?php echo $auth['password']; ?>" />
 			</div>
 		</div>
--->
+
 
 		<div class="form-group form-actions">
 			<div class="group-controls">
@@ -82,5 +83,5 @@
 	</form>
 </div>
 <?php } else { ?>
-<div class="alert"><span class="alert-head"><?php echo Translate::t ('no_selected_feed'); ?></span> <?php echo Translate::t ('think_to_add'); ?></div>
+<div class="alert alert-warn"><span class="alert-head"><?php echo Translate::t ('no_selected_feed'); ?></span> <?php echo Translate::t ('think_to_add'); ?></div>
 <?php } ?>