2025-06-30 11:55:44 +00:00
|
|
|
import type { Cookies } from "@sveltejs/kit";
|
|
|
|
|
import { SessionApp, type Session } from "./sessions";
|
|
|
|
|
import { UserApp, type User } from "./users";
|
2025-06-30 20:05:28 +00:00
|
|
|
import { JoseApp } from "$lib/utils/jtw-utils";
|
|
|
|
|
import { logger } from "$lib/utils/logger";
|
2025-07-01 17:59:23 +00:00
|
|
|
import { SESSION_COOKIE_NAME } from "$lib/utils/constants";
|
2025-06-30 11:55:44 +00:00
|
|
|
|
|
|
|
|
export class AppData {
|
|
|
|
|
|
|
|
|
|
public session: Session
|
|
|
|
|
public user: User
|
|
|
|
|
|
|
|
|
|
public constructor(
|
|
|
|
|
session: Session,
|
|
|
|
|
user: User
|
|
|
|
|
) {
|
|
|
|
|
this.session = session
|
|
|
|
|
this.user = user
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async toCookie() {
|
|
|
|
|
|
2025-06-30 20:05:28 +00:00
|
|
|
const signedSession = await JoseApp.signObject({token: this.session.sessionToken})
|
2025-06-30 11:55:44 +00:00
|
|
|
const encodedSession = btoa(signedSession)
|
|
|
|
|
|
|
|
|
|
return encodedSession
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static async extractAppDataFromCookies(cookies: Cookies) {
|
|
|
|
|
|
2025-07-01 17:59:23 +00:00
|
|
|
const encodedSessionToken = cookies.get(SESSION_COOKIE_NAME)
|
2025-06-30 11:55:44 +00:00
|
|
|
|
2025-06-30 20:05:28 +00:00
|
|
|
logger.debug(`Session Cookie: ${encodedSessionToken}`, "APP Session Building 1")
|
|
|
|
|
|
2025-06-30 11:55:44 +00:00
|
|
|
if (!encodedSessionToken) {
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const decodedSessionToken = atob(encodedSessionToken)
|
|
|
|
|
|
2025-06-30 20:05:28 +00:00
|
|
|
logger.debug(`Session Cookie: ${decodedSessionToken}`, "APP Session Building 2")
|
|
|
|
|
|
2025-07-01 17:59:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
const candidateToken = (await JoseApp.verifyObject(decodedSessionToken))
|
|
|
|
|
|
|
|
|
|
if (!candidateToken) {
|
|
|
|
|
cookies.delete(SESSION_COOKIE_NAME, {
|
|
|
|
|
path: "/"
|
|
|
|
|
})
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const sessionToken : string = candidateToken.token
|
2025-06-30 20:05:28 +00:00
|
|
|
|
|
|
|
|
logger.debug(`Session Token: ${sessionToken}`, "APP Session Building 3")
|
2025-06-30 11:55:44 +00:00
|
|
|
|
|
|
|
|
const session = SessionApp.getSessionFromToken(sessionToken)
|
|
|
|
|
|
|
|
|
|
if (!session) {
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const user = UserApp.getUserFromSession(
|
|
|
|
|
session
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return new AppData(
|
|
|
|
|
session,
|
|
|
|
|
user
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-01 17:59:23 +00:00
|
|
|
public toString() {
|
|
|
|
|
return `User:\t${this.user}\nSession:\t${this.session}`
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-30 11:55:44 +00:00
|
|
|
}
|