@tmlmobilidade/connectors
Version:
This package provides pre-made database connectors to streamline development and reduce boilerplate. By using these connectors, you can avoid re-implementing controller classes every time, ensuring consistency and saving development time.
28 lines (27 loc) • 1.3 kB
JavaScript
/* * */
import { getAppConfig, HttpException, HttpStatus } from '@tmlmobilidade/lib';
import { fetchData } from '@tmlmobilidade/utils';
export function authorizationMiddleware(scope, action) {
return async (request) => {
const token = request.cookies.session_token;
if (!token) {
throw new HttpException(HttpStatus.UNAUTHORIZED, 'Invalid authorization token');
}
// Get the permissions
const apiUrl = `${getAppConfig('auth', 'api_url')}/permissions?resource=${scope}&action=${action}`;
const res = await fetchData(apiUrl, 'GET', undefined, { Cookie: `session_token=${token}` });
if (res.statusCode !== HttpStatus.OK || !res.data) {
throw new HttpException(res.statusCode, res.error ?? 'Unknown error');
}
// Set the permissions
request.permissions = res.data ?? [];
// Get the user
const userApiUrl = `${getAppConfig('auth', 'api_url')}/users/me`;
const userRes = await fetchData(userApiUrl, 'GET', undefined, { Cookie: `session_token=${token}` });
if (userRes.statusCode !== HttpStatus.OK) {
throw new HttpException(userRes.statusCode, userRes.error ?? 'Unknown error');
}
// Set the user
request.me = userRes.data;
};
}