@nextage/era-lib 1.0.64 → 1.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/events/types/control.interfaces.d.ts +10 -0
- package/build/events/types/control.interfaces.d.ts.map +1 -1
- package/build/events/types/control.interfaces.js.map +1 -1
- package/build/events/types/threat.interfaces.d.ts +9 -9
- package/build/events/types/threat.interfaces.d.ts.map +1 -1
- package/build/utils/express.d.ts +6 -0
- package/build/utils/express.d.ts.map +1 -1
- package/build/utils/express.js +35 -0
- package/build/utils/express.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { NxTypeObject } from '@nextage/nx-frame-be';
|
|
2
2
|
import { BaseI18nEntity } from '../../interfaces';
|
|
3
3
|
import { ControlVulnerability } from './vulnerability.interfaces';
|
|
4
|
+
/**
|
|
5
|
+
* generic control definition grouping all related norms and analysis types
|
|
6
|
+
*/
|
|
4
7
|
export interface ControlItem extends ControlBaseItem {
|
|
5
8
|
sets?: ControlSet[];
|
|
6
9
|
analysisTypes?: string[];
|
|
7
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* single control bound to a specific analysis type
|
|
13
|
+
* e.g. for company control we have one separte document
|
|
14
|
+
* for each norm
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
8
17
|
export interface ControlInstanceItem extends ControlBaseItem, ControlSet {
|
|
9
18
|
analysisType?: string;
|
|
10
19
|
controlId?: string;
|
|
@@ -19,6 +28,7 @@ export interface ControlBaseItem extends BaseI18nEntity {
|
|
|
19
28
|
category?: BaseI18nEntity;
|
|
20
29
|
vulns?: ControlVulnerability[];
|
|
21
30
|
attributes?: ControlAttribute[];
|
|
31
|
+
link?: BaseI18nEntity;
|
|
22
32
|
}
|
|
23
33
|
export interface RiskControl extends AssetControl {
|
|
24
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.interfaces.d.ts","sourceRoot":"","sources":["../../../src/events/types/control.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAc,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAY,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"control.interfaces.d.ts","sourceRoot":"","sources":["../../../src/events/types/control.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAc,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAY,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,IAAI,CAAC,EAAW,UAAU,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe,EAAE,UAAU;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAK,MAAM,CAAC;IACtB,IAAI,CAAC,EAAU,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAK,MAAM,CAAC;IACtB,IAAI,CAAC,EAAU,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,QAAQ,CAAC,EAAO,cAAc,CAAC;IAC/B,KAAK,CAAC,EAAU,oBAAoB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAK,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,EAAW,cAAc,CAAC;CAChC;AAGD,MAAM,WAAW,WAAY,SAAQ,YAAY;CAEhD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAM,OAAO,CAAC;IAClB,EAAE,EAAQ,OAAO,CAAC;IAClB,KAAK,EAAK,OAAO,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,GAAG,EAAE,WAAW,CAAC;CAKlB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAI,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAG,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,IAAI,CAAC,EAAS,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,IAAI,CAAC,EAAS,sBAAsB,CAAC;IACrC,EAAE,CAAC,EAAW,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAU,MAAM,CAAC;IACpB,KAAK,EAAQ,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAK,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAK,MAAM,EAAE,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.interfaces.js","sourceRoot":"","sources":["../../../src/events/types/control.interfaces.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"control.interfaces.js","sourceRoot":"","sources":["../../../src/events/types/control.interfaces.ts"],"names":[],"mappings":";;AAoFA,qDAAqD;AACrD,oBAAoB;AACpB,oBAAoB;AACpB,IAAI"}
|
|
@@ -20,22 +20,22 @@ export interface ThreatConfig {
|
|
|
20
20
|
}
|
|
21
21
|
export interface ThreatCiaConfigItem {
|
|
22
22
|
ac?: BaseI18nEntity;
|
|
23
|
-
con
|
|
24
|
-
int
|
|
25
|
-
avl
|
|
23
|
+
con?: number;
|
|
24
|
+
int?: number;
|
|
25
|
+
avl?: number;
|
|
26
26
|
aut?: number;
|
|
27
27
|
}
|
|
28
28
|
export interface ThreatFarConfigItem {
|
|
29
29
|
ac?: BaseI18nEntity;
|
|
30
|
-
rep
|
|
31
|
-
avl
|
|
32
|
-
fin
|
|
30
|
+
rep?: number;
|
|
31
|
+
avl?: number;
|
|
32
|
+
fin?: number;
|
|
33
33
|
}
|
|
34
34
|
export interface ThreatFcrConfigItem {
|
|
35
35
|
ac?: BaseI18nEntity;
|
|
36
|
-
rep
|
|
37
|
-
con
|
|
38
|
-
fin
|
|
36
|
+
rep?: number;
|
|
37
|
+
con?: number;
|
|
38
|
+
fin?: number;
|
|
39
39
|
}
|
|
40
40
|
export interface RiskThreat extends BaseI18nEntity {
|
|
41
41
|
lkh?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threat.interfaces.d.ts","sourceRoot":"","sources":["../../../src/events/types/threat.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAS,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,GAAG,CAAC,EAAY,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAO,cAAc,CAAC;IAC/B,KAAK,CAAC,EAAU,cAAc,EAAE,CAAC;IACjC,MAAM,CAAC,EAAS,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE;QACJ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,mBAAmB,CAAC;QAC1B,GAAG,CAAC,EAAE,mBAAmB,CAAC;QAC1B,GAAG,CAAC,EAAE,mBAAmB,CAAC;KAC3B,CAAC;IACF,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"threat.interfaces.d.ts","sourceRoot":"","sources":["../../../src/events/types/threat.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAS,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,GAAG,CAAC,EAAY,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAO,cAAc,CAAC;IAC/B,KAAK,CAAC,EAAU,cAAc,EAAE,CAAC;IACjC,MAAM,CAAC,EAAS,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE;QACJ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,mBAAmB,CAAC;QAC1B,GAAG,CAAC,EAAE,mBAAmB,CAAC;QAC1B,GAAG,CAAC,EAAE,mBAAmB,CAAC;KAC3B,CAAC;IACF,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,GAAG,CAAC,EAAI,MAAM,CAAC;IACf,GAAG,CAAC,EAAI,MAAM,CAAC;IACf,GAAG,CAAC,EAAI,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;IACxE,GAAG,CAAC,EAAI,mBAAmB,CAAC;IAC5B,GAAG,CAAC,EAAI,mBAAmB,CAAC;IAC5B,GAAG,CAAC,EAAI,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B"}
|
package/build/utils/express.d.ts
CHANGED
|
@@ -28,4 +28,10 @@ export declare function sendJSONResponse(res: Response, status?: number, content
|
|
|
28
28
|
* Returns a middleware function.
|
|
29
29
|
*/
|
|
30
30
|
export declare function allowMethods(methods?: string[], message?: string): Handler;
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param {*} roles
|
|
34
|
+
* @param {*} condition
|
|
35
|
+
*/
|
|
36
|
+
export declare function authHandler(roles: string[], condition: string): Promise<(req: Request, res: Response, next: NextFunction) => void>;
|
|
31
37
|
//# sourceMappingURL=express.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/utils/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAoB,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/utils/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAoB,0CAA0C,CAAC;AAI3F;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAAE,cAAc,IAAI,KAAK,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,OAAO,4BAAQ,IAE5H,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UAYxD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAE,MAAY,EAAE,OAAO,GAAE,MAAW,QAMzF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,MAAM,EAAO,EAAE,OAAO,GAAE,MAA6B,GAAG,OAAO,CAcpG;AAoBD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,iBAErD,OAAO,OAAO,QAAQ,QAAQ,YAAY,WAkCxD"}
|
package/build/utils/express.js
CHANGED
|
@@ -6,8 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.validateSchema = validateSchema;
|
|
7
7
|
exports.sendJSONResponse = sendJSONResponse;
|
|
8
8
|
exports.allowMethods = allowMethods;
|
|
9
|
+
exports.authHandler = authHandler;
|
|
9
10
|
const http_errors_1 = __importDefault(require("http-errors"));
|
|
10
11
|
const express_validator_1 = require("express-validator");
|
|
12
|
+
const nx_frame_be_1 = require("@nextage/nx-frame-be");
|
|
13
|
+
const constants_1 = require("../constants");
|
|
11
14
|
/**
|
|
12
15
|
*
|
|
13
16
|
* @param schema
|
|
@@ -74,4 +77,36 @@ function normalizeAllowedMethods(methods) {
|
|
|
74
77
|
return methods.filter(method => typeof method === 'string')
|
|
75
78
|
.map(method => method.toUpperCase());
|
|
76
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
*
|
|
82
|
+
* @param {*} roles
|
|
83
|
+
* @param {*} condition
|
|
84
|
+
*/
|
|
85
|
+
async function authHandler(roles, condition) {
|
|
86
|
+
return (req, res, next) => {
|
|
87
|
+
const user = (0, nx_frame_be_1.getAttr)(req, 'context.user');
|
|
88
|
+
if (!user) {
|
|
89
|
+
sendJSONResponse(res, 401, constants_1.RES_CODE.AUTH_REQUIRED);
|
|
90
|
+
next(new nx_frame_be_1.AuthenticationError('messages.authentication.required'));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (roles) {
|
|
94
|
+
let hasRoles = true;
|
|
95
|
+
switch (condition) {
|
|
96
|
+
case '&&':
|
|
97
|
+
hasRoles = roles.every(role => user.roles.indexOf(role) >= 0);
|
|
98
|
+
break;
|
|
99
|
+
case '||':
|
|
100
|
+
default:
|
|
101
|
+
hasRoles = roles.some(role => user.roles.indexOf(role) >= 0);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (!hasRoles) {
|
|
105
|
+
sendJSONResponse(res, 401, constants_1.RES_CODE.FORBIDDEN);
|
|
106
|
+
throw new nx_frame_be_1.ForbiddenError('messages.authorization.failed');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
next();
|
|
110
|
+
};
|
|
111
|
+
}
|
|
77
112
|
//# sourceMappingURL=express.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/utils/express.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/utils/express.ts"],"names":[],"mappings":"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"}
|