also moves the registration form found on the mastodon callback page into a component so we're not repeating the same code for every auth method
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { apiRequest } from "$api";
|
|
import ApiError, { ErrorCode, type RawApiError } from "$api/error";
|
|
import type { AuthResponse } from "$api/models/auth";
|
|
import { setToken } from "$lib";
|
|
import log from "$lib/log";
|
|
import { isRedirect, redirect, type RequestEvent } from "@sveltejs/kit";
|
|
|
|
export default function createRegisterAction(callbackUrl: string) {
|
|
return async function ({ request, fetch, cookies }: RequestEvent) {
|
|
const data = await request.formData();
|
|
const username = data.get("username") as string | null;
|
|
const ticket = data.get("ticket") as string | null;
|
|
|
|
if (!username || !ticket)
|
|
return {
|
|
error: { message: "Bad request", code: ErrorCode.BadRequest, status: 403 } as RawApiError,
|
|
};
|
|
|
|
try {
|
|
const resp = await apiRequest<AuthResponse>("POST", callbackUrl, {
|
|
body: { username, ticket },
|
|
isInternal: true,
|
|
fetch,
|
|
});
|
|
|
|
setToken(cookies, resp.token);
|
|
redirect(303, "/auth/welcome");
|
|
} catch (e) {
|
|
if (isRedirect(e)) throw e;
|
|
log.error("Could not sign up user with username %s:", username, e);
|
|
if (e instanceof ApiError) return { error: e.obj };
|
|
throw e;
|
|
}
|
|
};
|
|
}
|