diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/Controllers/configureController.php | 5 | ||||
| -rw-r--r-- | app/Models/Themes.php | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 59845d710..edd04a64c 100644 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -47,7 +47,10 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { if (Minz_Request::isPost()) { FreshRSS_Context::userConf()->language = Minz_Request::paramString('language') ?: 'en'; FreshRSS_Context::userConf()->timezone = Minz_Request::paramString('timezone'); - FreshRSS_Context::userConf()->theme = Minz_Request::paramString('theme') ?: FreshRSS_Themes::$defaultTheme; + $theme = Minz_Request::paramString('theme') ?: FreshRSS_Themes::$defaultTheme; + if (FreshRSS_Themes::exists($theme)) { + FreshRSS_Context::userConf()->theme = $theme; + } FreshRSS_Context::userConf()->darkMode = Minz_Request::paramString('darkMode') ?: 'auto'; FreshRSS_Context::userConf()->content_width = Minz_Request::paramString('content_width') ?: 'thin'; FreshRSS_Context::userConf()->topline_read = Minz_Request::paramBoolean('topline_read'); diff --git a/app/Models/Themes.php b/app/Models/Themes.php index ef44b0b75..bc220aa50 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -15,6 +15,12 @@ class FreshRSS_Themes extends Minz_Model { )); } + public static function exists(string $theme_id): bool { + $theme_dir = PUBLIC_PATH . self::$themesUrl . $theme_id; + return str_replace(['..', '/', DIRECTORY_SEPARATOR], '', $theme_id) === $theme_id + && file_exists($theme_dir . '/metadata.json'); + } + /** @return array<string,array{id:string,name:string,author:string,description:string,version:float|string,files:array<string>,theme-color?:string|array{dark?:string,light?:string,default?:string}}> */ public static function get(): array { $themes_list = self::getList(); |
