diff --git a/classes/Config.php b/classes/Config.php
index a7c0a04b2..92037ff74 100644
--- a/classes/Config.php
+++ b/classes/Config.php
@@ -189,6 +189,9 @@ class Config {
/** delay updates for this feed if received HTTP 429 (Too Many Requests) for this amount of seconds (base value, actual delay is base...base*2) */
const HTTP_429_THROTTLE_INTERVAL = "HTTP_429_THROTTLE_INTERVAL";
+ /** disables login form controls except HOOK_LOGINFORM_ADDITIONAL_BUTTONS (for SSO providers), also prevents logging in through auth_internal */
+ const DISABLE_LOGIN_FORM = "DISABLE_LOGIN_FORM";
+
/** default values for all global configuration options */
private const _DEFAULTS = [
Config::DB_TYPE => [ "pgsql", Config::T_STRING ],
@@ -245,7 +248,8 @@ class Config {
Config::AUTH_MIN_INTERVAL => [ 5, Config::T_INT ],
Config::HTTP_USER_AGENT => [ 'Tiny Tiny RSS/%s (https://tt-rss.org/)',
Config::T_STRING ],
- Config::HTTP_429_THROTTLE_INTERVAL => [ 3600, Config::T_INT ]
+ Config::HTTP_429_THROTTLE_INTERVAL => [ 3600, Config::T_INT ],
+ Config::DISABLE_LOGIN_FORM => [ "", Config::T_BOOL ]
];
private static ?Config $instance = null;
diff --git a/classes/Handler_Public.php b/classes/Handler_Public.php
index efa26646b..abff08376 100644
--- a/classes/Handler_Public.php
+++ b/classes/Handler_Public.php
@@ -431,6 +431,13 @@ class Handler_Public extends Handler {
}
function forgotpass(): void {
+ if (Config::get(Config::DISABLE_LOGIN_FORM) || !str_contains(Config::get(Config::PLUGINS), "auth_internal")) {
+ header($_SERVER["SERVER_PROTOCOL"]." 403 Forbidden");
+ echo "Forbidden.";
+
+ return;
+ }
+
startup_gettext();
session_start();
diff --git a/include/login_form.php b/include/login_form.php
index c0f1a93af..8fa578c11 100755
--- a/include/login_form.php
+++ b/include/login_form.php
@@ -121,79 +121,84 @@
-
+
-
-
+
+
+ = __("Does not display images in articles, reduces automatic refreshes."); ?>
+
+
+
+
+
+
+ = \Controls\checkbox_tag("safe_mode") ?>
+ = __("Safe mode") ?>
+
+ = __("Uses default theme and prevents all plugins from loading."); ?>
+
+
+ 0) { ?>
+
+
+
+ = \Controls\checkbox_tag("remember_me") ?>
+ = __("Remember me") ?>
+
+
+
+
= \Controls\submit_tag(__('Log in')) ?>
+
run_hooks(PluginHost::HOOK_LOGINFORM_ADDITIONAL_BUTTONS) ?>
diff --git a/plugins/auth_internal/init.php b/plugins/auth_internal/init.php
index 4f2988262..9ff3ea24f 100644
--- a/plugins/auth_internal/init.php
+++ b/plugins/auth_internal/init.php
@@ -15,6 +15,9 @@ class Auth_Internal extends Auth_Base implements IAuthModule2 {
/** @param string $service */
function authenticate($login, $password, $service = '') {
+ if (Config::get(Config::DISABLE_LOGIN_FORM))
+ return false;
+
$otp = (int) ($_REQUEST["otp"] ?? 0);
// don't bother with null/null logins for auth_external etc