obsidian-visualiser/server/plugins/session.ts

38 lines
1.3 KiB
TypeScript

import useDatabase from "~/composables/useDatabase";
const monthAsMs = 60 * 60 * 24 * 30;
export default defineNitroPlugin(() => {
const db = useDatabase();
sessionHooks.hook('fetch', async (session, event) => {
const query = db.prepare('SELECT last_refresh FROM user_sessions WHERE id = ?1 AND user_id = ?2');
const result = query.get(session.id, session.user.id) as { last_refresh: number };
if(!result)
{
clearUserSession(event);
throw createError({ statusCode: 401, message: 'Unauthorized' });
}
else if(result && result.last_refresh && result.last_refresh < Date.now() - monthAsMs)
{
clearUserSession(event);
throw createError({ statusCode: 401, message: 'Session has expired' });
}
else
{
db.prepare('UPDATE user_sessions SET last_refresh = ?1 WHERE id = ?2 AND user_id = ?3').run(Date.now(), session.id, session.user.id);
}
});
sessionHooks.hook('clear', async (session, event) => {
if(session.id && session.user)
{
try
{
const query = db.prepare('DELETE FROM user_sessions WHERE id = ?1 AND user_id = ?2');
query.run(session.id, session.user.id);
}
catch(e) { }
}
});
});