mirror of
https://github.com/ajnart/homarr.git
synced 2026-01-31 03:39:21 +01:00
* 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
56 lines
1.2 KiB
TypeScript
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(),
|
|
};
|
|
};
|