mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-09-07 21:54:35 +08:00
Added "determine_user_domain" setting
This commit is contained in:
parent
2390a4f575
commit
11608e5f64
10 changed files with 89 additions and 9 deletions
|
@ -8,6 +8,7 @@ function AdminLogin()
|
|||
var oData = RL.data();
|
||||
|
||||
this.determineUserLanguage = oData.determineUserLanguage;
|
||||
this.determineUserDomain = oData.determineUserDomain;
|
||||
|
||||
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
||||
|
||||
|
@ -29,6 +30,12 @@ AdminLogin.prototype.onBuild = function ()
|
|||
'DetermineUserLanguage': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
self.determineUserDomain.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(null, {
|
||||
'DetermineUserDomain': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(null, {
|
||||
|
|
|
@ -1059,6 +1059,7 @@ Utils.initDataConstructorBySettings = function (oData)
|
|||
oData.capaAdditionalIdentities = ko.observable(false);
|
||||
oData.capaGravatar = ko.observable(false);
|
||||
oData.determineUserLanguage = ko.observable(false);
|
||||
oData.determineUserDomain = ko.observable(false);
|
||||
|
||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
||||
|
||||
|
|
|
@ -89,6 +89,7 @@ AbstractData.prototype.populateDataOnStart = function()
|
|||
this.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||
|
||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
||||
|
|
|
@ -1039,6 +1039,7 @@ class Actions
|
|||
'CustomLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
||||
'LoginDefaultDomain' => $oConfig->Get('login', 'default_domain', ''),
|
||||
'DetermineUserLanguage' => (bool) $oConfig->Get('login', 'determine_user_language', true),
|
||||
'DetermineUserDomain' => (bool) $oConfig->Get('login', 'determine_user_domain', false),
|
||||
'ContactsIsAllowed' => false,
|
||||
'ChangePasswordIsAllowed' => false,
|
||||
'JsHash' => \md5(\RainLoop\Utils::GetConnectionToken()),
|
||||
|
@ -1450,14 +1451,66 @@ class Actions
|
|||
public function LoginProcess(&$sEmail, &$sPassword, $sSignMeToken = '',
|
||||
$sAdditionalCode = '', $bAdditionalCodeSignMe = false)
|
||||
{
|
||||
$this->Plugins()->RunHook('filter.login-credentials-first', array(&$sEmail, &$sPassword));
|
||||
$this->Plugins()->RunHook('filter.login-credentials.step-1', array(&$sEmail, &$sPassword));
|
||||
|
||||
$sEmail = \MailSo\Base\Utils::StrToLowerIfAscii($sEmail);
|
||||
if (false === \strpos($sEmail, '@') && 0 < \strlen(\trim($this->Config()->Get('login', 'default_domain', ''))))
|
||||
|
||||
if (false === \strpos($sEmail, '@'))
|
||||
{
|
||||
$sEmail = $sEmail.'@'.\trim(\trim($this->Config()->Get('login', 'default_domain', '')), ' @');
|
||||
$this->Logger()->Write('The email address "'.$sEmail.'" is not complete', \MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
|
||||
if (false === \strpos($sEmail, '@') && 0 < \strlen(\trim($this->Config()->Get('login', 'determine_user_domain', false))))
|
||||
{
|
||||
$sUserHost = \trim($this->Http()->GetHost(false, true, true));
|
||||
$this->Logger()->Write('Determined user domain: '.$sUserHost, \MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
|
||||
$bAdded = false;
|
||||
|
||||
$iLimit = 14;
|
||||
$aDomainParts = \explode('.', $sUserHost);
|
||||
|
||||
$oDomainProvider = $this->DomainProvider();
|
||||
while (0 < \count($aDomainParts) && 0 < $iLimit)
|
||||
{
|
||||
$sLine = \trim(\implode('.', $aDomainParts), '. ');
|
||||
|
||||
$oDomain = $oDomainProvider->Load($sLine);
|
||||
if ($oDomain && $oDomain instanceof \RainLoop\Domain)
|
||||
{
|
||||
$bAdded = true;
|
||||
$this->Logger()->Write('Check "'.$sLine.'": OK ('.$sEmail.' > '.$sEmail.'@'.$sLine.')',
|
||||
\MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
|
||||
$sEmail = $sEmail.'@'.$sLine;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->Logger()->Write('Check "'.$sLine.'": NO', \MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
}
|
||||
|
||||
\array_shift($aDomainParts);
|
||||
$iLimit--;
|
||||
}
|
||||
|
||||
if (!$bAdded)
|
||||
{
|
||||
$this->Logger()->Write('Domain was not found!', \MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
}
|
||||
}
|
||||
|
||||
$sDefDomain = \trim($this->Config()->Get('login', 'default_domain', ''));
|
||||
if (false === \strpos($sEmail, '@') && 0 < \strlen($sDefDomain))
|
||||
{
|
||||
$this->Logger()->Write('Default domain "'.$sDefDomain.'" was used. ('.$sEmail.' > '.$sEmail.'@'.$sDefDomain.')',
|
||||
\MailSo\Log\Enumerations\Type::INFO, 'LOGIN');
|
||||
|
||||
$sEmail = $sEmail.'@'.$sDefDomain;
|
||||
}
|
||||
}
|
||||
|
||||
$this->Plugins()->RunHook('filter.login-credentials.step-2', array(&$sEmail, &$sPassword));
|
||||
|
||||
if (false === \strpos($sEmail, '@') || 0 === \strlen($sPassword))
|
||||
{
|
||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::InvalidInputArgument);
|
||||
|
@ -2225,6 +2278,7 @@ class Actions
|
|||
$this->setCapaFromParams($oConfig, 'CapaThemes', \RainLoop\Enumerations\Capa::THEMES);
|
||||
|
||||
$this->setConfigFromParams($oConfig, 'DetermineUserLanguage', 'login', 'determine_user_language', 'bool');
|
||||
$this->setConfigFromParams($oConfig, 'DetermineUserDomain', 'login', 'determine_user_domain', 'bool');
|
||||
|
||||
if ($this->GetCapa(true, \RainLoop\Enumerations\Capa::PREM))
|
||||
{
|
||||
|
|
|
@ -118,6 +118,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
|||
'Allow language selection on webmail login screen'),
|
||||
|
||||
'determine_user_language' => array(true, ''),
|
||||
'determine_user_domain' => array(false, ''),
|
||||
|
||||
'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF,
|
||||
'This option allows webmail to remember the logged in user
|
||||
|
|
|
@ -15,6 +15,11 @@
|
|||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<label data-bind="click: function () { determineUserDomain(!determineUserDomain()); }">
|
||||
<i data-bind="css: determineUserDomain() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
|
||||
Try to determine user domain
|
||||
</label>
|
||||
<br />
|
||||
<label data-bind="click: function () { allowLanguagesOnLogin(!allowLanguagesOnLogin()); }">
|
||||
<i data-bind="css: allowLanguagesOnLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
|
||||
Allow language selection on login screen
|
||||
|
|
|
@ -1856,6 +1856,7 @@ Utils.initDataConstructorBySettings = function (oData)
|
|||
oData.capaAdditionalIdentities = ko.observable(false);
|
||||
oData.capaGravatar = ko.observable(false);
|
||||
oData.determineUserLanguage = ko.observable(false);
|
||||
oData.determineUserDomain = ko.observable(false);
|
||||
|
||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
||||
|
||||
|
@ -6419,6 +6420,7 @@ function AdminLogin()
|
|||
var oData = RL.data();
|
||||
|
||||
this.determineUserLanguage = oData.determineUserLanguage;
|
||||
this.determineUserDomain = oData.determineUserDomain;
|
||||
|
||||
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
||||
|
||||
|
@ -6440,6 +6442,12 @@ AdminLogin.prototype.onBuild = function ()
|
|||
'DetermineUserLanguage': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
self.determineUserDomain.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(null, {
|
||||
'DetermineUserDomain': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(null, {
|
||||
|
@ -7507,6 +7515,7 @@ AbstractData.prototype.populateDataOnStart = function()
|
|||
this.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||
|
||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
||||
|
|
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1859,6 +1859,7 @@ Utils.initDataConstructorBySettings = function (oData)
|
|||
oData.capaAdditionalIdentities = ko.observable(false);
|
||||
oData.capaGravatar = ko.observable(false);
|
||||
oData.determineUserLanguage = ko.observable(false);
|
||||
oData.determineUserDomain = ko.observable(false);
|
||||
|
||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
||||
|
||||
|
@ -16122,6 +16123,7 @@ AbstractData.prototype.populateDataOnStart = function()
|
|||
this.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||
|
||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
||||
|
|
4
rainloop/v/0.0.0/static/js/app.min.js
vendored
4
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue