mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03: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();
|
var oData = RL.data();
|
||||||
|
|
||||||
this.determineUserLanguage = oData.determineUserLanguage;
|
this.determineUserLanguage = oData.determineUserLanguage;
|
||||||
|
this.determineUserDomain = oData.determineUserDomain;
|
||||||
|
|
||||||
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
||||||
|
|
||||||
|
|
@ -30,6 +31,12 @@ AdminLogin.prototype.onBuild = function ()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
self.determineUserDomain.subscribe(function (bValue) {
|
||||||
|
RL.remote().saveAdminConfig(null, {
|
||||||
|
'DetermineUserDomain': bValue ? '1' : '0'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
||||||
RL.remote().saveAdminConfig(null, {
|
RL.remote().saveAdminConfig(null, {
|
||||||
'AllowLanguagesOnLogin': bValue ? '1' : '0'
|
'AllowLanguagesOnLogin': bValue ? '1' : '0'
|
||||||
|
|
|
||||||
|
|
@ -1059,6 +1059,7 @@ Utils.initDataConstructorBySettings = function (oData)
|
||||||
oData.capaAdditionalIdentities = ko.observable(false);
|
oData.capaAdditionalIdentities = ko.observable(false);
|
||||||
oData.capaGravatar = ko.observable(false);
|
oData.capaGravatar = ko.observable(false);
|
||||||
oData.determineUserLanguage = ko.observable(false);
|
oData.determineUserLanguage = ko.observable(false);
|
||||||
|
oData.determineUserDomain = ko.observable(false);
|
||||||
|
|
||||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
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.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||||
|
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||||
|
|
||||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
||||||
|
|
|
||||||
|
|
@ -1039,6 +1039,7 @@ class Actions
|
||||||
'CustomLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
'CustomLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
||||||
'LoginDefaultDomain' => $oConfig->Get('login', 'default_domain', ''),
|
'LoginDefaultDomain' => $oConfig->Get('login', 'default_domain', ''),
|
||||||
'DetermineUserLanguage' => (bool) $oConfig->Get('login', 'determine_user_language', true),
|
'DetermineUserLanguage' => (bool) $oConfig->Get('login', 'determine_user_language', true),
|
||||||
|
'DetermineUserDomain' => (bool) $oConfig->Get('login', 'determine_user_domain', false),
|
||||||
'ContactsIsAllowed' => false,
|
'ContactsIsAllowed' => false,
|
||||||
'ChangePasswordIsAllowed' => false,
|
'ChangePasswordIsAllowed' => false,
|
||||||
'JsHash' => \md5(\RainLoop\Utils::GetConnectionToken()),
|
'JsHash' => \md5(\RainLoop\Utils::GetConnectionToken()),
|
||||||
|
|
@ -1450,13 +1451,65 @@ class Actions
|
||||||
public function LoginProcess(&$sEmail, &$sPassword, $sSignMeToken = '',
|
public function LoginProcess(&$sEmail, &$sPassword, $sSignMeToken = '',
|
||||||
$sAdditionalCode = '', $bAdditionalCodeSignMe = false)
|
$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);
|
$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))
|
if (false === \strpos($sEmail, '@') || 0 === \strlen($sPassword))
|
||||||
{
|
{
|
||||||
|
|
@ -2225,6 +2278,7 @@ class Actions
|
||||||
$this->setCapaFromParams($oConfig, 'CapaThemes', \RainLoop\Enumerations\Capa::THEMES);
|
$this->setCapaFromParams($oConfig, 'CapaThemes', \RainLoop\Enumerations\Capa::THEMES);
|
||||||
|
|
||||||
$this->setConfigFromParams($oConfig, 'DetermineUserLanguage', 'login', 'determine_user_language', 'bool');
|
$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))
|
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'),
|
'Allow language selection on webmail login screen'),
|
||||||
|
|
||||||
'determine_user_language' => array(true, ''),
|
'determine_user_language' => array(true, ''),
|
||||||
|
'determine_user_domain' => array(false, ''),
|
||||||
|
|
||||||
'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF,
|
'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF,
|
||||||
'This option allows webmail to remember the logged in user
|
'This option allows webmail to remember the logged in user
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,11 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<div class="controls">
|
<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()); }">
|
<label data-bind="click: function () { allowLanguagesOnLogin(!allowLanguagesOnLogin()); }">
|
||||||
<i data-bind="css: allowLanguagesOnLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
|
<i data-bind="css: allowLanguagesOnLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
|
||||||
Allow language selection on login screen
|
Allow language selection on login screen
|
||||||
|
|
|
||||||
|
|
@ -1856,6 +1856,7 @@ Utils.initDataConstructorBySettings = function (oData)
|
||||||
oData.capaAdditionalIdentities = ko.observable(false);
|
oData.capaAdditionalIdentities = ko.observable(false);
|
||||||
oData.capaGravatar = ko.observable(false);
|
oData.capaGravatar = ko.observable(false);
|
||||||
oData.determineUserLanguage = ko.observable(false);
|
oData.determineUserLanguage = ko.observable(false);
|
||||||
|
oData.determineUserDomain = ko.observable(false);
|
||||||
|
|
||||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
||||||
|
|
||||||
|
|
@ -6419,6 +6420,7 @@ function AdminLogin()
|
||||||
var oData = RL.data();
|
var oData = RL.data();
|
||||||
|
|
||||||
this.determineUserLanguage = oData.determineUserLanguage;
|
this.determineUserLanguage = oData.determineUserLanguage;
|
||||||
|
this.determineUserDomain = oData.determineUserDomain;
|
||||||
|
|
||||||
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
this.defaultDomain = ko.observable(RL.settingsGet('LoginDefaultDomain'));
|
||||||
|
|
||||||
|
|
@ -6441,6 +6443,12 @@ AdminLogin.prototype.onBuild = function ()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
self.determineUserDomain.subscribe(function (bValue) {
|
||||||
|
RL.remote().saveAdminConfig(null, {
|
||||||
|
'DetermineUserDomain': bValue ? '1' : '0'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
self.allowLanguagesOnLogin.subscribe(function (bValue) {
|
||||||
RL.remote().saveAdminConfig(null, {
|
RL.remote().saveAdminConfig(null, {
|
||||||
'AllowLanguagesOnLogin': bValue ? '1' : '0'
|
'AllowLanguagesOnLogin': bValue ? '1' : '0'
|
||||||
|
|
@ -7507,6 +7515,7 @@ AbstractData.prototype.populateDataOnStart = function()
|
||||||
this.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
this.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||||
|
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||||
|
|
||||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
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.capaAdditionalIdentities = ko.observable(false);
|
||||||
oData.capaGravatar = ko.observable(false);
|
oData.capaGravatar = ko.observable(false);
|
||||||
oData.determineUserLanguage = ko.observable(false);
|
oData.determineUserLanguage = ko.observable(false);
|
||||||
|
oData.determineUserDomain = ko.observable(false);
|
||||||
|
|
||||||
oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
|
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.capaAdditionalIdentities(RL.capa(Enums.Capa.AdditionalIdentities));
|
||||||
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
this.capaGravatar(RL.capa(Enums.Capa.Gravatar));
|
||||||
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
this.determineUserLanguage(!!RL.settingsGet('DetermineUserLanguage'));
|
||||||
|
this.determineUserDomain(!!RL.settingsGet('DetermineUserDomain'));
|
||||||
|
|
||||||
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
this.capaThemes(RL.capa(Enums.Capa.Themes));
|
||||||
this.allowLanguagesOnLogin(!!RL.settingsGet('AllowLanguagesOnLogin'));
|
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
Add a link
Reference in a new issue