47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { serverSupabaseClient } from "../../utils/useSupabase";
|
|
import { getProfile } from "../../db/profile";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { username, password } = await readBody(event);
|
|
|
|
if (!username || !password) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
message: "username und password erforderlich",
|
|
});
|
|
}
|
|
|
|
const email = `${username.toLowerCase()}@rebreak.internal`;
|
|
const supabase = serverSupabaseClient(event);
|
|
|
|
const { data, error } = await supabase.auth.signInWithPassword({
|
|
email,
|
|
password,
|
|
});
|
|
if (error) throw createError({ statusCode: 401, message: error.message });
|
|
|
|
const dbProfile = await getProfile(data.user.id);
|
|
|
|
return {
|
|
session: {
|
|
access_token: data.session.access_token,
|
|
refresh_token: data.session.refresh_token,
|
|
expires_at: data.session.expires_at,
|
|
},
|
|
profile: {
|
|
id: data.user.id,
|
|
email: data.user.email ?? "",
|
|
username: dbProfile?.username ?? "",
|
|
nickname: dbProfile?.nickname ?? null,
|
|
avatar: dbProfile?.avatar ?? null,
|
|
plan: (dbProfile?.plan === "premium"
|
|
? "legend"
|
|
: dbProfile?.plan === "standard"
|
|
? "pro"
|
|
: dbProfile?.plan ?? "free") as "free" | "pro" | "legend",
|
|
streak: dbProfile?.streak ?? 0,
|
|
created_at: dbProfile?.createdAt?.toISOString() ?? data.user.created_at,
|
|
},
|
|
};
|
|
});
|