UNPKG

@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
/* * */ 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; }; }