From a38ccde8bc4bb49f029009f32549e1fb6d006ade Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 30 Dec 2021 23:55:36 +0100 Subject: [PATCH] protect tree will check if password is set and send user to options if not --- src/public/app/dialogs/options.js | 8 ++++++-- .../options/{credentials.js => password.js} | 2 +- src/public/app/dialogs/password_not_set.js | 13 +++++++++++++ src/public/app/dialogs/protected_session.js | 2 +- src/public/app/services/protected_session.js | 6 ++++++ .../app/services/root_command_executor.js | 4 ++-- src/views/desktop.ejs | 1 + src/views/dialogs/options.ejs | 4 ++-- src/views/dialogs/password_not_set.ejs | 19 +++++++++++++++++++ 9 files changed, 51 insertions(+), 8 deletions(-) rename src/public/app/dialogs/options/{credentials.js => password.js} (98%) create mode 100644 src/public/app/dialogs/password_not_set.js create mode 100644 src/views/dialogs/password_not_set.ejs diff --git a/src/public/app/dialogs/options.js b/src/public/app/dialogs/options.js index 1109847e8..e430ed851 100644 --- a/src/public/app/dialogs/options.js +++ b/src/public/app/dialogs/options.js @@ -5,7 +5,7 @@ import utils from "../services/utils.js"; const $dialog = $("#options-dialog"); -export async function showDialog() { +export async function showDialog(openTab) { const options = await server.get('options'); utils.openDialog($dialog); @@ -14,7 +14,7 @@ export async function showDialog() { import('./options/appearance.js'), import('./options/shortcuts.js'), import('./options/code_notes.js'), - import('./options/credentials.js'), + import('./options/password.js'), import('./options/backup.js'), import('./options/sync.js'), import('./options/other.js'), @@ -26,4 +26,8 @@ export async function showDialog() { tab.optionsLoaded(options) } }); + + if (openTab) { + $(`.nav-link[href='#options-${openTab}']`).trigger("click"); + } } diff --git a/src/public/app/dialogs/options/credentials.js b/src/public/app/dialogs/options/password.js similarity index 98% rename from src/public/app/dialogs/options/credentials.js rename to src/public/app/dialogs/options/password.js index f2050fb75..471d1deb1 100644 --- a/src/public/app/dialogs/options/credentials.js +++ b/src/public/app/dialogs/options/password.js @@ -32,7 +32,7 @@ const TPL = ` export default class ChangePasswordOptions { constructor() { - $("#options-credentials").html(TPL); + $("#options-password").html(TPL); this.$passwordHeading = $("#password-heading"); this.$form = $("#change-password-form"); diff --git a/src/public/app/dialogs/password_not_set.js b/src/public/app/dialogs/password_not_set.js new file mode 100644 index 000000000..88bcbe6d5 --- /dev/null +++ b/src/public/app/dialogs/password_not_set.js @@ -0,0 +1,13 @@ +import utils from "../services/utils.js"; +import appContext from "../services/app_context.js"; + +export function show() { + const $dialog = $("#password-not-set-dialog"); + const $openPasswordOptionsButton = $("#open-password-options-button"); + + utils.openDialog($dialog); + + $openPasswordOptionsButton.on("click", () => { + appContext.triggerCommand("showOptions", { openTab: 'password' }); + }); +} diff --git a/src/public/app/dialogs/protected_session.js b/src/public/app/dialogs/protected_session.js index a4822b8cf..3902cf299 100644 --- a/src/public/app/dialogs/protected_session.js +++ b/src/public/app/dialogs/protected_session.js @@ -12,7 +12,7 @@ export function show() { } export function close() { - // this may fal if the dialog has not been previously opened (not sure if still true with Bootstrap modal) + // this may fail if the dialog has not been previously opened (not sure if still true with Bootstrap modal) try { $dialog.modal('hide'); } diff --git a/src/public/app/services/protected_session.js b/src/public/app/services/protected_session.js index 120841183..8b5a33745 100644 --- a/src/public/app/services/protected_session.js +++ b/src/public/app/services/protected_session.js @@ -5,6 +5,7 @@ import ws from "./ws.js"; import appContext from "./app_context.js"; import froca from "./froca.js"; import utils from "./utils.js"; +import options from "./options.js"; let protectedSessionDeferred = null; @@ -18,6 +19,11 @@ async function leaveProtectedSession() { function enterProtectedSession() { const dfd = $.Deferred(); + if (!options.is("isPasswordSet")) { + import("../dialogs/password_not_set.js").then(dialog => dialog.show()); + return dfd; + } + if (protectedSessionHolder.isProtectedSessionAvailable()) { dfd.resolve(false); } diff --git a/src/public/app/services/root_command_executor.js b/src/public/app/services/root_command_executor.js index d3ac6f049..4aaf9d70c 100644 --- a/src/public/app/services/root_command_executor.js +++ b/src/public/app/services/root_command_executor.js @@ -53,8 +53,8 @@ export default class RootCommandExecutor extends Component { d.showDialog(branchIds); } - showOptionsCommand() { - import("../dialogs/options.js").then(d => d.showDialog()); + showOptionsCommand({openTab}) { + import("../dialogs/options.js").then(d => d.showDialog(openTab)); } showHelpCommand() { diff --git a/src/views/desktop.ejs b/src/views/desktop.ejs index bdf73d471..3390df93a 100644 --- a/src/views/desktop.ejs +++ b/src/views/desktop.ejs @@ -39,6 +39,7 @@ <%- include('dialogs/include_note.ejs') %> <%- include('dialogs/sort_child_notes.ejs') %> <%- include('dialogs/delete_notes.ejs') %> +<%- include('dialogs/password_not_set.ejs') %>