djmaze 2021-02-24 22:03:14 +01:00
parent 65b508364a
commit 1a82dde49b
30 changed files with 401 additions and 31 deletions

View file

@ -48,14 +48,6 @@ export class AbstractApp {
return true;
}
/**
* @param {string} token
*/
setClientSideToken(token) {
rl.hash.set();
Settings.set('AuthAccountHash', token);
}
logoutReload(close = false) {
const url = logoutLink();

View file

@ -98,10 +98,10 @@ export const Notification = {
AccountTwoFactorAuthRequired: 120,
AccountTwoFactorAuthError: 121,
// CurrentPasswordIncorrect: 131,
// NewPasswordShort: 132,
// NewPasswordWeak: 133,
// NewPasswordForbidden: 134,
CouldNotSaveNewPassword: 130,
CurrentPasswordIncorrect: 131,
NewPasswordShort: 132,
NewPasswordWeak: 133,
ContactsSyncError: 140,

View file

@ -594,6 +594,18 @@ class RemoteUserFetch extends AbstractFetchRemote {
};
}
/**
* @param {?Function} fCallback
* @param {string} prevPassword
* @param {string} newPassword
*/
changePassword(fCallback, prevPassword, newPassword) {
this.defaultRequest(fCallback, 'ChangePassword', {
'PrevPassword': prevPassword,
'NewPassword': newPassword
});
}
/**
* @param {?Function} fCallback
* @param {string} sFolderFullNameRaw

View file

@ -18,6 +18,7 @@ import { TemplatesUserSettings } from 'Settings/User/Templates';
import { FoldersUserSettings } from 'Settings/User/Folders';
import { ThemesUserSettings } from 'Settings/User/Themes';
import { OpenPgpUserSettings } from 'Settings/User/OpenPgp';
import { ChangePasswordUserSettings } from 'Settings/User/ChangePassword';
import { SystemDropDownSettingsUserView } from 'View/User/Settings/SystemDropDown';
import { MenuSettingsUserView } from 'View/User/Settings/Menu';
@ -77,6 +78,15 @@ export class SettingsUserScreen extends AbstractSettingsScreen {
);
}
if (Settings.get('ChangePasswordIsAllowed')) {
settingsAddViewModel(
ChangePasswordUserSettings,
'SettingsChangePassword',
'GLOBAL/PASSWORD',
'change-password'
);
}
if (Settings.capa(Capa.Folders)) {
settingsAddViewModel(FoldersUserSettings, 'SettingsFolders', 'SETTINGS_LABELS/LABEL_FOLDERS_NAME', 'folders');
}

View file

@ -0,0 +1,90 @@
import ko from 'ko';
import { StorageResultType, Notification } from 'Common/Enums';
import { getNotificationFromResponse, i18n } from 'Common/Translator';
import { Settings } from 'Common/Globals';
import Remote from 'Remote/User/Fetch';
import { decorateKoCommands } from 'Knoin/Knoin';
export class ChangePasswordUserSettings {
constructor() {
ko.addObservablesTo(this, {
changeProcess: false,
errorDescription: '',
passwordMismatch: false,
passwordUpdateError: false,
passwordUpdateSuccess: false,
currentPassword: '',
currentPasswordError: false,
newPassword: '',
newPassword2: '',
});
this.currentPassword.subscribe(() => this.resetUpdate(true));
this.newPassword.subscribe(() => this.resetUpdate());
this.newPassword2.subscribe(() => this.resetUpdate());
decorateKoCommands(this, {
saveNewPasswordCommand: self => !self.changeProcess()
&& '' !== self.currentPassword()
&& '' !== self.newPassword()
&& '' !== self.newPassword2()
});
}
saveNewPasswordCommand() {
if (this.newPassword() !== this.newPassword2()) {
this.passwordMismatch(true);
this.errorDescription(i18n('SETTINGS_CHANGE_PASSWORD/ERROR_PASSWORD_MISMATCH'));
} else {
this.reset(true);
Remote.changePassword(this.onChangePasswordResponse.bind(this), this.currentPassword(), this.newPassword());
}
}
reset(change) {
this.changeProcess(change);
this.resetUpdate();
this.currentPasswordError(false);
this.errorDescription('');
}
resetUpdate(current) {
this.passwordUpdateError(false);
this.passwordUpdateSuccess(false);
current ? this.currentPasswordError(false) : this.passwordMismatch(false);
}
onHide() {
this.reset(false);
this.currentPassword('');
this.newPassword('');
this.newPassword2('');
}
onChangePasswordResponse(result, data) {
this.reset(false);
if (StorageResultType.Success === result && data && data.Result) {
this.currentPassword('');
this.newPassword('');
this.newPassword2('');
this.passwordUpdateSuccess(true);
rl.hash.set();
Settings.set('AuthAccountHash', data.Result);
} else {
if (data && Notification.CurrentPasswordIncorrect === data.ErrorCode) {
this.currentPasswordError(true);
}
this.passwordUpdateError(true);
this.errorDescription(getNotificationFromResponse(data, Notification.CouldNotSaveNewPassword));
}
}
}