forked from verdnatura/hedera-web
refs #5762 feat(changePassword): salix compatibility
This commit is contained in:
parent
754b8cd6c4
commit
08b4a3437c
|
@ -1,4 +1,4 @@
|
||||||
hedera-web (23.30.1) stable; urgency=low
|
hedera-web (23.30.2) stable; urgency=low
|
||||||
|
|
||||||
* Initial Release.
|
* Initial Release.
|
||||||
|
|
||||||
|
|
|
@ -7,79 +7,7 @@ export default new Class({
|
||||||
activate() {
|
activate() {
|
||||||
this.$.userModel.setInfo('c', 'myClient', 'hedera');
|
this.$.userModel.setInfo('c', 'myClient', 'hedera');
|
||||||
this.$.userModel.setInfo('u', 'myUser', 'account');
|
this.$.userModel.setInfo('u', 'myUser', 'account');
|
||||||
|
this.$.changePassword.conn = this.conn
|
||||||
if (this.hash.$.verificationToken)
|
this.$.changePassword.user = this.gui.user
|
||||||
this.onPassChangeClick();
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
,onPassChangeClick() {
|
|
||||||
this.$.oldPassword.value = '';
|
|
||||||
this.$.newPassword.value = '';
|
|
||||||
this.$.repeatPassword.value = '';
|
|
||||||
|
|
||||||
var verificationToken = this.hash.$.verificationToken;
|
|
||||||
this.$.oldPassword.style.display = verificationToken ? 'none' : 'block';
|
|
||||||
this.$.changePassword.show();
|
|
||||||
|
|
||||||
if (verificationToken)
|
|
||||||
this.$.newPassword.focus();
|
|
||||||
else
|
|
||||||
this.$.oldPassword.focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
,async onPassModifyClick() {
|
|
||||||
const form = this.$.changePassword.node;
|
|
||||||
Vn.Node.disableInputs(form);
|
|
||||||
try {
|
|
||||||
const oldPassword = this.$.oldPassword.value;
|
|
||||||
const newPassword = this.$.newPassword.value;
|
|
||||||
const repeatedPassword = this.$.repeatPassword.value;
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (newPassword == '' && repeatedPassword == '')
|
|
||||||
throw new Error(_('Passwords empty'));
|
|
||||||
if (newPassword !== repeatedPassword)
|
|
||||||
throw new Error(_('Passwords doesn\'t match'));
|
|
||||||
} catch (err) {
|
|
||||||
return Htk.Toast.showError(err.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
const verificationToken = this.hash.$.verificationToken;
|
|
||||||
const params = {newPassword};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (verificationToken) {
|
|
||||||
params.verificationToken = verificationToken;
|
|
||||||
await this.conn.send('user/restore-password', params);
|
|
||||||
} else {
|
|
||||||
let userId = this.gui.user.id;
|
|
||||||
params.oldPassword = oldPassword;
|
|
||||||
await this.conn.patch(
|
|
||||||
`Accounts/${userId}/changePassword`, params);
|
|
||||||
}
|
|
||||||
} catch(err) {
|
|
||||||
Htk.Toast.showError(err.message);
|
|
||||||
|
|
||||||
if (verificationToken)
|
|
||||||
this.$.newPassword.select();
|
|
||||||
else
|
|
||||||
this.$.oldPassword.select();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.hash.unset('verificationToken');
|
|
||||||
await this.conn.open(this.gui.user.name, newPassword);
|
|
||||||
this.$.changePassword.hide();
|
|
||||||
} finally {
|
|
||||||
Vn.Node.disableInputs(form, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
Htk.Toast.showMessage(_('Password changed!'));
|
|
||||||
}
|
|
||||||
|
|
||||||
,onPassInfoClick() {
|
|
||||||
this.$.passwordInfo.show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
<vn>
|
<vn>
|
||||||
<vn-group>
|
<vn-group>
|
||||||
<db-form v-model="passwordForm">
|
|
||||||
<db-model property="model">
|
|
||||||
SELECT length, nAlpha, nUpper, nDigits, nPunct
|
|
||||||
FROM account.userPassword
|
|
||||||
</db-model>
|
|
||||||
</db-form>
|
|
||||||
<db-form id="user-form">
|
<db-form id="user-form">
|
||||||
<db-model property="model" id="user-model" updatable="true">
|
<db-model property="model" id="user-model" updatable="true">
|
||||||
SELECT u.id, u.name, u.email, u.nickname,
|
SELECT u.id, u.name, u.email, u.nickname,
|
||||||
|
@ -27,7 +21,7 @@
|
||||||
<htk-bar-button
|
<htk-bar-button
|
||||||
icon="lock_reset"
|
icon="lock_reset"
|
||||||
tip="_Change password"
|
tip="_Change password"
|
||||||
on-click="this.onPassChangeClick()"/>
|
on-click="this.$.changePassword.open()"/>
|
||||||
</div>
|
</div>
|
||||||
<div id="form" class="conf">
|
<div id="form" class="conf">
|
||||||
<div class="form box vn-w-sm vn-pa-lg">
|
<div class="form box vn-w-sm vn-pa-lg">
|
||||||
|
@ -74,64 +68,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<htk-popup
|
<htk-change-password id="change-password"/>
|
||||||
id="change-password"
|
|
||||||
modal="true">
|
|
||||||
<div property="child-node" class="htk-dialog vn-w-xs vn-pa-lg">
|
|
||||||
<div class="form">
|
|
||||||
<h5 class="vn-mb-md">
|
|
||||||
<t>Change password</t>
|
|
||||||
</h5>
|
|
||||||
<input
|
|
||||||
id="old-password"
|
|
||||||
type="password"
|
|
||||||
placeholder="_Old password"/>
|
|
||||||
<input
|
|
||||||
id="new-password"
|
|
||||||
type="password"
|
|
||||||
placeholder="_New password"
|
|
||||||
autocomplete="new-password"/>
|
|
||||||
<input
|
|
||||||
id="repeat-password"
|
|
||||||
type="password"
|
|
||||||
placeholder="_Repeat password"
|
|
||||||
autocomplete="new-password"/>
|
|
||||||
</div>
|
|
||||||
<div class="button-bar">
|
|
||||||
<button class="thin" on-click="this.onPassModifyClick()">
|
|
||||||
<t>Modify</t>
|
|
||||||
</button>
|
|
||||||
<button class="thin" on-click="this.onPassInfoClick()">
|
|
||||||
<t>Requirements</t>
|
|
||||||
</button>
|
|
||||||
<div class="clear"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</htk-popup>
|
|
||||||
<htk-popup
|
|
||||||
id="password-info"
|
|
||||||
modal="true">
|
|
||||||
<div property="child-node" class="htk-dialog pass-info vn-w-xs vn-pa-lg">
|
|
||||||
<h5 class="vn-mb-md">
|
|
||||||
<t>Password requirements</t>
|
|
||||||
</h5>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
{{passwordForm.length}} <t>characters long</t>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{passwordForm.nAlpha}} <t>alphabetic characters</t>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{passwordForm.nUpper}} <t>capital letters</t>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{passwordForm.nDigits}} <t>digits</t>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{passwordForm.nPunct}} <t>symbols</t>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</htk-popup>
|
|
||||||
</vn>
|
</vn>
|
||||||
|
|
|
@ -65,3 +65,20 @@ Account: Compte
|
||||||
Addresses: Adreces
|
Addresses: Adreces
|
||||||
|
|
||||||
Load an order: Si us plau carrega una comanda pendent a la cistella o en comença una de nova
|
Load an order: Si us plau carrega una comanda pendent a la cistella o en comença una de nova
|
||||||
|
|
||||||
|
Old password: Contrasenya antiga
|
||||||
|
New password: Nova contrasenya
|
||||||
|
Repeat password: Repetir contrasenya
|
||||||
|
Requirements: Requisits
|
||||||
|
Modify: Modificar
|
||||||
|
Password requirements: Requisits de contrasenya
|
||||||
|
characters long: caràcters de longitud
|
||||||
|
alphabetic characters: caràcters alfabètics
|
||||||
|
capital letters: majúscules
|
||||||
|
digits: dígits
|
||||||
|
symbols: símbols
|
||||||
|
Password changed!: Contrasenya modificada!
|
||||||
|
Password doesn't meet the requirements: ''
|
||||||
|
Passwords doesn't match: Les contrasenyes no coincideixen!
|
||||||
|
Passwords empty: Les contrasenyes en blanc
|
||||||
|
Change password: Canvia la contrasenya
|
|
@ -65,3 +65,22 @@ Account: Cuenta
|
||||||
Addresses: Direcciones
|
Addresses: Direcciones
|
||||||
|
|
||||||
Load an order: Por favor carga un pedido pendiente en la cesta o empieza uno nuevo
|
Load an order: Por favor carga un pedido pendiente en la cesta o empieza uno nuevo
|
||||||
|
|
||||||
|
Old password: Contaseña antigua
|
||||||
|
New password: Nueva contraseña
|
||||||
|
Repeat password: Repetir contraseña
|
||||||
|
Requirements: Requisitos
|
||||||
|
Modify: Modificar
|
||||||
|
Password requirements: Requisitos de constraseña
|
||||||
|
characters long: carácteres de longitud
|
||||||
|
alphabetic characters: carácteres alfabéticos
|
||||||
|
capital letters: letras mayúsculas
|
||||||
|
digits: dígitos
|
||||||
|
symbols: 'símbolos. Ej: $%&.'
|
||||||
|
Password changed!: ¡Contraseña modificada!
|
||||||
|
Password doesn't meet the requirements: >-
|
||||||
|
La nueva contraseña no reune los requisitos de seguridad necesarios, pulsa en
|
||||||
|
info para más detalle
|
||||||
|
Passwords doesn't match: ¡Las contraseñas no coinciden!
|
||||||
|
Passwords empty: Contraseña vacía
|
||||||
|
Change password: Cambiar contraseña
|
|
@ -65,3 +65,20 @@ Account: Compte
|
||||||
Addresses: Adresses
|
Addresses: Adresses
|
||||||
|
|
||||||
Load an order: Veuillez télécharger une commande en attente dans le panier ou en démarrer une nouvelle
|
Load an order: Veuillez télécharger une commande en attente dans le panier ou en démarrer une nouvelle
|
||||||
|
|
||||||
|
Old password: Ancien mot de passe
|
||||||
|
New password: Nouveau mot de passe
|
||||||
|
Repeat password: Répéter le mot de passe
|
||||||
|
Requirements: Exigences
|
||||||
|
Modify: Modifier
|
||||||
|
Password requirements: Mot de passe exigences
|
||||||
|
characters long: Longs caractères
|
||||||
|
alphabetic characters: les caractères alphabétiques
|
||||||
|
capital letters: lettres majuscules
|
||||||
|
digits: chiffres
|
||||||
|
symbols: 'symboles. Ej: $%&.'
|
||||||
|
Password changed!: Mot de passe modifié!
|
||||||
|
Password doesn't meet the requirements: ''
|
||||||
|
Passwords doesn't match: Les mots de passe ne correspondent pas!
|
||||||
|
Passwords empty: ''
|
||||||
|
Change password: Changer le mot de passe
|
|
@ -63,3 +63,20 @@ Account: Conta
|
||||||
Addresses: Moradas
|
Addresses: Moradas
|
||||||
|
|
||||||
Load an order: Carregue um pedido pendente no carrinho ou inicie um novo
|
Load an order: Carregue um pedido pendente no carrinho ou inicie um novo
|
||||||
|
|
||||||
|
Old password: Palavra-passe antiga
|
||||||
|
New password: Nova Palavra-passe
|
||||||
|
Repeat password: Repetir Palavra-passe
|
||||||
|
Requirements: Requisitos
|
||||||
|
Modify: Modificar
|
||||||
|
Password requirements: Requisitos de Palavra-passe
|
||||||
|
characters long: caracteres
|
||||||
|
alphabetic characters: caracteres alfabéticos
|
||||||
|
capital letters: letras maiúsculas
|
||||||
|
digits: dígitos
|
||||||
|
symbols: 'símbolos. Ej: $%&.'
|
||||||
|
Password changed!: Palavra-passe Modificada!
|
||||||
|
Password doesn't meet the requirements: Palavra-passe não atende aos requisitos
|
||||||
|
Passwords doesn't match: As Palavras-Passe não coincidem!
|
||||||
|
Passwords empty: Palavra-passe vazia
|
||||||
|
Change password: Mudar Palavra-passe
|
|
@ -26,6 +26,12 @@ module.exports = new Class({
|
||||||
self._onSubmit();
|
self._onSubmit();
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if(this.hash.$.verificationToken){
|
||||||
|
this.$.changePassword.conn = this.conn;
|
||||||
|
this.$.changePassword.token = this.hash.$.verificationToken;
|
||||||
|
this.$.changePassword.open();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
,_onConnLoadChange(conn, isLoading) {
|
,_onConnLoadChange(conn, isLoading) {
|
||||||
|
@ -94,7 +100,11 @@ module.exports = new Class({
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this._conn.send('user/recover-password', {recoverUser});
|
await this.conn.post('VnUsers/recoverPassword', {
|
||||||
|
user: recoverUser,
|
||||||
|
app: 'hedera'
|
||||||
|
});
|
||||||
|
|
||||||
Htk.Toast.showMessage(_('A mail has been sent wich you can recover your password'));
|
Htk.Toast.showMessage(_('A mail has been sent wich you can recover your password'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -54,4 +54,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<htk-change-password id="change-password"/>
|
||||||
</vn>
|
</vn>
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
var Component = require('vn/component');
|
||||||
|
var Toast = require('../toast');
|
||||||
|
var Tpl = require('./ui.xml').default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A change password popup.
|
||||||
|
*/
|
||||||
|
module.exports = new Class({
|
||||||
|
Extends: Component,
|
||||||
|
Tag: 'htk-change-password',
|
||||||
|
Properties: {
|
||||||
|
/**
|
||||||
|
* The token url.
|
||||||
|
*/
|
||||||
|
token: {
|
||||||
|
type: String
|
||||||
|
,set(value) {
|
||||||
|
this._token = value;
|
||||||
|
}
|
||||||
|
,get() {
|
||||||
|
return this._token;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
conn: {
|
||||||
|
type: Db.Connection
|
||||||
|
,set(x) {
|
||||||
|
this._conn = x
|
||||||
|
}
|
||||||
|
,get() {
|
||||||
|
return this._conn;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
type: Object
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
initialize(props) {
|
||||||
|
Component.prototype.initialize.call(this, props);
|
||||||
|
},
|
||||||
|
|
||||||
|
async open() {
|
||||||
|
this.passwordForm = await this.conn.get('UserPasswords/findOne')
|
||||||
|
this.loadTemplateFromString(Tpl);
|
||||||
|
|
||||||
|
this.$.oldPassword.value = '';
|
||||||
|
this.$.newPassword.value = '';
|
||||||
|
this.$.repeatPassword.value = '';
|
||||||
|
|
||||||
|
this.$.oldPassword.style.display = this.token ? 'none' : 'block';
|
||||||
|
this.$.changePassword.open();
|
||||||
|
|
||||||
|
if (this.token)
|
||||||
|
this.$.newPassword.focus();
|
||||||
|
else
|
||||||
|
this.$.oldPassword.focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
async onPassModifyClick() {
|
||||||
|
const form = this.$.changePassword.node;
|
||||||
|
Vn.Node.disableInputs(form);
|
||||||
|
try {
|
||||||
|
const oldPassword = this.$.oldPassword.value;
|
||||||
|
const newPassword = this.$.newPassword.value;
|
||||||
|
const repeatedPassword = this.$.repeatPassword.value;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (newPassword == '' && repeatedPassword == '')
|
||||||
|
throw new Error(_('Passwords empty'));
|
||||||
|
if (newPassword !== repeatedPassword)
|
||||||
|
throw new Error(_('Passwords doesn\'t match'));
|
||||||
|
} catch (err) {
|
||||||
|
return Toast.showError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
const params = {newPassword};
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (this.token) {
|
||||||
|
const headers = {
|
||||||
|
Authorization: this.token
|
||||||
|
};
|
||||||
|
await this.conn.post('VnUsers/reset-password', params, {headers});
|
||||||
|
} else {
|
||||||
|
params.userId = this.user.id;
|
||||||
|
params.oldPassword = oldPassword;
|
||||||
|
|
||||||
|
await this.conn.patch(`Accounts/change-password`, params);
|
||||||
|
}
|
||||||
|
} catch(err) {
|
||||||
|
Toast.showError(err.message);
|
||||||
|
|
||||||
|
if (this.token)
|
||||||
|
this.$.newPassword.select();
|
||||||
|
else
|
||||||
|
this.$.oldPassword.select();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.user)
|
||||||
|
await this.conn.open(this.user.name, newPassword);
|
||||||
|
this.$.changePassword.hide();
|
||||||
|
} finally {
|
||||||
|
Vn.Node.disableInputs(form, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Toast.showMessage(_('Password changed!'));
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,62 @@
|
||||||
|
<vn>
|
||||||
|
<htk-popup
|
||||||
|
id="change-password"
|
||||||
|
modal="true">
|
||||||
|
<div property="child-node" class="htk-dialog vn-w-xs vn-pa-lg">
|
||||||
|
<div class="form">
|
||||||
|
<h5 class="vn-mb-md">
|
||||||
|
<t>Change password</t>
|
||||||
|
</h5>
|
||||||
|
<input
|
||||||
|
id="old-password"
|
||||||
|
type="password"
|
||||||
|
placeholder="_Old password"/>
|
||||||
|
<input
|
||||||
|
id="new-password"
|
||||||
|
type="password"
|
||||||
|
placeholder="_New password"
|
||||||
|
autocomplete="new-password"/>
|
||||||
|
<input
|
||||||
|
id="repeat-password"
|
||||||
|
type="password"
|
||||||
|
placeholder="_Repeat password"
|
||||||
|
autocomplete="new-password"/>
|
||||||
|
</div>
|
||||||
|
<div class="button-bar">
|
||||||
|
<button class="thin" on-click="this.onPassModifyClick()">
|
||||||
|
<t>Modify</t>
|
||||||
|
</button>
|
||||||
|
<button class="thin" on-click="this.$.passwordInfo.show()">
|
||||||
|
<t>Requirements</t>
|
||||||
|
</button>
|
||||||
|
<div class="clear"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</htk-popup>
|
||||||
|
<htk-popup
|
||||||
|
id="password-info"
|
||||||
|
modal="true">
|
||||||
|
<div property="child-node" class="htk-dialog pass-info vn-w-xs vn-pa-lg">
|
||||||
|
<h5 class="vn-mb-md">
|
||||||
|
<t>Password requirements</t>
|
||||||
|
</h5>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
{{this.passwordForm.length}} <t>characters long</t>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
{{this.passwordForm.nAlpha}} <t>alphabetic characters</t>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
{{this.passwordForm.nUpper}} <t>capital letters</t>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
{{this.passwordForm.nDigits}} <t>digits</t>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
{{this.passwordForm.nPunct}} <t>symbols</t>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</htk-popup>
|
||||||
|
</vn>
|
|
@ -3,22 +3,23 @@ require('db/db');
|
||||||
require('./style/index.scss');
|
require('./style/index.scss');
|
||||||
|
|
||||||
Htk = module.exports = {
|
Htk = module.exports = {
|
||||||
Popup : require('./popup')
|
Popup : require('./popup')
|
||||||
,Dialog : require('./dialog')
|
,Dialog : require('./dialog')
|
||||||
,Toast : require('./toast')
|
,Toast : require('./toast')
|
||||||
,Repeater : require('./repeater')
|
,Repeater : require('./repeater')
|
||||||
,Grid : require('./grid')
|
,Grid : require('./grid')
|
||||||
,Spinner : require('./spinner')
|
,Spinner : require('./spinner')
|
||||||
,Icon : require('./icon')
|
,Icon : require('./icon')
|
||||||
,FullImage : require('./full-image')
|
,FullImage : require('./full-image')
|
||||||
,ImageEditor : require('./image-editor')
|
,ImageEditor : require('./image-editor')
|
||||||
,Assistant : require('./assistant')
|
,Assistant : require('./assistant')
|
||||||
,AssistantBar : require('./assistant-bar')
|
,AssistantBar : require('./assistant-bar')
|
||||||
,Step : require('./step')
|
,Step : require('./step')
|
||||||
,Loader : require('./loader')
|
,Loader : require('./loader')
|
||||||
,List : require('./list')
|
,List : require('./list')
|
||||||
,Field : require('./field')
|
,Field : require('./field')
|
||||||
,Column : require('./column')
|
,Column : require('./column')
|
||||||
|
,ChangePassword : require('./change-password')
|
||||||
};
|
};
|
||||||
|
|
||||||
var Fields = {
|
var Fields = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "hedera-web",
|
"name": "hedera-web",
|
||||||
"version": "23.30.1",
|
"version": "23.30.2",
|
||||||
"description": "Verdnatura web page",
|
"description": "Verdnatura web page",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
Loading…
Reference in New Issue