2024-06-02 11:01:10 +02:00
|
|
|
import type { Session } from "next-auth";
|
2024-03-25 18:57:59 +01:00
|
|
|
|
2024-08-04 21:44:51 +02:00
|
|
|
import { generateSecureRandomToken } from "@homarr/common/server";
|
2024-03-25 18:57:59 +01:00
|
|
|
import type { Database } from "@homarr/db";
|
2023-12-10 17:12:20 +01:00
|
|
|
|
2024-05-18 12:25:33 +02:00
|
|
|
import { getCurrentUserPermissionsAsync } from "./callbacks";
|
2024-05-04 18:34:41 +02:00
|
|
|
|
2024-10-07 21:13:15 +02:00
|
|
|
// Default of authjs
|
|
|
|
|
export const sessionTokenCookieName = "authjs.session-token";
|
2024-02-10 19:00:08 +01:00
|
|
|
|
2023-12-10 17:12:20 +01:00
|
|
|
export const expireDateAfter = (seconds: number) => {
|
|
|
|
|
return new Date(Date.now() + seconds * 1000);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const generateSessionToken = () => {
|
2024-08-04 21:44:51 +02:00
|
|
|
return generateSecureRandomToken(48);
|
2023-12-10 17:12:20 +01:00
|
|
|
};
|
2024-03-25 18:57:59 +01:00
|
|
|
|
2024-05-19 22:38:39 +02:00
|
|
|
export const getSessionFromTokenAsync = async (db: Database, token: string | undefined): Promise<Session | null> => {
|
2024-03-25 18:57:59 +01:00
|
|
|
if (!token) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const session = await db.query.sessions.findFirst({
|
|
|
|
|
where: ({ sessionToken }, { eq }) => eq(sessionToken, token),
|
|
|
|
|
columns: {
|
|
|
|
|
expires: true,
|
|
|
|
|
},
|
|
|
|
|
with: {
|
|
|
|
|
user: {
|
|
|
|
|
columns: {
|
|
|
|
|
id: true,
|
|
|
|
|
name: true,
|
|
|
|
|
email: true,
|
|
|
|
|
image: true,
|
2024-09-01 20:37:52 +02:00
|
|
|
colorScheme: true,
|
2024-03-25 18:57:59 +01:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!session) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
2024-05-04 18:34:41 +02:00
|
|
|
user: {
|
|
|
|
|
...session.user,
|
2024-05-18 12:25:33 +02:00
|
|
|
permissions: await getCurrentUserPermissionsAsync(db, session.user.id),
|
2024-05-04 18:34:41 +02:00
|
|
|
},
|
2024-03-25 18:57:59 +01:00
|
|
|
expires: session.expires.toISOString(),
|
|
|
|
|
};
|
|
|
|
|
};
|