namirasoft-access 1.4.49 → 1.4.50
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/AccessControl.js +1 -9
- package/dist/AccessControl.js.map +1 -1
- package/package.json +27 -27
- package/src/AccessControl.ts +39 -48
- package/src/NamirasoftAccessServer.ts +80 -80
- package/src/NamirasoftAccessServerAccess.ts +43 -43
- package/src/NamirasoftAccessServerBase.ts +29 -29
- package/src/NamirasoftAccessServerHealthz.ts +35 -35
- package/src/NamirasoftAccessServerPermission.ts +108 -108
- package/src/NamirasoftAccessServerPermissionCategory.ts +62 -62
- package/src/NamirasoftAccessServerPermissionField.ts +69 -69
- package/src/NamirasoftAccessServerPermissionTag.ts +69 -69
- package/src/NamirasoftAccessServerPolicy.ts +86 -86
- package/src/NamirasoftAccessServerPolicyCategory.ts +62 -62
- package/src/NamirasoftAccessServerPolicyField.ts +69 -69
- package/src/NamirasoftAccessServerPolicyTag.ts +69 -69
- package/src/NamirasoftAccessServerProduct.ts +54 -54
- package/src/NamirasoftAccessServerRole.ts +86 -86
- package/src/NamirasoftAccessServerRoleCategory.ts +62 -62
- package/src/NamirasoftAccessServerRoleField.ts +69 -69
- package/src/NamirasoftAccessServerRoleTag.ts +69 -69
- package/src/NamirasoftAccessServerUserRole.ts +35 -35
- package/src/NamirasoftAccessServerValue.ts +36 -36
- package/src/command/AccessCommand.ts +33 -33
- package/src/command/AccessSetOwnerCommand.ts +55 -55
- package/src/command/Access_GetForCommand.ts +44 -44
- package/src/command/HealthzCommand.ts +31 -31
- package/src/command/HealthzGetCommand.ts +44 -44
- package/src/command/PermissionCategoryCommand.ts +37 -37
- package/src/command/PermissionCategoryCreateCommand.ts +55 -55
- package/src/command/PermissionCategoryDeleteCommand.ts +44 -44
- package/src/command/PermissionCategoryGetCommand.ts +44 -44
- package/src/command/PermissionCategoryListCommand.ts +44 -44
- package/src/command/PermissionCommand.ts +49 -49
- package/src/command/PermissionCreateCommand.ts +100 -100
- package/src/command/PermissionDeleteIncomingCommand.ts +44 -44
- package/src/command/PermissionDeleteOutgoingCommand.ts +44 -44
- package/src/command/PermissionFieldCommand.ts +39 -39
- package/src/command/PermissionFieldCreateCommand.ts +64 -64
- package/src/command/PermissionFieldDeleteCommand.ts +44 -44
- package/src/command/PermissionFieldGetCommand.ts +44 -44
- package/src/command/PermissionFieldListCommand.ts +44 -44
- package/src/command/PermissionFieldUpdateCommand.ts +64 -64
- package/src/command/PermissionGetCommand.ts +44 -44
- package/src/command/PermissionGetIncomingCommand.ts +44 -44
- package/src/command/PermissionGetOutgoingCommand.ts +44 -44
- package/src/command/PermissionListCommand.ts +44 -44
- package/src/command/PermissionListIncomingCommand.ts +44 -44
- package/src/command/PermissionListOutgoingCommand.ts +44 -44
- package/src/command/PermissionTagCommand.ts +39 -39
- package/src/command/PermissionTagCreateCommand.ts +64 -64
- package/src/command/PermissionTagDeleteCommand.ts +44 -44
- package/src/command/PermissionTagGetCommand.ts +44 -44
- package/src/command/PermissionTagListCommand.ts +44 -44
- package/src/command/PermissionTagUpdateCommand.ts +64 -64
- package/src/command/PermissionUpdateCommand.ts +100 -100
- package/src/command/PolicyCategoryCommand.ts +37 -37
- package/src/command/PolicyCategoryCreateCommand.ts +55 -55
- package/src/command/PolicyCategoryDeleteCommand.ts +44 -44
- package/src/command/PolicyCategoryGetCommand.ts +44 -44
- package/src/command/PolicyCategoryListCommand.ts +44 -44
- package/src/command/PolicyCommand.ts +43 -43
- package/src/command/PolicyCreateCommand.ts +136 -136
- package/src/command/PolicyDeleteCommand.ts +44 -44
- package/src/command/PolicyFieldCommand.ts +39 -39
- package/src/command/PolicyFieldCreateCommand.ts +64 -64
- package/src/command/PolicyFieldDeleteCommand.ts +44 -44
- package/src/command/PolicyFieldGetCommand.ts +44 -44
- package/src/command/PolicyFieldListCommand.ts +44 -44
- package/src/command/PolicyFieldUpdateCommand.ts +64 -64
- package/src/command/PolicyGetCommand.ts +44 -44
- package/src/command/PolicyGetIncomingCommand.ts +44 -44
- package/src/command/PolicyListCommand.ts +44 -44
- package/src/command/PolicyListIncomingCommand.ts +44 -44
- package/src/command/PolicyTagCommand.ts +39 -39
- package/src/command/PolicyTagCreateCommand.ts +64 -64
- package/src/command/PolicyTagDeleteCommand.ts +44 -44
- package/src/command/PolicyTagGetCommand.ts +44 -44
- package/src/command/PolicyTagListCommand.ts +44 -44
- package/src/command/PolicyTagUpdateCommand.ts +64 -64
- package/src/command/PolicyUpdateCommand.ts +136 -136
- package/src/command/ProductCommand.ts +35 -35
- package/src/command/ProductGetCommand.ts +44 -44
- package/src/command/ProductListCommand.ts +44 -44
- package/src/command/Product_SetCommand.ts +55 -55
- package/src/command/RoleCategoryCommand.ts +37 -37
- package/src/command/RoleCategoryCreateCommand.ts +55 -55
- package/src/command/RoleCategoryDeleteCommand.ts +44 -44
- package/src/command/RoleCategoryGetCommand.ts +44 -44
- package/src/command/RoleCategoryListCommand.ts +44 -44
- package/src/command/RoleCommand.ts +43 -43
- package/src/command/RoleCreateCommand.ts +100 -100
- package/src/command/RoleDeleteCommand.ts +44 -44
- package/src/command/RoleFieldCommand.ts +39 -39
- package/src/command/RoleFieldCreateCommand.ts +64 -64
- package/src/command/RoleFieldDeleteCommand.ts +44 -44
- package/src/command/RoleFieldGetCommand.ts +44 -44
- package/src/command/RoleFieldListCommand.ts +44 -44
- package/src/command/RoleFieldUpdateCommand.ts +64 -64
- package/src/command/RoleGetCommand.ts +44 -44
- package/src/command/RoleGetIncomingCommand.ts +44 -44
- package/src/command/RoleListCommand.ts +44 -44
- package/src/command/RoleListIncomingCommand.ts +44 -44
- package/src/command/RoleTagCommand.ts +39 -39
- package/src/command/RoleTagCreateCommand.ts +64 -64
- package/src/command/RoleTagDeleteCommand.ts +44 -44
- package/src/command/RoleTagGetCommand.ts +44 -44
- package/src/command/RoleTagListCommand.ts +44 -44
- package/src/command/RoleTagUpdateCommand.ts +64 -64
- package/src/command/RoleUpdateCommand.ts +100 -100
- package/src/command/UserRoleCommand.ts +31 -31
- package/src/command/UserRole_SetCommand.ts +64 -64
- package/src/command/ValueCommand.ts +31 -31
- package/src/command/ValueListCommand.ts +44 -44
- package/src/command/cli.ts +64 -64
- package/src/index.ts +166 -166
- package/src/meta/NamirasoftAccessMetaDatabase.ts +69 -69
- package/src/meta/PermissionCategoryMetaTable.ts +45 -45
- package/src/meta/PermissionFieldMetaTable.ts +47 -47
- package/src/meta/PermissionMetaTable.ts +57 -57
- package/src/meta/PermissionTagMetaTable.ts +47 -47
- package/src/meta/PolicyCategoryMetaTable.ts +45 -45
- package/src/meta/PolicyFieldMetaTable.ts +47 -47
- package/src/meta/PolicyMetaTable.ts +55 -55
- package/src/meta/PolicyTagMetaTable.ts +47 -47
- package/src/meta/RoleCategoryMetaTable.ts +45 -45
- package/src/meta/RoleFieldMetaTable.ts +47 -47
- package/src/meta/RoleMetaTable.ts +45 -45
- package/src/meta/RoleTagMetaTable.ts +47 -47
- package/src/row/AccessRow.ts +27 -27
- package/src/row/EntityCategoryInputRow.ts +23 -23
- package/src/row/EntityFieldInputRow.ts +24 -24
- package/src/row/EntityTagInputRow.ts +24 -24
- package/src/row/PermissionCategoryRow.ts +28 -28
- package/src/row/PermissionFieldRow.ts +29 -29
- package/src/row/PermissionFullRow.ts +43 -43
- package/src/row/PermissionInputRow.ts +32 -32
- package/src/row/PermissionRow.ts +34 -34
- package/src/row/PermissionTagRow.ts +29 -29
- package/src/row/PolicyCategoryRow.ts +28 -28
- package/src/row/PolicyFieldRow.ts +29 -29
- package/src/row/PolicyFullRow.ts +40 -40
- package/src/row/PolicyInputRow.ts +36 -36
- package/src/row/PolicyRow.ts +33 -33
- package/src/row/PolicyTagRow.ts +29 -29
- package/src/row/ProductRow.ts +27 -27
- package/src/row/RoleCategoryRow.ts +28 -28
- package/src/row/RoleFieldRow.ts +29 -29
- package/src/row/RoleFullRow.ts +36 -36
- package/src/row/RoleInputRow.ts +32 -32
- package/src/row/RoleRow.ts +28 -28
- package/src/row/RoleTagRow.ts +29 -29
package/dist/AccessControl.js
CHANGED
|
@@ -6,28 +6,20 @@ class AccessControl {
|
|
|
6
6
|
static isValid(policies, product_id, entity, action, id) {
|
|
7
7
|
entity = namirasoft_core_1.NamingConvention.auto.convert(entity, namirasoft_core_1.NamingConvention.lower_case_underscore).trim();
|
|
8
8
|
action = namirasoft_core_1.NamingConvention.auto.convert(action, namirasoft_core_1.NamingConvention.lower_case_underscore).trim();
|
|
9
|
-
console.log({ policies, product_id, entity, action, id });
|
|
10
9
|
for (let i = 0; i < policies.length; i++) {
|
|
11
10
|
const element = policies[i];
|
|
12
|
-
console.log({ i });
|
|
13
11
|
if (element.product_id == "*" || element.product_id === product_id) {
|
|
14
12
|
let entities = element.entity.split(/[\s;,|]+/).map(e => namirasoft_core_1.NamingConvention.auto.convert(e, namirasoft_core_1.NamingConvention.lower_case_underscore).trim());
|
|
15
|
-
console.log({ entities });
|
|
16
13
|
if (element.entity == "*" || entities.includes(entity)) {
|
|
17
14
|
let actions = element.actions.split(/[\s;,|]+/).map(a => namirasoft_core_1.NamingConvention.auto.convert(a, namirasoft_core_1.NamingConvention.lower_case_underscore).trim());
|
|
18
|
-
console.log({ actions });
|
|
19
15
|
if (element.actions == "*" || actions.includes(action)) {
|
|
20
16
|
let resources = element.resources.split(/[\s;,|]+/).map(r => namirasoft_core_1.NamingConvention.auto.convert(r, namirasoft_core_1.NamingConvention.lower_case_underscore).trim());
|
|
21
|
-
|
|
22
|
-
if (element.resources == "*" || id === null || resources.includes(id)) {
|
|
23
|
-
console.log({ allow: element.allow });
|
|
17
|
+
if (element.resources == "*" || id === null || resources.includes(id))
|
|
24
18
|
return element.allow;
|
|
25
|
-
}
|
|
26
19
|
}
|
|
27
20
|
}
|
|
28
21
|
}
|
|
29
22
|
}
|
|
30
|
-
console.log("Access denied");
|
|
31
23
|
return false;
|
|
32
24
|
}
|
|
33
25
|
static check(policies, product_id, entity, action, id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessControl.js","sourceRoot":"","sources":["../src/AccessControl.ts"],"names":[],"mappings":";;;AAAA,qDAAmE;AAGnE,MAAa,aAAa;IAEtB,MAAM,CAAC,OAAO,CAAC,QAAqB,EAAE,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,EAAiB;QAEvG,MAAM,GAAG,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9F,MAAM,GAAG,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9F,
|
|
1
|
+
{"version":3,"file":"AccessControl.js","sourceRoot":"","sources":["../src/AccessControl.ts"],"names":[],"mappings":";;;AAAA,qDAAmE;AAGnE,MAAa,aAAa;IAEtB,MAAM,CAAC,OAAO,CAAC,QAAqB,EAAE,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,EAAiB;QAEvG,MAAM,GAAG,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9F,MAAM,GAAG,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EACxC,CAAC;YACG,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,UAAU,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAClE,CAAC;gBACG,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1I,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EACtD,CAAC;oBACG,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1I,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EACtD,CAAC;wBACG,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,kCAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC9I,IAAI,OAAO,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACjE,OAAO,OAAO,CAAC,KAAK,CAAC;oBAC7B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,QAAqB,EAAE,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,EAAiB;QAErG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EACpE,CAAC;YACG,IAAI,OAAO,GAAG,2BAA2B,MAAM,eAAe,MAAM,IAAI,CAAC;YACzE,IAAI,EAAE;gBACF,OAAO,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACrC,MAAM,gCAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;CACJ;AApCD,sCAoCC"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "namirasoft-access",
|
|
3
|
-
"title": "Namirasoft Access NPM Package",
|
|
4
|
-
"description": "Namira Software Corporation Access NPM Package",
|
|
5
|
-
"icon": "logo.png",
|
|
6
|
-
"logo": "https://static.namirasoft.com/image/namirasoft/access/logo/base.png",
|
|
7
|
-
"language": "ts",
|
|
8
|
-
"framework": "npm",
|
|
9
|
-
"application": "package",
|
|
10
|
-
"private": false,
|
|
11
|
-
"version": "1.4.
|
|
12
|
-
"author": "Amir Abolhasani",
|
|
13
|
-
"license": "MIT",
|
|
14
|
-
"main": "./dist/index.js",
|
|
15
|
-
"types": "./dist/index.d.ts",
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": ""
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"namirasoft-core": "^1.4.45",
|
|
21
|
-
"namirasoft-site": "^1.4.8",
|
|
22
|
-
"namirasoft-node-cli": "^1.4.5",
|
|
23
|
-
"namirasoft-account": "^1.4.56"
|
|
24
|
-
},
|
|
25
|
-
"bin": {
|
|
26
|
-
"ns-access": "./dist/command/cli.js"
|
|
27
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "namirasoft-access",
|
|
3
|
+
"title": "Namirasoft Access NPM Package",
|
|
4
|
+
"description": "Namira Software Corporation Access NPM Package",
|
|
5
|
+
"icon": "logo.png",
|
|
6
|
+
"logo": "https://static.namirasoft.com/image/namirasoft/access/logo/base.png",
|
|
7
|
+
"language": "ts",
|
|
8
|
+
"framework": "npm",
|
|
9
|
+
"application": "package",
|
|
10
|
+
"private": false,
|
|
11
|
+
"version": "1.4.50",
|
|
12
|
+
"author": "Amir Abolhasani",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"main": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": ""
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"namirasoft-core": "^1.4.45",
|
|
21
|
+
"namirasoft-site": "^1.4.8",
|
|
22
|
+
"namirasoft-node-cli": "^1.4.5",
|
|
23
|
+
"namirasoft-account": "^1.4.56"
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"ns-access": "./dist/command/cli.js"
|
|
27
|
+
}
|
|
28
28
|
}
|
package/src/AccessControl.ts
CHANGED
|
@@ -1,49 +1,40 @@
|
|
|
1
|
-
import { ErrorOperation, NamingConvention } from "namirasoft-core";
|
|
2
|
-
import { PolicyRow } from "./row/PolicyRow";
|
|
3
|
-
|
|
4
|
-
export class AccessControl
|
|
5
|
-
{
|
|
6
|
-
static isValid(policies: PolicyRow[], product_id: string, entity: string, action: string, id: string | null): boolean
|
|
7
|
-
{
|
|
8
|
-
entity = NamingConvention.auto.convert(entity, NamingConvention.lower_case_underscore).trim();
|
|
9
|
-
action = NamingConvention.auto.convert(action, NamingConvention.lower_case_underscore).trim();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
{
|
|
41
|
-
if (!AccessControl.isValid(policies, product_id, entity, action, id))
|
|
42
|
-
{
|
|
43
|
-
let message = `Access denied (Entity: '${entity}', Action: '${action}')`;
|
|
44
|
-
if (id)
|
|
45
|
-
message += ` on resource: ${id}`;
|
|
46
|
-
throw ErrorOperation.getHTTP(403, message);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { ErrorOperation, NamingConvention } from "namirasoft-core";
|
|
2
|
+
import { PolicyRow } from "./row/PolicyRow";
|
|
3
|
+
|
|
4
|
+
export class AccessControl
|
|
5
|
+
{
|
|
6
|
+
static isValid(policies: PolicyRow[], product_id: string, entity: string, action: string, id: string | null): boolean
|
|
7
|
+
{
|
|
8
|
+
entity = NamingConvention.auto.convert(entity, NamingConvention.lower_case_underscore).trim();
|
|
9
|
+
action = NamingConvention.auto.convert(action, NamingConvention.lower_case_underscore).trim();
|
|
10
|
+
for (let i = 0; i < policies.length; i++)
|
|
11
|
+
{
|
|
12
|
+
const element = policies[i];
|
|
13
|
+
if (element.product_id == "*" || element.product_id === product_id)
|
|
14
|
+
{
|
|
15
|
+
let entities = element.entity.split(/[\s;,|]+/).map(e => NamingConvention.auto.convert(e, NamingConvention.lower_case_underscore).trim());
|
|
16
|
+
if (element.entity == "*" || entities.includes(entity))
|
|
17
|
+
{
|
|
18
|
+
let actions = element.actions.split(/[\s;,|]+/).map(a => NamingConvention.auto.convert(a, NamingConvention.lower_case_underscore).trim());
|
|
19
|
+
if (element.actions == "*" || actions.includes(action))
|
|
20
|
+
{
|
|
21
|
+
let resources = element.resources.split(/[\s;,|]+/).map(r => NamingConvention.auto.convert(r, NamingConvention.lower_case_underscore).trim());
|
|
22
|
+
if (element.resources == "*" || id === null || resources.includes(id))
|
|
23
|
+
return element.allow;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
static check(policies: PolicyRow[], product_id: string, entity: string, action: string, id: string | null): void
|
|
31
|
+
{
|
|
32
|
+
if (!AccessControl.isValid(policies, product_id, entity, action, id))
|
|
33
|
+
{
|
|
34
|
+
let message = `Access denied (Entity: '${entity}', Action: '${action}')`;
|
|
35
|
+
if (id)
|
|
36
|
+
message += ` on resource: ${id}`;
|
|
37
|
+
throw ErrorOperation.getHTTP(403, message);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
49
40
|
}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
/****************************************************************/
|
|
2
|
-
/* */
|
|
3
|
-
/* This is an Auto-Generated File */
|
|
4
|
-
/* Made By */
|
|
5
|
-
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
-
/* */
|
|
7
|
-
/****************************************************************/
|
|
8
|
-
/****************************************************************/
|
|
9
|
-
/* */
|
|
10
|
-
/* Please do not make any change to this file */
|
|
11
|
-
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
-
/* */
|
|
13
|
-
/****************************************************************/
|
|
14
|
-
/****************************************************************/
|
|
15
|
-
/* */
|
|
16
|
-
/* Namira Software Corporation */
|
|
17
|
-
/* https://namirasoft.com */
|
|
18
|
-
/* */
|
|
19
|
-
/****************************************************************/
|
|
20
|
-
|
|
21
|
-
import { NamirasoftAccessServerAccess } from "./NamirasoftAccessServerAccess";
|
|
22
|
-
import { NamirasoftAccessServerHealthz } from "./NamirasoftAccessServerHealthz";
|
|
23
|
-
import { NamirasoftAccessServerPermission } from "./NamirasoftAccessServerPermission";
|
|
24
|
-
import { NamirasoftAccessServerPermissionCategory } from "./NamirasoftAccessServerPermissionCategory";
|
|
25
|
-
import { NamirasoftAccessServerPermissionField } from "./NamirasoftAccessServerPermissionField";
|
|
26
|
-
import { NamirasoftAccessServerPermissionTag } from "./NamirasoftAccessServerPermissionTag";
|
|
27
|
-
import { NamirasoftAccessServerPolicy } from "./NamirasoftAccessServerPolicy";
|
|
28
|
-
import { NamirasoftAccessServerPolicyCategory } from "./NamirasoftAccessServerPolicyCategory";
|
|
29
|
-
import { NamirasoftAccessServerPolicyField } from "./NamirasoftAccessServerPolicyField";
|
|
30
|
-
import { NamirasoftAccessServerPolicyTag } from "./NamirasoftAccessServerPolicyTag";
|
|
31
|
-
import { NamirasoftAccessServerProduct } from "./NamirasoftAccessServerProduct";
|
|
32
|
-
import { NamirasoftAccessServerRole } from "./NamirasoftAccessServerRole";
|
|
33
|
-
import { NamirasoftAccessServerRoleCategory } from "./NamirasoftAccessServerRoleCategory";
|
|
34
|
-
import { NamirasoftAccessServerRoleField } from "./NamirasoftAccessServerRoleField";
|
|
35
|
-
import { NamirasoftAccessServerRoleTag } from "./NamirasoftAccessServerRoleTag";
|
|
36
|
-
import { NamirasoftAccessServerUserRole } from "./NamirasoftAccessServerUserRole";
|
|
37
|
-
import { NamirasoftAccessServerValue } from "./NamirasoftAccessServerValue";
|
|
38
|
-
import { TokenManager } from "namirasoft-account";
|
|
39
|
-
|
|
40
|
-
export class NamirasoftAccessServer
|
|
41
|
-
{
|
|
42
|
-
manager: TokenManager;
|
|
43
|
-
healthz: NamirasoftAccessServerHealthz;
|
|
44
|
-
value: NamirasoftAccessServerValue;
|
|
45
|
-
permissioncategory: NamirasoftAccessServerPermissionCategory;
|
|
46
|
-
permissionfield: NamirasoftAccessServerPermissionField;
|
|
47
|
-
permissiontag: NamirasoftAccessServerPermissionTag;
|
|
48
|
-
permission: NamirasoftAccessServerPermission;
|
|
49
|
-
policycategory: NamirasoftAccessServerPolicyCategory;
|
|
50
|
-
policyfield: NamirasoftAccessServerPolicyField;
|
|
51
|
-
policytag: NamirasoftAccessServerPolicyTag;
|
|
52
|
-
policy: NamirasoftAccessServerPolicy;
|
|
53
|
-
rolecategory: NamirasoftAccessServerRoleCategory;
|
|
54
|
-
rolefield: NamirasoftAccessServerRoleField;
|
|
55
|
-
roletag: NamirasoftAccessServerRoleTag;
|
|
56
|
-
role: NamirasoftAccessServerRole;
|
|
57
|
-
access: NamirasoftAccessServerAccess;
|
|
58
|
-
product: NamirasoftAccessServerProduct;
|
|
59
|
-
userrole: NamirasoftAccessServerUserRole;
|
|
60
|
-
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
61
|
-
{
|
|
62
|
-
this.manager = manager;
|
|
63
|
-
this.healthz = new NamirasoftAccessServerHealthz(base_url, manager, onError);
|
|
64
|
-
this.value = new NamirasoftAccessServerValue(base_url, manager, onError);
|
|
65
|
-
this.permissioncategory = new NamirasoftAccessServerPermissionCategory(base_url, manager, onError);
|
|
66
|
-
this.permissionfield = new NamirasoftAccessServerPermissionField(base_url, manager, onError);
|
|
67
|
-
this.permissiontag = new NamirasoftAccessServerPermissionTag(base_url, manager, onError);
|
|
68
|
-
this.permission = new NamirasoftAccessServerPermission(base_url, manager, onError);
|
|
69
|
-
this.policycategory = new NamirasoftAccessServerPolicyCategory(base_url, manager, onError);
|
|
70
|
-
this.policyfield = new NamirasoftAccessServerPolicyField(base_url, manager, onError);
|
|
71
|
-
this.policytag = new NamirasoftAccessServerPolicyTag(base_url, manager, onError);
|
|
72
|
-
this.policy = new NamirasoftAccessServerPolicy(base_url, manager, onError);
|
|
73
|
-
this.rolecategory = new NamirasoftAccessServerRoleCategory(base_url, manager, onError);
|
|
74
|
-
this.rolefield = new NamirasoftAccessServerRoleField(base_url, manager, onError);
|
|
75
|
-
this.roletag = new NamirasoftAccessServerRoleTag(base_url, manager, onError);
|
|
76
|
-
this.role = new NamirasoftAccessServerRole(base_url, manager, onError);
|
|
77
|
-
this.access = new NamirasoftAccessServerAccess(base_url, manager, onError);
|
|
78
|
-
this.product = new NamirasoftAccessServerProduct(base_url, manager, onError);
|
|
79
|
-
this.userrole = new NamirasoftAccessServerUserRole(base_url, manager, onError);
|
|
80
|
-
}
|
|
1
|
+
/****************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* This is an Auto-Generated File */
|
|
4
|
+
/* Made By */
|
|
5
|
+
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
+
/* */
|
|
7
|
+
/****************************************************************/
|
|
8
|
+
/****************************************************************/
|
|
9
|
+
/* */
|
|
10
|
+
/* Please do not make any change to this file */
|
|
11
|
+
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
+
/* */
|
|
13
|
+
/****************************************************************/
|
|
14
|
+
/****************************************************************/
|
|
15
|
+
/* */
|
|
16
|
+
/* Namira Software Corporation */
|
|
17
|
+
/* https://namirasoft.com */
|
|
18
|
+
/* */
|
|
19
|
+
/****************************************************************/
|
|
20
|
+
|
|
21
|
+
import { NamirasoftAccessServerAccess } from "./NamirasoftAccessServerAccess";
|
|
22
|
+
import { NamirasoftAccessServerHealthz } from "./NamirasoftAccessServerHealthz";
|
|
23
|
+
import { NamirasoftAccessServerPermission } from "./NamirasoftAccessServerPermission";
|
|
24
|
+
import { NamirasoftAccessServerPermissionCategory } from "./NamirasoftAccessServerPermissionCategory";
|
|
25
|
+
import { NamirasoftAccessServerPermissionField } from "./NamirasoftAccessServerPermissionField";
|
|
26
|
+
import { NamirasoftAccessServerPermissionTag } from "./NamirasoftAccessServerPermissionTag";
|
|
27
|
+
import { NamirasoftAccessServerPolicy } from "./NamirasoftAccessServerPolicy";
|
|
28
|
+
import { NamirasoftAccessServerPolicyCategory } from "./NamirasoftAccessServerPolicyCategory";
|
|
29
|
+
import { NamirasoftAccessServerPolicyField } from "./NamirasoftAccessServerPolicyField";
|
|
30
|
+
import { NamirasoftAccessServerPolicyTag } from "./NamirasoftAccessServerPolicyTag";
|
|
31
|
+
import { NamirasoftAccessServerProduct } from "./NamirasoftAccessServerProduct";
|
|
32
|
+
import { NamirasoftAccessServerRole } from "./NamirasoftAccessServerRole";
|
|
33
|
+
import { NamirasoftAccessServerRoleCategory } from "./NamirasoftAccessServerRoleCategory";
|
|
34
|
+
import { NamirasoftAccessServerRoleField } from "./NamirasoftAccessServerRoleField";
|
|
35
|
+
import { NamirasoftAccessServerRoleTag } from "./NamirasoftAccessServerRoleTag";
|
|
36
|
+
import { NamirasoftAccessServerUserRole } from "./NamirasoftAccessServerUserRole";
|
|
37
|
+
import { NamirasoftAccessServerValue } from "./NamirasoftAccessServerValue";
|
|
38
|
+
import { TokenManager } from "namirasoft-account";
|
|
39
|
+
|
|
40
|
+
export class NamirasoftAccessServer
|
|
41
|
+
{
|
|
42
|
+
manager: TokenManager;
|
|
43
|
+
healthz: NamirasoftAccessServerHealthz;
|
|
44
|
+
value: NamirasoftAccessServerValue;
|
|
45
|
+
permissioncategory: NamirasoftAccessServerPermissionCategory;
|
|
46
|
+
permissionfield: NamirasoftAccessServerPermissionField;
|
|
47
|
+
permissiontag: NamirasoftAccessServerPermissionTag;
|
|
48
|
+
permission: NamirasoftAccessServerPermission;
|
|
49
|
+
policycategory: NamirasoftAccessServerPolicyCategory;
|
|
50
|
+
policyfield: NamirasoftAccessServerPolicyField;
|
|
51
|
+
policytag: NamirasoftAccessServerPolicyTag;
|
|
52
|
+
policy: NamirasoftAccessServerPolicy;
|
|
53
|
+
rolecategory: NamirasoftAccessServerRoleCategory;
|
|
54
|
+
rolefield: NamirasoftAccessServerRoleField;
|
|
55
|
+
roletag: NamirasoftAccessServerRoleTag;
|
|
56
|
+
role: NamirasoftAccessServerRole;
|
|
57
|
+
access: NamirasoftAccessServerAccess;
|
|
58
|
+
product: NamirasoftAccessServerProduct;
|
|
59
|
+
userrole: NamirasoftAccessServerUserRole;
|
|
60
|
+
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
61
|
+
{
|
|
62
|
+
this.manager = manager;
|
|
63
|
+
this.healthz = new NamirasoftAccessServerHealthz(base_url, manager, onError);
|
|
64
|
+
this.value = new NamirasoftAccessServerValue(base_url, manager, onError);
|
|
65
|
+
this.permissioncategory = new NamirasoftAccessServerPermissionCategory(base_url, manager, onError);
|
|
66
|
+
this.permissionfield = new NamirasoftAccessServerPermissionField(base_url, manager, onError);
|
|
67
|
+
this.permissiontag = new NamirasoftAccessServerPermissionTag(base_url, manager, onError);
|
|
68
|
+
this.permission = new NamirasoftAccessServerPermission(base_url, manager, onError);
|
|
69
|
+
this.policycategory = new NamirasoftAccessServerPolicyCategory(base_url, manager, onError);
|
|
70
|
+
this.policyfield = new NamirasoftAccessServerPolicyField(base_url, manager, onError);
|
|
71
|
+
this.policytag = new NamirasoftAccessServerPolicyTag(base_url, manager, onError);
|
|
72
|
+
this.policy = new NamirasoftAccessServerPolicy(base_url, manager, onError);
|
|
73
|
+
this.rolecategory = new NamirasoftAccessServerRoleCategory(base_url, manager, onError);
|
|
74
|
+
this.rolefield = new NamirasoftAccessServerRoleField(base_url, manager, onError);
|
|
75
|
+
this.roletag = new NamirasoftAccessServerRoleTag(base_url, manager, onError);
|
|
76
|
+
this.role = new NamirasoftAccessServerRole(base_url, manager, onError);
|
|
77
|
+
this.access = new NamirasoftAccessServerAccess(base_url, manager, onError);
|
|
78
|
+
this.product = new NamirasoftAccessServerProduct(base_url, manager, onError);
|
|
79
|
+
this.userrole = new NamirasoftAccessServerUserRole(base_url, manager, onError);
|
|
80
|
+
}
|
|
81
81
|
};
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
/****************************************************************/
|
|
2
|
-
/* */
|
|
3
|
-
/* This is an Auto-Generated File */
|
|
4
|
-
/* Made By */
|
|
5
|
-
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
-
/* */
|
|
7
|
-
/****************************************************************/
|
|
8
|
-
/****************************************************************/
|
|
9
|
-
/* */
|
|
10
|
-
/* Please do not make any change to this file */
|
|
11
|
-
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
-
/* */
|
|
13
|
-
/****************************************************************/
|
|
14
|
-
/****************************************************************/
|
|
15
|
-
/* */
|
|
16
|
-
/* Namira Software Corporation */
|
|
17
|
-
/* https://namirasoft.com */
|
|
18
|
-
/* */
|
|
19
|
-
/****************************************************************/
|
|
20
|
-
|
|
21
|
-
import { AccessRow } from "./row/AccessRow";
|
|
22
|
-
import { NamirasoftAccessServerBase } from "./NamirasoftAccessServerBase";
|
|
23
|
-
import { TokenManager } from "namirasoft-account";
|
|
24
|
-
|
|
25
|
-
export class NamirasoftAccessServerAccess extends NamirasoftAccessServerBase
|
|
26
|
-
{
|
|
27
|
-
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
28
|
-
{
|
|
29
|
-
super(base_url, manager, onError);
|
|
30
|
-
this._GetFor = this._GetFor.bind(this);
|
|
31
|
-
this.SetOwner = this.SetOwner.bind(this);
|
|
32
|
-
}
|
|
33
|
-
async _GetFor(user_id: string): Promise<AccessRow>
|
|
34
|
-
{
|
|
35
|
-
let path = `/user/${user_id}/access`;
|
|
36
|
-
let { data } = await this._get<AccessRow>(path, {});
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
async SetOwner(body: { owner_id: (string | null) }): Promise<void>
|
|
40
|
-
{
|
|
41
|
-
let path = `/access/owner`;
|
|
42
|
-
await this._put<void>(path, {}, body);
|
|
43
|
-
}
|
|
1
|
+
/****************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* This is an Auto-Generated File */
|
|
4
|
+
/* Made By */
|
|
5
|
+
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
+
/* */
|
|
7
|
+
/****************************************************************/
|
|
8
|
+
/****************************************************************/
|
|
9
|
+
/* */
|
|
10
|
+
/* Please do not make any change to this file */
|
|
11
|
+
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
+
/* */
|
|
13
|
+
/****************************************************************/
|
|
14
|
+
/****************************************************************/
|
|
15
|
+
/* */
|
|
16
|
+
/* Namira Software Corporation */
|
|
17
|
+
/* https://namirasoft.com */
|
|
18
|
+
/* */
|
|
19
|
+
/****************************************************************/
|
|
20
|
+
|
|
21
|
+
import { AccessRow } from "./row/AccessRow";
|
|
22
|
+
import { NamirasoftAccessServerBase } from "./NamirasoftAccessServerBase";
|
|
23
|
+
import { TokenManager } from "namirasoft-account";
|
|
24
|
+
|
|
25
|
+
export class NamirasoftAccessServerAccess extends NamirasoftAccessServerBase
|
|
26
|
+
{
|
|
27
|
+
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
28
|
+
{
|
|
29
|
+
super(base_url, manager, onError);
|
|
30
|
+
this._GetFor = this._GetFor.bind(this);
|
|
31
|
+
this.SetOwner = this.SetOwner.bind(this);
|
|
32
|
+
}
|
|
33
|
+
async _GetFor(user_id: string): Promise<AccessRow>
|
|
34
|
+
{
|
|
35
|
+
let path = `/user/${user_id}/access`;
|
|
36
|
+
let { data } = await this._get<AccessRow>(path, {});
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
async SetOwner(body: { owner_id: (string | null) }): Promise<void>
|
|
40
|
+
{
|
|
41
|
+
let path = `/access/owner`;
|
|
42
|
+
await this._put<void>(path, {}, body);
|
|
43
|
+
}
|
|
44
44
|
};
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/****************************************************************/
|
|
2
|
-
/* */
|
|
3
|
-
/* This is an Auto-Generated File */
|
|
4
|
-
/* Made By */
|
|
5
|
-
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
-
/* */
|
|
7
|
-
/****************************************************************/
|
|
8
|
-
/****************************************************************/
|
|
9
|
-
/* */
|
|
10
|
-
/* Please do not make any change to this file */
|
|
11
|
-
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
-
/* */
|
|
13
|
-
/****************************************************************/
|
|
14
|
-
/****************************************************************/
|
|
15
|
-
/* */
|
|
16
|
-
/* Namira Software Corporation */
|
|
17
|
-
/* https://namirasoft.com */
|
|
18
|
-
/* */
|
|
19
|
-
/****************************************************************/
|
|
20
|
-
|
|
21
|
-
import { NSABaseServer } from "namirasoft-account";
|
|
22
|
-
import { TokenManager } from "namirasoft-account";
|
|
23
|
-
|
|
24
|
-
export class NamirasoftAccessServerBase extends NSABaseServer
|
|
25
|
-
{
|
|
26
|
-
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
27
|
-
{
|
|
28
|
-
super(base_url, `1.4.47`, manager, onError);
|
|
29
|
-
}
|
|
1
|
+
/****************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* This is an Auto-Generated File */
|
|
4
|
+
/* Made By */
|
|
5
|
+
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
+
/* */
|
|
7
|
+
/****************************************************************/
|
|
8
|
+
/****************************************************************/
|
|
9
|
+
/* */
|
|
10
|
+
/* Please do not make any change to this file */
|
|
11
|
+
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
+
/* */
|
|
13
|
+
/****************************************************************/
|
|
14
|
+
/****************************************************************/
|
|
15
|
+
/* */
|
|
16
|
+
/* Namira Software Corporation */
|
|
17
|
+
/* https://namirasoft.com */
|
|
18
|
+
/* */
|
|
19
|
+
/****************************************************************/
|
|
20
|
+
|
|
21
|
+
import { NSABaseServer } from "namirasoft-account";
|
|
22
|
+
import { TokenManager } from "namirasoft-account";
|
|
23
|
+
|
|
24
|
+
export class NamirasoftAccessServerBase extends NSABaseServer
|
|
25
|
+
{
|
|
26
|
+
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
27
|
+
{
|
|
28
|
+
super(base_url, `1.4.47`, manager, onError);
|
|
29
|
+
}
|
|
30
30
|
};
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
/****************************************************************/
|
|
2
|
-
/* */
|
|
3
|
-
/* This is an Auto-Generated File */
|
|
4
|
-
/* Made By */
|
|
5
|
-
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
-
/* */
|
|
7
|
-
/****************************************************************/
|
|
8
|
-
/****************************************************************/
|
|
9
|
-
/* */
|
|
10
|
-
/* Please do not make any change to this file */
|
|
11
|
-
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
-
/* */
|
|
13
|
-
/****************************************************************/
|
|
14
|
-
/****************************************************************/
|
|
15
|
-
/* */
|
|
16
|
-
/* Namira Software Corporation */
|
|
17
|
-
/* https://namirasoft.com */
|
|
18
|
-
/* */
|
|
19
|
-
/****************************************************************/
|
|
20
|
-
|
|
21
|
-
import { NamirasoftAccessServerBase } from "./NamirasoftAccessServerBase";
|
|
22
|
-
import { TokenManager } from "namirasoft-account";
|
|
23
|
-
|
|
24
|
-
export class NamirasoftAccessServerHealthz extends NamirasoftAccessServerBase
|
|
25
|
-
{
|
|
26
|
-
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
27
|
-
{
|
|
28
|
-
super(base_url, manager, onError);
|
|
29
|
-
this.Get = this.Get.bind(this);
|
|
30
|
-
}
|
|
31
|
-
async Get(): Promise<void>
|
|
32
|
-
{
|
|
33
|
-
let path = `/healthz`;
|
|
34
|
-
await this._get<void>(path, {});
|
|
35
|
-
}
|
|
1
|
+
/****************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* This is an Auto-Generated File */
|
|
4
|
+
/* Made By */
|
|
5
|
+
/* Namirasoft SDK Generator NPM Package */
|
|
6
|
+
/* */
|
|
7
|
+
/****************************************************************/
|
|
8
|
+
/****************************************************************/
|
|
9
|
+
/* */
|
|
10
|
+
/* Please do not make any change to this file */
|
|
11
|
+
/* If any changed is reqired, ns-sdkg command must be used */
|
|
12
|
+
/* */
|
|
13
|
+
/****************************************************************/
|
|
14
|
+
/****************************************************************/
|
|
15
|
+
/* */
|
|
16
|
+
/* Namira Software Corporation */
|
|
17
|
+
/* https://namirasoft.com */
|
|
18
|
+
/* */
|
|
19
|
+
/****************************************************************/
|
|
20
|
+
|
|
21
|
+
import { NamirasoftAccessServerBase } from "./NamirasoftAccessServerBase";
|
|
22
|
+
import { TokenManager } from "namirasoft-account";
|
|
23
|
+
|
|
24
|
+
export class NamirasoftAccessServerHealthz extends NamirasoftAccessServerBase
|
|
25
|
+
{
|
|
26
|
+
constructor(base_url: string, manager: TokenManager, onError: (error: Error) => void)
|
|
27
|
+
{
|
|
28
|
+
super(base_url, manager, onError);
|
|
29
|
+
this.Get = this.Get.bind(this);
|
|
30
|
+
}
|
|
31
|
+
async Get(): Promise<void>
|
|
32
|
+
{
|
|
33
|
+
let path = `/healthz`;
|
|
34
|
+
await this._get<void>(path, {});
|
|
35
|
+
}
|
|
36
36
|
};
|