mirror of https://github.com/rancher/ui.git
129 lines
3.1 KiB
JavaScript
129 lines
3.1 KiB
JavaScript
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import { get, set, computed, observer } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { later, run } from '@ember/runloop';
|
|
import { randomStr } from 'shared/utils/util';
|
|
|
|
const CHANGE = 'change';
|
|
const SET = 'set';
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
intl: service(),
|
|
globalStore: service(),
|
|
session: service(),
|
|
router: service(),
|
|
access: service(),
|
|
|
|
showCurrent: true,
|
|
generate: false,
|
|
setOrChange: CHANGE,
|
|
editLabel: 'modalEditPassword.actionButton',
|
|
currentPassword: null,
|
|
user: null,
|
|
|
|
confirmBlurred: false,
|
|
serverErrors: null,
|
|
password: null,
|
|
confirm: null,
|
|
|
|
didReceiveAttrs() {
|
|
if ( get(this, 'generate') ) {
|
|
this.send('regenerate');
|
|
}
|
|
|
|
run.next(this, 'focusStart');
|
|
},
|
|
|
|
saveDisabled: computed('generate', 'password','confirm', function() {
|
|
if ( get(this, 'generate') ) {
|
|
return false;
|
|
}
|
|
|
|
const pass = (get(this, 'password') || '').trim();
|
|
const confirm = (get(this, 'confirm') || '').trim();
|
|
|
|
return !pass || !confirm || pass !== confirm;
|
|
}),
|
|
|
|
errors: computed('saveDisabled', 'confirm', 'confirmBlurred', 'serverErrors.[]', function() {
|
|
let out = get(this, 'serverErrors')||[];
|
|
|
|
if ( get(this, 'confirmBlurred') && get(this, 'confirm') && get(this, 'saveDisabled') ) {
|
|
out.push(get(this, 'intl').t('modalEditPassword.mismatch'));
|
|
}
|
|
|
|
return out;
|
|
}),
|
|
|
|
focusStart() {
|
|
const elem = $('.start')[0];
|
|
if ( elem ) {
|
|
elem.focus();
|
|
}
|
|
},
|
|
|
|
generateChanged: observer('generate', function() {
|
|
if ( get(this, 'generate') ) {
|
|
set(this, 'password', randomStr(16,'password'));
|
|
} else {
|
|
set(this,'password','');
|
|
set(this,'confirm','');
|
|
run.next(this, 'focusStart');
|
|
}
|
|
}),
|
|
|
|
actions: {
|
|
regenerate() {
|
|
this.generateChanged();
|
|
},
|
|
|
|
blurredConfirm() {
|
|
set(this, 'confirmBlurred', true);
|
|
},
|
|
|
|
save(cb) {
|
|
const user = get(this, 'user');
|
|
const old = get(this, 'currentPassword') || '';
|
|
const neu = get(this, 'password') || '';
|
|
|
|
set(this, 'serverErrors', []);
|
|
|
|
const setOrChange = get(this, 'setOrChange');
|
|
let promise;
|
|
if ( setOrChange === CHANGE ) {
|
|
// @TODO-2.0 better way to call collection actions
|
|
promise = get(this, 'globalStore').request({
|
|
url: '/v3/users?action=changepassword',
|
|
method: 'POST',
|
|
data: {
|
|
currentPassword: old.trim(),
|
|
newPassword: neu.trim()
|
|
}
|
|
});
|
|
} else if ( setOrChange === SET ) {
|
|
promise = user.doAction('setpassword', {
|
|
newPassword: neu.trim(),
|
|
});
|
|
}
|
|
|
|
return promise.then(() => {
|
|
return get(this, 'access').loadMe().then(() => {
|
|
get(this, 'complete')(true);
|
|
later(this, () => {
|
|
if ( this.isDestroyed || this.isDestroying ) {
|
|
return;
|
|
}
|
|
cb(true);
|
|
}, 1000);
|
|
});
|
|
}).catch((err) => {
|
|
set(this, 'serverErrors', [err.message]);
|
|
get(this, 'complete')(false);
|
|
cb(false);
|
|
});
|
|
},
|
|
}
|
|
});
|