This commit is contained in:
Jesse Winton
2025-05-07 16:09:04 -04:00
parent a38fd71fc7
commit 2cc5856183
14 changed files with 194 additions and 204 deletions

View File

@@ -3,8 +3,12 @@ import redirects from './redirects.json';
import { sequence } from '@sveltejs/kit/hooks';
import { BANNER_KEY } from '$lib/constants';
import { dev } from '$app/environment';
import { cookieKey, getInitUser } from '$routes/(init)/init/(utils)/auth';
import { createInitSessionClient } from '$routes/(init)/init/(utils)/appwrite';
import { type GithubUser } from '$routes/(init)/init/(utils)/auth';
import {
createInitServerClient,
createInitSessionClient
} from '$routes/(init)/init/(utils)/appwrite';
import type { AppwriteUser } from '$lib/utils/console';
const redirectMap = new Map(redirects.map(({ link, redirect }) => [link, redirect]));
@@ -126,10 +130,69 @@ const bannerRewriter: Handle = async ({ event, resolve }) => {
};
const initSession: Handle = async ({ event, resolve }) => {
const { account } = createInitSessionClient(event.cookies);
const session = await createInitSessionClient(event.cookies);
if (!session) {
const response = await resolve(event);
return response;
}
const getGithubUser = async () => {
try {
const identitiesList = await session.account.listIdentities();
console.log({ identitiesList });
if (!identitiesList.total) return null;
const identity = identitiesList.identities[0];
const { providerAccessToken, provider, providerEmail } = identity;
if (provider !== 'github') return null;
const res = await fetch('https://api.github.com/user', {
method: 'GET',
headers: {
Authorization: `Bearer ${providerAccessToken}`
}
})
.then((res) => {
return res.json() as Promise<GithubUser>;
})
.then((user) => ({
login: user.login,
name: user.name,
email: providerEmail,
avatar_url: user.avatar_url
}));
if (!res.login) {
await session.account.deleteSession('current');
return null;
}
return res;
} catch (e) {
console.error(e);
return null;
}
};
const getAppwriteUser = async (): Promise<AppwriteUser | null> => {
const appwriteUser = await session.account
.get()
.then((res) => res)
.catch((e) => null);
return appwriteUser;
};
const getInitUser = async () => {
const [github, appwrite] = await Promise.all([getGithubUser(), getAppwriteUser()]);
return { github, appwrite };
};
event.locals.initSession = await session?.account.get();
event.locals.initUser = await getInitUser();
event.locals.initSession = await account.get();
const response = await resolve(event);