diff --git a/src/hooks.server.ts b/src/hooks.server.ts index cf8f287..8223b38 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,40 +1,43 @@ -import { db } from '$lib/server/db'; -import { sessionsTable } from '$lib/server/db/schema'; -import { eq } from 'drizzle-orm'; -import { redirect, type Handle } from '@sveltejs/kit'; +import { redirect, type Handle, type HandleFetch } from '@sveltejs/kit'; export const handle: Handle = async ({ event, resolve }) => { - const sessionId = event.cookies.get('session_id'); - let user = { - isLoggedIn: false, - email: "", - username: "" - }; + const sessionId = event.cookies.get('session_id'); + let user = { + isLoggedIn: false, + email: '', + username: '' + }; - if (sessionId) { - const session = await db.query.sessionsTable.findFirst({ - with: { - user: true - }, - where: eq(sessionsTable.id, sessionId) - }); + if (sessionId) { + const response = await fetch('http://localhost/api/user/me', { + headers: { + 'Content-Type': 'application/json' + } + }); + console.log(response.status); + console.log(JSON.stringify(response)); - if (session && session.user && session.user.email) { - user = { - isLoggedIn: true, - email: session.user.email, - username: session.user.username || "Unknown username" - }; - } - } + if (response.status >= 200 && response.status < 300) { + const uBody = await response.json(); + user = { + isLoggedIn: true, + email: uBody.email, + username: uBody.display_name || 'Unknown username' + }; + } + } - if (event.url.pathname.startsWith("/private") && !user.isLoggedIn) { - redirect(307, "/error"); - } else if (event.url.pathname.startsWith("/api") && !user.isLoggedIn) { - return new Response(null, { status: 401 }); - } + if (event.url.pathname.startsWith('/private') && !user.isLoggedIn) { + redirect(307, '/error'); + } else if (event.url.pathname.startsWith('/api') && !user.isLoggedIn) { + return new Response(null, { status: 401 }); + } - event.locals.user = user; - const response = await resolve(event); - return response; -} + event.locals.user = user; + const response = await resolve(event); + return response; +}; + +// export const handleFetch: HandleFetch = async({request, fetch}) => { +// if (request.url +// } diff --git a/src/lib/server/auth/spotify.ts b/src/lib/server/auth/spotify.ts deleted file mode 100644 index 07b81ce..0000000 --- a/src/lib/server/auth/spotify.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { env } from "$env/dynamic/public"; - -export const generateRandomString = (length: number) => { - const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - const values = crypto.getRandomValues(new Uint8Array(length)); - return values.reduce((acc, x) => acc + possible[x % possible.length], ""); -} - -export const sha256 = async (plain: string) => { - const encoder = new TextEncoder() - const data = encoder.encode(plain) - return crypto.subtle.digest('SHA-256', data) -} - -export const base64encode = (input: ArrayBuffer) => { - return btoa(String.fromCharCode(...new Uint8Array(input))) - .replace(/=/g, '') - .replace(/\+/g, '-') - .replace(/\//g, '_'); -} - -export const getToken = async (code: string, codeVerifier: string) => { - const url = "https://accounts.spotify.com/api/token"; - const payload = { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: new URLSearchParams({ - client_id: env.PUBLIC_CLIENT_ID, - grant_type: 'authorization_code', - code, - redirect_uri: env.PUBLIC_REDIRECT_URI, - code_verifier: codeVerifier - }) - }; - - const body = await fetch(url, payload); - const response = await body.json(); - - return response; -} - diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts deleted file mode 100644 index b3c877b..0000000 --- a/src/lib/server/db/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { drizzle } from 'drizzle-orm/better-sqlite3'; -import Database from 'better-sqlite3'; -import * as schema from './schema'; -import { env } from '$env/dynamic/private'; - -if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set'); - -const client = new Database(env.DATABASE_URL); - -export const db = drizzle(client, { schema }); diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts deleted file mode 100644 index 6b88ee5..0000000 --- a/src/lib/server/db/schema.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { sqliteTable, integer, text, type AnySQLiteColumn, primaryKey } from 'drizzle-orm/sqlite-core'; - -export const usersTable = sqliteTable('users', { - email: text('email').primaryKey(), - username: text('username'), -}); - -export const sessionsTable = sqliteTable('sessions', { - id: text('id').primaryKey(), - accessToken: text('access_token'), - refreshToken: text('refresh_token'), - userEmail: text('user_email').references((): AnySQLiteColumn => usersTable.email) -}); - -export const sessionsRelations = relations(sessionsTable, ({ one }) => ({ - user: one(usersTable, { fields: [sessionsTable.userEmail], references: [usersTable.email] }) -})) - -export const userRelations = relations(usersTable, ({ one, many }) => ({ - session: one(sessionsTable), - usersInLobby: many(usersInLobby) -})); - -export const lobbysTable = sqliteTable('lobbys', { - id: integer('id').primaryKey({ autoIncrement: true }), - hostEmail: text('host_email').references((): AnySQLiteColumn => usersTable.email), -}); - -export const lobbysRelations = relations(lobbysTable, ({ many }) => ({ - usersInLobby: many(usersInLobby) -})); - -export const usersInLobby = sqliteTable('user_in_lobby', { - userEmail: text('user_email').notNull().references((): AnySQLiteColumn => usersTable.email), - lobbyId: integer('lobby_id').notNull().references((): AnySQLiteColumn => lobbysTable.id) -}, (t) => [ - primaryKey({ columns: [t.userEmail, t.lobbyId] }) -]) - -export const usersToLobbysRelations = relations(usersInLobby, ({ one }) => ({ - lobby: one(lobbysTable, { - fields: [usersInLobby.lobbyId], - references: [lobbysTable.id] - }), - user: one(usersTable, { - fields: [usersInLobby.userEmail], - references: [usersTable.email] - }) -})); - -export const states = sqliteTable('auth_states', { - id: text('id').primaryKey(), - codeVerifier: text('code_verifier').notNull() -}) \ No newline at end of file diff --git a/src/lib/server/spotify/base.ts b/src/lib/server/spotify/base.ts deleted file mode 100644 index 27597f8..0000000 --- a/src/lib/server/spotify/base.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const getJson = async (accessToken: string, subUri: string) => { - const baseUrl = new URL("https://api.spotify.com/"); - const requestUrl = new URL(subUri, baseUrl); - - const response = await fetch(requestUrl, { - method: 'GET', - headers: { - "Authorization": `Bearer ${accessToken}` - } - }) - - if (!response.ok) { - console.log(response) - return null - } - - return response -} \ No newline at end of file diff --git a/src/lib/server/spotify/users.ts b/src/lib/server/spotify/users.ts deleted file mode 100644 index 0cd5473..0000000 --- a/src/lib/server/spotify/users.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { redirect } from "@sveltejs/kit"; -import { getJson } from "./base" - -export const getCurrentUserProfile = async (accessToken: string) => { - const response = await getJson(accessToken, "/v1/me"); - if (!response) { - redirect(307, "/error") - } - - return await response.json() -} \ No newline at end of file