SSL-Sniffer/src/lib/classes/appdata.ts

79 lines
1.9 KiB
TypeScript
Raw Normal View History

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";
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) {
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")
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
)
}
public toString() {
return `User:\t${this.user}\nSession:\t${this.session}`
}
2025-06-30 11:55:44 +00:00
}