@rapidrest/core 1.6.0 → 1.7.0
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/dist/lib/ObjectUtils.js +31 -1
- package/dist/lib/ObjectUtils.js.map +1 -1
- package/dist/lib/UserUtils.js +29 -0
- package/dist/lib/UserUtils.js.map +1 -1
- package/dist/lib/decorators/ObjectDecorators.js +13 -0
- package/dist/lib/decorators/ObjectDecorators.js.map +1 -1
- package/dist/types/ObjectUtils.d.ts +10 -0
- package/dist/types/UserUtils.d.ts +14 -0
- package/dist/types/decorators/ObjectDecorators.d.ts +8 -0
- package/package.json +1 -1
package/dist/lib/ObjectUtils.js
CHANGED
|
@@ -2,12 +2,42 @@
|
|
|
2
2
|
// Copyright (C) 2020-2026 Jean-Philippe Steinmetz
|
|
3
3
|
///////////////////////////////////////////////////////////////////////////////
|
|
4
4
|
import "reflect-metadata";
|
|
5
|
+
import { UserUtils } from "./UserUtils.js";
|
|
5
6
|
/**
|
|
6
7
|
* Utility class for working with objects.
|
|
7
8
|
*
|
|
8
9
|
* @author Jean-Philippe Steinmetz
|
|
9
10
|
*/
|
|
10
11
|
export class ObjectUtils {
|
|
12
|
+
/**
|
|
13
|
+
* Deletes all properties from the given object(s) that the specified user does not have scope to read.
|
|
14
|
+
*
|
|
15
|
+
* @param obj The object(s) to process.
|
|
16
|
+
* @param user The user whose scope permissions will be tested.
|
|
17
|
+
* @param clazz The class type that contains the @RequiresScope metadata.
|
|
18
|
+
* @param recurse Set to `true` to validate all child objects.
|
|
19
|
+
*/
|
|
20
|
+
static deleteScopedProps(obj, user, clazz, recurse) {
|
|
21
|
+
const objs = Array.isArray(obj) ? obj : [obj];
|
|
22
|
+
for (const obj of objs) {
|
|
23
|
+
const metadataObj = !clazz || obj instanceof clazz ? obj : new clazz();
|
|
24
|
+
// Iterate through all properties of the object
|
|
25
|
+
for (const member of Object.getOwnPropertyNames(obj)) {
|
|
26
|
+
if (member === "constructor")
|
|
27
|
+
continue;
|
|
28
|
+
// Extract the list of required scopes for the property
|
|
29
|
+
const scopes = Reflect.getMetadata("rrst:scopes", metadataObj, member);
|
|
30
|
+
// If the user does not have at least one of the specified scopes, delete the property from the object.
|
|
31
|
+
if (scopes && !UserUtils.hasScopes(user, scopes)) {
|
|
32
|
+
delete obj[member];
|
|
33
|
+
}
|
|
34
|
+
// If recursion is requested, process the child object
|
|
35
|
+
if (recurse && typeof obj[member] === "object") {
|
|
36
|
+
ObjectUtils.deleteScopedProps(obj[member], user, undefined, recurse);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
11
41
|
/**
|
|
12
42
|
* Performs validation of the given object or array. Validation is performed by scanning the object class for properties
|
|
13
43
|
* decorated with `@Validator` and executing the provided validation function.
|
|
@@ -22,7 +52,7 @@ export class ObjectUtils {
|
|
|
22
52
|
const metadataObj = !clazz || obj instanceof clazz ? obj : new clazz();
|
|
23
53
|
// Iterate through all properties of the object
|
|
24
54
|
for (const member of Object.getOwnPropertyNames(obj)) {
|
|
25
|
-
if (member ===
|
|
55
|
+
if (member === "constructor")
|
|
26
56
|
continue;
|
|
27
57
|
const nullable = Reflect.getMetadata("rrst:nullable", metadataObj, member);
|
|
28
58
|
// Value of '0' is valid. Don't throw on such values.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectUtils.js","sourceRoot":"","sources":["../../src/ObjectUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAC/E,OAAO,kBAAkB,CAAC;AAG1B;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACpB;;;;;;;OAOG;IACI,MAAM,CAAC,QAAQ,CAAC,GAAQ,EAAE,KAAW,EAAE,OAAiB;QAC3D,MAAM,IAAI,GAAU,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,WAAW,GAAQ,CAAC,KAAK,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAE5E,+CAA+C;YAC/C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,MAAM,KAAK,aAAa;oBAAE,SAAS;gBAEvC,MAAM,QAAQ,GAAQ,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBAChF,qDAAqD;gBACrD,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;oBACzF,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,kBAAkB,CAAC,CAAC;gBAC1D,CAAC;gBAED,MAAM,SAAS,GAAkC,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"ObjectUtils.js","sourceRoot":"","sources":["../../src/ObjectUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/UserUtils.js
CHANGED
|
@@ -102,5 +102,34 @@ export class UserUtils {
|
|
|
102
102
|
}
|
|
103
103
|
return false;
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns `true` if the given user object has a scope with the specified name, otherwise returns `false`.
|
|
107
|
+
*
|
|
108
|
+
* @param user The user object to inspect.
|
|
109
|
+
* @param scope The scope to search for.
|
|
110
|
+
*/
|
|
111
|
+
static hasScope(user, scope) {
|
|
112
|
+
let result = false;
|
|
113
|
+
if (user && Array.isArray(user.scopes)) {
|
|
114
|
+
result = user.scopes.includes(scope);
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns `true` if the given user object has at least one of the specified scopes, otherwise returns `false`.
|
|
120
|
+
*
|
|
121
|
+
* @param user The user object to inspect.
|
|
122
|
+
* @param scope The list of scopes to search for.
|
|
123
|
+
*/
|
|
124
|
+
static hasScopes(user, scopes) {
|
|
125
|
+
if (user && Array.isArray(user.scopes)) {
|
|
126
|
+
for (const scope of scopes) {
|
|
127
|
+
if (UserUtils.hasScope(user, scope)) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
105
134
|
}
|
|
106
135
|
//# sourceMappingURL=UserUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserUtils.js","sourceRoot":"","sources":["../../src/UserUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserUtils.js","sourceRoot":"","sources":["../../src/UserUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,6 +78,19 @@ export function Logger(target, propertyKey) {
|
|
|
78
78
|
export function Nullable(target, propertyKey) {
|
|
79
79
|
Reflect.defineMetadata("rrst:nullable", true, target, propertyKey);
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Indicates that the client's token must carry at least one of the specified OAuth-style scope(s) to have read access
|
|
83
|
+
* to the decorated property. When a client does not have the defined scope the property is removed from the final object
|
|
84
|
+
* construction.
|
|
85
|
+
*
|
|
86
|
+
* @param scope The scope that the authenticated user's token must carry to read the property.
|
|
87
|
+
*/
|
|
88
|
+
export function RequiresScope(scope) {
|
|
89
|
+
return function (target, propertyKey) {
|
|
90
|
+
const scopes = Array.isArray(scope) ? scope : [scope];
|
|
91
|
+
Reflect.defineMetadata("rrst:scopes", scopes, target, propertyKey);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
81
94
|
/**
|
|
82
95
|
* Apply this to a property to specify the function that will be used to perform validation of the value.
|
|
83
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectDecorators.js","sourceRoot":"","sources":["../../../src/decorators/ObjectDecorators.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAC/E,OAAO,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAW,EAAE,WAAmB;IACpD,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,IAAS,EAAE,OAAyB;IACvD,OAAO,UAAU,MAAW,EAAE,WAA4B;QACtD,OAAO,GAAG;YACN,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS;SACnC,CAAC;QACF,OAAO,CAAC,cAAc,CAClB,mBAAmB,EACnB;YACI,OAAO;YACP,IAAI;SACP,EACD,MAAM,EACN,WAAW,CACd,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;YACvC,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,SAAS;SACnB,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,MAAW,EAAE,WAAmB,EAAE,UAA8B;IACjF,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,eAAoB,SAAS;IAC/D,OAAO,UAAU,MAAW,EAAE,WAA4B;QACtD,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACrF,OAAO,CAAC,cAAc,CAAC,0BAA0B,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACtF,MAAM,GAAG,GAAG,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;YACvC,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,SAAS;SACnB,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,MAAW,EAAE,WAA4B;IAC5D,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;QACvC,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,SAAS;KACnB,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAW,EAAE,WAA4B;IAC9D,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC7C,OAAO,UAAU,MAAW,EAAE,WAA4B;QACtD,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CAAA;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"ObjectDecorators.js","sourceRoot":"","sources":["../../../src/decorators/ObjectDecorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
+
import { JWTUser } from "./JWTUtils.js";
|
|
2
3
|
/**
|
|
3
4
|
* Utility class for working with objects.
|
|
4
5
|
*
|
|
5
6
|
* @author Jean-Philippe Steinmetz
|
|
6
7
|
*/
|
|
7
8
|
export declare class ObjectUtils {
|
|
9
|
+
/**
|
|
10
|
+
* Deletes all properties from the given object(s) that the specified user does not have scope to read.
|
|
11
|
+
*
|
|
12
|
+
* @param obj The object(s) to process.
|
|
13
|
+
* @param user The user whose scope permissions will be tested.
|
|
14
|
+
* @param clazz The class type that contains the @RequiresScope metadata.
|
|
15
|
+
* @param recurse Set to `true` to validate all child objects.
|
|
16
|
+
*/
|
|
17
|
+
static deleteScopedProps(obj: any, user?: JWTUser, clazz?: any, recurse?: boolean): void;
|
|
8
18
|
/**
|
|
9
19
|
* Performs validation of the given object or array. Validation is performed by scanning the object class for properties
|
|
10
20
|
* decorated with `@Validator` and executing the provided validation function.
|
|
@@ -46,4 +46,18 @@ export declare class UserUtils {
|
|
|
46
46
|
* @param orgUid The unique identifier of an organization whose role will be verified.
|
|
47
47
|
*/
|
|
48
48
|
static hasRoles(user: any, roles?: string[], orgUid?: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Returns `true` if the given user object has a scope with the specified name, otherwise returns `false`.
|
|
51
|
+
*
|
|
52
|
+
* @param user The user object to inspect.
|
|
53
|
+
* @param scope The scope to search for.
|
|
54
|
+
*/
|
|
55
|
+
static hasScope(user: any, scope: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Returns `true` if the given user object has at least one of the specified scopes, otherwise returns `false`.
|
|
58
|
+
*
|
|
59
|
+
* @param user The user object to inspect.
|
|
60
|
+
* @param scope The list of scopes to search for.
|
|
61
|
+
*/
|
|
62
|
+
static hasScopes(user: any, scopes: string[]): boolean;
|
|
49
63
|
}
|
|
@@ -43,6 +43,14 @@ export declare function Nullable(target: any, propertyKey: string | symbol): voi
|
|
|
43
43
|
* @throws An exception if the value cannot be validated.
|
|
44
44
|
*/
|
|
45
45
|
export type ValidatorFunction = (value: any) => any;
|
|
46
|
+
/**
|
|
47
|
+
* Indicates that the client's token must carry at least one of the specified OAuth-style scope(s) to have read access
|
|
48
|
+
* to the decorated property. When a client does not have the defined scope the property is removed from the final object
|
|
49
|
+
* construction.
|
|
50
|
+
*
|
|
51
|
+
* @param scope The scope that the authenticated user's token must carry to read the property.
|
|
52
|
+
*/
|
|
53
|
+
export declare function RequiresScope(scope: string | string[]): (target: any, propertyKey: string | symbol) => void;
|
|
46
54
|
/**
|
|
47
55
|
* Apply this to a property to specify the function that will be used to perform validation of the value.
|
|
48
56
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rapidrest/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "A collection of common utilities and core functionality for rapidly building RESTful applications.",
|
|
5
5
|
"repository": "https://github.com/rapidrest/core.git",
|
|
6
6
|
"author": "RapidREST <rapidrests@gmail.com>",
|