Files
pocketbase/ui/src/collections/tokenOptionsAccordion.js
2026-04-18 22:11:58 +03:00

79 lines
3.1 KiB
JavaScript

export function tokenOptionsAccordion(collection) {
const uniqueId = "token_" + app.utils.randomString();
const data = store({
get tokensList() {
if (collection?.name === "_superusers") {
return [
{ key: "authToken", label: "Auth" },
{ key: "passwordResetToken", label: "Password reset" },
{ key: "fileToken", label: "Protected file" },
];
}
return [
{ key: "authToken", label: "Auth" },
{ key: "verificationToken", label: "Email verification" },
{ key: "passwordResetToken", label: "Password reset" },
{ key: "emailChangeToken", label: "Email change" },
{ key: "fileToken", label: "Protected file" },
];
},
});
return t.details(
{
pbEvent: "tokenOptionsAccordion",
name: "other",
className: "accordion token-options-accordion",
},
t.summary(
null,
t.i({ className: "ri-key-2-line", ariaHidden: true }),
t.span({ className: "txt", textContent: "Token options (invalidate, duration)" }),
),
t.div({ className: "grid sm" }, () => {
return data.tokensList.map((token) => {
const fieldId = uniqueId + token.key;
return t.div(
{ className: "col-sm-6" },
t.div(
{ className: "field token-field" },
t.label({
htmlFor: fieldId,
textContent: () => token.label + " duration (in seconds)",
}),
t.input({
id: fieldId,
type: "number",
min: 1,
step: 1,
required: true,
name: () => token.key + ".duration",
value: () => collection[token.key].duration,
oninput: (e) => (collection[token.key].duration = parseInt(e.target.value, 10)),
}),
),
t.div(
{ className: "field-help m-b-10" },
t.button({
type: "button",
className: () => `link-hint ${collection[token.key].secret ? "txt-success" : ""}`,
textContent: "Invalidate all previously issued tokens",
onclick: () => {
// toggle
if (collection[token.key].secret) {
delete collection[token.key].secret;
} else {
collection[token.key].secret = app.utils.randomSecret(50);
}
},
}),
),
);
});
}),
);
}