@oneuptime/common 10.2.3 → 10.2.4

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 (40) hide show
  1. package/Models/DatabaseModels/Index.ts +2 -0
  2. package/Models/DatabaseModels/StatusPage.ts +43 -0
  3. package/Models/DatabaseModels/StatusPageOidc.ts +689 -0
  4. package/Server/API/StatusPageAPI.ts +78 -3
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.ts +17 -0
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.ts +63 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  8. package/Server/Services/Index.ts +2 -0
  9. package/Server/Services/ScheduledMaintenanceService.ts +34 -0
  10. package/Server/Services/StatusPageOidcService.ts +10 -0
  11. package/Server/Services/StatusPageSubscriberService.ts +101 -0
  12. package/Server/Utils/StatusPageSubscriberWebhook.ts +39 -0
  13. package/Types/Permission.ts +46 -0
  14. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  15. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  16. package/build/dist/Models/DatabaseModels/StatusPage.js +45 -0
  17. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  18. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +718 -0
  19. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -0
  20. package/build/dist/Server/API/StatusPageAPI.js +80 -35
  21. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  22. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.js +12 -0
  23. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.js.map +1 -0
  24. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.js +28 -0
  25. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.js.map +1 -0
  26. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  27. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  28. package/build/dist/Server/Services/Index.js +2 -0
  29. package/build/dist/Server/Services/Index.js.map +1 -1
  30. package/build/dist/Server/Services/ScheduledMaintenanceService.js +31 -2
  31. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  32. package/build/dist/Server/Services/StatusPageOidcService.js +9 -0
  33. package/build/dist/Server/Services/StatusPageOidcService.js.map +1 -0
  34. package/build/dist/Server/Services/StatusPageSubscriberService.js +99 -4
  35. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  36. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +19 -0
  37. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -0
  38. package/build/dist/Types/Permission.js +40 -0
  39. package/build/dist/Types/Permission.js.map +1 -1
  40. package/package.json +1 -1
@@ -26,6 +26,7 @@ import StatusPageService, {
26
26
  Service as StatusPageServiceType,
27
27
  } from "../Services/StatusPageService";
28
28
  import StatusPageSsoService from "../Services/StatusPageSsoService";
29
+ import StatusPageOidcService from "../Services/StatusPageOidcService";
29
30
  import StatusPageSubscriberService from "../Services/StatusPageSubscriberService";
30
31
  import Query from "../Types/Database/Query";
31
32
  import QueryHelper from "../Types/Database/QueryHelper";
@@ -81,6 +82,7 @@ import StatusPageHeaderLink from "../../Models/DatabaseModels/StatusPageHeaderLi
81
82
  import StatusPageHistoryChartBarColorRule from "../../Models/DatabaseModels/StatusPageHistoryChartBarColorRule";
82
83
  import StatusPageResource from "../../Models/DatabaseModels/StatusPageResource";
83
84
  import StatusPageSSO from "../../Models/DatabaseModels/StatusPageSso";
85
+ import StatusPageOIDC from "../../Models/DatabaseModels/StatusPageOidc";
84
86
  import StatusPageSubscriber from "../../Models/DatabaseModels/StatusPageSubscriber";
85
87
  import StatusPageEventType from "../../Types/StatusPage/StatusPageEventType";
86
88
  import StatusPageResourceUptimeUtil from "../../Utils/StatusPage/ResourceUptime";
@@ -863,6 +865,7 @@ export default class StatusPageAPI extends BaseAPI<
863
865
  enableEmailSubscribers: true,
864
866
  enableSlackSubscribers: true,
865
867
  enableMicrosoftTeamsSubscribers: true,
868
+ enableWebhookSubscribers: true,
866
869
  enableSmsSubscribers: true,
867
870
  isPublicStatusPage: true,
868
871
  enableMasterPassword: true,
@@ -1094,6 +1097,46 @@ export default class StatusPageAPI extends BaseAPI<
1094
1097
  },
1095
1098
  );
1096
1099
 
