diff --git a/src/server/routes/adminRoutes.ts b/src/server/routes/adminRoutes.ts index 8697905..ffb7087 100644 --- a/src/server/routes/adminRoutes.ts +++ b/src/server/routes/adminRoutes.ts @@ -33,4 +33,30 @@ adminRoutes.post("/manage", parser, (req,res) => { if (!acc) return if (!acc.admin) return +}) + +adminRoutes.post("/reset", parser, (req,res) => { + + if (!auth.validate(req.cookies.auth)) { + ServeError(res, 401, "not logged in") + return + } + + let acc = Accounts.getFromToken(req.cookies.auth) as Accounts.Account + + if (!acc) return + if (!acc.admin) return + if (typeof req.body.target !== "string" || typeof req.body.password !== "string" || !req.body.password) { + res.status(404) + return + } + + let targetAccount = Accounts.getFromUsername(req.body.target) + if (!targetAccount) { + res.status(404) + return + } + + Accounts.password.set ( targetAccount.id, req.body.password ) + }) \ No newline at end of file diff --git a/src/svelte/elem/prompts/admin.js b/src/svelte/elem/prompts/admin.js new file mode 100644 index 0000000..93c97d3 --- /dev/null +++ b/src/svelte/elem/prompts/admin.js @@ -0,0 +1,40 @@ +import { fetchAccountData, fetchFilePointers, account } from "../stores.mjs" +import { get } from "svelte/store"; + +export function pwdReset(optPicker) { + optPicker.picker("Reset password",[ + { + name: "Target user", + icon: "/static/assets/icons/person.svg", + id: "target", + inputSettings: {} + }, + { + name: "New password", + icon: "/static/assets/icons/change_password.svg", + id: "password", + inputSettings: { + password: true + } + }, + { + name: "Update password", + icon: "/static/assets/icons/update.svg", + description: "This will log the target user out of all sessions", + id: true + } + ]).then((exp) => { + if (exp && exp.selected) { + fetch(`/admin/reset`,{method:"POST", body:JSON.stringify({ + target: exp.target, + password:exp.password + })}).then((response) => { + + if (response.status != 200) { + optPicker.picker(`${response.status} ${response.statusText}`,[]) + } + + }) + } + }) +} \ No newline at end of file diff --git a/src/svelte/elem/pulldowns/Accounts.svelte b/src/svelte/elem/pulldowns/Accounts.svelte index ef25c2e..2b44a74 100644 --- a/src/svelte/elem/pulldowns/Accounts.svelte +++ b/src/svelte/elem/pulldowns/Accounts.svelte @@ -7,6 +7,7 @@ import OptionPicker from "../prompts/OptionPicker.svelte"; import * as accOpts from "../prompts/account"; import * as uplOpts from "../prompts/uploads"; + import * as admOpts from "../prompts/admin"; let targetAction let inProgress @@ -185,7 +186,7 @@

Delete user account

-