@oneuptime/common 13.0.8 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/BaseAPI.ts +26 -5
- package/Server/API/GlobalConfigAPI.ts +228 -462
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/StatusPageAPI.ts +100 -42
- package/Server/API/TeamMemberAPI.ts +10 -1
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/UserAuthorization.ts +38 -16
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +56 -4
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/ProjectService.ts +284 -0
- package/Server/Services/RumSessionPinService.ts +25 -6
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Markdown.test.ts +181 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +26 -5
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +93 -43
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +8 -1
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.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/Middleware/UserAuthorization.js +30 -11
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -4
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +214 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +24 -6
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
-
import TeamComplianceService, {
|
|
3
|
-
TeamComplianceStatus,
|
|
4
|
-
UserComplianceStatus,
|
|
5
|
-
} from "../Services/TeamComplianceService";
|
|
6
|
-
import {
|
|
7
|
-
ExpressRequest,
|
|
8
|
-
ExpressResponse,
|
|
9
|
-
NextFunction,
|
|
10
|
-
} from "../Utils/Express";
|
|
11
|
-
import Response from "../Utils/Response";
|
|
12
|
-
import BaseAPI from "./BaseAPI";
|
|
13
|
-
import CommonAPI from "./CommonAPI";
|
|
14
|
-
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
15
|
-
import ObjectID from "../../Types/ObjectID";
|
|
16
|
-
import Team from "../../Models/DatabaseModels/Team";
|
|
17
|
-
import TeamService, {
|
|
18
|
-
Service as TeamServiceType,
|
|
19
|
-
} from "../Services/TeamService";
|
|
20
|
-
import ComplianceRuleType from "../../Types/Team/ComplianceRuleType";
|
|
21
|
-
|
|
22
|
-
/*
|
|
23
|
-
* `/team/compliance-status/:teamId` - who on this team cannot be paged, and why.
|
|
24
|
-
*
|
|
25
|
-
* AUTHORISATION, and why it is written out here rather than assumed.
|
|
26
|
-
*
|
|
27
|
-
* This route is mounted with UserMiddleware.getUserMiddleware, and that
|
|
28
|
-
* middleware is not an authorisation gate: it admits an unauthenticated request
|
|
29
|
-
* as UserType.Public and calls next(), and the tenant id it attaches is read
|
|
30
|
-
* from the caller-supplied `tenantid` header before any authorisation runs.
|
|
31
|
-
* Everything underneath then reads with `isRoot: true`, because a compliance
|
|
32
|
-
* page necessarily reports on people the reader may not be permitted to read
|
|
33
|
-
* individually. The handler is therefore the only gate that exists.
|
|
34
|
-
*
|
|
35
|
-
* Until this change the handler checked only that the header carried SOME
|
|
36
|
-
* project id, so anyone at all could send a `tenantid` and a team id and be told
|
|
37
|
-
* which of that team's responders are unreachable, by name and email. That is a
|
|
38
|
-
* roster of who to phone during an outage and who will never pick up, and it
|
|
39
|
-
* predates Phase 2 - it is not a regression introduced by the readiness work,
|
|
40
|
-
* but the readiness work rebuilt this service, so it is closed here.
|
|
41
|
-
*
|
|
42
|
-
* Two assertions now, in this order:
|
|
43
|
-
*
|
|
44
|
-
* 1. the caller is a logged-in member of the project they named
|
|
45
|
-
* (CommonAPI.assertAuthenticatedProjectMember), and
|
|
46
|
-
* 2. the team in the path belongs to that same project - otherwise a member of
|
|
47
|
-
* project A reads project B's roster simply by sending their own header
|
|
48
|
-
* alongside a borrowed team id.
|
|
49
|
-
*
|
|
50
|
-
* TeamComplianceService scopes its own team read to the project as well, and the
|
|
51
|
-
* duplication is deliberate for the same reason OnCallReadinessAPI duplicates
|
|
52
|
-
* its service's guards: the service's scoping answers "no such team" (a 400),
|
|
53
|
-
* whereas a member of project A reaching for project B's team id is an
|
|
54
|
-
* authorisation failure and should be answered as one - and an endpoint's
|
|
55
|
-
* authorisation should be legible in the endpoint, not inferred from what some
|
|
56
|
-
* service happens to do today. The wording of the refusal is identical to the
|
|
57
|
-
* one a nonexistent team gets, so the route cannot be used to enumerate team ids
|
|
58
|
-
* across tenants.
|
|
59
|
-
*/
|
|
60
|
-
export default class TeamComplianceAPI extends BaseAPI<Team, TeamServiceType> {
|
|
61
|
-
public constructor() {
|
|
62
|
-
super(Team, TeamService);
|
|
63
|
-
|
|
64
|
-
// Get team compliance status
|
|
65
|
-
this.router.get(
|
|
66
|
-
`${new this.entityType().getCrudApiPath()?.toString()}/compliance-status/:teamId`,
|
|
67
|
-
UserMiddleware.getUserMiddleware,
|
|
68
|
-
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
69
|
-
try {
|
|
70
|
-
const databaseProps: DatabaseCommonInteractionProps =
|
|
71
|
-
await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
72
|
-
|
|
73
|
-
const projectId: ObjectID =
|
|
74
|
-
CommonAPI.assertAuthenticatedProjectMember(databaseProps);
|
|
75
|
-
|
|
76
|
-
/*
|
|
77
|
-
* ObjectID's constructor accepts any string, so an unparseable path
|
|
78
|
-
* segment would otherwise travel all the way to a query that matches
|
|
79
|
-
* nothing and be reported as "this team does not exist" rather than as
|
|
80
|
-
* "you sent nonsense". The guard this replaces was `if (!teamId)`,
|
|
81
|
-
* which could never fire: `new ObjectID(...)` is always truthy, so a
|
|
82
|
-
* malformed id was accepted silently.
|
|
83
|
-
*/
|
|
84
|
-
const rawTeamId: string = (req.params["teamId"] as string) || "";
|
|
85
|
-
ObjectID.validateUUID(rawTeamId);
|
|
86
|
-
const teamId: ObjectID = new ObjectID(rawTeamId);
|
|
87
|
-
|
|
88
|
-
/*
|
|
89
|
-
* The team id arrives from the caller and everything downstream reads
|
|
90
|
-
* as root, so the team's OWN projectId - not the header - is what has
|
|
91
|
-
* to agree with the project the caller was authorised for.
|
|
92
|
-
*/
|
|
93
|
-
const team: Team | null = await TeamService.findOneById({
|
|
94
|
-
id: teamId,
|
|
95
|
-
select: {
|
|
96
|
-
projectId: true,
|
|
97
|
-
},
|
|
98
|
-
props: {
|
|
99
|
-
isRoot: true,
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
CommonAPI.assertResourceBelongsToProject({
|
|
104
|
-
resourceProjectId: team?.projectId,
|
|
105
|
-
projectId: projectId,
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
const complianceStatus: TeamComplianceStatus =
|
|
109
|
-
await TeamComplianceService.getTeamComplianceStatus(
|
|
110
|
-
teamId,
|
|
111
|
-
projectId,
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
// Convert ObjectIDs to strings for JSON response
|
|
115
|
-
const responseData: {
|
|
116
|
-
teamId: string;
|
|
117
|
-
teamName: string;
|
|
118
|
-
complianceSettings: Array<{
|
|
119
|
-
ruleType: ComplianceRuleType;
|
|
120
|
-
enabled: boolean;
|
|
121
|
-
}>;
|
|
122
|
-
userComplianceStatuses: Array<{
|
|
123
|
-
userId: string;
|
|
124
|
-
userName: string;
|
|
125
|
-
userEmail: string;
|
|
126
|
-
userProfilePictureId: string | undefined;
|
|
127
|
-
isCompliant: boolean;
|
|
128
|
-
nonCompliantRules: Array<{
|
|
129
|
-
ruleType: ComplianceRuleType;
|
|
130
|
-
reason: string;
|
|
131
|
-
}>;
|
|
132
|
-
}>;
|
|
133
|
-
} = {
|
|
134
|
-
teamId: complianceStatus.teamId.toString(),
|
|
135
|
-
teamName: complianceStatus.teamName,
|
|
136
|
-
complianceSettings: complianceStatus.complianceSettings,
|
|
137
|
-
userComplianceStatuses: complianceStatus.userComplianceStatuses.map(
|
|
138
|
-
(user: UserComplianceStatus) => {
|
|
139
|
-
return {
|
|
140
|
-
userId: user.userId.toString(),
|
|
141
|
-
userName: user.userName,
|
|
142
|
-
userEmail: user.userEmail,
|
|
143
|
-
userProfilePictureId: user.userProfilePictureId?.toString(),
|
|
144
|
-
isCompliant: user.isCompliant,
|
|
145
|
-
nonCompliantRules: user.nonCompliantRules,
|
|
146
|
-
};
|
|
147
|
-
},
|
|
148
|
-
),
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
return Response.sendJsonObjectResponse(req, res, responseData);
|
|
152
|
-
} catch (e) {
|
|
153
|
-
next(e);
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import ProjectSCIMService from "../Services/ProjectSCIMService";
|
|
2
|
-
import StatusPageSCIMService from "../Services/StatusPageSCIMService";
|
|
3
|
-
import {
|
|
4
|
-
ExpressRequest,
|
|
5
|
-
ExpressResponse,
|
|
6
|
-
NextFunction,
|
|
7
|
-
OneUptimeRequest,
|
|
8
|
-
} from "../Utils/Express";
|
|
9
|
-
import ObjectID from "../../Types/ObjectID";
|
|
10
|
-
import ProjectSCIM from "../../Models/DatabaseModels/ProjectSCIM";
|
|
11
|
-
import StatusPageSCIM from "../../Models/DatabaseModels/StatusPageSCIM";
|
|
12
|
-
import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
|
|
13
|
-
import BadRequestException from "../../Types/Exception/BadRequestException";
|
|
14
|
-
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
-
import SpanUtil from "../Utils/Telemetry/SpanUtil";
|
|
16
|
-
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
17
|
-
|
|
18
|
-
export default class SCIMMiddleware {
|
|
19
|
-
@CaptureSpan()
|
|
20
|
-
public static async isAuthorizedSCIMRequest(
|
|
21
|
-
req: ExpressRequest,
|
|
22
|
-
_res: ExpressResponse,
|
|
23
|
-
next: NextFunction,
|
|
24
|
-
): Promise<void> {
|
|
25
|
-
try {
|
|
26
|
-
const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest;
|
|
27
|
-
|
|
28
|
-
// Extract SCIM ID from URL path (could be project or status page)
|
|
29
|
-
const scimId: string | undefined =
|
|
30
|
-
req.params["projectScimId"] || req.params["statusPageScimId"];
|
|
31
|
-
if (!scimId) {
|
|
32
|
-
throw new BadRequestException("SCIM ID is required");
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Extract bearer token from Authorization header
|
|
36
|
-
let bearerToken: string | undefined;
|
|
37
|
-
if (req.headers?.["authorization"]) {
|
|
38
|
-
const authHeader: string = req.headers["authorization"] as string;
|
|
39
|
-
if (authHeader.startsWith("Bearer ")) {
|
|
40
|
-
bearerToken = authHeader.substring(7);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
logger.debug(
|
|
45
|
-
`SCIM Authorization: scimId=${scimId}, bearerToken=${
|
|
46
|
-
bearerToken ? "***" : "missing"
|
|
47
|
-
}`,
|
|
48
|
-
getLogAttributesFromRequest(req as OneUptimeRequest),
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
if (!bearerToken) {
|
|
52
|
-
throw new NotAuthorizedException(
|
|
53
|
-
"Bearer token is required for SCIM authentication",
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Try to find Project SCIM configuration first
|
|
58
|
-
const projectScimConfig: ProjectSCIM | null =
|
|
59
|
-
await ProjectSCIMService.findOneBy({
|
|
60
|
-
query: {
|
|
61
|
-
_id: new ObjectID(scimId),
|
|
62
|
-
bearerToken: bearerToken,
|
|
63
|
-
},
|
|
64
|
-
select: {
|
|
65
|
-
_id: true,
|
|
66
|
-
projectId: true,
|
|
67
|
-
autoProvisionUsers: true,
|
|
68
|
-
autoDeprovisionUsers: true,
|
|
69
|
-
enablePushGroups: true,
|
|
70
|
-
teams: {
|
|
71
|
-
_id: true,
|
|
72
|
-
name: true,
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
props: {
|
|
76
|
-
isRoot: true,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
if (projectScimConfig) {
|
|
81
|
-
// Store Project SCIM configuration
|
|
82
|
-
oneuptimeRequest.bearerTokenData = {
|
|
83
|
-
scimConfig: projectScimConfig,
|
|
84
|
-
projectId: projectScimConfig.projectId,
|
|
85
|
-
projectScimId: new ObjectID(scimId),
|
|
86
|
-
type: "project-scim",
|
|
87
|
-
};
|
|
88
|
-
return next();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// If not found, try Status Page SCIM configuration
|
|
92
|
-
const statusPageScimConfig: StatusPageSCIM | null =
|
|
93
|
-
await StatusPageSCIMService.findOneBy({
|
|
94
|
-
query: {
|
|
95
|
-
_id: new ObjectID(scimId),
|
|
96
|
-
bearerToken: bearerToken,
|
|
97
|
-
},
|
|
98
|
-
select: {
|
|
99
|
-
_id: true,
|
|
100
|
-
projectId: true,
|
|
101
|
-
statusPageId: true,
|
|
102
|
-
autoProvisionUsers: true,
|
|
103
|
-
autoDeprovisionUsers: true,
|
|
104
|
-
},
|
|
105
|
-
props: {
|
|
106
|
-
isRoot: true,
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
if (statusPageScimConfig) {
|
|
111
|
-
// Store Status Page SCIM configuration
|
|
112
|
-
oneuptimeRequest.bearerTokenData = {
|
|
113
|
-
scimConfig: statusPageScimConfig,
|
|
114
|
-
projectId: statusPageScimConfig.projectId,
|
|
115
|
-
statusPageId: statusPageScimConfig.statusPageId,
|
|
116
|
-
statusPageScimId: new ObjectID(scimId),
|
|
117
|
-
type: "status-page-scim",
|
|
118
|
-
};
|
|
119
|
-
return next();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// If neither found, throw error
|
|
123
|
-
throw new NotAuthorizedException(
|
|
124
|
-
"Invalid bearer token or SCIM configuration not found",
|
|
125
|
-
);
|
|
126
|
-
} catch (err) {
|
|
127
|
-
/*
|
|
128
|
-
* Record on THIS middleware's own @CaptureSpan span before handing the
|
|
129
|
-
* error to Express. The decorator sees a normal return (we call
|
|
130
|
-
* next(err) rather than rethrowing — Express 4 does not catch a
|
|
131
|
-
* rejection from an async middleware), so its recorder never runs and
|
|
132
|
-
* without this the error is invisible on the span it actually belongs
|
|
133
|
-
* to. Goes through SpanUtil so the event is typed by class name rather
|
|
134
|
-
* than by HTTP status, and so a rejected credential produces a `fault`
|
|
135
|
-
* event instead of an Issue.
|
|
136
|
-
*/
|
|
137
|
-
SpanUtil.recordExceptionOnCurrentSpan(err);
|
|
138
|
-
return next(err);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|