import type { RequestHandler } from "./$types" import { json, error } from "@sveltejs/kit" import UserMgmt from "$lib/server/usermgmt" import Util from "$lib/util" import { DuplicateError, RegisterResponseCause } from "$lib/errors" export const POST: RequestHandler = async ({ request }) => { const data = await request.formData() const email = data.get("email") const password = data.get("password") const display_name = data.get("display_name") if (data.keys.length > 3 || !(typeof email === "string" && typeof password === "string" && typeof display_name === "string")) { return error(400, { cause: RegisterResponseCause.MalformedRequest, message: "Invalid field arguments" }) } if (email.length == 0) { return error(400, { cause: RegisterResponseCause.EmailLength, message: "email must not be empty" }) } if (password.length == 0) { return error(400, { cause: RegisterResponseCause.PasswordLength, message: "password must not be empty" }) } if (display_name.length == 0) { return error(400, { cause: RegisterResponseCause.DisplayNameLength, message: "Display name must not be empty" }) } if (!Util.check_email_format(email)) { return error(400, { cause: RegisterResponseCause.EmailFormat, message: "invalid email format" }) } try { const user = await UserMgmt.register(email, password, display_name) } catch (e) { if (e instanceof DuplicateError) { if (e.fields.includes("email")) { return error(409, { cause: RegisterResponseCause.EmailDuplicate, message: "email already in use" }) } } return error(500, { cause: RegisterResponseCause.Server, message: "Server failed to create user"}) } return json({}) }