From 3eee0c189e3769e5192db90c2eaa9eec69ddfbbe Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Mon, 3 Mar 2025 21:08:41 +0100 Subject: [PATCH] Add password reset form --- src/back/routes/admin/password.form.ts | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/back/routes/admin/password.form.ts diff --git a/src/back/routes/admin/password.form.ts b/src/back/routes/admin/password.form.ts new file mode 100644 index 0000000..d6a7757 --- /dev/null +++ b/src/back/routes/admin/password.form.ts @@ -0,0 +1,61 @@ +import type { Context } from "koa"; +import type { FormData } from "@sealcode/sealgen"; +import { Form, Controls, fieldsToShape } from "@sealcode/sealgen"; +import html from "../../html.js"; + +import { Fields } from "@sealcode/sealgen"; + +export const actionName = "ResetPassword"; + +const fields = { + password: new Fields.SimpleFormField(true), +}; + +export const ResetPasswordShape = fieldsToShape(fields); + +export default new (class ResetPasswordForm extends Form { + defaultSuccessMessage = "Formularz wypełniony poprawnie"; + fields = fields; + + controls = [ + new Controls.SimpleInput(fields.password, { + label: "Password:", + type: "password", + }), + ]; + + async onSubmit(ctx: Context) { + const { password } = await this.getParsedValues(ctx); + const user_id = ctx.$context.user_id; + if (!user_id) { + throw new Error("Not logged in"); + } + const user = await ctx.$app.collections.users.getByID(ctx.$context, user_id); + user.set("password", password); + await user.save(new ctx.$app.SuperContext()); + return; + } + + async onSuccess() { + return { + action: "stay", + content: "Password changed", + messages: [], + }; + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async canAccess(ctx: Context) { + return { canAccess: !!ctx.$context.user_id, message: "Not logged in" }; + } + + async render(ctx: Context, data: FormData, show_field_errors: boolean) { + return html({ + ctx, + title: "Form", + description: "", + css_clumps: ["admin-forms"], + body: (await super.render(ctx, data, show_field_errors)) as string, + }); + } +})();