@oneuptime/common 10.2.0 → 10.2.2

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 (54) hide show
  1. package/Models/DatabaseModels/Index.ts +2 -0
  2. package/Models/DatabaseModels/ProjectOidc.ts +705 -0
  3. package/Server/API/ProjectOIDC.ts +73 -0
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.ts +79 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  6. package/Server/Services/AlertLabelRuleEngineService.ts +16 -0
  7. package/Server/Services/IncidentLabelRuleEngineService.ts +16 -0
  8. package/Server/Services/Index.ts +2 -0
  9. package/Server/Services/OnCallDutyPolicyScheduleService.ts +139 -26
  10. package/Server/Services/ProjectOidcService.ts +10 -0
  11. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +23 -0
  12. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +98 -3
  13. package/Tests/Utils/MetricUnitUtil.test.ts +38 -1
  14. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +8 -0
  15. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +155 -0
  16. package/Types/Permission.ts +42 -0
  17. package/UI/Components/Calendar/Calendar.css +257 -0
  18. package/UI/Components/Calendar/Calendar.tsx +22 -11
  19. package/Utils/MetricUnitUtil.ts +24 -0
  20. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  21. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  22. package/build/dist/Models/DatabaseModels/ProjectOidc.js +727 -0
  23. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -0
  24. package/build/dist/Server/API/ProjectOIDC.js +45 -0
  25. package/build/dist/Server/API/ProjectOIDC.js.map +1 -0
  26. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js +34 -0
  27. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js.map +1 -0
  28. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  29. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  30. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +16 -0
  31. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  32. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +16 -0
  33. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  34. package/build/dist/Server/Services/Index.js +2 -0
  35. package/build/dist/Server/Services/Index.js.map +1 -1
  36. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +106 -17
  37. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  38. package/build/dist/Server/Services/ProjectOidcService.js +9 -0
  39. package/build/dist/Server/Services/ProjectOidcService.js.map +1 -0
  40. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +25 -8
  41. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  42. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +71 -1
  43. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  44. package/build/dist/Tests/Utils/MetricUnitUtil.test.js +29 -1
  45. package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +1 -1
  46. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +86 -0
  47. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -0
  48. package/build/dist/Types/Permission.js +40 -0
  49. package/build/dist/Types/Permission.js.map +1 -1
  50. package/build/dist/UI/Components/Calendar/Calendar.js +12 -10
  51. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  52. package/build/dist/Utils/MetricUnitUtil.js +22 -0
  53. package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
  54. package/package.json +1 -1
@@ -121,6 +121,7 @@ import ProjectUserProfile from "./ProjectUserProfile";
121
121
  import ProjectSmtpConfig from "./ProjectSmtpConfig";
122
122
  //SSO
123
123
  import ProjectSSO from "./ProjectSso";
124
+ import ProjectOIDC from "./ProjectOidc";
124
125
  import PromoCode from "./PromoCode";
125
126
  import EnterpriseLicense from "./EnterpriseLicense";
126
127
  import OpenSourceDeployment from "./OpenSourceDeployment";
