UNPKG

@paroicms/server

Version:
68 lines 2.1 kB
import { ApiError } from "@paroicms/public-server-lib"; import { type } from "arktype"; import { hashPassword } from "../../helpers/passwordEncrypt-helper.js"; export async function updateAccountPassword(siteContext, payload) { const account = await getAccount(siteContext, payload.accountId); if (account.passwordResetToken !== payload.resetToken) { throw new ApiError("Invalid reset token", 400); } const passwordHash = await hashPassword(payload.password); await siteContext .cn("PaAccount") .update({ passwordHash, passwordResetToken: null, }) .where("id", account.id); } export async function checkAccountPasswordReset(siteContext, payload) { const account = await getAccount(siteContext, payload.accountId); if (account.passwordResetToken !== payload.resetToken) { return { authorized: false, }; } return { authorized: true, email: account.email, name: account.name, }; } const PasswordResetAccountRowAT = type({ id: "number", email: "string", name: "string|null", preferences: "string|null", passwordHash: "string|null", passwordResetToken: "string|null", active: "0|1", "+": "reject", }).pipe((data) => ({ id: String(data.id), email: data.email, name: data.name ?? undefined, preferences: data.preferences ?? undefined, passwordHash: data.passwordHash ?? undefined, passwordResetToken: data.passwordResetToken ?? undefined, active: data.active === 1, })); async function getAccount(siteContext, id) { const found = await siteContext .cn("PaAccount as a") .select([ "a.id", "a.email", "a.name", "a.preferences", "a.passwordHash", "a.passwordResetToken", "a.active", ]) .where("a.id", id) .first(); if (!found) { throw new ApiError(`Not found account with id:'${id}'`, 400); } return PasswordResetAccountRowAT.assert(found); } //# sourceMappingURL=password-reset.service.js.map