Added "determine_user_domain" setting

This commit is contained in:
RainLoop Team 2014-07-24 18:45:23 +04:00
parent 2390a4f575
commit 11608e5f64
10 changed files with 89 additions and 9 deletions

View file

@ -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, {

View file

@ -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});

View file

@ -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'));

View file

@ -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))
{

View file

@ -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

View file

@ -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

View file

@ -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'));

File diff suppressed because one or more lines are too long

View file

@ -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'));

File diff suppressed because one or more lines are too long