51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import {discordAvatarURL} from '$lib/server/auth/discord';
|
|
import {getDataSource} from '$lib/server/db';
|
|
import {AuthSession} from '$lib/server/entity/AuthSession';
|
|
|
|
import type {LayoutServerLoad} from './$types';
|
|
|
|
async function findSession (sessionID?: string) {
|
|
const dataSource = await getDataSource();
|
|
const sessionsRepo = dataSource.getRepository(AuthSession);
|
|
|
|
if (!sessionID) { return null; }
|
|
return await sessionsRepo.findOne({where: {id: sessionID}});
|
|
}
|
|
|
|
export const load: LayoutServerLoad = async ({cookies}) => {
|
|
const sessionID = cookies.get('sessionid');
|
|
let session = await findSession(sessionID);
|
|
if (!session) {
|
|
return {};
|
|
}
|
|
console.log('i am happening');
|
|
|
|
const response = await fetch('https://discordapp.com/api/v6/users/@me', {
|
|
headers: {
|
|
Authorization: `Bearer ${session.accessToken}`,
|
|
},
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
console.log(await response.text());
|
|
return {
|
|
error: {
|
|
code: 'user_info_fetch_failed',
|
|
description:
|
|
`Discord gave non-200 status when fetching user info: ${response.status}`,
|
|
},
|
|
};
|
|
}
|
|
|
|
const data = await response.json();
|
|
console.log('have data', data.username);
|
|
|
|
return {
|
|
user: {
|
|
username: data.username,
|
|
discriminator: data.discriminator,
|
|
id: data.id,
|
|
avatarURL: discordAvatarURL(data),
|
|
},
|
|
};
|
|
};
|