import server from "../../../services/server.js"; import protectedSessionHolder from "../../../services/protected_session_holder.js"; import toastService from "../../../services/toast.js"; import OptionsWidget from "../../type_widgets/options/appearance/options_widget.js"; const TPL = `
`; export default class PasswordOptions extends OptionsWidget { get tabTitle() { return "Password" } lazyRender() { this.$widget = $(TPL); this.$passwordHeading = this.$widget.find("#password-heading"); this.$changePasswordForm = this.$widget.find("#change-password-form"); this.$oldPassword = this.$widget.find("#old-password"); this.$newPassword1 = this.$widget.find("#new-password1"); this.$newPassword2 = this.$widget.find("#new-password2"); this.$savePasswordButton = this.$widget.find("#save-password-button"); this.$resetPasswordButton = this.$widget.find("#reset-password-button"); this.$resetPasswordButton.on("click", async () => { if (confirm("By resetting the password you will forever lose access to all your existing protected notes. Do you really want to reset the password?")) { await server.post("password/reset?really=yesIReallyWantToResetPasswordAndLoseAccessToMyProtectedNotes"); const options = await server.get('options'); this.optionsLoaded(options); toastService.showError("Password has been reset. Please set new password"); } }); this.$changePasswordForm.on('submit', () => this.save()); this.$protectedSessionTimeout = this.$widget.find("#protected-session-timeout-in-seconds"); this.$protectedSessionTimeout.on('change', () => this.updateOption('protectedSessionTimeout', this.$protectedSessionTimeout.val())); } optionsLoaded(options) { const isPasswordSet = options.isPasswordSet === 'true'; this.$widget.find("#old-password-form-group").toggle(isPasswordSet); this.$passwordHeading.text(isPasswordSet ? 'Change password' : 'Set password'); this.$savePasswordButton.text(isPasswordSet ? 'Change password' : 'Set password'); this.$protectedSessionTimeout.val(options.protectedSessionTimeout); } save() { const oldPassword = this.$oldPassword.val(); const newPassword1 = this.$newPassword1.val(); const newPassword2 = this.$newPassword2.val(); this.$oldPassword.val(''); this.$newPassword1.val(''); this.$newPassword2.val(''); if (newPassword1 !== newPassword2) { toastService.showError("New passwords are not the same."); return false; } server.post('password/change', { 'current_password': oldPassword, 'new_password': newPassword1 }).then(result => { if (result.success) { toastService.showError("Password has been changed. Trilium will be reloaded after you press OK."); // password changed so current protected session is invalid and needs to be cleared protectedSessionHolder.resetProtectedSession(); } else { toastService.showError(result.message); } }); return false; } }