aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/settings/delete/+page.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/(app)/settings/delete/+page.server.ts')
-rw-r--r--src/routes/(app)/settings/delete/+page.server.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/routes/(app)/settings/delete/+page.server.ts b/src/routes/(app)/settings/delete/+page.server.ts
new file mode 100644
index 00000000..05f4f026
--- /dev/null
+++ b/src/routes/(app)/settings/delete/+page.server.ts
@@ -0,0 +1,26 @@
+import { auth, post } from "$lib/utils";
+import { fail, redirect } from "@sveltejs/kit";
+
+export async function load({ parent, url }) {
+ const { user } = await parent();
+ if (!user) redirect(307, `/login?redirect=${encodeURIComponent(url.pathname)}`);
+}
+
+export const actions = {
+ default: async ({ cookies, request }) => {
+ const form = await request.formData();
+ const confirm = String(form.get("confirm") || "");
+ const pin = String(form.get("pin") || "");
+
+ try {
+ // The server wipes everything (lib/deluser), including disabling the
+ // account's bolt12 offers, and refuses while a real balance remains.
+ await post("/delete", { confirm, ...(pin ? { pin } : {}) }, auth(cookies));
+ } catch (e) {
+ return fail(400, { error: e?.message || String(e), confirm });
+ }
+
+ // The account is gone; /logout clears the session cookies.
+ redirect(303, "/logout");
+ },
+};