diff --git a/assets/icons/change_email.svg b/assets/icons/change_email.svg new file mode 100644 index 0000000..e63ad5e --- /dev/null +++ b/assets/icons/change_email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/disconnect_email.svg b/assets/icons/disconnect_email.svg new file mode 100644 index 0000000..51a9f27 --- /dev/null +++ b/assets/icons/disconnect_email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/server/routes/authRoutes.ts b/src/server/routes/authRoutes.ts index ae3fc87..12e7cf7 100644 --- a/src/server/routes/authRoutes.ts +++ b/src/server/routes/authRoutes.ts @@ -314,6 +314,17 @@ authRoutes.get("/confirm_email/:code", requiresAccount, (req,res) => { } }) +authRoutes.post("/remove_email", requiresAccount, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (acc.email) { + delete acc.email; + Accounts.save() + res.send("email detached") + } + else ServeError(res, 400, "email not attached") +}) + let pwReset = new Map() let prcIdx = new Map() diff --git a/src/svelte/elem/prompts/account.js b/src/svelte/elem/prompts/account.js index 940f830..27e5f31 100644 --- a/src/svelte/elem/prompts/account.js +++ b/src/svelte/elem/prompts/account.js @@ -115,6 +115,39 @@ export function forgotPassword(optPicker) { }) } +export function emailPotentialRemove(optPicker) { + optPicker.picker("What would you like to do?",[ + { + name: "Set a new email", + icon: "/static/assets/icons/change_email.svg", + description: "", + id: "set" + }, + { + name: "Disconnect email", + icon: "/static/assets/icons/disconnect_email.svg", + description: "", + id: "disconnect" + } + ]).then((exp) => { + if (exp && exp.selected) { + switch (exp.selected) { + case "set": + emailChange(optPicker); + break + case "disconnect": + fetch("/auth/remove_email", {method: "POST"}).then((response) => { + if (response.status != 200) { + optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) + } + + fetchAccountData() + }) + } + } + }) +} + export function emailChange(optPicker) { optPicker.picker("Change email",[ { diff --git a/src/svelte/elem/pulldowns/Accounts.svelte b/src/svelte/elem/pulldowns/Accounts.svelte index c40719b..f5baede 100644 --- a/src/svelte/elem/pulldowns/Accounts.svelte +++ b/src/svelte/elem/pulldowns/Accounts.svelte @@ -131,7 +131,7 @@

Change username

-