1100
+ this.router.post(
1101
+ `${new this.entityType().getCrudApiPath()?.toString()}/oidc/:statusPageId`,
1102
+ UserMiddleware.getUserMiddleware,
1103
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
1104
+ try {
1105
+ const objectId: ObjectID = new ObjectID(
1106
+ req.params["statusPageId"] as string,
1107
+ );
1108
+
1109
+ const oidc: Array<StatusPageOIDC> =
1110
+ await StatusPageOidcService.findBy({
1111
+ query: {
1112
+ statusPageId: objectId,
1113
+ isEnabled: true,
1114
+ },
1115
+ select: {
1116
+ name: true,
1117
+ description: true,
1118
+ _id: true,
1119
+ },
1120
+ limit: LIMIT_PER_PROJECT,
1121
+ skip: 0,
1122
+ props: {
1123
+ isRoot: true,
1124
+ },
1125
+ });
1126
+
1127
+ return Response.sendEntityArrayResponse(
1128
+ req,
1129
+ res,
1130
+ oidc,
1131
+ new PositiveNumber(oidc.length),
1132
+ StatusPageOIDC,
1133
+ );
1134
+ } catch (err) {
1135
+ next(err);
1136
+ }
1137
+ },
1138
+ );
1139
+
1097
1140
  // Get all status page resources for subscriber to subscribe to.
