@carlonicora/nestjs-neo4jsonapi 6.4.0 → 6.5.1

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.
Files changed (80) hide show
  1. package/dist/agents/graph/services/graph.search.service.d.ts +6 -0
  2. package/dist/agents/graph/services/graph.search.service.d.ts.map +1 -1
  3. package/dist/agents/graph/services/graph.search.service.js +51 -10
  4. package/dist/agents/graph/services/graph.search.service.js.map +1 -1
  5. package/dist/common/interfaces/s3.key-access.policy.interface.d.ts +6 -1
  6. package/dist/common/interfaces/s3.key-access.policy.interface.d.ts.map +1 -1
  7. package/dist/common/interfaces/s3.key-access.policy.interface.js +6 -1
  8. package/dist/common/interfaces/s3.key-access.policy.interface.js.map +1 -1
  9. package/dist/core/security/services/security.service.d.ts +4 -0
  10. package/dist/core/security/services/security.service.d.ts.map +1 -1
  11. package/dist/core/security/services/security.service.js +5 -1
  12. package/dist/core/security/services/security.service.js.map +1 -1
  13. package/dist/core/websocket/gateways/event.gateway.d.ts.map +1 -1
  14. package/dist/core/websocket/gateways/event.gateway.js +18 -9
  15. package/dist/core/websocket/gateways/event.gateway.js.map +1 -1
  16. package/dist/core/websocket/services/presence.cron.service.d.ts.map +1 -1
  17. package/dist/core/websocket/services/presence.cron.service.js +3 -2
  18. package/dist/core/websocket/services/presence.cron.service.js.map +1 -1
  19. package/dist/core/websocket/services/websocket.service.d.ts +23 -1
  20. package/dist/core/websocket/services/websocket.service.d.ts.map +1 -1
  21. package/dist/core/websocket/services/websocket.service.js +37 -4
  22. package/dist/core/websocket/services/websocket.service.js.map +1 -1
  23. package/dist/foundations/auth/controllers/auth.controller.d.ts +2 -2
  24. package/dist/foundations/auth/controllers/auth.controller.d.ts.map +1 -1
  25. package/dist/foundations/auth/controllers/auth.controller.js +8 -6
  26. package/dist/foundations/auth/controllers/auth.controller.js.map +1 -1
  27. package/dist/foundations/auth/events/auth.events.d.ts +5 -0
  28. package/dist/foundations/auth/events/auth.events.d.ts.map +1 -1
  29. package/dist/foundations/auth/repositories/auth.repository.d.ts +11 -0
  30. package/dist/foundations/auth/repositories/auth.repository.d.ts.map +1 -1
  31. package/dist/foundations/auth/repositories/auth.repository.js +37 -0
  32. package/dist/foundations/auth/repositories/auth.repository.js.map +1 -1
  33. package/dist/foundations/auth/services/auth.service.d.ts +2 -2
  34. package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
  35. package/dist/foundations/auth/services/auth.service.js +19 -13
  36. package/dist/foundations/auth/services/auth.service.js.map +1 -1
  37. package/dist/foundations/community/repositories/community.repository.d.ts +6 -0
  38. package/dist/foundations/community/repositories/community.repository.d.ts.map +1 -1
  39. package/dist/foundations/community/repositories/community.repository.js +42 -9
  40. package/dist/foundations/community/repositories/community.repository.js.map +1 -1
  41. package/dist/foundations/company/services/company.service.d.ts +3 -1
  42. package/dist/foundations/company/services/company.service.d.ts.map +1 -1
  43. package/dist/foundations/company/services/company.service.js +8 -2
  44. package/dist/foundations/company/services/company.service.js.map +1 -1
  45. package/dist/foundations/how-to/controllers/how-to.controller.d.ts +4 -0
  46. package/dist/foundations/how-to/controllers/how-to.controller.d.ts.map +1 -1
  47. package/dist/foundations/how-to/controllers/how-to.controller.js +12 -0
  48. package/dist/foundations/how-to/controllers/how-to.controller.js.map +1 -1
  49. package/dist/foundations/role/controllers/role.controller.d.ts.map +1 -1
  50. package/dist/foundations/role/controllers/role.controller.js +8 -0
  51. package/dist/foundations/role/controllers/role.controller.js.map +1 -1
  52. package/dist/foundations/s3/controllers/s3.controller.d.ts +3 -8
  53. package/dist/foundations/s3/controllers/s3.controller.d.ts.map +1 -1
  54. package/dist/foundations/s3/controllers/s3.controller.js +10 -29
  55. package/dist/foundations/s3/controllers/s3.controller.js.map +1 -1
  56. package/dist/foundations/s3/index.d.ts +1 -0
  57. package/dist/foundations/s3/index.d.ts.map +1 -1
  58. package/dist/foundations/s3/index.js +1 -0
  59. package/dist/foundations/s3/index.js.map +1 -1
  60. package/dist/foundations/s3/s3.service.module.d.ts +2 -1
  61. package/dist/foundations/s3/s3.service.module.d.ts.map +1 -1
  62. package/dist/foundations/s3/s3.service.module.js +5 -3
  63. package/dist/foundations/s3/s3.service.module.js.map +1 -1
  64. package/dist/foundations/s3/services/s3-client-key.service.d.ts +64 -0
  65. package/dist/foundations/s3/services/s3-client-key.service.d.ts.map +1 -0
  66. package/dist/foundations/s3/services/s3-client-key.service.js +120 -0
  67. package/dist/foundations/s3/services/s3-client-key.service.js.map +1 -0
  68. package/dist/foundations/user/controllers/user.controller.d.ts +20 -2
  69. package/dist/foundations/user/controllers/user.controller.d.ts.map +1 -1
  70. package/dist/foundations/user/controllers/user.controller.js +89 -35
  71. package/dist/foundations/user/controllers/user.controller.js.map +1 -1
  72. package/dist/foundations/user/repositories/user.repository.d.ts +35 -0
  73. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  74. package/dist/foundations/user/repositories/user.repository.js +60 -13
  75. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  76. package/dist/foundations/user/services/user.service.d.ts +21 -1
  77. package/dist/foundations/user/services/user.service.d.ts.map +1 -1
  78. package/dist/foundations/user/services/user.service.js +37 -3
  79. package/dist/foundations/user/services/user.service.js.map +1 -1
  80. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"s3.service.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/s3/s3.service.module.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAIa,eAAe;CAAG"}
