0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-01-06 22:40:26 -05:00
verdaccio/packages/middleware/src/middlewares/allow.ts
Juan Picado 631abe1ac1
refactor logger module (#3592)
* refactor logger module

* Update index.ts
2023-02-05 21:00:32 +01:00

52 lines
1.7 KiB
TypeScript

import { API_ERROR, errorUtils } from '@verdaccio/core';
import { getVersionFromTarball } from '@verdaccio/utils';
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';
export function allow<T>(
auth: T,
options = {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
beforeAll: (_a: any, _b: any) => {},
// eslint-disable-next-line @typescript-eslint/no-unused-vars
afterAll: (_a: any, _b: any) => {},
}
): Function {
const { beforeAll, afterAll } = options;
return function (action: string): Function {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
req.pause();
const packageName = req.params.scope
? `@${req.params.scope}/${req.params.package}`
: req.params.package;
const packageVersion = req.params.filename
? getVersionFromTarball(req.params.filename)
: undefined;
const remote = req.remote_user;
beforeAll?.(
{ action, user: remote?.name },
`[middleware/allow][@{action}] allow for @{user}`
);
auth['allow_' + action](
{ packageName, packageVersion },
remote,
function (error, allowed): void {
req.resume();
if (error) {
next(error);
} else if (allowed) {
afterAll?.(
{ action, user: remote?.name },
`[middleware/allow][@{action}] allowed for @{user}`
);
next();
} else {
// last plugin (that's our built-in one) returns either
// cb(err) or cb(null, true), so this should never happen
throw errorUtils.getInternalError(API_ERROR.PLUGIN_ERROR);
}
}
);
};
};
}