1098
1141
  this.router.post(
1099
1142
  `${new this.entityType()
@@ -3146,6 +3189,7 @@ export default class StatusPageAPI extends BaseAPI<
3146
3189
  enableEmailSubscribers: true,
3147
3190
  enableSlackSubscribers: true,
3148
3191
  enableMicrosoftTeamsSubscribers: true,
3192
+ enableWebhookSubscribers: true,
3149
3193
  enableSmsSubscribers: true,
3150
3194
  allowSubscribersToChooseResources: true,
3151
3195
  allowSubscribersToChooseEventTypes: true,
@@ -3539,6 +3583,7 @@ export default class StatusPageAPI extends BaseAPI<
3539
3583
  enableSmsSubscribers: true,
3540
3584
  enableSlackSubscribers: true,
3541
3585
  enableMicrosoftTeamsSubscribers: true,
3586
+ enableWebhookSubscribers: true,
3542
3587
  allowSubscribersToChooseResources: true,
3543
3588
  allowSubscribersToChooseEventTypes: true,
3544
3589
  showSubscriberPageOnStatusPage: true,
@@ -3623,17 +3668,32 @@ export default class StatusPageAPI extends BaseAPI<
3623
3668
  }
3624
3669
 
3625
3670
  if (
3671
+ req.body.data["subscriberWebhook"] &&
3672
+ !statusPage.enableWebhookSubscribers
3673
+ ) {
3674
+ logger.debug(
3675
+ `Webhook subscribers not enabled for status page with ID: ${objectId}`,
3676
+ getLogAttributesFromRequest(req as any),
3677
+ );
3678
+ throw new BadDataException(
3679
+ "Webhook subscribers not enabled for this status page.",
3680
+ );
3681
+ }
3682
+
3683
+ if (
3684
+ !req.params["subscriberId"] &&
3626
3685
  !req.body.data["subscriberEmail"] &&
3627
3686
  !req.body.data["subscriberPhone"] &&
3628
3687
  !req.body.data["slackWorkspaceName"] &&
3629
- !req.body.data["microsoftTeamsWorkspaceName"]
3688
+ !req.body.data["microsoftTeamsWorkspaceName"] &&
3689
+ !req.body.data["subscriberWebhook"]
3630
3690
  ) {
3631
3691
  logger.debug(
3632
- `No email, phone, slack workspace name, or Microsoft Teams workspace name provided for subscription to status page with ID: ${objectId}`,
3692
+ `No email, phone, slack workspace name, Microsoft Teams workspace name, or webhook URL provided for subscription to status page with ID: ${objectId}`,
3633
3693
  getLogAttributesFromRequest(req as any),
3634
3694
  );
3635
3695
  throw new BadDataException(
3636
- "Email, phone, slack workspace name, or Microsoft Teams workspace name is required to subscribe to this status page.",
3696
+ "Email, phone, slack workspace name, Microsoft Teams workspace name, or webhook URL is required to subscribe to this status page.",
3637
3697
  );
3638
3698
  }
3639
3699
 
@@ -3669,6 +3729,12 @@ export default class StatusPageAPI extends BaseAPI<
3669
3729
  ? (req.body.data["microsoftTeamsWorkspaceName"] as string)
3670
3730
  : undefined;
3671
3731
 
3732
+ const subscriberWebhookUrl: string | undefined = req.body.data[
3733
+ "subscriberWebhook"
3734
+ ]
3735
+ ? (req.body.data["subscriberWebhook"] as string)
3736
+ : undefined;
3737
+
3672
3738
  let statusPageSubscriber: StatusPageSubscriber | null = null;
3673
3739
 
3674
3740
  let isUpdate: boolean = false;
@@ -3761,6 +3827,15 @@ export default class StatusPageAPI extends BaseAPI<
3761
3827
  microsoftTeamsWorkspaceName;
3762
3828
  }
3763
3829
 
3830
+ if (subscriberWebhookUrl) {
3831
+ logger.debug(
3832
+ `Setting subscriber webhook URL: ${subscriberWebhookUrl}`,
3833
+ getLogAttributesFromRequest(req as any),
3834
+ );
3835
+ statusPageSubscriber.subscriberWebhook =
3836
+ URL.fromString(subscriberWebhookUrl);
3837
+ }
3838
+
3764
3839
  if (
3765
3840
  !isUpdate &&
3766
3841
  req.body.data["statusPageResources"] &&
@@ -0,0 +1,17 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1778521361934 implements MigrationInterface {
4
+ public name = "MigrationName1778521361934";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `ALTER TABLE "StatusPage" ADD "enableWebhookSubscribers" boolean NOT NULL DEFAULT false`,
9
+ );
10
+ }
11
+
12
+ public async down(queryRunner: QueryRunner): Promise<void> {
13
+ await queryRunner.query(
14
+ `ALTER TABLE "StatusPage" DROP COLUMN "enableWebhookSubscribers"`,
15
+ );
16
+ }
17
+ }
@@ -0,0 +1,63 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddStatusPageOIDC1778522070962 implements MigrationInterface {
4
+ public name = "AddStatusPageOIDC1778522070962";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `CREATE TABLE "StatusPageOIDC" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "statusPageId" uuid NOT NULL, "name" character varying(100) NOT NULL, "description" character varying NOT NULL, "discoveryURL" text NOT NULL, "issuerURL" text NOT NULL, "clientId" character varying(100) NOT NULL, "clientSecret" character varying NOT NULL, "scopes" character varying(100) NOT NULL, "emailClaimName" character varying(100) NOT NULL, "nameClaimName" character varying(100), "createdByUserId" uuid, "deletedByUserId" uuid, "isEnabled" boolean NOT NULL DEFAULT false, "isTested" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_d48cc7131b1383a0c293e1142f4" PRIMARY KEY ("_id"))`,
9
+ );
10
+ await queryRunner.query(
11
+ `CREATE INDEX "IDX_da08a1ff289745767b094724f7" ON "StatusPageOIDC" ("projectId") `,
12
+ );
13
+ await queryRunner.query(
14
+ `CREATE INDEX "IDX_13c9b134ba46772392bdfb760f" ON "StatusPageOIDC" ("statusPageId") `,
15
+ );
16
+ await queryRunner.query(
17
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`,
18
+ );
19
+ await queryRunner.query(
20
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`,
21
+ );
22
+ await queryRunner.query(
23
+ `ALTER TABLE "StatusPageOIDC" ADD CONSTRAINT "FK_da08a1ff289745767b094724f79" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "StatusPageOIDC" ADD CONSTRAINT "FK_13c9b134ba46772392bdfb760fd" FOREIGN KEY ("statusPageId") REFERENCES "StatusPage"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
27
+ );
28
+ await queryRunner.query(
29
+ `ALTER TABLE "StatusPageOIDC" ADD CONSTRAINT "FK_8e3b6fea29c79c99389893961f1" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
30
+ );
31
+ await queryRunner.query(
32
+ `ALTER TABLE "StatusPageOIDC" ADD CONSTRAINT "FK_47054926e3844c88872599d5d55" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
33
+ );
34
+ }
35
+
36
+ public async down(queryRunner: QueryRunner): Promise<void> {
37
+ await queryRunner.query(
38
+ `ALTER TABLE "StatusPageOIDC" DROP CONSTRAINT "FK_47054926e3844c88872599d5d55"`,
39
+ );
40
+ await queryRunner.query(
41
+ `ALTER TABLE "StatusPageOIDC" DROP CONSTRAINT "FK_8e3b6fea29c79c99389893961f1"`,
42
+ );
43
+ await queryRunner.query(
44
+ `ALTER TABLE "StatusPageOIDC" DROP CONSTRAINT "FK_13c9b134ba46772392bdfb760fd"`,
45
+ );
46
+ await queryRunner.query(
47
+ `ALTER TABLE "StatusPageOIDC" DROP CONSTRAINT "FK_da08a1ff289745767b094724f79"`,
48
+ );
49
+ await queryRunner.query(
50
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`,
51
+ );
52
+ await queryRunner.query(
53
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`,
54
+ );
55
+ await queryRunner.query(
56
+ `DROP INDEX "public"."IDX_13c9b134ba46772392bdfb760f"`,
57
+ );
58
+ await queryRunner.query(
59
+ `DROP INDEX "public"."IDX_da08a1ff289745767b094724f7"`,
60
+ );
61
+ await queryRunner.query(`DROP TABLE "StatusPageOIDC"`);
62
+ }
63
+ }
@@ -314,6 +314,8 @@ import { AddPrivacyRules1778440665575 } from "./1778440665575-AddPrivacyRules";
314
314
  import { AddEpisodePrivacyRules1778442385970 } from "./1778442385970-AddEpisodePrivacyRules";
315
315
  import { AddProjectOIDC1778506655291 } from "./1778506655291-AddProjectOIDC";
316
316
  import { MigrationName1778514515756 } from "./1778514515756-MigrationName";
317
+ import { MigrationName1778521361934 } from "./1778521361934-MigrationName";
318
+ import { AddStatusPageOIDC1778522070962 } from "./1778522070962-AddStatusPageOIDC";
317
319
  export default [
318
320
  InitialMigration,
319
321
  MigrationName1717678334852,
@@ -631,4 +633,6 @@ export default [
631
633
  AddEpisodePrivacyRules1778442385970,
632
634
  AddProjectOIDC1778506655291,
633
635
  MigrationName1778514515756,
636
+ MigrationName1778521361934,
637
+ AddStatusPageOIDC1778522070962,
634
638
  ];
@@ -130,6 +130,7 @@ import StatusPageResourceService from "./StatusPageResourceService";
130
130
  // Status Page
131
131
  import StatusPageService from "./StatusPageService";
132
132
  import StatusPageSsoService from "./StatusPageSsoService";
133
+ import StatusPageOidcService from "./StatusPageOidcService";
133
134
  import StatusPageSubscriberService from "./StatusPageSubscriberService";
134
135
  import StatusPageSubscriberNotificationTemplateService from "./StatusPageSubscriberNotificationTemplateService";
135
136
  import StatusPageSubscriberNotificationTemplateStatusPageService from "./StatusPageSubscriberNotificationTemplateStatusPageService";
@@ -335,6 +336,7 @@ const services: Array<BaseService> = [
335
336
  StatusPageResourceService,
336
337
  StatusPageService,
337
338
  StatusPageSsoService,
339
+ StatusPageOidcService,
338
340
  StatusPageSubscriberService,
339
341
  StatusPageSubscriberNotificationTemplateService,
340
342
  StatusPageSubscriberNotificationTemplateStatusPageService,
@@ -51,6 +51,7 @@ import StatusPageEventType from "../../Types/StatusPage/StatusPageEventType";
51
51
  import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
52
52
  import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
53
53
  import SlackUtil from "../Utils/Workspace/Slack/Slack";
54
+ import StatusPageSubscriberWebhookUtil from "../Utils/StatusPageSubscriberWebhook";
54
55
  import { Gray500, Red500 } from "../../Types/BrandColors";
55
56
  import Label from "../../Models/DatabaseModels/Label";
56
57
  import LabelService from "./LabelService";
@@ -332,6 +333,39 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
332
333
  });
333
334
  }
334
335
 
336
+ if (subscriber.subscriberWebhook) {
337
+ StatusPageSubscriberWebhookUtil.sendWebhookNotification({
338
+ webhookUrl: subscriber.subscriberWebhook,
339
+ payload: {
340
+ eventType: "ScheduledMaintenanceCreated",
341
+ statusPageId: statuspage.id!.toString(),
342
+ statusPageName: statusPageName,
343
+ statusPageUrl: statusPageURL,
344
+ unsubscribeUrl: unsubscribeUrl,
345
+ data: {
346
+ scheduledMaintenanceId: event.id?.toString() || "",
347
+ scheduledMaintenanceTitle: event.title || "",
348
+ scheduledMaintenanceDescription: event.description || "",
349
+ scheduledStartTime:
350
+ OneUptimeDate.getDateAsUserFriendlyFormattedString(
351
+ event.startsAt!,
352
+ ),
353
+ scheduledEndTime: event.endsAt
354
+ ? OneUptimeDate.getDateAsUserFriendlyFormattedString(
355
+ event.endsAt,
356
+ )
357
+ : "",
358
+ resourcesAffected: resourcesAffected,
359
+ detailsUrl: scheduledEventDetailsUrl,
360
+ },
361
+ },
362
+ }).catch((err: Error) => {
363
+ logger.error(err, {
364
+ projectId: statuspage.projectId?.toString(),
365
+ } as LogAttributes);
366
+ });
367
+ }
368
+
335
369
  if (subscriber.subscriberEmail) {
336
370
  // send email here.
337
371
  const statusPageIdString: string | null =
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/StatusPageOidc";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();
@@ -36,6 +36,7 @@ import StatusPageSubscriberNotificationMethod from "../../Types/StatusPage/Statu
36
36
  import NumberUtil from "../../Utils/Number";
37
37
  import SlackUtil from "../Utils/Workspace/Slack/Slack";
38
38
  import MicrosoftTeamsUtil from "../Utils/Workspace/MicrosoftTeams/MicrosoftTeams";
39
+ import StatusPageSubscriberWebhookUtil from "../Utils/StatusPageSubscriberWebhook";
39
40
  import StatusPageSubscriberNotificationTemplateService, {
40
41
  Service as StatusPageSubscriberNotificationTemplateServiceClass,
41
42
  } from "./StatusPageSubscriberNotificationTemplateService";
@@ -540,6 +541,43 @@ Stay informed about service availability! 🚀`;
540
541
  });
