mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-01 20:42:19 +08:00
Added: Password change plugin API improvements (#910)
This commit is contained in:
parent
b97bd4edf0
commit
cfad4bb005
11 changed files with 107 additions and 18 deletions
|
@ -271,7 +271,7 @@ class AbstractApp extends AbstractBoot
|
|||
ko.components.register('TextArea', require('Component/TextArea'));
|
||||
|
||||
ko.components.register('x-script', require('Component/Script'));
|
||||
ko.components.register('svg-icon', require('Component/SvgIcon'));
|
||||
// ko.components.register('svg-icon', require('Component/SvgIcon'));
|
||||
|
||||
if (/**false && /**/Settings.settingsGet('MaterialDesign') && Globals.bAnimationSupported)
|
||||
{
|
||||
|
|
|
@ -15,7 +15,6 @@ import Translator from 'Common/Translator';
|
|||
import Momentor from 'Common/Momentor';
|
||||
import Cache from 'Common/Cache';
|
||||
|
||||
|
||||
import SocialStore from 'Stores/Social';
|
||||
import SettingsStore from 'Stores/User/Settings';
|
||||
import AccountStore from 'Stores/User/Account';
|
||||
|
@ -514,7 +513,7 @@ class AppUser extends AbstractApp
|
|||
|
||||
Utils.delegateRunOnDestroy(AccountStore.accounts());
|
||||
|
||||
AccountStore.accounts(_.map(oData.Result['Accounts'],
|
||||
AccountStore.accounts(_.map(oData.Result['Accounts'],
|
||||
(sValue) => new AccountModel(sValue, sValue !== sParentEmail, aCounts[sValue] || 0)));
|
||||
}
|
||||
|
||||
|
@ -914,7 +913,7 @@ class AppUser extends AbstractApp
|
|||
Remote.suggestions((result, data) => {
|
||||
if (Enums.StorageResultType.Success === result && data && Utils.isArray(data.Result))
|
||||
{
|
||||
callback(_.compact(_.map(data.Result,
|
||||
callback(_.compact(_.map(data.Result,
|
||||
(item) => item && item[0] ? new EmailModel(item[0], item[1]) : null)));
|
||||
}
|
||||
else if (Enums.StorageResultType.Abort !== result)
|
||||
|
@ -1401,7 +1400,7 @@ class AppUser extends AbstractApp
|
|||
fallback: false
|
||||
});
|
||||
|
||||
Events.sub('mailbox.inbox-unread-count',
|
||||
Events.sub('mailbox.inbox-unread-count',
|
||||
(iCount) => Tinycon.setBubble(0 < iCount ? (99 < iCount ? 99 : iCount) : 0));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,11 +233,23 @@ class Translator
|
|||
return message;
|
||||
}
|
||||
|
||||
defCode = defCode ? (window.parseInt(defCode, 10)) || 0 : 0;
|
||||
return _.isUndefined(this.notificationI18N[code]) ? (
|
||||
defCode && _.isUndefined(this.notificationI18N[defCode]) ? this.notificationI18N[defCode] : ''
|
||||
) : this.notificationI18N[code];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {object} response
|
||||
* @param {number} defCode = Notification.UnknownNotification
|
||||
* @return {string}
|
||||
*/
|
||||
getNotificationFromResponse(response, defCode = Notification.UnknownNotification) {
|
||||
return response && response.ErrorCode ?
|
||||
this.getNotification(Utils.pInt(response.ErrorCode), response.ErrorMessage || '') :
|
||||
this.getNotification(defCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {*} code
|
||||
* @return {string}
|
||||
|
|
|
@ -6,7 +6,7 @@ let
|
|||
getUtl = () => {
|
||||
if (!cachedUrl)
|
||||
{
|
||||
const version = $('#rlAppVersion').attr('content') || '0.0.0';
|
||||
const version = $('#rlAppVersion').attr('content') || '0.0.0'; // TODO
|
||||
cachedUrl = `rainloop/v/${version}/static/css/svg/icons.svg`;
|
||||
}
|
||||
|
||||
|
|
|
@ -114,8 +114,8 @@
|
|||
}
|
||||
|
||||
this.passwordUpdateError(true);
|
||||
this.errorDescription(oData && oData.ErrorCode ? Translator.getNotification(oData.ErrorCode) :
|
||||
Translator.getNotification(Enums.Notification.CouldNotSaveNewPassword));
|
||||
this.errorDescription(
|
||||
Translator.getNotificationFromResponse(oData, Enums.Notification.CouldNotSaveNewPassword));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -230,7 +230,7 @@
|
|||
oData.ErrorCode = Enums.Notification.AuthError;
|
||||
}
|
||||
|
||||
this.submitError(Translator.getNotification(oData.ErrorCode));
|
||||
this.submitError(Translator.getNotificationFromResponse(oData));
|
||||
|
||||
if ('' === this.submitError())
|
||||
{
|
||||
|
@ -344,6 +344,11 @@
|
|||
return bF || bG || bT;
|
||||
}, this);
|
||||
|
||||
if (Settings.settingsGet('AdditionalLoginError') && !this.submitError())
|
||||
{
|
||||
this.submitError(Settings.settingsGet('AdditionalLoginError'));
|
||||
}
|
||||
|
||||
kn.constructorEnd(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ class Actions
|
|||
const AUTH_MAILTO_TOKEN_KEY = 'rlmailtoauth';
|
||||
const AUTH_SPEC_TOKEN_KEY = 'rlspecauth';
|
||||
const AUTH_SPEC_LOGOUT_TOKEN_KEY = 'rlspeclogout';
|
||||
const AUTH_SPEC_LOGOUT_CUSTOM_MSG_KEY = 'rlspeclogoutcmk';
|
||||
const AUTH_ADMIN_TOKEN_KEY = 'rlaauth';
|
||||
const AUTH_LAST_ERROR = 'rllasterrorcode';
|
||||
|
||||
/**
|
||||
* @var \MailSo\Base\Http
|
||||
|
@ -644,6 +644,28 @@ class Actions
|
|||
return $sResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetSpecLogoutCustomMgsWithDeletion()
|
||||
{
|
||||
$sResult = \RainLoop\Utils::GetCookie(self::AUTH_SPEC_LOGOUT_CUSTOM_MSG_KEY, '');
|
||||
if (0 < strlen($sResult))
|
||||
{
|
||||
\RainLoop\Utils::ClearCookie(self::AUTH_SPEC_LOGOUT_CUSTOM_MSG_KEY);
|
||||
}
|
||||
|
||||
return $sResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function SetSpecLogoutCustomMgsWithDeletion($sMessage)
|
||||
{
|
||||
\RainLoop\Utils::SetCookie(self::AUTH_SPEC_LOGOUT_CUSTOM_MSG_KEY, $sMessage, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
@ -1597,6 +1619,11 @@ class Actions
|
|||
$aResult['WelcomePageDisplay'] = '';
|
||||
|
||||
$aResult['StartupUrl'] = '';
|
||||
|
||||
if (empty($aResult['AdditionalLoginError']))
|
||||
{
|
||||
$aResult['AdditionalLoginError'] = $this->GetSpecLogoutCustomMgsWithDeletion();
|
||||
}
|
||||
}
|
||||
|
||||
$aResult['AllowGoogleSocial'] = (bool) $oConfig->Get('social', 'google_enable', false);
|
||||
|
|
|
@ -9,17 +9,29 @@ namespace RainLoop\Exceptions;
|
|||
class ClientException extends Exception
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var boolen
|
||||
*/
|
||||
private $bLogoutOnException;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sAdditionalMessage;
|
||||
|
||||
public function __construct($iCode, $oPrevious = null, $sAdditionalMessage = '')
|
||||
/**
|
||||
* @param int $iCode
|
||||
* @param \Exception $oPrevious = null
|
||||
* @param string $sAdditionalMessage = ''
|
||||
* @param boolean $bLogoutOnException = false
|
||||
*/
|
||||
public function __construct($iCode, $oPrevious = null, $sAdditionalMessage = '', $bLogoutOnException = false)
|
||||
{
|
||||
parent::__construct(\RainLoop\Notifications::GetNotificationsMessage($iCode, $oPrevious),
|
||||
$iCode, $oPrevious);
|
||||
|
||||
$this->sAdditionalMessage = $sAdditionalMessage;
|
||||
|
||||
$this->setLogoutOnException($bLogoutOnException);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,4 +41,27 @@ class ClientException extends Exception
|
|||
{
|
||||
return $this->sAdditionalMessage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return boolen
|
||||
*/
|
||||
public function getLogoutOnException()
|
||||
{
|
||||
return $this->bLogoutOnException;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $bLogoutOnException
|
||||
* @param string $sAdditionalLogoutMessage = ''
|
||||
*
|
||||
* @return ClientException
|
||||
*/
|
||||
public function setLogoutOnException($bLogoutOnException, $sAdditionalLogoutMessage = '')
|
||||
{
|
||||
$this->bLogoutOnException = !!$bLogoutOnException;
|
||||
|
||||
$this->sAdditionalMessage = $sAdditionalLogoutMessage;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,14 +192,14 @@ class Service
|
|||
}
|
||||
|
||||
$sResult .= '<!--';
|
||||
$sResult .= ' [version:'.APP_VERSION;
|
||||
$sResult .= ' [time:'.\substr(\microtime(true) - APP_START, 0, 6);
|
||||
|
||||
// $sResult .= '][version:'.APP_VERSION;
|
||||
if ($this->oActions->IsOpen())
|
||||
{
|
||||
$sResult .= '][AGPLv3';
|
||||
}
|
||||
|
||||
$sResult .= '][time:'.\substr(\microtime(true) - APP_START, 0, 6);
|
||||
$sResult .= '][cached:'.($bCached ? 'true' : 'false');
|
||||
// $sResult .= '][hash:'.$aTemplateParameters['{{BaseHash}}'];
|
||||
// $sResult .= '][session:'.\md5(\RainLoop\Utils::GetShortToken());
|
||||
|
|
|
@ -182,9 +182,21 @@ class ServiceActions
|
|||
$aResponseItem = $this->oActions->ExceptionResponse(
|
||||
empty($sAction) ? 'Unknown' : $sAction, $oException);
|
||||
|
||||
if (\is_array($aResponseItem) && 'Folders' === $sAction && $oException instanceof \RainLoop\Exceptions\ClientException)
|
||||
if (\is_array($aResponseItem) && $oException instanceof \RainLoop\Exceptions\ClientException)
|
||||
{
|
||||
$aResponseItem['ClearAuth'] = true;
|
||||
if ('Folders' === $sAction)
|
||||
{
|
||||
$aResponseItem['ClearAuth'] = true;
|
||||
}
|
||||
|
||||
if ($oException->getLogoutOnException())
|
||||
{
|
||||
$aResponseItem['Logout'] = true;
|
||||
if ($oException->getAdditionalMessage())
|
||||
{
|
||||
$this->oActions->SetSpecLogoutCustomMgsWithDeletion($oException->getAdditionalMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1008,7 +1020,7 @@ class ServiceActions
|
|||
public function ServiceExternalLogin()
|
||||
{
|
||||
$this->oHttp->ServerNoCache();
|
||||
|
||||
|
||||
$oException = null;
|
||||
$oAccount = null;
|
||||
$bLogout = true;
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<meta name="Author" content="RainLoop Team" />
|
||||
<meta name="robots" content="noindex,nofollow,noodp" />
|
||||
<meta name="google" content="notranslate" />
|
||||
<meta name="app-version" content="{{BaseVersion}}" id="rlAppVersion" />
|
||||
<title></title>
|
||||
<style>#rl-content{display:none;}#rl-check{display:none;}</style>
|
||||
{{BaseAppFaviconPngLinkTag}}{{BaseAppFaviconTouchLinkTag}}
|
||||
|
|
Loading…
Reference in a new issue