Foxnouns.NET/Foxnouns.Frontend/src/routes/auth/log-in/+page.server.ts

79 lines
2.2 KiB
TypeScript

import { isRedirect, redirect } from "@sveltejs/kit";
import { apiRequest } from "$api";
import type { AuthResponse, AuthUrls } from "$api/models/auth";
import { setToken } from "$lib";
import ApiError, { ErrorCode } from "$api/error";
export const load = async ({ fetch, parent }) => {
const parentData = await parent();
if (parentData.meUser) redirect(303, `/@${parentData.meUser.username}`);
const urls = await apiRequest<AuthUrls>("POST", "/auth/urls", { fetch, isInternal: true });
return { urls };
};
export const actions = {
login: async ({ request, fetch, cookies }) => {
const body = await request.formData();
const email = body.get("email") as string | null;
const password = body.get("password") as string | null;
try {
const resp = await apiRequest<AuthResponse>("POST", "/auth/email/login", {
body: { email, password },
fetch,
isInternal: true,
});
setToken(cookies, resp.token);
redirect(303, `/@${resp.user.username}`);
} catch (e) {
if (isRedirect(e)) throw e;
if (e instanceof ApiError) return { error: e.obj };
throw e;
}
},
fediToggle: () => {
return { error: null, showFediBox: true };
},
fedi: async ({ request, fetch }) => {
const body = await request.formData();
const instance = body.get("instance") as string | null;
if (!instance) return { error: new ApiError(undefined, ErrorCode.BadRequest).obj };
try {
const resp = await apiRequest<{ url: string }>(
"GET",
`/auth/fediverse?instance=${encodeURIComponent(instance)}`,
{ fetch, isInternal: true },
);
redirect(303, resp.url);
} catch (e) {
if (isRedirect(e)) throw e;
if (e instanceof ApiError) return { error: e.obj };
throw e;
}
},
fediForceRefresh: async ({ request, fetch }) => {
const body = await request.formData();
const instance = body.get("instance") as string | null;
if (!instance) return { error: new ApiError(undefined, ErrorCode.BadRequest).obj };
try {
const resp = await apiRequest<{ url: string }>(
"GET",
`/auth/fediverse?instance=${encodeURIComponent(instance)}&force-refresh=true`,
{ fetch, isInternal: true },
);
redirect(303, resp.url);
} catch (e) {
if (isRedirect(e)) throw e;
if (e instanceof ApiError) return { error: e.obj };
throw e;
}
},
};