From b7e135a553befd5478363d9b898e7f3ac50bd299 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Sun, 26 Jan 2014 16:44:13 +0400 Subject: [PATCH] LoginProcess refactoring + Output parameter in ExternalLogin functionality --- .../0.0.0/app/libraries/RainLoop/Actions.php | 42 +++++++--------- .../app/libraries/RainLoop/ServiceActions.php | 50 +++++++++++++++---- 2 files changed, 58 insertions(+), 34 deletions(-) diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php index f6c4743c1..b35c6a24e 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -1280,8 +1280,23 @@ class Actions * @return \RainLoop\Account * @throws \RainLoop\Exceptions\ClientException */ - public function LoginProcess($sEmail, $sLogin, $sPassword, $sSignMeToken = '') + public function LoginProcess(&$sEmail, &$sLogin, &$sPassword, $sSignMeToken = '') { + if (false === \strpos($sEmail, '@') && 0 < \strlen(\trim($this->Config()->Get('login', 'default_domain', '')))) + { + $sEmail = $sEmail.'@'.\trim(\trim($this->Config()->Get('login', 'default_domain', '')), ' @'); + } + + if (!$this->Config()->Get('login', 'allow_custom_login', false) || 0 === \strlen($sLogin)) + { + $sLogin = $sEmail; + } + + if (0 === \strlen($sLogin)) + { + $sLogin = $sEmail; + } + $this->Plugins()->RunHook('filter.login-credentials', array(&$sEmail, &$sLogin, &$sPassword)); $oAccount = $this->LoginProvider()->Provide($sEmail, $sLogin, $sPassword, $sSignMeToken); @@ -1343,25 +1358,11 @@ class Actions $sLanguage = $this->GetActionParam('Language', ''); $bSignMe = '1' === $this->GetActionParam('SignMe', '0'); - if (false === \strpos($sEmail, '@') && 0 < \strlen(\trim($this->Config()->Get('login', 'default_domain', '')))) - { - $sEmail = $sEmail.'@'.\trim($this->Config()->Get('login', 'default_domain', ''), ' @'); - } - - if (!$this->Config()->Get('login', 'allow_custom_login', false) || 0 === \strlen($sLogin)) - { - $sLogin = $sEmail; - } - - $sSignMeToken = ''; - if ($bSignMe) - { - $sSignMeToken = \md5(\microtime(true).APP_SALT.\rand(10000, 99999).$sEmail); - } - $this->Logger()->AddSecret($sPassword); - $oAccount = $this->LoginProcess($sEmail, $sLogin, $sPassword, $sSignMeToken); + $oAccount = $this->LoginProcess($sEmail, $sLogin, $sPassword, + $bSignMe ? \md5(\microtime(true).APP_SALT.\rand(10000, 99999).$sEmail) : ''); + $this->AuthProcess($oAccount); if ($oAccount && 0 < \strlen($sLanguage)) @@ -1510,11 +1511,6 @@ class Actions $sLogin = \trim($this->GetActionParam('Login', '')); $sPassword = $this->GetActionParam('Password', ''); - if (!$this->Config()->Get('login', 'allow_custom_login', false) || 0 === strlen($sLogin)) - { - $sLogin = $sEmail; - } - $this->Logger()->AddSecret($sPassword); $sParentEmail = 0 < \strlen($oAccount->ParentEmail()) ? $oAccount->ParentEmail() : $oAccount->Email(); diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php index 86211e357..c3b79c392 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php @@ -825,22 +825,19 @@ class ServiceActions */ public function ServiceExternalLogin() { + $oException = null; + $oAccount = null; + if ($this->oActions->Config()->Get('labs', 'allow_external_login', false)) { - $oException = null; + $sEmail = trim($this->oHttp->GetRequest('Email', '')); + $sLogin = trim($this->oHttp->GetRequest('Login', '')); + $sPassword = $this->oHttp->GetRequest('Password', ''); + try { - $sEmail = trim($this->oHttp->GetRequest('Email', '')); - $sLogin = trim($this->oHttp->GetRequest('Login', '')); - $sPassword = $this->oHttp->GetRequest('Password', ''); - $this->oActions->Logger()->AddSecret($sPassword); - if (0 === \strlen($sLogin)) - { - $sLogin = $sEmail; - } - $oAccount = $this->oActions->LoginProcess($sEmail, $sLogin, $sPassword); $this->oActions->AuthProcess($oAccount); } @@ -850,7 +847,38 @@ class ServiceActions } } - $this->oActions->Location('./'); + switch (\strtolower($this->oHttp->GetRequest('Output', 'Redirect'))) + { + case 'json': + + @\header('Content-Type: application/json; charset=utf-8'); + + $aResult = array( + 'Action' => 'ExternalLogin', + 'Result' => $oAccount instanceof \RainLoop\Account ? true : false, + 'ErrorCode' => 0 + ); + + if (!$aResult['Result']) + { + if ($oException instanceof \RainLoop\Exceptions\ClientException) + { + $aResult['ErrorCode'] = $oException->getCode(); + } + else + { + $aResult['ErrorCode'] = \RainLoop\Notifications::AuthError; + } + } + + return \MailSo\Base\Utils::Php2js($aResult); + + case 'redirect': + default: + $this->oActions->Location('./'); + break; + } + return ''; }