mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-16 12:16:09 +03:00
ba4c53134f
no issue - update imports for `@ember-data` package (https://github.com/emberjs/rfcs/blob/master/text/0395-ember-data-packages.md) - use `computed.reads` where applicable (https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/require-computed-macros.md) - fix usage of `scheduleOnce` so that functions are only scheduled once (https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/no-incorrect-calls-with-inline-anonymous-functions.md)
77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
import $ from 'jquery';
|
|
import ModalComponent from 'ghost-admin/components/modal-base';
|
|
import ValidationEngine from 'ghost-admin/mixins/validation-engine';
|
|
import {htmlSafe} from '@ember/string';
|
|
import {isVersionMismatchError} from 'ghost-admin/services/ajax';
|
|
import {reads} from '@ember/object/computed';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency';
|
|
|
|
export default ModalComponent.extend(ValidationEngine, {
|
|
config: service(),
|
|
notifications: service(),
|
|
session: service(),
|
|
|
|
validationType: 'signin',
|
|
|
|
authenticationError: null,
|
|
|
|
identification: reads('session.user.email'),
|
|
|
|
actions: {
|
|
confirm() {
|
|
this.reauthenticate.perform();
|
|
}
|
|
},
|
|
|
|
_authenticate() {
|
|
let session = this.session;
|
|
let authStrategy = 'authenticator:cookie';
|
|
let identification = this.identification;
|
|
let password = this.password;
|
|
|
|
session.set('skipAuthSuccessHandler', true);
|
|
|
|
this.toggleProperty('submitting');
|
|
|
|
return session.authenticate(authStrategy, identification, password).finally(() => {
|
|
this.toggleProperty('submitting');
|
|
session.set('skipAuthSuccessHandler', undefined);
|
|
});
|
|
},
|
|
|
|
_passwordConfirm() {
|
|
// Manually trigger events for input fields, ensuring legacy compatibility with
|
|
// browsers and password managers that don't send proper events on autofill
|
|
$('#login').find('input').trigger('change');
|
|
|
|
this.set('authenticationError', null);
|
|
|
|
return this.validate({property: 'signin'}).then(() => this._authenticate().then(() => {
|
|
this.notifications.closeAlerts();
|
|
this.send('closeModal');
|
|
return true;
|
|
}).catch((error) => {
|
|
if (error && error.payload && error.payload.errors) {
|
|
error.payload.errors.forEach((err) => {
|
|
if (isVersionMismatchError(err)) {
|
|
return this.notifications.showAPIError(error);
|
|
}
|
|
err.message = htmlSafe(err.context || err.message);
|
|
});
|
|
|
|
this.errors.add('password', 'Incorrect password');
|
|
this.hasValidated.pushObject('password');
|
|
this.set('authenticationError', error.payload.errors[0].message);
|
|
}
|
|
}), () => {
|
|
this.hasValidated.pushObject('password');
|
|
return false;
|
|
});
|
|
},
|
|
|
|
reauthenticate: task(function* () {
|
|
return yield this._passwordConfirm();
|
|
}).drop()
|
|
});
|