@@ -439,6 +440,7 @@ const AllModelTypes: Array<{
439
440
  WorkflowLog,
440
441
 
441
442
  ProjectSSO,
443
+ ProjectOIDC,
442
444
  StatusPageSSO,
443
445
  StatusPageSCIM,
444
446
 
@@ -0,0 +1,705 @@
1
+ import Project from "./Project";
2
+ import Team from "./Team";
3
+ import User from "./User";
4
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
5
+ import Route from "../../Types/API/Route";
6
+ import URL from "../../Types/API/URL";
7
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
8
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
9
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
10
+ import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
11
+ import ColumnLength from "../../Types/Database/ColumnLength";
12
+ import ColumnType from "../../Types/Database/ColumnType";
13
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
14
+ import TableColumn from "../../Types/Database/TableColumn";
15
+ import TableColumnType from "../../Types/Database/TableColumnType";
16
+ import TableMetadata from "../../Types/Database/TableMetadata";
17
+ import TenantColumn from "../../Types/Database/TenantColumn";
18
+ import UniqueColumnBy from "../../Types/Database/UniqueColumnBy";
19
+ import IconProp from "../../Types/Icon/IconProp";
20
+ import ObjectID from "../../Types/ObjectID";
21
+ import Permission from "../../Types/Permission";
22
+ import {
23
+ Column,
24
+ Entity,
25
+ Index,
26
+ JoinColumn,
27
+ JoinTable,
28
+ ManyToMany,
29
+ ManyToOne,
30
+ } from "typeorm";
31
+
32
+ @TableBillingAccessControl({
33
+ create: PlanType.Scale,
34
+ read: PlanType.Scale,
35
+ update: PlanType.Scale,
36
+ delete: PlanType.Scale,
37
+ })
38
+ @TenantColumn("projectId")
39
+ @TableAccessControl({
40
+ create: [
41
+ Permission.ProjectOwner,
42
+ Permission.ProjectAdmin,
43
+ Permission.CreateProjectOIDC,
44
+ ],
45
+ read: [
46
+ Permission.ProjectOwner,
47
+ Permission.ProjectUser,
48
+ Permission.UnAuthorizedSsoUser,
49
+ Permission.ProjectMember,
50
+ Permission.Viewer,
51
+ Permission.SettingsManager,
52
+ Permission.ReadProjectOIDC,
53
+ Permission.ReadAllProjectResources,
54
+ ],
55
+ delete: [
56
+ Permission.ProjectOwner,
57
+ Permission.ProjectAdmin,
58
+ Permission.DeleteProjectOIDC,
59
+ ],
60
+ update: [
61
+ Permission.ProjectOwner,
62
+ Permission.ProjectAdmin,
63
+ Permission.EditProjectOIDC,
64
+ ],
65
+ })
66
+ @CrudApiEndpoint(new Route("/project-oidc"))
67
+ @TableMetadata({
68
+ tableName: "ProjectOIDC",
69
+ singularName: "OIDC",
70
+ pluralName: "OIDC",
71
+ icon: IconProp.Lock,
72
+ tableDescription: "Manage OpenID Connect (OIDC) SSO for your project",
73
+ })
74
+ @Entity({
75
+ name: "ProjectOIDC",
76
+ })
77
+ export default class ProjectOIDC extends BaseModel {
78
+ @ColumnAccessControl({
79
+ create: [
80
+ Permission.ProjectOwner,
81
+ Permission.ProjectAdmin,
82
+ Permission.CreateProjectOIDC,
83
+ ],
84
+ read: [
85
+ Permission.ProjectOwner,
86
+ Permission.ProjectAdmin,
87
+ Permission.ProjectUser,
88
+ Permission.Public,
89
+ Permission.UnAuthorizedSsoUser,
90
+ Permission.ProjectMember,
91
+ Permission.Viewer,
92
+ Permission.SettingsManager,
93
+ Permission.ReadProjectOIDC,
94
+ Permission.ReadAllProjectResources,
95
+ ],
96
+ update: [],
97
+ })
98
+ @TableColumn({
99
+ manyToOneRelationColumn: "projectId",
100
+ type: TableColumnType.Entity,
101
+ modelType: Project,
102
+ title: "Project",
103
+ description: "Relation to Project Resource in which this object belongs",
104
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
105
+ })
106
+ @ManyToOne(
107
+ () => {
108
+ return Project;
109
+ },
110
+ {
111
+ eager: false,
112
+ nullable: true,
113
+ onDelete: "CASCADE",
114
+ orphanedRowAction: "nullify",
115
+ },
116
+ )
117
+ @JoinColumn({ name: "projectId" })
118
+ public project?: Project = undefined;
119
+
120
+ @ColumnAccessControl({
121
+ create: [
122
+ Permission.ProjectOwner,
123
+ Permission.ProjectAdmin,
124
+ Permission.CreateProjectOIDC,
125
+ ],
126
+ read: [
127
+ Permission.ProjectOwner,
128
+ Permission.ProjectAdmin,
129
+ Permission.ProjectUser,
130
+ Permission.Public,
131
+ Permission.UnAuthorizedSsoUser,
132
+ Permission.ProjectMember,
133
+ Permission.Viewer,
134
+ Permission.SettingsManager,
135
+ Permission.ReadProjectOIDC,
136
+ Permission.ReadAllProjectResources,
137
+ ],
138
+ update: [],
139
+ })
140
+ @Index()
141
+ @TableColumn({
142
+ type: TableColumnType.ObjectID,
143
+ required: true,
144
+ canReadOnRelationQuery: true,
145
+ title: "Project ID",
146
+ description: "ID of your OneUptime Project in which this object belongs",
147
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
148
+ })
149
+ @Column({
150
+ type: ColumnType.ObjectID,
151
+ nullable: false,
152
+ transformer: ObjectID.getDatabaseTransformer(),
153
+ })
154
+ public projectId?: ObjectID = undefined;
155
+
156
+ @ColumnAccessControl({
157
+ create: [
158
+ Permission.ProjectOwner,
159
+ Permission.ProjectAdmin,
160
+ Permission.CreateProjectOIDC,
161
+ ],
162
+ read: [
163
+ Permission.ProjectOwner,
164
+ Permission.ProjectAdmin,
165
+ Permission.ProjectUser,
166
+ Permission.Public,
167
+ Permission.UnAuthorizedSsoUser,
168
+ Permission.ProjectMember,
169
+ Permission.Viewer,
170
+ Permission.SettingsManager,
171
+ Permission.ReadProjectOIDC,
172
+ Permission.ReadAllProjectResources,
173
+ ],
174
+ update: [
175
+ Permission.ProjectOwner,
176
+ Permission.ProjectAdmin,
177
+ Permission.EditProjectOIDC,
178
+ ],
179
+ })
180
+ @TableColumn({
181
+ required: true,
182
+ type: TableColumnType.ShortText,
183
+ canReadOnRelationQuery: true,
184
+ title: "Name",
185
+ description: "Any friendly name of this object",
186
+ example: "Okta OIDC Integration",
187
+ })
188
+ @Column({
189
+ nullable: false,
190
+ type: ColumnType.ShortText,
191
+ length: ColumnLength.ShortText,
192
+ })
193
+ @UniqueColumnBy("projectId")
194
+ public name?: string = undefined;
195
+
196
+ @ColumnAccessControl({
197
+ create: [
198
+ Permission.ProjectOwner,
199
+ Permission.ProjectAdmin,
200
+ Permission.CreateProjectOIDC,
201
+ ],
202
+ read: [
203
+ Permission.ProjectOwner,
204
+ Permission.ProjectAdmin,
205
+ Permission.ProjectUser,
206
+ Permission.Public,
207
+ Permission.UnAuthorizedSsoUser,
208
+ Permission.ProjectMember,
209
+ Permission.Viewer,
210
+ Permission.SettingsManager,
211
+ Permission.ReadProjectOIDC,
212
+ Permission.ReadAllProjectResources,
213
+ ],
214
+ update: [
215
+ Permission.ProjectOwner,
216
+ Permission.ProjectAdmin,
217
+ Permission.EditProjectOIDC,
218
+ ],
219
+ })
220
+ @TableColumn({
221
+ required: true,
222
+ type: TableColumnType.LongText,
223
+ canReadOnRelationQuery: true,
224
+ example: "Single Sign-On via OpenID Connect with company identity provider",
225
+ })
226
+ @Column({
227
+ nullable: false,
228
+ type: ColumnType.LongText,
229
+ })
230
+ public description?: string = undefined;
231
+
232
+ @ColumnAccessControl({
233
+ create: [
234
+ Permission.ProjectOwner,
235
+ Permission.ProjectAdmin,
236
+ Permission.CreateProjectOIDC,
237
+ ],
238
+ read: [
239
+ Permission.ProjectOwner,
240
+ Permission.ProjectAdmin,
241
+ Permission.ReadProjectOIDC,
242
+ Permission.ReadAllProjectResources,
243
+ ],
244
+ update: [
245
+ Permission.ProjectOwner,
246
+ Permission.ProjectAdmin,
247
+ Permission.EditProjectOIDC,
248
+ ],
249
+ })
250
+ @TableColumn({
251
+ required: true,
252
+ type: TableColumnType.LongURL,
253
+ canReadOnRelationQuery: true,
254
+ description:
255
+ "OIDC discovery URL (typically ends in /.well-known/openid-configuration). Used to discover authorization, token, JWKS and userinfo endpoints.",
256
+ example: "https://accounts.google.com/.well-known/openid-configuration",
257
+ })
258
+ @Column({
259
+ nullable: false,
260
+ type: ColumnType.LongURL,
261
+ transformer: URL.getDatabaseTransformer(),
262
+ })
263
+ public discoveryURL?: URL = undefined;
264
+
265
+ @ColumnAccessControl({
266
+ create: [
267
+ Permission.ProjectOwner,
268
+ Permission.ProjectAdmin,
269
+ Permission.CreateProjectOIDC,
270
+ ],
271
+ read: [
272
+ Permission.ProjectOwner,
273
+ Permission.ProjectAdmin,
274
+ Permission.ReadProjectOIDC,
275
+ Permission.ReadAllProjectResources,
276
+ ],
277
+ update: [
278
+ Permission.ProjectOwner,
279
+ Permission.ProjectAdmin,
280
+ Permission.EditProjectOIDC,
281
+ ],
282
+ })
283
+ @TableColumn({
284
+ required: true,
285
+ type: TableColumnType.LongURL,
286
+ canReadOnRelationQuery: true,
287
+ description:
288
+ "Expected OIDC issuer URL. Must match the 'iss' claim in the ID token returned by the identity provider.",
289
+ example: "https://accounts.google.com",
290
+ })
291
+ @Column({
292
+ nullable: false,
293
+ type: ColumnType.LongURL,
294
+ transformer: URL.getDatabaseTransformer(),
295
+ })
296
+ public issuerURL?: URL = undefined;
297
+
298
+ @ColumnAccessControl({
299
+ create: [
300
+ Permission.ProjectOwner,
301
+ Permission.ProjectAdmin,
302
+ Permission.CreateProjectOIDC,
303
+ ],
304
+ read: [
305
+ Permission.ProjectOwner,
306
+ Permission.ProjectAdmin,
307
+ Permission.ReadProjectOIDC,
308
+ Permission.ReadAllProjectResources,
309
+ ],
310
+ update: [
311
+ Permission.ProjectOwner,
312
+ Permission.ProjectAdmin,
313
+ Permission.EditProjectOIDC,
314
+ ],
315
+ })
316
+ @TableColumn({
317
+ required: true,
318
+ type: TableColumnType.ShortText,
319
+ canReadOnRelationQuery: true,
320
+ description: "OIDC client ID issued by the identity provider.",
321
+ example: "1234567890-abcdefgh.apps.googleusercontent.com",
322
+ })
323
+ @Column({
324
+ nullable: false,
325
+ type: ColumnType.ShortText,
326
+ length: ColumnLength.ShortText,
327
+ })
328
+ public clientId?: string = undefined;
329
+
330
+ @ColumnAccessControl({
331
+ create: [
332
+ Permission.ProjectOwner,
333
+ Permission.ProjectAdmin,
334
+ Permission.CreateProjectOIDC,
335
+ ],
336
+ read: [
337
+ Permission.ProjectOwner,
338
+ Permission.ProjectAdmin,
339
+ Permission.ReadProjectOIDC,
340
+ Permission.ReadAllProjectResources,
341
+ ],
342
+ update: [
343
+ Permission.ProjectOwner,
344
+ Permission.ProjectAdmin,
345
+ Permission.EditProjectOIDC,
346
+ ],
347
+ })
348
+ @TableColumn({
349
+ required: true,
350
+ type: TableColumnType.LongText,
351
+ title: "Client Secret",
352
+ description:
353
+ "OIDC client secret issued by the identity provider. Stored encrypted at rest.",
354
+ encrypted: true,
355
+ })
356
+ @Column({
357
+ nullable: false,
358
+ type: ColumnType.LongText,
359
+ })
360
+ public clientSecret?: string = undefined;
361
+
362
+ @ColumnAccessControl({
363
+ create: [
364
+ Permission.ProjectOwner,
365
+ Permission.ProjectAdmin,
366
+ Permission.CreateProjectOIDC,
367
+ ],
368
+ read: [
369
+ Permission.ProjectOwner,
370
+ Permission.ProjectAdmin,
371
+ Permission.ReadProjectOIDC,
372
+ Permission.ReadAllProjectResources,
373
+ ],
374
+ update: [
375
+ Permission.ProjectOwner,
376
+ Permission.ProjectAdmin,
377
+ Permission.EditProjectOIDC,
378
+ ],
379
+ })
380
+ @TableColumn({
381
+ required: true,
382
+ type: TableColumnType.ShortText,
383
+ canReadOnRelationQuery: true,
384
+ description:
385
+ "Space-separated list of OIDC scopes to request. Must include 'openid'.",
386
+ example: "openid email profile",
387
+ })
388
+ @Column({
389
+ nullable: false,
390
+ type: ColumnType.ShortText,
391
+ length: ColumnLength.ShortText,
392
+ })
393
+ public scopes?: string = undefined;
394
+
395
+ @ColumnAccessControl({
396
+ create: [
397
+ Permission.ProjectOwner,
398
+ Permission.ProjectAdmin,
399
+ Permission.CreateProjectOIDC,
400
+ ],
401
+ read: [
402
+ Permission.ProjectOwner,
403
+ Permission.ProjectAdmin,
404
+ Permission.ReadProjectOIDC,
405
+ Permission.ReadAllProjectResources,
406
+ ],
407
+ update: [
408
+ Permission.ProjectOwner,
409
+ Permission.ProjectAdmin,
410
+ Permission.EditProjectOIDC,
411
+ ],
412
+ })
413
+ @TableColumn({
414
+ required: true,
415
+ type: TableColumnType.ShortText,
416
+ canReadOnRelationQuery: true,
417
+ description:
418
+ "Claim name in the ID token (or userinfo response) that contains the user's email address.",
419
+ example: "email",
420
+ })
421
+ @Column({
422
+ nullable: false,
423
+ type: ColumnType.ShortText,
424
+ length: ColumnLength.ShortText,
425
+ })
426
+ public emailClaimName?: string = undefined;
427
+
428
+ @ColumnAccessControl({
429
+ create: [
430
+ Permission.ProjectOwner,
431
+ Permission.ProjectAdmin,
432
+ Permission.CreateProjectOIDC,
433
+ ],
434
+ read: [
435
+ Permission.ProjectOwner,
436
+ Permission.ProjectAdmin,
437
+ Permission.ReadProjectOIDC,
438
+ Permission.ReadAllProjectResources,
439
+ ],
440
+ update: [
441
+ Permission.ProjectOwner,
442
+ Permission.ProjectAdmin,
443
+ Permission.EditProjectOIDC,
444
+ ],
445
+ })
446
+ @TableColumn({
447
+ required: true,
448
+ type: TableColumnType.ShortText,
449
+ canReadOnRelationQuery: true,
450
+ description:
451
+ "Claim name in the ID token (or userinfo response) that contains the user's display name.",
452
+ example: "name",
453
+ })
454
+ @Column({
455
+ nullable: false,
456
+ type: ColumnType.ShortText,
457
+ length: ColumnLength.ShortText,
458
+ })
459
+ public nameClaimName?: string = undefined;
460
+
461
+ @ColumnAccessControl({
462
+ create: [
463
+ Permission.ProjectOwner,
464
+ Permission.ProjectAdmin,
465
+ Permission.CreateProjectOIDC,
466
+ ],
467
+ read: [
468
+ Permission.ProjectOwner,
469
+ Permission.ProjectAdmin,
470
+ Permission.ProjectMember,
471
+ Permission.Viewer,
472
+ Permission.SettingsManager,
473
+ Permission.ReadProjectOIDC,
474
+ Permission.ReadAllProjectResources,
475
+ ],
476
+ update: [
477
+ Permission.ProjectOwner,
478
+ Permission.ProjectAdmin,
479
+ Permission.EditProjectOIDC,
480
+ ],
481
+ })
482
+ @TableColumn({
483
+ required: false,
484
+ type: TableColumnType.EntityArray,
485
+ modelType: Team,
486
+ example: [{ id: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e" }],
487
+ })
488
+ @ManyToMany(
489
+ () => {
490
+ return Team;
491
+ },
492
+ { eager: false },
493
+ )
494
+ @JoinTable({
495
+ name: "ProjectOidcTeam",
496
+ inverseJoinColumn: {
497
+ name: "teamId",
498
+ referencedColumnName: "_id",
499
+ },
500
+ joinColumn: {
501
+ name: "projectOidcId",
502
+ referencedColumnName: "_id",
503
+ },
504
+ })
505
+ public teams?: Array<Team> = undefined; // teams that teammember should be added to when they sign into OIDC for the first time.
506
+
507
+ @ColumnAccessControl({
508
+ create: [
509
+ Permission.ProjectOwner,
510
+ Permission.ProjectAdmin,
511
+ Permission.CreateProjectOIDC,
512
+ ],
513
+ read: [
514
+ Permission.ProjectOwner,
515
+ Permission.ProjectAdmin,
516
+ Permission.ProjectMember,
517
+ Permission.Viewer,
518
+ Permission.SettingsManager,
519
+ Permission.ReadProjectOIDC,
520
+ Permission.ReadAllProjectResources,
521
+ ],
522
+ update: [],
523
+ })
524
+ @TableColumn({
525
+ manyToOneRelationColumn: "createdByUserId",
526
+ type: TableColumnType.Entity,
527
+ modelType: User,
528
+ title: "Created by User",
529
+ description:
530
+ "Relation to User who created this object (if this object was created by a User)",
531
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
532
+ })
533
+ @ManyToOne(
534
+ () => {
535
+ return User;
536
+ },
537
+ {
538
+ eager: false,
539
+ nullable: true,
540
+ onDelete: "SET NULL",
541
+ orphanedRowAction: "nullify",
542
+ },
543
+ )
544
+ @JoinColumn({ name: "createdByUserId" })
545
+ public createdByUser?: User = undefined;
546
+
547
+ @ColumnAccessControl({
548
+ create: [
549
+ Permission.ProjectOwner,
550
+ Permission.ProjectAdmin,
551
+ Permission.CreateProjectOIDC,
552
+ ],
553
+ read: [
554
+ Permission.ProjectOwner,
555
+ Permission.ProjectAdmin,
556
+ Permission.ProjectMember,
557
+ Permission.Viewer,
558
+ Permission.SettingsManager,
559
+ Permission.ReadProjectOIDC,
560
+ Permission.ReadAllProjectResources,
561
+ ],
562
+ update: [],
563
+ })
564
+ @TableColumn({
565
+ type: TableColumnType.ObjectID,
566
+ title: "Created by User ID",
567
+ description:
568
+ "User ID who created this object (if this object was created by a User)",
569
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
570
+ })
571
+ @Column({
572
+ type: ColumnType.ObjectID,
573
+ nullable: true,
574
+ transformer: ObjectID.getDatabaseTransformer(),
575
+ })
576
+ public createdByUserId?: ObjectID = undefined;
577
+
578
+ @ColumnAccessControl({
579
+ create: [],
580
+ read: [
581
+ Permission.ProjectOwner,
582
+ Permission.ProjectAdmin,
583
+ Permission.ProjectMember,
584
+ Permission.Viewer,
585
+ Permission.SettingsManager,
586
+ Permission.ReadProjectOIDC,
587
+ Permission.ReadAllProjectResources,
588
+ ],
589
+ update: [],
590
+ })
591
+ @TableColumn({
592
+ manyToOneRelationColumn: "deletedByUserId",
593
+ type: TableColumnType.Entity,
594
+ title: "Deleted by User",
595
+ modelType: User,
596
+ description:
597
+ "Relation to User who deleted this object (if this object was deleted by a User)",
598
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
599
+ })
600
+ @ManyToOne(
601
+ () => {
602
+ return User;
603
+ },
604
+ {
605
+ cascade: false,
606
+ eager: false,
607
+ nullable: true,
608
+ onDelete: "SET NULL",
609
+ orphanedRowAction: "nullify",
610
+ },
611
+ )
612
+ @JoinColumn({ name: "deletedByUserId" })
613
+ public deletedByUser?: User = undefined;
614
+
615
+ @ColumnAccessControl({
616
+ create: [],
617
+ read: [
618
+ Permission.ProjectOwner,
619
+ Permission.ProjectAdmin,
620
+ Permission.ProjectMember,
621
+ Permission.Viewer,
622
+ Permission.SettingsManager,
623
+ Permission.ReadProjectOIDC,
624
+ Permission.ReadAllProjectResources,
625
+ ],
626
+ update: [],
627
+ })
628
+ @TableColumn({
629
+ type: TableColumnType.ObjectID,
630
+ title: "Deleted by User ID",
631
+ description:
632
+ "User ID who deleted this object (if this object was deleted by a User)",
633
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
634
+ })
635
+ @Column({
636
+ type: ColumnType.ObjectID,
637
+ nullable: true,
638
+ transformer: ObjectID.getDatabaseTransformer(),
639
+ })
640
+ public deletedByUserId?: ObjectID = undefined;
641
+
642
+ @ColumnAccessControl({
643
+ create: [
644
+ Permission.ProjectOwner,
645
+ Permission.ProjectAdmin,
646
+ Permission.CreateProjectOIDC,
647
+ ],
648
+ read: [
649
+ Permission.ProjectOwner,
650
+ Permission.ProjectAdmin,
651
+ Permission.ProjectUser,
652
+ Permission.UnAuthorizedSsoUser,
653
+ Permission.ProjectMember,
654
+ Permission.Viewer,
655
+ Permission.SettingsManager,
656
+ Permission.ReadProjectOIDC,
657
+ Permission.ReadAllProjectResources,
658
+ ],
659
+ update: [
660
+ Permission.ProjectOwner,
661
+ Permission.ProjectAdmin,
662
+ Permission.EditProjectOIDC,
663
+ ],
664
+ })
665
+ @TableColumn({
666
+ isDefaultValueColumn: true,
667
+ type: TableColumnType.Boolean,
668
+ defaultValue: false,
669
+ example: true,
670
+ })
671
+ @Column({
672
+ type: ColumnType.Boolean,
673
+ default: false,
674
+ })
675
+ public isEnabled?: boolean = undefined;
676
+
677
+ @ColumnAccessControl({
678
+ create: [
679
+ Permission.ProjectOwner,
680
+ Permission.ProjectAdmin,
681
+ Permission.CreateProjectOIDC,
682
+ ],
683
+ read: [
684
+ Permission.ProjectOwner,
685
+ Permission.ProjectAdmin,
686
+ Permission.ProjectMember,
687
+ Permission.Viewer,
688
+ Permission.SettingsManager,
689
+ Permission.ReadProjectOIDC,
690
+ Permission.ReadAllProjectResources,
691
+ ],
692
+ update: [],
693
+ })
694
+ @TableColumn({
695
+ isDefaultValueColumn: true,
696
+ type: TableColumnType.Boolean,
697
+ defaultValue: false,
698
+ example: true,
699
+ })
700
+ @Column({
701
+ type: ColumnType.Boolean,
702
+ default: false,
703
+ })
704
+ public isTested?: boolean = undefined;
705
+ }