From 081726d7641f4eec22de271feb8e25388d37c3f6 Mon Sep 17 00:00:00 2001 From: Philipp Mundhenk Date: Sun, 21 Jan 2024 14:57:47 +0100 Subject: [PATCH] added automatic login --- plugins/proxy-auth/index.php | 32 ++++++++++++++++++++++++++++- plugins/proxy-auth/js/auto-login.js | 32 +++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 plugins/proxy-auth/js/auto-login.js diff --git a/plugins/proxy-auth/index.php b/plugins/proxy-auth/index.php index fb108d8ce..8ba04c7be 100644 --- a/plugins/proxy-auth/index.php +++ b/plugins/proxy-auth/index.php @@ -15,7 +15,9 @@ class ProxyAuthPlugin extends \RainLoop\Plugins\AbstractPlugin public function Init() : void { + $this->addJs('js/auto-login.js'); $this->addPartHook('ProxyAuth', 'ServiceProxyAuth'); + $this->addPartHook('UserHeaderSet', 'ServiceUserHeaderSet'); $this->addHook('login.credentials', 'MapEmailAddress'); } @@ -140,6 +142,28 @@ class ProxyAuthPlugin extends \RainLoop\Plugins\AbstractPlugin return true; } + public function ServiceUserHeaderSet() : bool + { + $oActions = \RainLoop\Api::Actions(); + + $oLogger = $oActions->Logger(); + $sLevel = LOG_DEBUG; + $sPrefix = "ProxyAuth"; + + $sHeaderName = \trim($this->Config()->getDecrypted('plugin', 'header_name', '')); + + $sRemoteUser = $this->Manager()->Actions()->Http()->GetHeader($sHeaderName); + $sMsg = "Remote User: " . $sRemoteUser; + $oLogger->Write($sMsg, $sLevel, $sPrefix); + + if (strlen($sRemoteUser) > 0) { + \MailSo\Base\Http::StatusHeader('200'); + } else { + \MailSo\Base\Http::StatusHeader('401'); + } + return true; + } + protected function configMapping() : array { return array( @@ -178,7 +202,13 @@ class ProxyAuthPlugin extends \RainLoop\Plugins\AbstractPlugin ->SetType(\RainLoop\Enumerations\PluginPropertyType::STRING_TEXT) ->SetDescription('IP or Subnet of proxy, auth header will only be accepted from this address') ->SetDefaultValue('10.1.0.0/24') - ->SetEncrypted() + ->SetEncrypted(), + \RainLoop\Plugins\Property::NewInstance('auto_login') + ->SetAllowedInJs(true) + ->SetLabel('Activate automatic login') + ->SetType(\RainLoop\Enumerations\PluginPropertyType::BOOL) + ->SetDescription('Activates automatic login, if User Header is set (note: logout not possible)') + ->SetDefaultValue(true) ); } } diff --git a/plugins/proxy-auth/js/auto-login.js b/plugins/proxy-auth/js/auto-login.js new file mode 100644 index 000000000..6d2c72b1c --- /dev/null +++ b/plugins/proxy-auth/js/auto-login.js @@ -0,0 +1,32 @@ +(rl => { + + rl && addEventListener('rl-view-model', e => { + const id = e.detail.viewModelTemplateID; + if (e.detail && ('Login' === id)) { + let + auto_login = window.rl.pluginSettingsGet('proxy-auth', 'auto_login'); + ; + + const + ForwardProxyAuth = () => { + if (auto_login) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", "/?UserHeaderSet", true); + + xhr.onreadystatechange = function () { + if (xhr.readyState == 4 && xhr.status == 200) { + window.location.href = "/?ProxyAuth"; + } + }; + + xhr.send(); + } + }; + + window.ForwardProxyAuth = ForwardProxyAuth; + + ForwardProxyAuth(); + } + }); +})(window.rl); +