PPPAIMT-Crest/backend/src/middleware/requireUser.js

41 lines
1004 B
JavaScript

import Boom from '@hapi/boom';
import { db } from '../db/knex.js';
import { readUserId } from '../services/userAuth.js';
/** @type {import('@hapi/hapi').RouteOptionsPreObject} */
export const requireUser = {
assign: 'user',
async method(request) {
const token = jwtFromCookie(request.state.user_token);
const userId = token ? readUserId(token) : null;
if (!userId) {
throw Boom.unauthorized('Authentication required');
}
const user = await db('users').where({ id: Number(userId) }).first();
if (!user || !user.is_active) {
throw Boom.unauthorized('Authentication required');
}
return { id: user.id, name: user.name ?? null, email: user.email };
},
};
/**
* @param {unknown} value
* @returns {string | null}
*/
function jwtFromCookie(value) {
if (typeof value === 'string') {
return value;
}
if (value && typeof value === 'object' && 'token' in value && typeof value.token === 'string') {
return value.token;
}
return null;
}