541
542
  }
542
543
 
544
+ // if generic webhook URL is provided and sendYouHaveSubscribedMessage is true, then ping the webhook with the subscription event.
545
+ if (
546
+ createdItem.subscriberWebhook &&
547
+ createdItem.sendYouHaveSubscribedMessage
548
+ ) {
549
+ logger.debug("Sending webhook notification for new subscriber.", {
550
+ projectId: createdItem.projectId?.toString(),
551
+ } as LogAttributes);
552
+
553
+ StatusPageSubscriberWebhookUtil.sendWebhookNotification({
554
+ webhookUrl: URL.fromString(createdItem.subscriberWebhook.toString()),
555
+ payload: {
556
+ eventType: "SubscriberSubscribed",
557
+ statusPageId: createdItem.statusPageId.toString(),
558
+ statusPageName: statusPageName,
559
+ statusPageUrl: statusPageURL,
560
+ unsubscribeUrl: unsubscribeLink,
561
+ data: {
562
+ message: `You have been subscribed to ${statusPageName}.`,
563
+ },
564
+ },
565
+ })
566
+ .then(() => {
567
+ logger.debug("Webhook notification sent successfully.", {
568
+ projectId: createdItem.projectId?.toString(),
569
+ } as LogAttributes);
570
+ })
571
+ .catch((err: Error) => {
572
+ logger.error("Error sending webhook notification:", {
573
+ projectId: createdItem.projectId?.toString(),
574
+ } as LogAttributes);
575
+ logger.error(err, {
576
+ projectId: createdItem.projectId?.toString(),
577
+ } as LogAttributes);
578
+ });
579
+ }
580
+
543
581
  // if Microsoft Teams incoming webhook is provided and sendYouHaveSubscribedMessage is true, then send a message to the Teams channel.
