You've already forked obsidian-visualiser
Starting to put back the server part. Currently the registration and login are almost ready.
This commit is contained in:
45
server/plugins/session.ts
Normal file
45
server/plugins/session.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import useDatabase from "~/composables/useDatabase";
|
||||
import { userSessionsTable as sessions } from "~/db/schema";
|
||||
import { eq, and } from "drizzle-orm";
|
||||
|
||||
const monthAsMs = 60 * 60 * 24 * 30 * 1000;
|
||||
|
||||
export default defineNitroPlugin(() => {
|
||||
const db = useDatabase();
|
||||
|
||||
sessionHooks.hook('fetch', async (session, event) => {
|
||||
const result = await db.query.userSessionsTable.findFirst({
|
||||
columns: {
|
||||
timestamp: true,
|
||||
},
|
||||
where: and(eq(sessions.id, session.id as unknown as number), eq(sessions.user_id, session.user.id))
|
||||
});
|
||||
|
||||
if(!result)
|
||||
{
|
||||
await clearUserSession(event);
|
||||
throw createError({ statusCode: 401, message: 'Unauthorized' });
|
||||
}
|
||||
else if(result && result.timestamp && result.timestamp.getTime() < Date.now() - monthAsMs)
|
||||
{
|
||||
await clearUserSession(event);
|
||||
throw createError({ statusCode: 401, message: 'Session has expired' });
|
||||
}
|
||||
else
|
||||
{
|
||||
await db.update(sessions).set({
|
||||
timestamp: new Date(),
|
||||
}).where(and(eq(sessions.id, session.id as unknown as number), eq(sessions.user_id, session.user.id)));
|
||||
}
|
||||
});
|
||||
sessionHooks.hook('clear', async (session, event) => {
|
||||
if(session.id && session.user)
|
||||
{
|
||||
try
|
||||
{
|
||||
await db.delete(sessions).where(and(eq(sessions.id, session.id as unknown as number), eq(sessions.user_id, session.user.id)));
|
||||
}
|
||||
catch(e) { }
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user