update + schema validate
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { ErrorRequestHandler, Request, RequestHandler } from 'express';
|
||||
import { randomUUID } from 'crypto';
|
||||
import { validationResult } from 'express-validator';
|
||||
import { validationResult, matchedData } from 'express-validator';
|
||||
import { UserInfo, UserRoles } from '@core';
|
||||
|
||||
declare module 'express-session' {
|
||||
@ -10,22 +10,21 @@ declare module 'express-session' {
|
||||
}
|
||||
|
||||
export function getRequestId(req: Request): string {
|
||||
return req.header('request-id') || 'unknown';
|
||||
return req.header('x-request-id') || 'unknown';
|
||||
}
|
||||
|
||||
export function RequestId(): RequestHandler {
|
||||
return (req, res, next) => {
|
||||
req.headers['request-id'] = randomUUID();
|
||||
req.headers['x-request-id'] = randomUUID();
|
||||
next();
|
||||
};
|
||||
}
|
||||
|
||||
export function CheckPermissions(): RequestHandler {
|
||||
function getResourceId(req: Request): string | null {
|
||||
if (req.method === 'GET' && req.params.uuid) return req.params.uuid;
|
||||
if ((req.method === 'POST' || req.method === 'PUT') && req.body.uuid)
|
||||
return req.body.uuid;
|
||||
return null;
|
||||
function getResourceId(req: Request): string | undefined {
|
||||
if (req.params.uuid) return req.params.uuid;
|
||||
if (req.body.uuid) return req.body.uuid;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function canAccessRessource(user: UserInfo, uuid: string): boolean {
|
||||
@ -55,15 +54,19 @@ export function CheckPermissions(): RequestHandler {
|
||||
};
|
||||
}
|
||||
|
||||
export function SchemaValidator(keys: number = 0): RequestHandler {
|
||||
export function ValidateSchema(): RequestHandler {
|
||||
return (req, res, next) => {
|
||||
if (Object.keys(req.body).length > keys)
|
||||
const error = validationResult(req);
|
||||
|
||||
const oldBody = req.body;
|
||||
req.body = matchedData(req, { locations: ['body'] });
|
||||
|
||||
if (JSON.stringify(oldBody) !== JSON.stringify(req.body))
|
||||
return next({
|
||||
status: 400,
|
||||
message: `Found ${Object.keys(req.body).length} keys expected ${keys}`,
|
||||
status: 422,
|
||||
message: 'Unprocessable Entity',
|
||||
});
|
||||
|
||||
const error = validationResult(req);
|
||||
error.isEmpty()
|
||||
? next()
|
||||
: next({
|
||||
|
Reference in New Issue
Block a user