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/app/controllers/second-factor-backup-edit.js
Jarek Radosz 5538b8442e
DEV: Introduce discourseLater (#17532)
A wrapper for `later()` from `@ember/runloop`, similar to `discourseDebounce`. It automatically reduces the delay in testing environment.
2022-07-17 00:50:49 +02:00

104 lines
2.7 KiB
JavaScript

import Controller from "@ember/controller";
import I18n from "I18n";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { SECOND_FACTOR_METHODS } from "discourse/models/user";
import { alias } from "@ember/object/computed";
import discourseLater from "discourse-common/lib/later";
export default Controller.extend(ModalFunctionality, {
loading: false,
errorMessage: null,
successMessage: null,
backupEnabled: alias("model.second_factor_backup_enabled"),
remainingCodes: alias("model.second_factor_remaining_backup_codes"),
backupCodes: null,
secondFactorMethod: SECOND_FACTOR_METHODS.TOTP,
onShow() {
this.setProperties({
loading: false,
errorMessage: null,
successMessage: null,
backupCodes: null,
});
},
actions: {
copyBackupCode(successful) {
if (successful) {
this.set(
"successMessage",
I18n.t("user.second_factor_backup.copied_to_clipboard")
);
} else {
this.set(
"errorMessage",
I18n.t("user.second_factor_backup.copy_to_clipboard_error")
);
}
this._hideCopyMessage();
},
disableSecondFactorBackup() {
this.set("backupCodes", []);
this.set("loading", true);
this.model
.updateSecondFactor(0, "", true, SECOND_FACTOR_METHODS.BACKUP_CODE)
.then((response) => {
if (response.error) {
this.set("errorMessage", response.error);
return;
}
this.set("errorMessage", null);
this.model.set("second_factor_backup_enabled", false);
this.markDirty();
this.send("closeModal");
})
.catch((error) => {
this.send("closeModal");
this.onError(error);
})
.finally(() => this.set("loading", false));
},
generateSecondFactorCodes() {
this.set("loading", true);
this.model
.generateSecondFactorCodes()
.then((response) => {
if (response.error) {
this.set("errorMessage", response.error);
return;
}
this.markDirty();
this.setProperties({
errorMessage: null,
backupCodes: response.backup_codes,
backupEnabled: true,
remainingCodes: response.backup_codes.length,
});
})
.catch((error) => {
this.send("closeModal");
this.onError(error);
})
.finally(() => {
this.setProperties({
loading: false,
});
});
},
},
_hideCopyMessage() {
discourseLater(
() => this.setProperties({ successMessage: null, errorMessage: null }),
2000
);
},
});