guest password protect
This commit is contained in:
@@ -1851,13 +1851,50 @@ export function startNoteEditor(adapter) {
|
||||
});
|
||||
const publishPageButton = document.querySelector("#publish-page");
|
||||
const pageSettings = document.querySelector(".page-settings");
|
||||
const setPagePasswordForm = document.querySelector("#set-page-password-form");
|
||||
const setPagePasswordInput = document.querySelector("#set-page-password");
|
||||
const setPagePasswordError = document.querySelector("#set-page-password-error");
|
||||
const setPagePasswordLabel = document.querySelector("#set-page-password-label");
|
||||
const setPagePasswordHelp = document.querySelector("#set-page-password-help");
|
||||
const pagePasswordRequirement = document.querySelector("#page-password-requirement");
|
||||
function updatePageControls() {
|
||||
const enabled = publicPageEnabled.checked;
|
||||
const passwordProtected = Boolean(info?.protected);
|
||||
const workspacePassword = adapter.passwordScope === "workspace";
|
||||
if (!passwordProtected) {
|
||||
publicPageEnabled.checked = false;
|
||||
unprotectPublicPage.checked = false;
|
||||
}
|
||||
const requirementText = workspacePassword
|
||||
? "Access to page options requires a password-protected workspace."
|
||||
: "Access to page options requires a password-protected note.";
|
||||
if (pagePasswordRequirement) {
|
||||
pagePasswordRequirement.textContent = requirementText;
|
||||
pagePasswordRequirement.hidden = passwordProtected;
|
||||
}
|
||||
if (setPagePasswordLabel) setPagePasswordLabel.textContent = workspacePassword ? "Set workspace password" : "Set password";
|
||||
if (setPagePasswordHelp) setPagePasswordHelp.textContent = workspacePassword ? "Protects the entire workspace. Minimum 8 characters." : "Minimum 8 characters.";
|
||||
const canSetPassword = !passwordProtected && Boolean(adapter.setPassword) && Boolean(info?.can_set_password);
|
||||
setPagePasswordForm.hidden = !canSetPassword;
|
||||
const enabled = passwordProtected && publicPageEnabled.checked;
|
||||
publicPageEnabled.disabled = !passwordProtected;
|
||||
publishPageButton.disabled = !enabled;
|
||||
publicTaskUpdates.disabled = !enabled;
|
||||
unprotectPublicPage.disabled = !enabled;
|
||||
pageSettings?.querySelector("summary")?.setAttribute(
|
||||
"aria-disabled",
|
||||
"false",
|
||||
);
|
||||
pageSettings?.classList.toggle("is-enabled", enabled);
|
||||
pageSettings?.querySelector("summary")?.setAttribute("title", enabled ? "Published page enabled" : "Published page disabled");
|
||||
pageSettings?.querySelector("summary")?.setAttribute(
|
||||
"title",
|
||||
!passwordProtected
|
||||
? canSetPassword
|
||||
? "Set a password before enabling the published page"
|
||||
: requirementText
|
||||
: enabled
|
||||
? "Published page enabled"
|
||||
: "Published page disabled",
|
||||
);
|
||||
}
|
||||
document.addEventListener("pointerdown", event => {
|
||||
const target = event.target instanceof Element ? event.target : null;
|
||||
@@ -1868,6 +1905,37 @@ export function startNoteEditor(adapter) {
|
||||
if (event.key === "Escape" && pageSettings?.open) pageSettings.open = false;
|
||||
if (event.key === "Escape" && mobileConnectionDetails?.open) mobileConnectionDetails.open = false;
|
||||
});
|
||||
setPagePasswordForm?.addEventListener("submit", async event => {
|
||||
event.preventDefault();
|
||||
if (!adapter.setPassword) return;
|
||||
const passwordValue = setPagePasswordInput.value;
|
||||
setPagePasswordError.textContent = "";
|
||||
if (passwordValue.length < 8) {
|
||||
setPagePasswordError.textContent = "Password must contain at least 8 characters.";
|
||||
return;
|
||||
}
|
||||
const submit = setPagePasswordForm.querySelector('button[type="submit"]');
|
||||
submit.disabled = true;
|
||||
try {
|
||||
await adapter.setPassword(passwordValue);
|
||||
const access = await adapter.requestAccess(passwordValue);
|
||||
setAccessToken(adapter.access.kind, adapter.access.key, access.granted);
|
||||
accessToken = getAccessToken(adapter.access.kind, adapter.access.key) || shareToken;
|
||||
password = "";
|
||||
setPagePasswordInput.value = "";
|
||||
await loadNoteInfo();
|
||||
resourceUnlocked = false;
|
||||
socket?.stop();
|
||||
loadFiles();
|
||||
connect();
|
||||
toast("Password set. Page options are now available.");
|
||||
} catch (error) {
|
||||
setPagePasswordError.textContent = error.message;
|
||||
} finally {
|
||||
submit.disabled = false;
|
||||
updatePageControls();
|
||||
}
|
||||
});
|
||||
const savePublicOptions = async () => adapter.publish(accessToken, publicTaskUpdates.checked, unprotectPublicPage.checked, publicPageEnabled.checked);
|
||||
publicPageEnabled.addEventListener("change", async () => {
|
||||
const previous = !publicPageEnabled.checked;
|
||||
|
||||
Reference in New Issue
Block a user