544
582
  if (
545
583
  createdItem.microsoftTeamsIncomingWebhookUrl &&
@@ -1345,6 +1383,69 @@ Stay informed about service availability! 🚀`;
1345
1383
  return statusPages;
1346
1384
  }
1347
1385
 
1386
+ @CaptureSpan()
1387
+ public async testSubscriberWebhook(data: {
1388
+ webhookUrl: string;
1389
+ statusPageId: ObjectID;
1390
+ }): Promise<void> {
1391
+ // basic validation - must be a valid URL
1392
+ let parsedUrl: URL;
1393
+ try {
1394
+ parsedUrl = URL.fromString(data.webhookUrl);
1395
+ } catch {
1396
+ throw new BadDataException("Invalid Webhook URL");
1397
+ }
1398
+
1399
+ // get the status page info
1400
+ const statusPage: StatusPage | null = await StatusPageService.findOneById({
1401
+ id: data.statusPageId,
1402
+ props: {
1403
+ isRoot: true,
1404
+ },
1405
+ select: {
1406
+ name: true,
1407
+ pageTitle: true,
1408
+ projectId: true,
1409
+ _id: true,
1410
+ },
1411
+ });
1412
+
1413
+ if (!statusPage) {
1414
+ throw new BadDataException("Status page not found");
1415
+ }
1416
+
1417
+ const statusPageName: string =
1418
+ statusPage.pageTitle || statusPage.name || "Status Page";
1419
+ const statusPageURL: string = await StatusPageService.getStatusPageURL(
1420
+ statusPage.id!,
1421
+ );
1422
+
1423
+ try {
1424
+ await StatusPageSubscriberWebhookUtil.sendWebhookNotification({
1425
+ webhookUrl: parsedUrl,
1426
+ payload: {
1427
+ eventType: "TestNotification",
1428
+ statusPageId: statusPage.id!.toString(),
1429
+ statusPageName: statusPageName,
1430
+ statusPageUrl: statusPageURL,
1431
+ unsubscribeUrl: "",
1432
+ data: {
1433
+ message:
1434
+ "This is a test notification from OneUptime. Your webhook is configured correctly.",
1435
+ },
1436
+ },
1437
+ });
1438
+ } catch (error) {
1439
+ logger.error("Error sending test webhook notification:", {
1440
+ projectId: statusPage?.projectId?.toString(),
1441
+ } as LogAttributes);
1442
+ logger.error(error, {
1443
+ projectId: statusPage?.projectId?.toString(),
1444
+ } as LogAttributes);
1445
+ throw error;
1446
+ }
1447
+ }
1448
+
1348
1449
  @CaptureSpan()
1349
1450
  public async testSlackWebhook(data: {
1350
1451
  webhookUrl: string;
@@ -0,0 +1,39 @@
1
+ import API from "../../Utils/API";
2
+ import URL from "../../Types/API/URL";
3
+ import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
4
+ import HTTPResponse from "../../Types/API/HTTPResponse";
5
+ import { JSONObject } from "../../Types/JSON";
6
+ import logger from "./Logger";
7
+
8
+ export interface StatusPageWebhookPayload extends JSONObject {
9
+ eventType: string;
10
+ statusPageId: string;
11
+ statusPageName: string;
12
+ statusPageUrl: string;
13
+ unsubscribeUrl: string;
14
+ data: JSONObject;
15
+ }
16
+
17
+ export default class StatusPageSubscriberWebhookUtil {
18
+ public static async sendWebhookNotification(data: {
19
+ webhookUrl: URL;
20
+ payload: StatusPageWebhookPayload;
21
+ }): Promise<HTTPResponse<JSONObject> | HTTPErrorResponse> {
22
+ logger.debug("Sending status page subscriber webhook notification.");
23
+
24
+ const apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse =
25
+ await API.post({
26
+ url: data.webhookUrl,
27
+ data: data.payload,
28
+ options: {
29
+ retries: 3,
30
+ exponentialBackoff: true,
31
+ },
32
+ });
33
+
34
+ logger.debug("Status page subscriber webhook response:");
35
+ logger.debug(apiResult);
36
+
37
+ return apiResult;
38
+ }
39
+ }
@@ -538,6 +538,11 @@ enum Permission {
538
538
  EditStatusPageSSO = "EditStatusPageSSO",
539
539
  ReadStatusPageSSO = "ReadStatusPageSSO",
540
540
 
541
+ CreateStatusPageOIDC = "CreateStatusPageOIDC",
542
+ DeleteStatusPageOIDC = "DeleteStatusPageOIDC",
543
+ EditStatusPageOIDC = "EditStatusPageOIDC",
544
+ ReadStatusPageOIDC = "ReadStatusPageOIDC",
545
+
541
546
  // Label Permissions (Owner + Admin Permission by default)
542
547
  CreateProjectLabel = "CreateProjectLabel",
543
548
  EditProjectLabel = "EditProjectLabel",
@@ -3033,6 +3038,47 @@ export class PermissionHelper {
3033
3038
  group: PermissionGroup.StatusPage,
3034
3039
  },
3035
3040
 
3041
+ {
3042
+ permission: Permission.CreateStatusPageOIDC,
3043
+ title: "Create Status Page OIDC",
3044
+ description:
3045
+ "This permission can create Status Page OIDC in this project.",
3046
+ isAssignableToTenant: true,
3047
+ isAccessControlPermission: false,
3048
+ isRolePermission: false,
3049
+ group: PermissionGroup.StatusPage,
3050
+ },
3051
+ {
3052
+ permission: Permission.DeleteStatusPageOIDC,
3053
+ title: "Delete Status Page OIDC",
3054
+ description:
3055
+ "This permission can delete Status Page OIDC in this project.",
3056
+ isAssignableToTenant: true,
3057
+ isAccessControlPermission: false,
3058
+ isRolePermission: false,
3059
+ group: PermissionGroup.StatusPage,
3060
+ },
3061
+ {
3062
+ permission: Permission.EditStatusPageOIDC,
3063
+ title: "Edit Status Page OIDC",
3064
+ description:
3065
+ "This permission can edit Status Page OIDC in this project.",
3066
+ isAssignableToTenant: true,
3067
+ isAccessControlPermission: false,
3068
+ isRolePermission: false,
3069
+ group: PermissionGroup.StatusPage,
3070
+ },
3071
+ {
3072
+ permission: Permission.ReadStatusPageOIDC,
3073
+ title: "Read Status Page OIDC",
3074
+ description:
3075
+ "This permission can read Status Page OIDC in this project.",
3076
+ isAssignableToTenant: true,
3077
+ isAccessControlPermission: false,
3078
+ isRolePermission: false,
3079
+ group: PermissionGroup.StatusPage,
3080
+ },
3081
+
3036
3082
  {
3037
3083
  permission: Permission.CreateProjectSMTPConfig,
3038
3084
  title: "Create SMTP Config",
@@ -165,6 +165,7 @@ import StatusPagePrivateUserSession from "./StatusPagePrivateUserSession";
165
165
  import StatusPageResource from "./StatusPageResource";
166
166
  import StatusPageSCIM from "./StatusPageSCIM";
167
167
  import StatusPageSSO from "./StatusPageSso";
168
+ import StatusPageOIDC from "./StatusPageOidc";
168
169
  import StatusPageSubscriber from "./StatusPageSubscriber";
169
170
  import StatusPageSubscriberNotificationTemplate from "./StatusPageSubscriberNotificationTemplate";
170
171
  import StatusPageSubscriberNotificationTemplateStatusPage from "./StatusPageSubscriberNotificationTemplateStatusPage";
@@ -410,6 +411,7 @@ const AllModelTypes = [
410
411
  ProjectSSO,
411
412
  ProjectOIDC,
412
413
  StatusPageSSO,
414
+ StatusPageOIDC,
413
415
  StatusPageSCIM,
414
416
  MonitorProbe,
415
417
  MonitorOwnerTeam,
@@ -1 +1 @@
1
- {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/Index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/Index.ts"],"names":[],"mappings":"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"}