This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/forgot-password.js.es6
2019-05-27 10:15:39 +02:00

92 lines
2.4 KiB
JavaScript

import { ajax } from "discourse/lib/ajax";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { escapeExpression } from "discourse/lib/utilities";
import { extractError } from "discourse/lib/ajax-error";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend(ModalFunctionality, {
offerHelp: null,
helpSeen: false,
@computed("accountEmailOrUsername", "disabled")
submitDisabled(accountEmailOrUsername, disabled) {
return Ember.isEmpty((accountEmailOrUsername || "").trim()) || disabled;
},
onShow() {
if ($.cookie("email")) {
this.set("accountEmailOrUsername", $.cookie("email"));
}
},
actions: {
ok() {
this.send("closeModal");
},
help() {
this.setProperties({
offerHelp: I18n.t("forgot_password.help", {
basePath: Discourse.BaseUri
}),
helpSeen: true
});
},
resetPassword() {
if (this.submitDisabled) return false;
this.set("disabled", true);
this.clearFlash();
ajax("/session/forgot_password", {
data: { login: this.accountEmailOrUsername.trim() },
type: "POST"
})
.then(data => {
const accountEmailOrUsername = escapeExpression(
this.accountEmailOrUsername
);
const isEmail = accountEmailOrUsername.match(/@/);
let key = `forgot_password.complete_${
isEmail ? "email" : "username"
}`;
let extraClass;
if (data.user_found === true) {
key += "_found";
this.set("accountEmailOrUsername", "");
this.set(
"offerHelp",
I18n.t(key, {
email: accountEmailOrUsername,
username: accountEmailOrUsername
})
);
} else {
if (data.user_found === false) {
key += "_not_found";
extraClass = "error";
}
this.flash(
I18n.t(key, {
email: accountEmailOrUsername,
username: accountEmailOrUsername
}),
extraClass
);
}
})
.catch(e => {
this.flash(extractError(e), "error");
})
.finally(() => {
this.set("disabled", false);
});
return false;
}
}
});