@platform-mesh/portal-server-lib 0.9.96 → 0.10.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/portal-options/index.d.ts +4 -0
- package/dist/portal-options/index.js +4 -0
- package/dist/portal-options/index.js.map +1 -1
- package/dist/portal-options/service-providers/content-configuration-service-providers.service.d.ts +4 -1
- package/dist/portal-options/service-providers/content-configuration-service-providers.service.js +14 -3
- package/dist/portal-options/service-providers/content-configuration-service-providers.service.js.map +1 -1
- package/dist/portal-options/service-providers/kubernetes-service-providers.service.d.ts +4 -2
- package/dist/portal-options/service-providers/kubernetes-service-providers.service.js +10 -4
- package/dist/portal-options/service-providers/kubernetes-service-providers.service.js.map +1 -1
- package/dist/portal-options/services/kcp-k8s.service.d.ts +0 -1
- package/dist/portal-options/services/kcp-k8s.service.js +4 -13
- package/dist/portal-options/services/kcp-k8s.service.js.map +1 -1
- package/dist/portal-options/services/permissions/adapters/authz-webhook.service.d.ts +14 -0
- package/dist/portal-options/services/permissions/adapters/authz-webhook.service.js +183 -0
- package/dist/portal-options/services/permissions/adapters/authz-webhook.service.js.map +1 -0
- package/dist/portal-options/services/permissions/models/permissions.model.d.ts +51 -0
- package/dist/portal-options/services/permissions/models/permissions.model.js +2 -0
- package/dist/portal-options/services/permissions/models/permissions.model.js.map +1 -0
- package/dist/portal-options/services/permissions/permissions-proxy.service.d.ts +9 -0
- package/dist/portal-options/services/permissions/permissions-proxy.service.js +48 -0
- package/dist/portal-options/services/permissions/permissions-proxy.service.js.map +1 -0
- package/dist/portal-options/services/permissions/permissions.controller.d.ts +9 -0
- package/dist/portal-options/services/permissions/permissions.controller.js +49 -0
- package/dist/portal-options/services/permissions/permissions.controller.js.map +1 -0
- package/dist/portal-options/utils/account-hierarchy-resolver.js +7 -3
- package/dist/portal-options/utils/account-hierarchy-resolver.js.map +1 -1
- package/dist/portal-options/utils/build-workspace-path.util.d.ts +1 -0
- package/dist/portal-options/utils/build-workspace-path.util.js +4 -0
- package/dist/portal-options/utils/build-workspace-path.util.js.map +1 -0
- package/dist/portal-options/utils/extract-resource-definitions.util.d.ts +7 -0
- package/dist/portal-options/utils/extract-resource-definitions.util.js +33 -0
- package/dist/portal-options/utils/extract-resource-definitions.util.js.map +1 -0
- package/package.json +4 -4
- package/src/portal-options/index.ts +4 -0
- package/src/portal-options/service-providers/content-configuration-service-providers.service.spec.ts +8 -1
- package/src/portal-options/service-providers/content-configuration-service-providers.service.ts +17 -6
- package/src/portal-options/service-providers/kubernetes-service-providers.service.spec.ts +13 -4
- package/src/portal-options/service-providers/kubernetes-service-providers.service.ts +21 -8
- package/src/portal-options/services/kcp-k8s.service.ts +4 -15
- package/src/portal-options/services/permissions/adapters/authz-webhook.service.spec.ts +500 -0
- package/src/portal-options/services/permissions/adapters/authz-webhook.service.ts +238 -0
- package/src/portal-options/services/permissions/models/permissions.model.ts +56 -0
- package/src/portal-options/services/permissions/permissions-proxy.service.spec.ts +232 -0
- package/src/portal-options/services/permissions/permissions-proxy.service.ts +58 -0
- package/src/portal-options/services/permissions/permissions.controller.spec.ts +143 -0
- package/src/portal-options/services/permissions/permissions.controller.ts +31 -0
- package/src/portal-options/utils/account-hierarchy-resolver.ts +13 -8
- package/src/portal-options/utils/build-workspace-path.util.spec.ts +59 -0
- package/src/portal-options/utils/build-workspace-path.util.ts +21 -0
- package/src/portal-options/utils/extract-resource-definitions.util.spec.ts +303 -0
- package/src/portal-options/utils/extract-resource-definitions.util.ts +62 -0
- package/tsconfig.json +2 -1
|
@@ -6,3 +6,7 @@ export * from './pm-request-context-provider.js';
|
|
|
6
6
|
export * from './service-providers/content-configuration-service-providers.service.js';
|
|
7
7
|
export * from './service-providers/kubernetes-service-providers.service.js';
|
|
8
8
|
export * from './services/kcp-k8s.service.js';
|
|
9
|
+
export * from './services/permissions/adapters/authz-webhook.service.js';
|
|
10
|
+
export * from './services/permissions/models/permissions.model.js';
|
|
11
|
+
export * from './services/permissions/permissions-proxy.service.js';
|
|
12
|
+
export * from './services/permissions/permissions.controller.js';
|
|
@@ -6,4 +6,8 @@ export * from './pm-request-context-provider.js';
|
|
|
6
6
|
export * from './service-providers/content-configuration-service-providers.service.js';
|
|
7
7
|
export * from './service-providers/kubernetes-service-providers.service.js';
|
|
8
8
|
export * from './services/kcp-k8s.service.js';
|
|
9
|
+
export * from './services/permissions/adapters/authz-webhook.service.js';
|
|
10
|
+
export * from './services/permissions/models/permissions.model.js';
|
|
11
|
+
export * from './services/permissions/permissions-proxy.service.js';
|
|
12
|
+
export * from './services/permissions/permissions.controller.js';
|
|
9
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/portal-options/index.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wEAAwE,CAAC;AACvF,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/portal-options/index.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wEAAwE,CAAC;AACvF,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0DAA0D,CAAC;AACzE,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,kDAAkD,CAAC"}
|
package/dist/portal-options/service-providers/content-configuration-service-providers.service.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { RequestContext } from '../pm-request-context-provider.js';
|
|
2
1
|
import { ServiceProviderResponse, ServiceProviderService } from '@openmfp/portal-server-lib';
|
|
2
|
+
import { RequestContext } from '../pm-request-context-provider.js';
|
|
3
|
+
import { PermissionsProxyService } from '../services/permissions/permissions-proxy.service.js';
|
|
3
4
|
export declare class ContentConfigurationServiceProvidersService implements ServiceProviderService {
|
|
5
|
+
private permissionsProxyService;
|
|
6
|
+
constructor(permissionsProxyService: PermissionsProxyService);
|
|
4
7
|
getServiceProviders(token: string, entities: string[], context: RequestContext): Promise<ServiceProviderResponse>;
|
|
5
8
|
}
|
package/dist/portal-options/service-providers/content-configuration-service-providers.service.js
CHANGED
|
@@ -4,12 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
11
|
+
import { GraphQLClient } from 'graphql-request';
|
|
12
|
+
import { PermissionsProxyService } from '../services/permissions/permissions-proxy.service.js';
|
|
7
13
|
import { processContentConfigurationForAccountHierarchy } from '../utils/account-hierarchy-resolver.js';
|
|
8
14
|
import { contentConfigurationsQuery } from './contentconfigurations-query.js';
|
|
9
15
|
import { welcomeNodeConfig } from './models/welcome-node-config.js';
|
|
10
|
-
import { Injectable } from '@nestjs/common';
|
|
11
|
-
import { GraphQLClient } from 'graphql-request';
|
|
12
16
|
let ContentConfigurationServiceProvidersService = class ContentConfigurationServiceProvidersService {
|
|
17
|
+
permissionsProxyService;
|
|
18
|
+
constructor(permissionsProxyService) {
|
|
19
|
+
this.permissionsProxyService = permissionsProxyService;
|
|
20
|
+
}
|
|
13
21
|
async getServiceProviders(token, entities, context) {
|
|
14
22
|
if (!token) {
|
|
15
23
|
throw new Error('Token is required');
|
|
@@ -60,6 +68,7 @@ let ContentConfigurationServiceProvidersService = class ContentConfigurationServ
|
|
|
60
68
|
throw new Error(`Invalid JSON in configurationResult for item: ${item.metadata?.name || 'unknown'}`);
|
|
61
69
|
}
|
|
62
70
|
});
|
|
71
|
+
const nodesPermissions = await this.permissionsProxyService.resolvePermissions(token, context.organization, accountPath ?? '', contentConfigurations);
|
|
63
72
|
return {
|
|
64
73
|
rawServiceProviders: [
|
|
65
74
|
{
|
|
@@ -67,6 +76,7 @@ let ContentConfigurationServiceProvidersService = class ContentConfigurationServ
|
|
|
67
76
|
displayName: '',
|
|
68
77
|
creationTimestamp: '',
|
|
69
78
|
contentConfiguration: contentConfigurations,
|
|
79
|
+
nodeContext: { nodesPermissions },
|
|
70
80
|
},
|
|
71
81
|
],
|
|
72
82
|
};
|
|
@@ -81,7 +91,8 @@ let ContentConfigurationServiceProvidersService = class ContentConfigurationServ
|
|
|
81
91
|
}
|
|
82
92
|
};
|
|
83
93
|
ContentConfigurationServiceProvidersService = __decorate([
|
|
84
|
-
Injectable()
|
|
94
|
+
Injectable(),
|
|
95
|
+
__metadata("design:paramtypes", [PermissionsProxyService])
|
|
85
96
|
], ContentConfigurationServiceProvidersService);
|
|
86
97
|
export { ContentConfigurationServiceProvidersService };
|
|
87
98
|
//# sourceMappingURL=content-configuration-service-providers.service.js.map
|
package/dist/portal-options/service-providers/content-configuration-service-providers.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-configuration-service-providers.service.js","sourceRoot":"","sources":["../../../src/portal-options/service-providers/content-configuration-service-providers.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-configuration-service-providers.service.js","sourceRoot":"","sources":["../../../src/portal-options/service-providers/content-configuration-service-providers.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAM5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,8CAA8C,EAAE,MAAM,wCAAwC,CAAC;AACxG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAG7D,IAAM,2CAA2C,GAAjD,MAAM,2CAA2C;IAClC;IAApB,YAAoB,uBAAgD;QAAhD,4BAAuB,GAAvB,uBAAuB,CAAyB;IAAG,CAAC;IAExE,KAAK,CAAC,mBAAmB,CACvB,KAAa,EACb,QAAkB,EAClB,OAAuB;QAGvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,GAAG,GAAG,OAAO,CAAC,gBAAiB,CAAC,OAAO,CACzC,iCAAiC,EACjC,yEAAyE,CAC1E,CAAC;QAEF,MAAM,WAAW,GACf,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC,+BAA+B,CAAC,CAAC;QACrE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,WAAW,UAAU,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE;YACpC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,0BAA0B,EAC1B,EAAE,CACH,CAAC;YAGF,IAAI,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,qBAAqB,GACzB,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK;iBAC9D,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,KAAK,MAAM,CAClE;iBACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,CAAC;oBAEH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;wBACtC,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,CAC5E,CAAC;oBACJ,CAAC;oBAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CACrC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CACR,CAAC;oBAE1B,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC;wBAC9B,oBAAoB,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC;oBAChE,CAAC;oBAED,8CAA8C,CAC5C,oBAAoB,EACpB,OAAO,CACR,CAAC;oBAEF,OAAO,oBAAoB,CAAC;gBAC9B,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBAEpB,OAAO,CAAC,KAAK,CACX,0CAA0C,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,GAAG,EAC7E,UAAU,CACX,CAAC;oBAGF,IACE,UAAU,YAAY,KAAK;wBAC3B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAC1D,CAAC;wBACD,MAAM,UAAU,CAAC;oBACnB,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,iDAAiD,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,CACpF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEP,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC5E,KAAK,EACL,OAAO,CAAC,YAAY,EACpB,WAAW,IAAI,EAAE,EACjB,qBAAqB,CACtB,CAAC;YAEF,OAAO;gBACL,mBAAmB,EAAE;oBACnB;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,WAAW,EAAE,EAAE;wBACf,iBAAiB,EAAE,EAAE;wBACrB,oBAAoB,EAAE,qBAAqB;wBAC3C,WAAW,EAAE,EAAE,gBAAgB,EAAE;qBAClC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IACE,KAAK,YAAY,KAAK;gBACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC7C,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACtG,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AArIY,2CAA2C;IADvD,UAAU,EAAE;qCAEkC,uBAAuB;GADzD,2CAA2C,CAqIvD"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { KcpKubernetesService } from '../services/kcp-k8s.service.js';
|
|
2
1
|
import { ServiceProviderResponse, ServiceProviderService } from '@openmfp/portal-server-lib';
|
|
2
|
+
import { KcpKubernetesService } from '../services/kcp-k8s.service.js';
|
|
3
|
+
import { PermissionsProxyService } from '../services/permissions/permissions-proxy.service.js';
|
|
3
4
|
export declare class KubernetesServiceProvidersService implements ServiceProviderService {
|
|
4
5
|
private kcpKubernetesService;
|
|
5
|
-
|
|
6
|
+
private permissionsProxyService;
|
|
7
|
+
constructor(kcpKubernetesService: KcpKubernetesService, permissionsProxyService: PermissionsProxyService);
|
|
6
8
|
getServiceProviders(token: string, entities: string[], context: Record<string, any>): Promise<ServiceProviderResponse>;
|
|
7
9
|
private listContentConfigurationsForEntity;
|
|
8
10
|
}
|
|
@@ -7,14 +7,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
10
11
|
import { KcpKubernetesService } from '../services/kcp-k8s.service.js';
|
|
12
|
+
import { PermissionsProxyService } from '../services/permissions/permissions-proxy.service.js';
|
|
11
13
|
import { processContentConfigurationForAccountHierarchy } from '../utils/account-hierarchy-resolver.js';
|
|
12
14
|
import { welcomeNodeConfig } from './models/welcome-node-config.js';
|
|
13
|
-
import { Injectable } from '@nestjs/common';
|
|
14
15
|
let KubernetesServiceProvidersService = class KubernetesServiceProvidersService {
|
|
15
16
|
kcpKubernetesService;
|
|
16
|
-
|
|
17
|
+
permissionsProxyService;
|
|
18
|
+
constructor(kcpKubernetesService, permissionsProxyService) {
|
|
17
19
|
this.kcpKubernetesService = kcpKubernetesService;
|
|
20
|
+
this.permissionsProxyService = permissionsProxyService;
|
|
18
21
|
}
|
|
19
22
|
async getServiceProviders(token, entities, context) {
|
|
20
23
|
if (!token) {
|
|
@@ -43,6 +46,8 @@ let KubernetesServiceProvidersService = class KubernetesServiceProvidersService
|
|
|
43
46
|
processContentConfigurationForAccountHierarchy(contentConfiguration, context);
|
|
44
47
|
return contentConfiguration;
|
|
45
48
|
});
|
|
49
|
+
const accountPath = context?.accountPath ?? context?.['core_platform-mesh_io_account'] ?? '';
|
|
50
|
+
const nodesPermissions = await this.permissionsProxyService.resolvePermissions(token, context.organization, accountPath, contentConfigurations);
|
|
46
51
|
return {
|
|
47
52
|
rawServiceProviders: [
|
|
48
53
|
{
|
|
@@ -50,6 +55,7 @@ let KubernetesServiceProvidersService = class KubernetesServiceProvidersService
|
|
|
50
55
|
displayName: '',
|
|
51
56
|
creationTimestamp: '',
|
|
52
57
|
contentConfiguration: contentConfigurations,
|
|
58
|
+
nodeContext: { nodesPermissions },
|
|
53
59
|
},
|
|
54
60
|
],
|
|
55
61
|
};
|
|
@@ -67,7 +73,6 @@ let KubernetesServiceProvidersService = class KubernetesServiceProvidersService
|
|
|
67
73
|
console.error(error);
|
|
68
74
|
if (error.code == 429 || error.statusCode == 429) {
|
|
69
75
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
70
|
-
console.log('Retry after 1 second reading kubernetes resources.');
|
|
71
76
|
return await this.kcpKubernetesService.listClusterCustomObjectInKcpVirtualWorkspace(gvr, context, token);
|
|
72
77
|
}
|
|
73
78
|
}
|
|
@@ -76,7 +81,8 @@ let KubernetesServiceProvidersService = class KubernetesServiceProvidersService
|
|
|
76
81
|
};
|
|
77
82
|
KubernetesServiceProvidersService = __decorate([
|
|
78
83
|
Injectable(),
|
|
79
|
-
__metadata("design:paramtypes", [KcpKubernetesService
|
|
84
|
+
__metadata("design:paramtypes", [KcpKubernetesService,
|
|
85
|
+
PermissionsProxyService])
|
|
80
86
|
], KubernetesServiceProvidersService);
|
|
81
87
|
export { KubernetesServiceProvidersService };
|
|
82
88
|
//# sourceMappingURL=kubernetes-service-providers.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kubernetes-service-providers.service.js","sourceRoot":"","sources":["../../../src/portal-options/service-providers/kubernetes-service-providers.service.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"kubernetes-service-providers.service.js","sourceRoot":"","sources":["../../../src/portal-options/service-providers/kubernetes-service-providers.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,6 @@ export declare class KcpKubernetesService {
|
|
|
15
15
|
getKcpK8sCustomObjectsApiOIDCUser(): CustomObjectsApi;
|
|
16
16
|
getKcpK8sCustomObjectsApi(): CustomObjectsApi;
|
|
17
17
|
getKcpK8sCoreV1Api(): CoreV1Api;
|
|
18
|
-
private buildWorkspacePath;
|
|
19
18
|
getKcpVirtualWorkspaceUrl(organization: string, account: string): URL;
|
|
20
19
|
getKcpWorkspaceUrl(organization?: string, account?: string, workspacePath?: string): URL;
|
|
21
20
|
getKcpWorkspacePublicUrl(request: Request): string;
|
|
@@ -8,6 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
var KcpKubernetesService_1;
|
|
11
|
+
import { buildWorkspacePath } from '../utils/build-workspace-path.util.js';
|
|
11
12
|
import { getOrganization } from '../utils/domain.js';
|
|
12
13
|
import { CoreV1Api, CustomObjectsApi, KubeConfig, } from '@kubernetes/client-node';
|
|
13
14
|
import { PromiseMiddlewareWrapper } from '@kubernetes/client-node/dist/gen/middleware.js';
|
|
@@ -58,28 +59,18 @@ let KcpKubernetesService = KcpKubernetesService_1 = class KcpKubernetesService {
|
|
|
58
59
|
getKcpK8sCoreV1Api() {
|
|
59
60
|
return this.k8sCoreV1Api;
|
|
60
61
|
}
|
|
61
|
-
buildWorkspacePath(organization, account) {
|
|
62
|
-
let path = `root:orgs`;
|
|
63
|
-
if (organization) {
|
|
64
|
-
path += `:${organization}`;
|
|
65
|
-
}
|
|
66
|
-
if (account) {
|
|
67
|
-
path += `:${account}`;
|
|
68
|
-
}
|
|
69
|
-
return path;
|
|
70
|
-
}
|
|
71
62
|
getKcpVirtualWorkspaceUrl(organization, account) {
|
|
72
|
-
const path =
|
|
63
|
+
const path = buildWorkspacePath([organization, account]);
|
|
73
64
|
return new URL(`${this.baseUrl.origin}/services/contentconfigurations/clusters/${path}`);
|
|
74
65
|
}
|
|
75
66
|
getKcpWorkspaceUrl(organization, account, workspacePath) {
|
|
76
|
-
const path = workspacePath ||
|
|
67
|
+
const path = workspacePath || buildWorkspacePath([organization, account]);
|
|
77
68
|
return new URL(`${this.baseUrl.origin}/clusters/${path}`);
|
|
78
69
|
}
|
|
79
70
|
getKcpWorkspacePublicUrl(request) {
|
|
80
71
|
const organization = getOrganization(request);
|
|
81
72
|
const account = request.query?.['core_platform-mesh_io_account'];
|
|
82
|
-
const path =
|
|
73
|
+
const path = buildWorkspacePath([organization, account]);
|
|
83
74
|
const kcpUrl = process.env.KCP_URL || '';
|
|
84
75
|
if (kcpUrl) {
|
|
85
76
|
return `${kcpUrl}/clusters/${path}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kcp-k8s.service.js","sourceRoot":"","sources":["../../../src/portal-options/services/kcp-k8s.service.ts"],"names":[],"mappings":";;;;;;;;;;AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IACvB,MAAM,GAAW,IAAI,MAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAE9C,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpD,2BAA2B,CAAmB;IAC9C,mBAAmB,CAAmB;IACtC,YAAY,CAAY;IACxB,OAAO,CAAM;IAErB;QACE,IAAI,CAAC,oCAAoC,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,oCAAoC;QAC1C,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,EAAE,CAAC,OAAO,CAAC;YACT,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,EAAE,CAAC,UAAU,CAAC;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,IAAI,IAAI,EAAE;SAC5C,CAAC,CAAC;QACH,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACxE,CAAC;IAEO,yBAAyB;QAC/B,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC;IAEO,qBAAqB;QAC3B,MAAM,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,iCAAiC;QAC/B,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC1C,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"kcp-k8s.service.js","sourceRoot":"","sources":["../../../src/portal-options/services/kcp-k8s.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HttpService } from '@nestjs/axios';
|
|
2
|
+
import { AuthorizationRequest, IAuthzService, Permission } from '../models/permissions.model.js';
|
|
3
|
+
export declare class AuthzWebhookService implements IAuthzService {
|
|
4
|
+
private readonly httpService;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
private readonly webhookUrl;
|
|
7
|
+
constructor(httpService: HttpService);
|
|
8
|
+
checkActionsForResource(req: AuthorizationRequest): Promise<Permission[] | undefined>;
|
|
9
|
+
checkActionsForInstance(req: AuthorizationRequest): Promise<Permission[] | undefined>;
|
|
10
|
+
private extractUserEmail;
|
|
11
|
+
private sendBatch;
|
|
12
|
+
private mapToPermissions;
|
|
13
|
+
private mapToInstancePermissions;
|
|
14
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var AuthzWebhookService_1;
|
|
11
|
+
import { HttpService } from '@nestjs/axios';
|
|
12
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
13
|
+
import { randomUUID } from 'crypto';
|
|
14
|
+
import { firstValueFrom } from 'rxjs';
|
|
15
|
+
import { buildWorkspacePath } from '../../../utils/build-workspace-path.util.js';
|
|
16
|
+
const CLUSTER_PATH_KEY = 'authorization.kubernetes.io/cluster-path';
|
|
17
|
+
let AuthzWebhookService = AuthzWebhookService_1 = class AuthzWebhookService {
|
|
18
|
+
httpService;
|
|
19
|
+
logger = new Logger(AuthzWebhookService_1.name);
|
|
20
|
+
webhookUrl;
|
|
21
|
+
constructor(httpService) {
|
|
22
|
+
this.httpService = httpService;
|
|
23
|
+
this.webhookUrl = process.env['OPENMFP_PORTAL_CONTEXT_AUTHZ_WEBHOOK_URL'];
|
|
24
|
+
if (!this.webhookUrl) {
|
|
25
|
+
this.logger.warn('OPENMFP_PORTAL_CONTEXT_AUTHZ_WEBHOOK_URL not set — permissions checks are disabled (fail-open)');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async checkActionsForResource(req) {
|
|
29
|
+
if (!this.webhookUrl) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const user = this.extractUserEmail(req.token);
|
|
33
|
+
const clusterPath = buildWorkspacePath([req.organization, req.accountPath]);
|
|
34
|
+
const items = [];
|
|
35
|
+
const correlationMap = new Map();
|
|
36
|
+
for (const check of req.checks) {
|
|
37
|
+
for (const verb of check.actions) {
|
|
38
|
+
const id = randomUUID();
|
|
39
|
+
correlationMap.set(id, { resource: check.resource, verb });
|
|
40
|
+
items.push({
|
|
41
|
+
apiVersion: 'authorization.k8s.io/v1',
|
|
42
|
+
kind: 'SubjectAccessReview',
|
|
43
|
+
metadata: { name: id },
|
|
44
|
+
spec: {
|
|
45
|
+
user,
|
|
46
|
+
extra: { [CLUSTER_PATH_KEY]: [clusterPath] },
|
|
47
|
+
resourceAttributes: {
|
|
48
|
+
verb,
|
|
49
|
+
group: check.group,
|
|
50
|
+
resource: check.resource.toLowerCase(),
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (!items.length) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const results = await this.sendBatch(items);
|
|
60
|
+
if (!results) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
const permissions = this.mapToPermissions(results, correlationMap);
|
|
64
|
+
this.logger.log(`permissions resolved for "${user}" "${clusterPath}": ${JSON.stringify(permissions)}`);
|
|
65
|
+
return permissions;
|
|
66
|
+
}
|
|
67
|
+
async checkActionsForInstance(req) {
|
|
68
|
+
if (!this.webhookUrl) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const user = this.extractUserEmail(req.token);
|
|
72
|
+
const clusterPath = buildWorkspacePath([req.organization, req.accountPath]);
|
|
73
|
+
const items = [];
|
|
74
|
+
const correlationMap = new Map();
|
|
75
|
+
for (const check of req.checks) {
|
|
76
|
+
for (const verb of check.actions) {
|
|
77
|
+
const id = randomUUID();
|
|
78
|
+
correlationMap.set(id, {
|
|
79
|
+
resource: check.resource,
|
|
80
|
+
...(check.namespace ? { namespace: check.namespace } : {}),
|
|
81
|
+
...(check.name ? { name: check.name } : {}),
|
|
82
|
+
verb,
|
|
83
|
+
});
|
|
84
|
+
items.push({
|
|
85
|
+
apiVersion: 'authorization.k8s.io/v1',
|
|
86
|
+
kind: 'SubjectAccessReview',
|
|
87
|
+
metadata: { name: id },
|
|
88
|
+
spec: {
|
|
89
|
+
user,
|
|
90
|
+
extra: { [CLUSTER_PATH_KEY]: [clusterPath] },
|
|
91
|
+
resourceAttributes: {
|
|
92
|
+
verb,
|
|
93
|
+
group: check.group,
|
|
94
|
+
resource: check.resource.toLowerCase(),
|
|
95
|
+
namespace: check.namespace,
|
|
96
|
+
name: check.name,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!items.length) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
const results = await this.sendBatch(items);
|
|
106
|
+
if (!results) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
return this.mapToInstancePermissions(results, correlationMap);
|
|
110
|
+
}
|
|
111
|
+
extractUserEmail(token) {
|
|
112
|
+
try {
|
|
113
|
+
const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64url').toString());
|
|
114
|
+
return payload.email ?? '';
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return '';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async sendBatch(items) {
|
|
121
|
+
try {
|
|
122
|
+
const response = await firstValueFrom(this.httpService.post(`${this.webhookUrl}/batch-authz `, items, {
|
|
123
|
+
headers: { 'Content-Type': 'application/json' },
|
|
124
|
+
}));
|
|
125
|
+
const results = Array.isArray(response.data) ? response.data : [];
|
|
126
|
+
return results.reduce((acc, result) => {
|
|
127
|
+
acc[result.id] = result.allowed;
|
|
128
|
+
return acc;
|
|
129
|
+
}, {});
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
this.logger.error('authz-webhook batch-authz failed — failing open', err);
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
mapToPermissions(results, correlationMap) {
|
|
137
|
+
const permissionsMap = new Map();
|
|
138
|
+
for (const [id, allowed] of Object.entries(results)) {
|
|
139
|
+
if (!allowed) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const entry = correlationMap.get(id);
|
|
143
|
+
if (!entry) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const actions = permissionsMap.get(entry.resource) ?? [];
|
|
147
|
+
actions.push(entry.verb);
|
|
148
|
+
permissionsMap.set(entry.resource, actions);
|
|
149
|
+
}
|
|
150
|
+
return Array.from(permissionsMap.entries()).map(([resource, actions]) => ({
|
|
151
|
+
resource,
|
|
152
|
+
actions,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
mapToInstancePermissions(results, correlationMap) {
|
|
156
|
+
const permissionsMap = new Map();
|
|
157
|
+
for (const [id, allowed] of Object.entries(results)) {
|
|
158
|
+
if (!allowed) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const entry = correlationMap.get(id);
|
|
162
|
+
if (!entry) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const key = `${entry.resource}|${entry.namespace ?? ''}|${entry.name ?? ''}`;
|
|
166
|
+
const permission = permissionsMap.get(key) ?? {
|
|
167
|
+
resource: entry.resource,
|
|
168
|
+
...(entry.namespace ? { namespace: entry.namespace } : {}),
|
|
169
|
+
...(entry.name ? { name: entry.name } : {}),
|
|
170
|
+
actions: [],
|
|
171
|
+
};
|
|
172
|
+
permission.actions.push(entry.verb);
|
|
173
|
+
permissionsMap.set(key, permission);
|
|
174
|
+
}
|
|
175
|
+
return Array.from(permissionsMap.values());
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
AuthzWebhookService = AuthzWebhookService_1 = __decorate([
|
|
179
|
+
Injectable(),
|
|
180
|
+
__metadata("design:paramtypes", [HttpService])
|
|
181
|
+
], AuthzWebhookService);
|
|
182
|
+
export { AuthzWebhookService };
|
|
183
|
+
//# sourceMappingURL=authz-webhook.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authz-webhook.service.js","sourceRoot":"","sources":["../../../../../src/portal-options/services/permissions/adapters/authz-webhook.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAKjF,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAQ7D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAID;IAHZ,MAAM,GAAG,IAAI,MAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAqB;IAEhD,YAA6B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QACnD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,gGAAgG,CACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,uBAAuB,CAC3B,GAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5E,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA8C,CAAC;QAE7E,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;gBACxB,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC;oBACT,UAAU,EAAE,yBAAyB;oBACrC,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;oBACtB,IAAI,EAAE;wBACJ,IAAI;wBACJ,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;wBAC5C,kBAAkB,EAAE;4BAClB,IAAI;4BACJ,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;yBACvC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,6BAA6B,IAAI,MAAM,WAAW,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CACtF,CAAC;QACF,OAAO,WAAW,CAAC;IACrB,CAAC;IAGD,KAAK,CAAC,uBAAuB,CAC3B,GAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5E,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;QAEJ,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;gBACxB,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE;oBACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,IAAI;iBACL,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC;oBACT,UAAU,EAAE,yBAAyB;oBACrC,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;oBACtB,IAAI,EAAE;wBACJ,IAAI;wBACJ,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;wBAC5C,kBAAkB,EAAE;4BAClB,IAAI;4BACJ,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;4BAEtC,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;yBACjB;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CACzD,CAAC;YACF,OAAO,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,KAA4B;QAE5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,GAAG,IAAI,CAAC,UAAU,eAAe,EACjC,KAAK,EACL;gBACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CACF,CACF,CAAC;YAEF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,OAAO,CAAC,MAAM,CAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC7D,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;gBAChC,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,gBAAgB,CACtB,OAAgC,EAChC,cAA+D;QAE/D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEnD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACxE,QAAQ;YACR,OAAO;SACR,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,wBAAwB,CAC9B,OAAgC,EAChC,cAGC;QAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;QAEJ,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC7E,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;gBAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AA5NY,mBAAmB;IAD/B,UAAU,EAAE;qCAK+B,WAAW;GAJ1C,mBAAmB,CA4N/B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface PermissionsDefinition {
|
|
2
|
+
group: string;
|
|
3
|
+
resource: string;
|
|
4
|
+
entityActions: string[];
|
|
5
|
+
resourceActions: string[];
|
|
6
|
+
entityContextKey: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AuthorizationRequest {
|
|
9
|
+
token: string;
|
|
10
|
+
organization: string;
|
|
11
|
+
accountPath: string;
|
|
12
|
+
checks: {
|
|
13
|
+
resource: string;
|
|
14
|
+
group: string;
|
|
15
|
+
namespace?: string | null;
|
|
16
|
+
name?: string;
|
|
17
|
+
actions: string[];
|
|
18
|
+
}[];
|
|
19
|
+
}
|
|
20
|
+
export interface Permission {
|
|
21
|
+
resource: string;
|
|
22
|
+
namespace?: string;
|
|
23
|
+
name?: string;
|
|
24
|
+
actions: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface AuthorizationResponse {
|
|
27
|
+
accountPath: string;
|
|
28
|
+
permissions: Permission[];
|
|
29
|
+
}
|
|
30
|
+
export interface SubjectAccessReview {
|
|
31
|
+
apiVersion?: string;
|
|
32
|
+
kind?: string;
|
|
33
|
+
metadata: {
|
|
34
|
+
name: string;
|
|
35
|
+
};
|
|
36
|
+
spec: {
|
|
37
|
+
user: string;
|
|
38
|
+
extra: Record<string, string[]>;
|
|
39
|
+
resourceAttributes: {
|
|
40
|
+
verb: string;
|
|
41
|
+
group: string;
|
|
42
|
+
resource: string;
|
|
43
|
+
namespace?: string | null;
|
|
44
|
+
name?: string | null;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface IAuthzService {
|
|
49
|
+
checkActionsForResource(req: AuthorizationRequest): Promise<Permission[] | undefined>;
|
|
50
|
+
checkActionsForInstance(req: AuthorizationRequest): Promise<Permission[] | undefined>;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.model.js","sourceRoot":"","sources":["../../../../../src/portal-options/services/permissions/models/permissions.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ContentConfiguration } from '@openmfp/portal-server-lib';
|
|
2
|
+
import { AuthzWebhookService } from './adapters/authz-webhook.service.js';
|
|
3
|
+
import { AuthorizationRequest, Permission } from './models/permissions.model.js';
|
|
4
|
+
export declare class PermissionsProxyService {
|
|
5
|
+
private readonly authzWebhook;
|
|
6
|
+
constructor(authzWebhook: AuthzWebhookService);
|
|
7
|
+
resolvePermissions(token: string, organization: string, accountPath: string, contentConfigurations: ContentConfiguration[]): Promise<Permission[] | undefined>;
|
|
8
|
+
checkResourceInstance(req: AuthorizationRequest): Promise<Permission[] | undefined>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
11
|
+
import { extractResourceDefinitions } from '../../utils/extract-resource-definitions.util.js';
|
|
12
|
+
import { AuthzWebhookService } from './adapters/authz-webhook.service.js';
|
|
13
|
+
let PermissionsProxyService = class PermissionsProxyService {
|
|
14
|
+
authzWebhook;
|
|
15
|
+
constructor(authzWebhook) {
|
|
16
|
+
this.authzWebhook = authzWebhook;
|
|
17
|
+
}
|
|
18
|
+
async resolvePermissions(token, organization, accountPath, contentConfigurations) {
|
|
19
|
+
const resourceDefinitions = extractResourceDefinitions(contentConfigurations);
|
|
20
|
+
const checks = resourceDefinitions
|
|
21
|
+
.map((rd) => rd.permissionsDefinition)
|
|
22
|
+
.filter((pd) => !!pd && pd.resourceActions.length > 0)
|
|
23
|
+
.map((pd) => ({
|
|
24
|
+
resource: pd.resource,
|
|
25
|
+
group: pd.group,
|
|
26
|
+
actions: pd.resourceActions,
|
|
27
|
+
}));
|
|
28
|
+
if (!checks.length) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const req = {
|
|
32
|
+
token,
|
|
33
|
+
organization,
|
|
34
|
+
accountPath,
|
|
35
|
+
checks,
|
|
36
|
+
};
|
|
37
|
+
return this.authzWebhook.checkActionsForResource(req);
|
|
38
|
+
}
|
|
39
|
+
async checkResourceInstance(req) {
|
|
40
|
+
return this.authzWebhook.checkActionsForInstance(req);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
PermissionsProxyService = __decorate([
|
|
44
|
+
Injectable(),
|
|
45
|
+
__metadata("design:paramtypes", [AuthzWebhookService])
|
|
46
|
+
], PermissionsProxyService);
|
|
47
|
+
export { PermissionsProxyService };
|
|
48
|
+
//# sourceMappingURL=permissions-proxy.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-proxy.service.js","sourceRoot":"","sources":["../../../../src/portal-options/services/permissions/permissions-proxy.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAQnE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACL;IAA7B,YAA6B,YAAiC;QAAjC,iBAAY,GAAZ,YAAY,CAAqB;IAAG,CAAC;IAGlE,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,YAAoB,EACpB,WAAmB,EACnB,qBAA6C;QAE7C,MAAM,mBAAmB,GAAG,0BAA0B,CACpD,qBAAqB,CACtB,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB;aAC/B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC;aACrC,MAAM,CACL,CAAC,EAAE,EAA+B,EAAE,CAClC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CACxC;aACA,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACZ,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,OAAO,EAAE,EAAE,CAAC,eAAe;SAC5B,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,GAAG,GAAyB;YAChC,KAAK;YACL,YAAY;YACZ,WAAW;YACX,MAAM;SACP,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAGD,KAAK,CAAC,qBAAqB,CACzB,GAAyB;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AA9CY,uBAAuB;IADnC,UAAU,EAAE;qCAEgC,mBAAmB;GADnD,uBAAuB,CA8CnC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { HeaderParserService } from '@openmfp/portal-server-lib';
|
|
2
|
+
import { AuthorizationRequest, Permission } from './models/permissions.model.js';
|
|
3
|
+
import { PermissionsProxyService } from './permissions-proxy.service.js';
|
|
4
|
+
export declare class PermissionsController {
|
|
5
|
+
private readonly permissionsProxyService;
|
|
6
|
+
private readonly headerParser;
|
|
7
|
+
constructor(permissionsProxyService: PermissionsProxyService, headerParser: HeaderParserService);
|
|
8
|
+
checkResource(request: Request, body: AuthorizationRequest): Promise<Permission[]>;
|
|
9
|
+
}
|