From 2dfc16804aa8650e8ea35546511df659f9829318 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Thu, 5 Feb 2026 17:48:17 +0100 Subject: [PATCH] Supabase session --- src/modules/account/actions.ts | 10 +++++++ src/modules/account/core.ts | 52 ++++++++++++++++++++------------- src/modules/live-run/actions.ts | 7 +++++ src/modules/user/types.ts | 3 +- 4 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/modules/account/actions.ts b/src/modules/account/actions.ts index 4df0207..c9eb583 100644 --- a/src/modules/account/actions.ts +++ b/src/modules/account/actions.ts @@ -22,6 +22,16 @@ export async function signInWithGitHub(origin: string) { return redirect(data.url); } +export async function getSession() { + const supabase = await createClient(); + + try { + return await Core.getSession(supabase); + } catch { + return redirect("/login"); + } +} + export async function signOut() { const supabase = await createClient(); diff --git a/src/modules/account/core.ts b/src/modules/account/core.ts index 38c4a83..7d56432 100644 --- a/src/modules/account/core.ts +++ b/src/modules/account/core.ts @@ -4,6 +4,22 @@ import { SupabaseClient, User } from "@supabase/supabase-js"; import "server-only"; import { UserProfile } from "../user/types"; +export async function signInWithGitHub(supabase: SupabaseClient) { + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: "github", + options: { + redirectTo: `/auth/callback`, + }, + }); + + if (error) { + console.error(error); + throw error; + } + + return data.url; +} + export async function getProfile( supabase: SupabaseClient, user: User, @@ -36,10 +52,11 @@ export async function getGithubProfile( .from("profiles") .insert({ id: user.id, - username: user.user_metadata.login || null, - full_name: user.user_metadata.name || null, + username: user.user_metadata.user_name || `user_${user.id.slice(0, 6)}`, avatar_url: user.user_metadata.avatar_url || null, - }) + bio: "", + created_at: new Date(), + } satisfies UserProfile) .select() .single(); @@ -52,33 +69,26 @@ export async function getSession( supabase: SupabaseClient, ): Promise<[User, UserProfile]> { const { - data: { session }, + data: { user }, error: sessionError, - } = await supabase.auth.getSession(); + } = await supabase.auth.getUser(); - if (sessionError || !session?.user) { + if (sessionError || !user) { throw new Error("No authenticated user found"); } - const user = session.user; - const profile = await getProfile(supabase, user); return [user, profile]; } -export async function signInWithGitHub(supabase: SupabaseClient) { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: "github", - options: { - redirectTo: `/auth/callback`, - }, - }); - - if (error) { - console.error(error); - throw error; +export async function getSessionRedirect( + supabase: SupabaseClient, + redirect: (s: string) => void, +): Promise<[User, UserProfile] | undefined> { + try { + return await getSession(supabase); + } catch { + redirect("/login"); } - - return data.url; } diff --git a/src/modules/live-run/actions.ts b/src/modules/live-run/actions.ts index 221d8eb..daf80a1 100644 --- a/src/modules/live-run/actions.ts +++ b/src/modules/live-run/actions.ts @@ -1,9 +1,16 @@ "use server"; +import { createClient } from "@/lib/supabase/server"; +import { getSession, getSessionRedirect } from "../account/core"; import * as Core from "./core"; import { Run } from "./types"; +import { redirect } from "next/navigation"; export async function getLiveRuns(): Promise { + const supabase = await createClient(); + + const _ = await getSession(supabase); + return [ { id: 1, diff --git a/src/modules/user/types.ts b/src/modules/user/types.ts index 4e35545..39d5758 100644 --- a/src/modules/user/types.ts +++ b/src/modules/user/types.ts @@ -1,6 +1,7 @@ export interface UserProfile { id: string; username: string; - full_name: string; avatar_url: string; + bio: string; + created_at: Date; }