Browse Source

Global limits for number of feeds and categories

New 'limits' sub-array in config.php with 'max_feeds' and
'max_categories'. If the values are < 0, then it is the default value
(16384).
https://github.com/marienfressinaud/FreshRSS/issues/680
Alexandre Alapetite 11 years ago
parent
commit
c6f35ef51c

+ 7 - 0
app/Controllers/categoryController.php

@@ -33,6 +33,13 @@ class FreshRSS_category_Controller extends Minz_ActionController {
 		$catDAO = new FreshRSS_CategoryDAO();
 		$url_redirect = array('c' => 'subscription', 'a' => 'index');
 
+		$limits = Minz_Configuration::limits();
+		$this->view->categories = $catDAO->listCategories(false);
+		if (count($this->view->categories) >= $limits['max_categories']) {
+			Minz_Request::bad(_t('over_max_categories', $limits['max_categories']), $url_redirect);
+			return;
+		}
+
 		if (Minz_Request::isPost()) {
 			invalidateHttpCache();
 

+ 7 - 0
app/Controllers/feedController.php

@@ -68,6 +68,13 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
 			'params' => array(),
 		);
 
+		$limits = Minz_Configuration::limits();
+		$this->view->feeds = $feedDAO->listFeeds();
+		if (count($this->view->feeds) >= $limits['max_feeds']) {
+			Minz_Request::bad(_t('over_max_feeds', $limits['max_feeds']), $url_redirect);
+			return;
+		}
+
 		if (Minz_Request::isPost()) {
 			@set_time_limit(300);
 

+ 26 - 0
lib/Minz/Configuration.php

@@ -60,6 +60,12 @@ class Minz_Configuration {
 		'prefix' => '',
 	);
 
+	const MAX_SMALL_INT = 16384;
+	private static $limits = array(
+		'max_feeds' => Minz_Configuration::MAX_SMALL_INT,
+		'max_categories' => Minz_Configuration::MAX_SMALL_INT,
+	);
+
 	/*
 	 * Getteurs
 	 */
@@ -97,6 +103,9 @@ class Minz_Configuration {
 	public static function dataBase () {
 		return self::$db;
 	}
+	public static function limits() {
+		return self::$limits;
+	}
 	public static function defaultUser () {
 		return self::$default_user;
 	}
@@ -178,6 +187,7 @@ class Minz_Configuration {
 				'api_enabled' => self::$api_enabled,
 				'unsafe_autologin_enabled' => self::$unsafe_autologin_enabled,
 			),
+			'limits' => self::$limits,
 			'db' => self::$db,
 		);
 		@rename(DATA_PATH . self::CONF_PATH_NAME, DATA_PATH . self::CONF_PATH_NAME . '.bak.php');
@@ -291,6 +301,22 @@ class Minz_Configuration {
 			);
 		}
 
+		if (isset($ini_array['limits'])) {
+			$limits = $ini_array['limits'];
+			if (isset($limits['max_feeds'])) {
+				self::$limits['max_feeds'] = intval($limits['max_feeds']);
+				if (self::$limits['max_feeds'] < 0 || self::$limits['max_feeds'] > Minz_Configuration::MAX_SMALL_INT) {
+					self::$limits['max_feeds'] = Minz_Configuration::MAX_SMALL_INT;
+				}
+			}
+			if (isset($limits['max_categories'])) {
+				self::$limits['max_categories'] = intval($limits['max_categories']);
+				if (self::$limits['max_categories'] < 0 || self::$limits['max_categories'] > Minz_Configuration::MAX_SMALL_INT) {
+					self::$limits['max_categories'] = Minz_Configuration::MAX_SMALL_INT;
+				}
+			}
+		}
+
 		// Base de données
 		if (isset ($ini_array['db'])) {
 			$db = $ini_array['db'];