1
+ {"version":3,"file":"s3.service.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/s3/s3.service.module.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAIa,eAAe;CAAG"}
@@ -9,11 +9,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.S3ServiceModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const s3_cipher_service_1 = require("./services/s3-cipher.service");
12
+ const s3_client_key_service_1 = require("./services/s3-client-key.service");
12
13
  const s3_service_1 = require("./services/s3.service");
13
14
  /**
14
15
  * S3 Service Module
15
16
  *
16
- * Provides S3Service (and the S3CipherService it depends on) and NOTHING else — no controller, no serialiser.
17
+ * Provides S3Service (and the S3CipherService it depends on) and S3ClientKeyService (the S3 key access
18
+ * check for client-supplied keys) and NOTHING else — no controller, no serialiser.
17
19
  *
18
20
  * WHY THIS EXISTS: S3Service used to be registered TWICE — once by S3Module,
19
21
  * and once directly in MigratorModule's `providers` (so the migrator could
@@ -42,8 +44,8 @@ let S3ServiceModule = class S3ServiceModule {
42
44
  exports.S3ServiceModule = S3ServiceModule;
43
45
  exports.S3ServiceModule = S3ServiceModule = __decorate([
44
46
  (0, common_1.Module)({
45
- providers: [s3_service_1.S3Service, s3_cipher_service_1.S3CipherService],
46
- exports: [s3_service_1.S3Service, s3_cipher_service_1.S3CipherService],
47
+ providers: [s3_service_1.S3Service, s3_cipher_service_1.S3CipherService, s3_client_key_service_1.S3ClientKeyService],
48
+ exports: [s3_service_1.S3Service, s3_cipher_service_1.S3CipherService, s3_client_key_service_1.S3ClientKeyService],
47
49
  })
48
50
  ], S3ServiceModule);
49
51
  //# sourceMappingURL=s3.service.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3.service.module.js","sourceRoot":"","sources":["../../../src/foundations/s3/s3.service.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,oEAA+D;AAC/D,sDAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKI,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAJ3B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,sBAAS,EAAE,mCAAe,CAAC;QACvC,OAAO,EAAE,CAAC,sBAAS,EAAE,mCAAe,CAAC;KACtC,CAAC;GACW,eAAe,CAAG"}
1
+ {"version":3,"file":"s3.service.module.js","sourceRoot":"","sources":["../../../src/foundations/s3/s3.service.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,oEAA+D;AAC/D,4EAAsE;AACtE,sDAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKI,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAJ3B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,sBAAS,EAAE,mCAAe,EAAE,0CAAkB,CAAC;QAC3D,OAAO,EAAE,CAAC,sBAAS,EAAE,mCAAe,EAAE,0CAAkB,CAAC;KAC1D,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,64 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { S3KeyAccessPolicy, S3KeyAction } from "../../../common/interfaces/s3.key-access.policy.interface";
3
+ /**
4
+ * Runs the bound `S3_KEY_ACCESS_POLICY` on an object key for the current
5
+ * caller (`userId`, `companyId` and `roles` from the request CLS context, the
6
+ * same values the repositories scope by).
7
+ *
8
+ * Two entry points:
9
+ *
10
+ * - `assertKeyAccess` — the `/s3` routes (presign, sign, delete). A malformed
11
+ * key is refused (400) whether or not a policy is bound.
12
+ * - `assertClientKey` — a key the CLIENT sent in a request body (an avatar, a
13
+ * logo, an uploaded file the entity will point at), run by a service before
14
+ * the key is stored or read server-side.
15
+ *
16
+ * When no policy is bound, `assertClientKey` allows every value, exactly as
17
+ * before the check existed: an application that wants body keys checked binds
18
+ * `S3_KEY_ACCESS_POLICY`.
19
+ */
20
+ export declare class S3ClientKeyService {
21
+ private readonly clsService;
22
+ private readonly keyPolicy?;
23
+ constructor(clsService: ClsService, keyPolicy?: S3KeyAccessPolicy);
24
+ /**
25
+ * Rejects a malformed key (400) whether or not a policy is bound, then asks
26
+ * the bound policy, if any, and rejects a refusal (403).
27
+ */
28
+ assertKeyAccess(params: {
29
+ key: unknown;
30
+ action: S3KeyAction;
31
+ isPublic: boolean | string | undefined;
32
+ }): Promise<void>;
33
+ /**
34
+ * Service-side check for a key the CLIENT sent in a request body (a
35
+ * document url, an avatar, a logo, an uploaded file…), run before the key is
36
+ * stored or read. The stored key is later signed for whoever reads the
37
+ * entity, so a key the caller may not download must never be accepted.
38
+ *
39
+ * Absent values pass (nothing to check). An absolute http(s) URL is not an
40
+ * S3 key and passes untouched: the callers already branch on it, or store
41
+ * it as a literal link (the web user editor sends back the signed avatar
42
+ * URL it was given).
43
+ *
44
+ * No policy bound: every value passes, as before (see the class comment).
45
+ *
46
+ * Otherwise a malformed key (`isWellFormedS3Key`) is refused with a 400,
47
+ * and the bound policy decides with `action` (default `download`, since the
48
+ * stored key is signed for every reader) and `isPublic: false`; a refusal
49
+ * is a 403.
50
+ *
51
+ * `folder` is set by the avatar / image / logo fields: the key must then sit
52
+ * in that field's own folder, `companies/<cid>/<folder>/…` (`users` for the
53
+ * avatar, `companies` for the logo), so such a field cannot point at another
54
+ * kind of file (a recording, an export) of the same company. No
55
+ * Administrator bypass on the folder; the policy still decides the company.
56
+ */
57
+ assertClientKey(params: {
58
+ key: string | null | undefined;
59
+ action?: S3KeyAction;
60
+ folder?: string;
61
+ }): Promise<void>;
62
+ private _canAccess;
63
+ }
64
+ //# sourceMappingURL=s3-client-key.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-client-key.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/s3/services/s3-client-key.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAGL,iBAAiB,EACjB,WAAW,EACZ,MAAM,2DAA2D,CAAC;AAEnE;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAG3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAHV,UAAU,EAAE,UAAU,EAGtB,SAAS,CAAC,EAAE,iBAAiB;IAGhD;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,GAAG,EAAE,OAAO,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;KACxC,GAAG,OAAO,CAAC,IAAI,CAAC;IAejB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;YAoBH,UAAU;CAUzB"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.S3ClientKeyService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const nestjs_cls_1 = require("nestjs-cls");
18
+ const s3_key_access_policy_interface_1 = require("../../../common/interfaces/s3.key-access.policy.interface");
19
+ /**
20
+ * Runs the bound `S3_KEY_ACCESS_POLICY` on an object key for the current
21
+ * caller (`userId`, `companyId` and `roles` from the request CLS context, the
22
+ * same values the repositories scope by).
23
+ *
24
+ * Two entry points:
25
+ *
26
+ * - `assertKeyAccess` — the `/s3` routes (presign, sign, delete). A malformed
27
+ * key is refused (400) whether or not a policy is bound.
28
+ * - `assertClientKey` — a key the CLIENT sent in a request body (an avatar, a
29
+ * logo, an uploaded file the entity will point at), run by a service before
30
+ * the key is stored or read server-side.
31
+ *
32
+ * When no policy is bound, `assertClientKey` allows every value, exactly as
33
+ * before the check existed: an application that wants body keys checked binds
34
+ * `S3_KEY_ACCESS_POLICY`.
35
+ */
36
+ let S3ClientKeyService = class S3ClientKeyService {
37
+ constructor(clsService, keyPolicy) {
38
+ this.clsService = clsService;
39
+ this.keyPolicy = keyPolicy;
40
+ }
41
+ /**
42
+ * Rejects a malformed key (400) whether or not a policy is bound, then asks
43
+ * the bound policy, if any, and rejects a refusal (403).
44
+ */
45
+ async assertKeyAccess(params) {
46
+ if (!(0, s3_key_access_policy_interface_1.isWellFormedS3Key)(params.key))
47
+ throw new common_1.BadRequestException("Invalid S3 key");
48
+ if (!this.keyPolicy)
49
+ return;
50
+ const allowed = await this._canAccess({
51
+ key: params.key,
52
+ action: params.action,
53
+ // Query params arrive as strings: "true" is the only truthy value the clients send.
54
+ isPublic: params.isPublic === true || params.isPublic === "true",
55
+ });
56
+ if (!allowed)
57
+ throw new common_1.ForbiddenException("You cannot access this file.");
58
+ }
59
+ /**
60
+ * Service-side check for a key the CLIENT sent in a request body (a
61
+ * document url, an avatar, a logo, an uploaded file…), run before the key is
62
+ * stored or read. The stored key is later signed for whoever reads the
63
+ * entity, so a key the caller may not download must never be accepted.
64
+ *
65
+ * Absent values pass (nothing to check). An absolute http(s) URL is not an
66
+ * S3 key and passes untouched: the callers already branch on it, or store
67
+ * it as a literal link (the web user editor sends back the signed avatar
68
+ * URL it was given).
69
+ *
70
+ * No policy bound: every value passes, as before (see the class comment).
71
+ *
72
+ * Otherwise a malformed key (`isWellFormedS3Key`) is refused with a 400,
73
+ * and the bound policy decides with `action` (default `download`, since the
74
+ * stored key is signed for every reader) and `isPublic: false`; a refusal
75
+ * is a 403.
76
+ *
77
+ * `folder` is set by the avatar / image / logo fields: the key must then sit
78
+ * in that field's own folder, `companies/<cid>/<folder>/…` (`users` for the
79
+ * avatar, `companies` for the logo), so such a field cannot point at another
80
+ * kind of file (a recording, an export) of the same company. No
81
+ * Administrator bypass on the folder; the policy still decides the company.
82
+ */
83
+ async assertClientKey(params) {
84
+ const key = params.key;
85
+ if (key === undefined || key === null || key === "")
86
+ return;
87
+ if (/^https?:\/\//i.test(key))
88
+ return;
89
+ if (!this.keyPolicy)
90
+ return;
91
+ if (!(0, s3_key_access_policy_interface_1.isWellFormedS3Key)(key))
92
+ throw new common_1.BadRequestException("Invalid S3 key");
93
+ if (params.folder !== undefined) {
94
+ const segments = key.split("/");
95
+ if (segments[0] !== "companies" || segments[2] !== params.folder || segments.length < 5)
96
+ throw new common_1.ForbiddenException("You cannot reference this file.");
97
+ }
98
+ const allowed = await this._canAccess({ key, action: params.action ?? "download", isPublic: false });
99
+ if (!allowed)
100
+ throw new common_1.ForbiddenException("You cannot reference this file.");
101
+ }
102
+ async _canAccess(params) {
103
+ return await this.keyPolicy.canAccess({
104
+ key: params.key,
105
+ action: params.action,
106
+ isPublic: params.isPublic,
107
+ userId: this.clsService.get("userId"),
108
+ companyId: this.clsService.get("companyId"),
109
+ roles: this.clsService.get("roles") ?? [],
110
+ });
111
+ }
112
+ };
113
+ exports.S3ClientKeyService = S3ClientKeyService;
114
+ exports.S3ClientKeyService = S3ClientKeyService = __decorate([
115
+ (0, common_1.Injectable)(),
116
+ __param(1, (0, common_1.Optional)()),
117
+ __param(1, (0, common_1.Inject)(s3_key_access_policy_interface_1.S3_KEY_ACCESS_POLICY)),
118
+ __metadata("design:paramtypes", [nestjs_cls_1.ClsService, Object])
119
+ ], S3ClientKeyService);
120
+ //# sourceMappingURL=s3-client-key.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-client-key.service.js","sourceRoot":"","sources":["../../../../src/foundations/s3/services/s3-client-key.service.ts"],"names":[],"mappings":"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"}
@@ -22,12 +22,21 @@ export declare class UserController {
22
22
  private readonly relevancyService;
23
23
  private readonly cypherService;
24
24
  constructor(users: UserService, security: SecurityService, companyService: CompanyService, cacheService: CacheService, clsService: ClsService, relevancyService: RelevancyService<User>, cypherService: UserCypherService);
25
+ /** Platform administrator: the global Administrator role. */
26
+ private isPlatformAdmin;
27
+ /** Administrator OR CompanyAdministrator. */
28
+ private isAnyAdmin;
25
29
  findBySearch(request: AuthenticatedRequest, reply: FastifyReply, query: any, search?: string, includeDeleted?: boolean, contentIds?: string): Promise<void>;
26
30
  findOneByUserId(req: any, userId: string): Promise<import("../../..").JsonApiSingleDocument>;
27
31
  findFullUser(request: AuthenticatedRequest, reply: FastifyReply): Promise<void>;
28
- findOneByEmail(email: string): Promise<import("../../..").JsonApiSingleDocument>;
32
+ /**
33
+ * Admin lookup (the user editor's duplicate-email check). Bound to the
34
+ * caller's company: a user of another company answers 404, like a missing
35
+ * one. Only a platform administrator looks up across companies.
36
+ */
37
+ findOneByEmail(request: AuthenticatedRequest, email: string): Promise<import("../../..").JsonApiSingleDocument>;
29
38
  findByCompany(request: AuthenticatedRequest, reply: FastifyReply, companyId: string, query: any, search?: string, includeDeleted?: boolean, isDeleted?: boolean): Promise<void>;
30
- createUser(request: any, body: UserPostDTO, reply: FastifyReply, lng?: string): Promise<import("../../..").JsonApiSingleDocument>;
39
+ createUser(request: any, body: UserPostDTO, reply: FastifyReply, lng?: string): Promise<void>;
31
40
  put(request: any, userId: string, body: UserPutDTO, reply: FastifyReply): Promise<void>;
32
41
  reactivateUser(request: any, userId: string, reply: FastifyReply): Promise<void>;
33
42
  updateUserAvatar(request: any, userId: string, body: UserPatchAvatarDTO, reply: FastifyReply): Promise<void>;
@@ -40,6 +49,15 @@ export declare class UserController {
40
49
  sendInvitationEmail(request: any, userId: string): Promise<void>;
41
50
  delete(request: any, userId: string): Promise<void>;
42
51
  findUserByRole(req: any, query: any, roleId: string, notInRole?: boolean, search?: string): Promise<import("../../..").JsonApiListDocument>;
52
+ /**
53
+ * Role grants are never self-service.
54
+ * - Administrator is a PLATFORM grant: only a platform administrator may
55
+ * give or take it.
56
+ * - Any other role: Administrator or CompanyAdministrator. A
57
+ * CompanyAdministrator acts inside their CLS company only; the repository
58
+ * matches the target user through BELONGS_TO that company.
59
+ */
60
+ private assertCanManageRole;
43
61
  addUserToRole(req: any, roleId: string, userId: string, reply: FastifyReply): Promise<void>;
44
62
  removeUserToRole(req: any, roleId: string, userId: string): Promise<void>;
45
63
  findContentsRelevantForContent(query: any, contentId: string): Promise<import("../../..").JsonApiListDocument>;
@@ -1 +1 @@
1
- {"version":3,"file":"user.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/controllers/user.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/controllers/user.controller.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAG1E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,qBAEa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBANb,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,CAAC,EACxC,aAAa,EAAE,iBAAiB;IAGnD,6DAA6D;IAC7D,OAAO,CAAC,eAAe;IAIvB,6CAA6C;IAC7C,OAAO,CAAC,UAAU;IAQZ,YAAY,CACT,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,EACjB,KAAK,EAAE,GAAG,EACF,MAAM,CAAC,EAAE,MAAM,EACP,cAAc,CAAC,EAAE,OAAO,EAC5B,UAAU,CAAC,EAAE,MAAM;IAuBpC,eAAe,CAAY,GAAG,EAAE,GAAG,EAAmB,MAAM,EAAE,MAAM;IAYpE,YAAY,CAAQ,OAAO,EAAE,oBAAoB,EAAS,KAAK,EAAE,YAAY;IAUnF;;;;OAIG;IAGG,cAAc,CAAQ,OAAO,EAAE,oBAAoB,EAAkB,KAAK,EAAE,MAAM;IAUlF,aAAa,CACV,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,EACN,SAAS,EAAE,MAAM,EAC5B,KAAK,EAAE,GAAG,EACF,MAAM,CAAC,EAAE,MAAM,EACP,cAAc,CAAC,EAAE,OAAO,EAC7B,SAAS,CAAC,EAAE,OAAO;IAuBnC,UAAU,CACP,OAAO,EAAE,GAAG,EACX,IAAI,EAAE,WAAW,EAClB,KAAK,EAAE,YAAY,EACZ,GAAG,CAAC,EAAE,MAAM;IAwCtB,GAAG,CACI,OAAO,EAAE,GAAG,EACN,MAAM,EAAE,MAAM,EACvB,IAAI,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY;IAkBtB,cAAc,CAAY,OAAO,EAAE,GAAG,EAAmB,MAAM,EAAE,MAAM,EAAS,KAAK,EAAE,YAAY;IAanG,gBAAgB,CACT,OAAO,EAAE,GAAG,EACN,MAAM,EAAE,MAAM,EACvB,IAAI,EAAE,kBAAkB,EACzB,KAAK,EAAE,YAAY;IAU5B;;;OAGG;IAIG,kBAAkB,CACX,OAAO,EAAE,GAAG,EACN,MAAM,EAAE,MAAM,EACvB,IAAI,EAAE,oBAAoB,EAC3B,KAAK,EAAE,YAAY;IAetB,eAAe,CACR,OAAO,EAAE,GAAG,EACN,MAAM,EAAE,MAAM,EACvB,IAAI,EAAE,gBAAgB,EACvB,KAAK,EAAE,YAAY;IAYtB,mBAAmB,CAAY,OAAO,EAAE,GAAG,EAAmB,MAAM,EAAE,MAAM;IAQ5E,MAAM,CAAQ,OAAO,EAAE,GAAG,EAAmB,MAAM,EAAE,MAAM;IAY3D,cAAc,CACP,GAAG,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,EACF,MAAM,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,OAAO,EACtB,MAAM,CAAC,EAAE,MAAM;IAsBlC;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAerB,aAAa,CACN,GAAG,EAAE,GAAG,EACF,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACxB,KAAK,EAAE,YAAY;IAiBtB,gBAAgB,CAAY,GAAG,EAAE,GAAG,EAAmB,MAAM,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IActG,8BAA8B,CAAU,KAAK,EAAE,GAAG,EAAsB,SAAS,EAAE,MAAM;CAOhG"}
@@ -45,6 +45,17 @@ let UserController = class UserController {
45
45
  this.relevancyService = relevancyService;
46
46
  this.cypherService = cypherService;
47
47
  }
48
+ /** Platform administrator: the global Administrator role. */
49
+ isPlatformAdmin(user) {
50
+ return this.security.isUserInRoles({ user: user, roles: [system_roles_1.RoleId.Administrator] });
51
+ }
52
+ /** Administrator OR CompanyAdministrator. */
53
+ isAnyAdmin(user) {
54
+ return this.security.isUserInRoles({
55
+ user: user,
56
+ roles: [system_roles_1.RoleId.Administrator, system_roles_1.RoleId.CompanyAdministrator],
57
+ });
58
+ }
48
59
  async findBySearch(request, reply, query, search, includeDeleted, contentIds) {
49
60
  const isAdmin = this.security.isUserInRoles({
50
61
  user: request.user,
@@ -80,10 +91,24 @@ let UserController = class UserController {
80
91
  });
81
92
  reply.send(response);
82
93
  }
83
- async findOneByEmail(email) {
84
- return this.users.findByEmail({ email: email });
94
+ /**
95
+ * Admin lookup (the user editor's duplicate-email check). Bound to the
96
+ * caller's company: a user of another company answers 404, like a missing
97
+ * one. Only a platform administrator looks up across companies.
98
+ */
99
+ async findOneByEmail(request, email) {
100
+ if (this.isPlatformAdmin(request.user))
101
+ return this.users.findByEmailInCompany({ email: email });
102
+ const companyId = request.user?.companyId;
103
+ if (!companyId)
104
+ throw new common_1.ForbiddenException("No company in context");
105
+ return this.users.findByEmailInCompany({ email: email, companyId: companyId });
85
106
  }
86
107
  async findByCompany(request, reply, companyId, query, search, includeDeleted, isDeleted) {
108
+ // The URL company replaces the CLS company below, so only the caller's own
109
+ // company (or a platform administrator) may be listed.
110
+ if (request.user?.companyId !== companyId && !this.isPlatformAdmin(request.user))
111
+ throw new common_1.ForbiddenException("You cannot list the users of another company");
87
112
  this.clsService.set("companyId", companyId);
88
113
  const response = await this.users.findManyByCompany({
89
114
  query: query,
@@ -95,16 +120,17 @@ let UserController = class UserController {
95
120
  reply.send(response);
96
121
  }
97
122
  async createUser(request, body, reply, lng) {
98
- try {
99
- await this.users.expectNotExists({ email: body.data.attributes.email });
100
- }
101
- catch {
102
- return this.users.findByEmail({ email: body.data.attributes.email });
103
- }
123
+ // 409 when the email is taken. It used to answer with that user's full
124
+ // record, whatever company they belonged to.
125
+ await this.users.expectNotExists({ email: body.data.attributes.email });
104
126
  let forceCompanyAdmin = false;
105
127
  if (!body.included?.length) {
106
128
  if (!body.data.relationships?.company?.data?.id)
107
129
  throw new common_1.HttpException("A new user needs a company relationship or an included company", common_1.HttpStatus.BAD_REQUEST);
130
+ // A CompanyAdministrator creates users in their own company only: any
131
+ // other id would let them mint an account (with roles) in another tenant.
132
+ if (body.data.relationships.company.data.id !== request.user?.companyId && !this.isPlatformAdmin(request.user))
133
+ throw new common_1.ForbiddenException("You cannot create users in another company");
108
134
  await this.companyService.validate({
109
135
  companyId: body.data.relationships.company.data.id,
110
136
  });
@@ -123,26 +149,31 @@ let UserController = class UserController {
123
149
  reply.send(response);
124
150
  }
125
151
  async put(request, userId, body, reply) {
126
- if (request.user.userId !== userId)
127
- this.security.validateAdmin({ user: request.user });
128
- const isAdmin = this.security.isUserInRoles({
129
- user: request.user,
130
- roles: [system_roles_1.RoleId.Administrator, system_roles_1.RoleId.CompanyAdministrator],
131
- });
152
+ const isCurrentUser = request.user.userId === userId;
153
+ const isAdmin = this.isAnyAdmin(request.user);
154
+ if (!isCurrentUser && !isAdmin)
155
+ throw new common_1.ForbiddenException("You are not allowed to edit this user");
156
+ // Not self: the repository only reaches a user BELONGING_TO the CLS company.
132
157
  const response = await this.users.putUser({
133
158
  data: body.data,
134
159
  isAdmin: isAdmin,
135
- isCurrentUser: request.user.userId === userId,
160
+ isCurrentUser: isCurrentUser,
136
161
  });
137
162
  reply.send(response);
138
163
  }
139
164
  async reactivateUser(request, userId, reply) {
140
165
  this.security.validateAdmin({ user: request.user });
141
- const response = await this.users.reactivate({ userId: userId });
166
+ const response = await this.users.reactivate({
167
+ userId: userId,
168
+ isPlatformAdmin: this.isPlatformAdmin(request.user),
169
+ });
142
170
  reply.send(response);
143
171
  }
144
172
  async updateUserAvatar(request, userId, body, reply) {
145
- const response = await this.users.patchAvatar({ data: body.data });
173
+ const isSelf = request.user?.userId === userId;
174
+ if (!isSelf && !this.isAnyAdmin(request.user))
175
+ throw new common_1.ForbiddenException("You are not allowed to edit this user");
176
+ const response = await this.users.patchAvatar({ data: body.data, isSelf: isSelf });
146
177
  reply.send(response);
147
178
  }
148
179
  /**
@@ -159,7 +190,10 @@ let UserController = class UserController {
159
190
  reply.send(response);
160
191
  }
161
192
  async updateUserRates(request, userId, body, reply) {
162
- const response = await this.users.patchRate({ data: body.data });
193
+ const response = await this.users.patchRate({
194
+ data: body.data,
195
+ isPlatformAdmin: this.isPlatformAdmin(request.user),
196
+ });
163
197
  reply.send(response);
164
198
  }
165
199
  async sendInvitationEmail(request, userId) {
@@ -167,8 +201,12 @@ let UserController = class UserController {
167
201
  await this.users.sendInvitationEmail({ userId: userId });
168
202
  }
169
203
  async delete(request, userId) {
204
+ if (!this.isAnyAdmin(request.user))
205
+ throw new common_1.ForbiddenException("You are not allowed to delete this user");
206
+ // Non-platform callers only reach users BELONGING_TO their CLS company.
170
207
  await this.users.deleteUser({
171
208
  userId: userId,
209
+ isPlatformAdmin: this.isPlatformAdmin(request.user),
172
210
  });
173
211
  }
174
212
  async findUserByRole(req, query, roleId, notInRole, search) {
@@ -190,33 +228,42 @@ let UserController = class UserController {
190
228
  isAdmin: isAdmin,
191
229
  });
192
230
  }
231
+ /**
232
+ * Role grants are never self-service.
233
+ * - Administrator is a PLATFORM grant: only a platform administrator may
234
+ * give or take it.
235
+ * - Any other role: Administrator or CompanyAdministrator. A
236
+ * CompanyAdministrator acts inside their CLS company only; the repository
237
+ * matches the target user through BELONGS_TO that company.
238
+ */
239
+ assertCanManageRole(req, roleId) {
240
+ if (roleId === system_roles_1.RoleId.Administrator) {
241
+ if (!this.isPlatformAdmin(req.user))
242
+ throw new common_1.ForbiddenException("Only a platform administrator can manage the Administrator role");
243
+ return;
244
+ }
245
+ if (!this.isAnyAdmin(req.user))
246
+ throw new common_1.ForbiddenException("You are not allowed to manage roles");
247
+ if (!this.isPlatformAdmin(req.user) && !this.clsService.get("companyId"))
248
+ throw new common_1.ForbiddenException("You are not allowed to manage roles");
249
+ }
193
250
  async addUserToRole(req, roleId, userId, reply) {
194
- const isAdmin = this.security.isUserInRoles({
195
- user: req.user,
196
- roles: [system_roles_1.RoleId.Administrator, system_roles_1.RoleId.CompanyAdministrator],
197
- });
198
- if (!isAdmin && req.user.userId !== userId)
199
- throw new common_1.HttpException("You are not allowed to edit this user", common_1.HttpStatus.FORBIDDEN);
251
+ this.assertCanManageRole(req, roleId);
200
252
  const response = await this.users.addUserToRole({
201
253
  userId: userId,
202
254
  roleId: roleId,
203
- returnsFull: isAdmin || req.user.userId === userId,
255
+ returnsFull: true,
204
256
  });
205
257
  reply.send(response);
206
258
  await this.cacheService.invalidateByElement(user_meta_1.userMeta.endpoint, userId);
207
259
  await this.cacheService.invalidateByElement(role_meta_1.roleMeta.endpoint, roleId);
208
260
  }
209
261
  async removeUserToRole(req, roleId, userId) {
210
- const isAdmin = this.security.isUserInRoles({
211
- user: req.user,
212
- roles: [system_roles_1.RoleId.Administrator, system_roles_1.RoleId.CompanyAdministrator],
213
- });
214
- if (!isAdmin && req.user.userId !== userId)
215
- throw new common_1.HttpException("You are not allowed to edit this user", common_1.HttpStatus.FORBIDDEN);
262
+ this.assertCanManageRole(req, roleId);
216
263
  await this.users.removeUserFromRole({
217
264
  roleId: roleId,
218
265
  userId: userId,
219
- returnsFull: isAdmin || req.user.userId === userId,
266
+ returnsFull: true,
220
267
  });
221
268
  await this.cacheService.invalidateByElement(user_meta_1.userMeta.endpoint, userId);
222
269
  await this.cacheService.invalidateByElement(role_meta_1.roleMeta.endpoint, roleId);
@@ -260,9 +307,11 @@ __decorate([
260
307
  ], UserController.prototype, "findFullUser", null);
261
308
  __decorate([
262
309
  (0, common_1.Get)(`${user_meta_1.userMeta.endpoint}/email/:email`),
263
- __param(0, (0, common_1.Param)("email")),
310
+ (0, roles_decorator_1.Roles)(system_roles_1.RoleId.Administrator, system_roles_1.RoleId.CompanyAdministrator),
311
+ __param(0, (0, common_1.Req)()),
312
+ __param(1, (0, common_1.Param)("email")),
264
313
  __metadata("design:type", Function),
265
- __metadata("design:paramtypes", [String]),
314
+ __metadata("design:paramtypes", [Object, String]),
266
315
  __metadata("design:returntype", Promise)
267
316
  ], UserController.prototype, "findOneByEmail", null);
268
317
  __decorate([
@@ -291,7 +340,10 @@ __decorate([
291
340
  __metadata("design:returntype", Promise)
292
341
  ], UserController.prototype, "createUser", null);
293
342
  __decorate([
294
- (0, common_1.Put)(`${user_meta_1.userMeta.endpoint}/:userId`),
343
+ (0, common_1.Put)(`${user_meta_1.userMeta.endpoint}/:userId`)
344
+ // The service writes body.data.id: it must be the URL id (412 otherwise).
345
+ ,
346
+ (0, validate_id_decorator_1.ValidateId)("userId"),
295
347
  (0, cache_invalidate_decorator_1.CacheInvalidate)(user_meta_1.userMeta, "userId"),
296
348
  __param(0, (0, common_1.Request)()),
297
349
  __param(1, (0, common_1.Param)("userId")),
@@ -313,6 +365,7 @@ __decorate([
313
365
  ], UserController.prototype, "reactivateUser", null);
314
366
  __decorate([
315
367
  (0, common_1.Patch)(`${user_meta_1.userMeta.endpoint}/:userId/avatar`),
368
+ (0, validate_id_decorator_1.ValidateId)("userId"),
316
369
  (0, cache_invalidate_decorator_1.CacheInvalidate)(user_meta_1.userMeta, "userId"),
317
370
  __param(0, (0, common_1.Request)()),
318
371
  __param(1, (0, common_1.Param)("userId")),
@@ -337,6 +390,7 @@ __decorate([
337
390
  __decorate([
338
391
  (0, common_1.Patch)(`${user_meta_1.userMeta.endpoint}/:userId/rates`),
339
392
  (0, roles_decorator_1.Roles)(system_roles_1.RoleId.CompanyAdministrator),
393
+ (0, validate_id_decorator_1.ValidateId)("userId"),
340
394
  (0, cache_invalidate_decorator_1.CacheInvalidate)(user_meta_1.userMeta, "userId"),
341
395
  __param(0, (0, common_1.Request)()),
342
396
  __param(1, (0, common_1.Param)("userId")),
@@ -1 +1 @@
1
- {"version":3,"file":"user.controller.js","sourceRoot":"","sources":["../../../../src/foundations/user/controllers/user.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.controller.js","sourceRoot":"","sources":["../../../../src/foundations/user/controllers/user.controller.ts"],"names":[],"mappings":"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"}