Progressing on profile edition and thumbnail cropping

This commit is contained in:
2024-09-11 17:47:04 +02:00
parent e904f28b3b
commit 6856d3b9af
25 changed files with 278 additions and 88 deletions

View File

@@ -63,10 +63,10 @@ export default defineEventHandler(async (e): Promise<Return> => {
return { success: false, error: new ZodError([{ code: 'custom', path: ['password'], message: 'Mot de passe incorrect' }]) };
}
logSession(e, await setUserSession(e, { user: getData(db, id.id) }) as UserSessionRequired);
const data = await logSession(e, await setUserSession(e, { user: getData(db, id.id) }) as UserSessionRequired);
setResponseStatus(e, 201);
return { success: true, session };
return { success: true, session: data };
}
catch(err: any)
{

View File

@@ -1,5 +1,5 @@
import useDatabase from "~/composables/useDatabase";
import type { Comment } from "~/types/auth";
import type { CommentSearch } from "~/types/api";
export default defineEventHandler((e) => {
const id = getRouterParam(e, 'id');
@@ -12,5 +12,5 @@ export default defineEventHandler((e) => {
const db = useDatabase();
return db.query(`SELECT * FROM explorer_comments WHERE user_id = ?1`).all(id) as Comment[];
return db.query(`SELECT * FROM explorer_comments WHERE user_id = ?1`).all(id) as CommentSearch[];
});

View File

@@ -1,5 +1,5 @@
import useDatabase from "~/composables/useDatabase";
import type { Project } from "~/types/api";
import type { ProjectSearch } from "~/types/api";
export default defineEventHandler((e) => {
const id = getRouterParam(e, 'id');
@@ -12,5 +12,5 @@ export default defineEventHandler((e) => {
const db = useDatabase();
return db.query(`SELECT * FROM explorer_projects WHERE owner = ?1`).all(id) as Project[];
return db.query(`SELECT p.*, count(f.path) as pages FROM explorer_projects p LEFT JOIN explorer_files f ON p.id = f.project WHERE p.owner = ?1`).all(id) as Omit<ProjectSearch, 'username'>[];
});

View File

@@ -1,27 +1,27 @@
import useDatabase from "~/composables/useDatabase";
const monthAsMs = 1000 * 60 * 60 * 24 * 30;
const monthAsMs = 60 * 60 * 24 * 30;
export default defineNitroPlugin(() => {
const db = useDatabase();
sessionHooks.hook('fetch', async (session, event) => {
const query = db.prepare('SELECT lastRefresh FROM user_sessions WHERE id = ?1 AND user_id = ?2');
const result = query.get(session.id, session.user.id) as Record<string, any>;
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.lastRefresh && result.lastRefresh < Date.now() - monthAsMs)
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 lastRefresh = ?1 WHERE id = ?2 AND user_id = ?3').run(Date.now(), session.id, session.user.id);
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) => {

View File

@@ -24,10 +24,12 @@ export async function checkSession(e: H3Event<EventRequestHandler>, session: Use
}
}
}
export async function logSession(e: H3Event<EventRequestHandler>, session: UserSessionRequired)
export async function logSession(e: H3Event<EventRequestHandler>, session: UserSessionRequired): Promise<UserSessionRequired>
{
const db = useDatabase();
const loggingIn = db.query(`INSERT INTO user_sessions(id, user_id, ip, agent, lastRefresh) VALUES(?1, ?2, ?3, ?4, ?5)`);
const loggingIn = db.query(`INSERT INTO user_sessions(id, user_id, ip, agent, last_refresh) VALUES(?1, ?2, ?3, ?4, ?5)`);
loggingIn.get(session.id, session.user.id, getRequestIP(e) ?? null, getRequestHeader(e, 'User-Agent') ?? null, Date.now());
return session;
}