Files
Homarr/packages/auth/session.ts
Meier Lukas b1e065f1da feat: board access group permissions (#422)
* fix: cache is not exportet from react

* fix: format issue

* wip: add usage of group permissions

* feat: show inherited groups and add manage group

* refactor: improve board access management

* chore: address pull request feedback

* fix: type issues

* fix: migrations

* test: add unit tests for board permissions, permissions and board router

* test: add unit tests for board router and get current user permissions method

* fix: format issues

* fix: deepsource issue
2024-05-04 18:34:41 +02:00

56 lines
1.2 KiB
TypeScript

import { randomUUID } from "crypto";
import type { Session } from "next-auth";
import type { Database } from "@homarr/db";
import { getCurrentUserPermissions } from "./callbacks";
export const sessionMaxAgeInSeconds = 30 * 24 * 60 * 60; // 30 days
export const sessionTokenCookieName = "next-auth.session-token";
export const expireDateAfter = (seconds: number) => {
return new Date(Date.now() + seconds * 1000);
};
export const generateSessionToken = () => {
return randomUUID();
};
export const getSessionFromToken = async (
db: Database,
token: string | undefined,
): Promise<Session | null> => {
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,
},
},
},
});
if (!session) {
return null;
}
return {
user: {
...session.user,
permissions: await getCurrentUserPermissions(db, session.user.id),
},
expires: session.expires.toISOString(),
};
};