@oneuptime/common 10.2.1 → 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.
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/ProjectOidc.ts +705 -0
- package/Server/API/ProjectOIDC.ts +73 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +139 -26
- package/Server/Services/ProjectOidcService.ts +10 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +155 -0
- package/Types/Permission.ts +42 -0
- package/UI/Components/Calendar/Calendar.css +257 -0
- package/UI/Components/Calendar/Calendar.tsx +22 -11
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOidc.js +727 -0
- package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -0
- package/build/dist/Server/API/ProjectOIDC.js +45 -0
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +106 -17
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/ProjectOidcService.js +9 -0
- package/build/dist/Server/Services/ProjectOidcService.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +86 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +40 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +12 -10
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/ProjectOidc";
|
|
3
|
+
export class Service extends DatabaseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(Model);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default new Service();
|
|
9
|
+
//# sourceMappingURL=ProjectOidcService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectOidcService.js","sourceRoot":"","sources":["../../../../Server/Services/ProjectOidcService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yCAAyC,CAAC;AAE5D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import OneUptimeDate from "../Date";
|
|
2
|
+
/*
|
|
3
|
+
* CalendarEvent extends JSONObject so it accepts string-indexed metadata.
|
|
4
|
+
* We attach the override info under a known key so downstream consumers can
|
|
5
|
+
* detect and render the substitution distinctly.
|
|
6
|
+
*/
|
|
7
|
+
export const OVERRIDE_META_KEY = "_override";
|
|
8
|
+
export default class UserOverrideUtil {
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when this override should be applied on top of the schedule
|
|
11
|
+
* events. Global overrides always apply; policy-scoped overrides apply to
|
|
12
|
+
* any schedule, since a schedule's calendar shows coverage information for
|
|
13
|
+
* every user who could potentially be paged through it.
|
|
14
|
+
*/
|
|
15
|
+
static isOverrideApplicable(_override) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
static applyOverridesToEvents(data) {
|
|
19
|
+
const applicable = data.overrides.filter(UserOverrideUtil.isOverrideApplicable);
|
|
20
|
+
if (applicable.length === 0) {
|
|
21
|
+
return data.events;
|
|
22
|
+
}
|
|
23
|
+
let working = data.events;
|
|
24
|
+
for (const override of applicable) {
|
|
25
|
+
const next = [];
|
|
26
|
+
for (const event of working) {
|
|
27
|
+
next.push(...UserOverrideUtil.splitEventByOverride(event, override));
|
|
28
|
+
}
|
|
29
|
+
working = next;
|
|
30
|
+
}
|
|
31
|
+
return UserOverrideUtil.reassignEventIds(working);
|
|
32
|
+
}
|
|
33
|
+
static splitEventByOverride(event, override) {
|
|
34
|
+
if (event.title !== override.overrideUserId) {
|
|
35
|
+
return [event];
|
|
36
|
+
}
|
|
37
|
+
// Override window doesn't overlap event window at all.
|
|
38
|
+
if (OneUptimeDate.isAfter(override.startsAt, event.end) ||
|
|
39
|
+
OneUptimeDate.isSame(override.startsAt, event.end) ||
|
|
40
|
+
OneUptimeDate.isBefore(override.endsAt, event.start) ||
|
|
41
|
+
OneUptimeDate.isSame(override.endsAt, event.start)) {
|
|
42
|
+
return [event];
|
|
43
|
+
}
|
|
44
|
+
const overrideStart = OneUptimeDate.isAfter(override.startsAt, event.start)
|
|
45
|
+
? override.startsAt
|
|
46
|
+
: event.start;
|
|
47
|
+
const overrideEnd = OneUptimeDate.isBefore(override.endsAt, event.end)
|
|
48
|
+
? override.endsAt
|
|
49
|
+
: event.end;
|
|
50
|
+
const segments = [];
|
|
51
|
+
// Segment before the override window — original user remains on call.
|
|
52
|
+
if (OneUptimeDate.isBefore(event.start, overrideStart)) {
|
|
53
|
+
segments.push(Object.assign(Object.assign({}, event), { end: overrideStart }));
|
|
54
|
+
}
|
|
55
|
+
// Override window — substitute user takes over.
|
|
56
|
+
const meta = {
|
|
57
|
+
isOverride: true,
|
|
58
|
+
originalUserId: override.overrideUserId,
|
|
59
|
+
overrideUserId: override.routeAlertsToUserId,
|
|
60
|
+
overrideStartsAt: override.startsAt,
|
|
61
|
+
overrideEndsAt: override.endsAt,
|
|
62
|
+
};
|
|
63
|
+
segments.push(Object.assign(Object.assign({}, event), { start: overrideStart, end: overrideEnd, title: override.routeAlertsToUserId, [OVERRIDE_META_KEY]: meta }));
|
|
64
|
+
// Segment after the override window — original user resumes.
|
|
65
|
+
if (OneUptimeDate.isAfter(event.end, overrideEnd)) {
|
|
66
|
+
segments.push(Object.assign(Object.assign({}, event), { start: overrideEnd }));
|
|
67
|
+
}
|
|
68
|
+
return segments;
|
|
69
|
+
}
|
|
70
|
+
static reassignEventIds(events) {
|
|
71
|
+
let id = 1;
|
|
72
|
+
return events.map((event) => {
|
|
73
|
+
return Object.assign(Object.assign({}, event), { id: id++ });
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
static getOverrideMeta(event) {
|
|
77
|
+
const meta = event[OVERRIDE_META_KEY];
|
|
78
|
+
if (meta &&
|
|
79
|
+
typeof meta === "object" &&
|
|
80
|
+
meta.isOverride === true) {
|
|
81
|
+
return meta;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=UserOverrideUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOverrideUtil.js","sourceRoot":"","sources":["../../../../Types/OnCallDutyPolicy/UserOverrideUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -414,6 +414,10 @@ var Permission;
|
|
|
414
414
|
Permission["DeleteProjectSSO"] = "DeleteProjectSSO";
|
|
415
415
|
Permission["EditProjectSSO"] = "EditProjectSSO";
|
|
416
416
|
Permission["ReadProjectSSO"] = "ReadProjectSSO";
|
|
417
|
+
Permission["CreateProjectOIDC"] = "CreateProjectOIDC";
|
|
418
|
+
Permission["DeleteProjectOIDC"] = "DeleteProjectOIDC";
|
|
419
|
+
Permission["EditProjectOIDC"] = "EditProjectOIDC";
|
|
420
|
+
Permission["ReadProjectOIDC"] = "ReadProjectOIDC";
|
|
417
421
|
Permission["CreateStatusPageSSO"] = "CreateStatusPageSSO";
|
|
418
422
|
Permission["DeleteStatusPageSSO"] = "DeleteStatusPageSSO";
|
|
419
423
|
Permission["EditStatusPageSSO"] = "EditStatusPageSSO";
|
|
@@ -2522,6 +2526,42 @@ export class PermissionHelper {
|
|
|
2522
2526
|
isRolePermission: false,
|
|
2523
2527
|
group: PermissionGroup.Settings,
|
|
2524
2528
|
},
|
|
2529
|
+
{
|
|
2530
|
+
permission: Permission.CreateProjectOIDC,
|
|
2531
|
+
title: "Create Project OIDC",
|
|
2532
|
+
description: "This permission can create Project OIDC in this project.",
|
|
2533
|
+
isAssignableToTenant: true,
|
|
2534
|
+
isAccessControlPermission: false,
|
|
2535
|
+
isRolePermission: false,
|
|
2536
|
+
group: PermissionGroup.Settings,
|
|
2537
|
+
},
|
|
2538
|
+
{
|
|
2539
|
+
permission: Permission.DeleteProjectOIDC,
|
|
2540
|
+
title: "Delete Project OIDC",
|
|
2541
|
+
description: "This permission can delete Project OIDC in this project.",
|
|
2542
|
+
isAssignableToTenant: true,
|
|
2543
|
+
isAccessControlPermission: false,
|
|
2544
|
+
isRolePermission: false,
|
|
2545
|
+
group: PermissionGroup.Settings,
|
|
2546
|
+
},
|
|
2547
|
+
{
|
|
2548
|
+
permission: Permission.EditProjectOIDC,
|
|
2549
|
+
title: "Edit Project OIDC",
|
|
2550
|
+
description: "This permission can edit Project OIDC in this project.",
|
|
2551
|
+
isAssignableToTenant: true,
|
|
2552
|
+
isAccessControlPermission: false,
|
|
2553
|
+
isRolePermission: false,
|
|
2554
|
+
group: PermissionGroup.Settings,
|
|
2555
|
+
},
|
|
2556
|
+
{
|
|
2557
|
+
permission: Permission.ReadProjectOIDC,
|
|
2558
|
+
title: "Read Project OIDC",
|
|
2559
|
+
description: "This permission can read Project OIDC in this project.",
|
|
2560
|
+
isAssignableToTenant: true,
|
|
2561
|
+
isAccessControlPermission: false,
|
|
2562
|
+
isRolePermission: false,
|
|
2563
|
+
group: PermissionGroup.Settings,
|
|
2564
|
+
},
|
|
2525
2565
|
{
|
|
2526
2566
|
permission: Permission.CreateStatusPageSSO,
|
|
2527
2567
|
title: "Create Status Page SSO",
|