@oneuptime/common 12.0.13 → 12.0.15
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/GlobalOidc.ts +20 -0
- package/Models/DatabaseModels/GlobalSso.ts +20 -0
- package/Models/DatabaseModels/MarketingConversion.ts +19 -9
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +7 -4
- package/Models/DatabaseModels/UserCall.ts +94 -3
- package/Models/DatabaseModels/UserEmail.ts +94 -3
- package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
- package/Models/DatabaseModels/UserPush.ts +37 -0
- package/Models/DatabaseModels/UserSMS.ts +94 -3
- package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
- package/Server/API/BaseAPI.ts +79 -14
- package/Server/API/StatusPageAPI.ts +29 -4
- package/Server/API/UserCallAPI.ts +53 -45
- package/Server/API/UserEmailAPI.ts +53 -44
- package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
- package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
- package/Server/API/UserPushAPI.ts +126 -2
- package/Server/API/UserSmsAPI.ts +53 -44
- package/Server/API/UserWhatsAppAPI.ts +53 -50
- package/Server/EnvironmentConfig.ts +7 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/SlackAuthorization.ts +43 -6
- package/Server/Middleware/UserAuthorization.ts +236 -26
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/DatabaseService.ts +101 -0
- package/Server/Services/GlobalOidcProjectService.ts +126 -1
- package/Server/Services/GlobalOidcService.ts +132 -0
- package/Server/Services/GlobalSsoProjectService.ts +126 -1
- package/Server/Services/GlobalSsoService.ts +132 -0
- package/Server/Services/LogAggregationService.ts +5 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/TeamMemberService.ts +53 -13
- package/Server/Services/UserCallService.ts +55 -24
- package/Server/Services/UserEmailService.ts +83 -17
- package/Server/Services/UserIncomingCallNumberService.ts +49 -85
- package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
- package/Server/Services/UserNotificationRuleService.ts +26 -0
- package/Server/Services/UserPushService.ts +89 -0
- package/Server/Services/UserSmsService.ts +50 -17
- package/Server/Services/UserWhatsAppService.ts +48 -15
- package/Server/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/CronTab.ts +73 -0
- package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +35 -5
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +1 -1
- package/Server/Utils/Marketing/Providers/Meta.ts +1 -1
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/Reddit.ts +1 -1
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
- package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
- package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +47 -44
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +8 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +161 -21
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
- package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
- package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +28 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
- package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
- package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
- package/Tests/Server/API/UserSmsApi.test.ts +107 -14
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +265 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
- package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +10 -62
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
- package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
- package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
- package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
- package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
- package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
- package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
- package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
- package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
- package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
- package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -0
- package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
- package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
- package/Tests/Server/Types/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
- package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -0
- package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
- package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
- package/Tests/Server/Utils/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/CronTab.test.ts +116 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
- package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
- package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +254 -0
- package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +987 -0
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +382 -0
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +86 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
- package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
- package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
- package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
- package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
- package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
- package/Tests/Types/Call/CallRequest.test.ts +189 -0
- package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
- package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
- package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
- package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
- package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
- package/Tests/Types/Monitor/MonitorStepConfigHelpers.test.ts +165 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
- package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
- package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
- package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
- package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
- package/Tests/UI/Components/Forms/FormSubmitAnalytics.test.tsx +206 -0
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
- package/Tests/UI/Components/List.test.tsx +9 -2
- package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
- package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
- package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
- package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
- package/Tests/UI/Components/Skeleton.test.tsx +71 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
- package/Tests/UI/Components/Tabs.test.tsx +24 -0
- package/Tests/UI/Components/Toast.test.tsx +130 -7
- package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
- package/Tests/UI/Utils/AIChatExport/ConversationMarkdown.test.ts +774 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -0
- package/Tests/UI/Utils/Dropdown.test.ts +423 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
- package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
- package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
- package/Tests/Utils/API.test.ts +16 -2
- package/Tests/Utils/Analytics.test.ts +187 -0
- package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
- package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +80 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1291 -0
- package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Marketing/MarketingConversion.ts +12 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -0
- package/Types/Permission.ts +35 -0
- package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
- package/Types/PushNotification/PushNotificationMessage.ts +15 -0
- package/Types/PushNotification/PushNotificationRequest.ts +8 -16
- package/Types/Service/ServiceLanguage.ts +144 -0
- package/Types/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
- package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
- package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
- package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
- package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
- package/UI/Components/CommandPalette/Types.ts +49 -0
- package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/Feed/FeedItem.tsx +1 -1
- package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
- package/UI/Components/Forms/BasicForm.tsx +13 -1
- package/UI/Components/Forms/BasicModelForm.tsx +2 -1
- package/UI/Components/Forms/ModelForm.tsx +10 -1
- package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +6 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
- package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
- package/UI/Components/Navbar/NavBar.tsx +14 -1
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
- package/UI/Components/SideOver/SideOver.tsx +37 -2
- package/UI/Components/Skeleton/Skeleton.tsx +53 -0
- package/UI/Components/Table/Table.tsx +74 -44
- package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
- package/UI/Components/Tabs/Tab.tsx +1 -1
- package/UI/Components/Toast/Toast.tsx +118 -53
- package/UI/Components/Toast/ToastInit.tsx +82 -32
- package/UI/Styles/Theme.css +40 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
- package/UI/Utils/ModelListCache.ts +188 -0
- package/UI/Utils/Project.ts +29 -0
- package/Utils/API.ts +6 -1
- package/Utils/Analytics.ts +55 -2
- package/Utils/Monitor/MonitorMetricType.ts +40 -0
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +587 -37
- package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +20 -10
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +25 -4
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +42 -38
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +42 -38
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
- package/build/dist/Server/API/UserPushAPI.js +95 -2
- package/build/dist/Server/API/UserPushAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +42 -38
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +6 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/SlackAuthorization.js +28 -4
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js +32 -2
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +74 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcService.js +127 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoService.js +127 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +5 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +69 -30
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +54 -22
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +78 -17
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
- package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +77 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +50 -17
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
- package/build/dist/Server/Utils/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/CronTab.js +66 -0
- package/build/dist/Server/Utils/CronTab.js.map +1 -1
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +17 -1
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +34 -37
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +123 -23
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js +39 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js.map +1 -0
- package/build/dist/Server/Utils/TotpAuth.js +127 -8
- package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
- package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
- package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
- package/build/dist/Server/Utils/VerificationCode.js +120 -0
- package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Marketing/MarketingConversion.js +10 -0
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js.map +1 -0
- package/build/dist/Types/Permission.js +33 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
- package/build/dist/Types/Service/ServiceLanguage.js +96 -0
- package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
- package/build/dist/Types/Text.js +82 -17
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -14
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
- package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
- package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +4 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
- package/build/dist/UI/Components/List/List.js +19 -5
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
- package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +35 -24
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tab.js +1 -1
- package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
- package/build/dist/UI/Components/Toast/Toast.js +77 -23
- package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
- package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelListCache.js +126 -0
- package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +24 -1
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/Utils/API.js +6 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Analytics.js +50 -2
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +318 -37
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
- package/jest.config.json +1 -1
- package/package.json +2 -3
- package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
- package/Tests/__mocks__/otpauth.js +0 -30
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
|
@@ -317,15 +317,27 @@ class UserSMS extends BaseModel {
|
|
|
317
317
|
@OwnerOnlyColumn()
|
|
318
318
|
@TableColumn({
|
|
319
319
|
title: "Verification Code",
|
|
320
|
-
description:
|
|
320
|
+
description:
|
|
321
|
+
"Keyed digest of the temporary verification code — never the code itself",
|
|
321
322
|
isDefaultValueColumn: true,
|
|
322
323
|
computed: true,
|
|
323
324
|
required: true,
|
|
324
325
|
type: TableColumnType.ShortText,
|
|
326
|
+
/*
|
|
327
|
+
* A row is born with NO usable code on it: a 64-character random
|
|
328
|
+
* placeholder that no six-digit code can ever hash to. The real code is
|
|
329
|
+
* generated, hashed and sent by this channel's service once the row
|
|
330
|
+
* exists — the row id is part of the hashed message, so the digest cannot
|
|
331
|
+
* be computed before the insert has assigned one.
|
|
332
|
+
*
|
|
333
|
+
* This stays a forced default rather than moving wholly into the service
|
|
334
|
+
* hook because the column is NOT NULL and must be satisfied on every
|
|
335
|
+
* create path, including those that pass props.ignoreHooks.
|
|
336
|
+
*/
|
|
325
337
|
forceGetDefaultValueOnCreate: () => {
|
|
326
|
-
return Text.
|
|
338
|
+
return Text.generateRandomText(64);
|
|
327
339
|
},
|
|
328
|
-
example: "
|
|
340
|
+
example: "9f2c1b4a7d3e6058c1f0a9b8d7e6f5c4b3a291807f6e5d4c3b2a19081726354",
|
|
329
341
|
})
|
|
330
342
|
@Column({
|
|
331
343
|
type: ColumnType.ShortText,
|
|
@@ -333,6 +345,85 @@ class UserSMS extends BaseModel {
|
|
|
333
345
|
length: ColumnLength.ShortText,
|
|
334
346
|
})
|
|
335
347
|
public verificationCode?: string = undefined;
|
|
348
|
+
|
|
349
|
+
@ColumnAccessControl({
|
|
350
|
+
create: [],
|
|
351
|
+
read: [],
|
|
352
|
+
update: [],
|
|
353
|
+
})
|
|
354
|
+
/*
|
|
355
|
+
* When the code currently on this row stops being accepted.
|
|
356
|
+
*
|
|
357
|
+
* NULL means there is no live code: none was ever issued, or the last one
|
|
358
|
+
* was used, or it was burned by the attempt limit — or the row predates
|
|
359
|
+
* this column, which is read the same conservative way. Without an expiry
|
|
360
|
+
* the six-digit code space stood open indefinitely, which is what made
|
|
361
|
+
* walking it worthwhile.
|
|
362
|
+
*/
|
|
363
|
+
@TableColumn({
|
|
364
|
+
title: "Verification Code Expires At",
|
|
365
|
+
description: "When the verification code on this row stops being accepted",
|
|
366
|
+
computed: true,
|
|
367
|
+
type: TableColumnType.Date,
|
|
368
|
+
})
|
|
369
|
+
@Column({
|
|
370
|
+
type: ColumnType.Date,
|
|
371
|
+
nullable: true,
|
|
372
|
+
})
|
|
373
|
+
public verificationCodeExpiresAt?: Date = undefined;
|
|
374
|
+
|
|
375
|
+
@ColumnAccessControl({
|
|
376
|
+
create: [],
|
|
377
|
+
read: [],
|
|
378
|
+
update: [],
|
|
379
|
+
})
|
|
380
|
+
/*
|
|
381
|
+
* Wrong guesses made against the code currently on this row, reset to zero
|
|
382
|
+
* each time a code is issued.
|
|
383
|
+
*
|
|
384
|
+
* This is the counter that stops /verify being an unlimited oracle over a
|
|
385
|
+
* space small enough to walk in minutes. It is incremented with a single
|
|
386
|
+
* atomic UPDATE ... RETURNING rather than a read-modify-write, because
|
|
387
|
+
* requests racing each other are the normal shape of the attack.
|
|
388
|
+
*/
|
|
389
|
+
@TableColumn({
|
|
390
|
+
title: "Verification Failed Attempts",
|
|
391
|
+
description:
|
|
392
|
+
"Incorrect verification attempts made against the current verification code",
|
|
393
|
+
computed: true,
|
|
394
|
+
type: TableColumnType.Number,
|
|
395
|
+
})
|
|
396
|
+
@Column({
|
|
397
|
+
type: ColumnType.Number,
|
|
398
|
+
nullable: false,
|
|
399
|
+
default: 0,
|
|
400
|
+
})
|
|
401
|
+
public verificationFailedAttempts?: number = undefined;
|
|
402
|
+
|
|
403
|
+
@ColumnAccessControl({
|
|
404
|
+
create: [],
|
|
405
|
+
read: [],
|
|
406
|
+
update: [],
|
|
407
|
+
})
|
|
408
|
+
/*
|
|
409
|
+
* When a verification code was last sent for this row.
|
|
410
|
+
*
|
|
411
|
+
* Drives the resend cooldown. Without it, "spend the five attempts, ask for
|
|
412
|
+
* a fresh code, repeat" costs an attacker nothing — and the resend control
|
|
413
|
+
* doubles as a way to send somebody unsolicited messages at whatever rate
|
|
414
|
+
* the network allows, at the project's expense.
|
|
415
|
+
*/
|
|
416
|
+
@TableColumn({
|
|
417
|
+
title: "Verification Code Sent At",
|
|
418
|
+
description: "When a verification code was last sent for this row",
|
|
419
|
+
computed: true,
|
|
420
|
+
type: TableColumnType.Date,
|
|
421
|
+
})
|
|
422
|
+
@Column({
|
|
423
|
+
type: ColumnType.Date,
|
|
424
|
+
nullable: true,
|
|
425
|
+
})
|
|
426
|
+
public verificationCodeSentAt?: Date = undefined;
|
|
336
427
|
}
|
|
337
428
|
|
|
338
429
|
export default UserSMS;
|
|
@@ -309,13 +309,25 @@ class UserWhatsApp extends BaseModel {
|
|
|
309
309
|
@OwnerOnlyColumn()
|
|
310
310
|
@TableColumn({
|
|
311
311
|
title: "Verification Code",
|
|
312
|
-
description:
|
|
312
|
+
description:
|
|
313
|
+
"Keyed digest of the temporary verification code — never the code itself",
|
|
313
314
|
isDefaultValueColumn: true,
|
|
314
315
|
computed: true,
|
|
315
316
|
required: true,
|
|
316
317
|
type: TableColumnType.ShortText,
|
|
318
|
+
/*
|
|
319
|
+
* A row is born with NO usable code on it: a 64-character random
|
|
320
|
+
* placeholder that no six-digit code can ever hash to. The real code is
|
|
321
|
+
* generated, hashed and sent by this channel's service once the row
|
|
322
|
+
* exists — the row id is part of the hashed message, so the digest cannot
|
|
323
|
+
* be computed before the insert has assigned one.
|
|
324
|
+
*
|
|
325
|
+
* This stays a forced default rather than moving wholly into the service
|
|
326
|
+
* hook because the column is NOT NULL and must be satisfied on every
|
|
327
|
+
* create path, including those that pass props.ignoreHooks.
|
|
328
|
+
*/
|
|
317
329
|
forceGetDefaultValueOnCreate: () => {
|
|
318
|
-
return Text.
|
|
330
|
+
return Text.generateRandomText(64);
|
|
319
331
|
},
|
|
320
332
|
})
|
|
321
333
|
@Column({
|
|
@@ -324,6 +336,85 @@ class UserWhatsApp extends BaseModel {
|
|
|
324
336
|
length: ColumnLength.ShortText,
|
|
325
337
|
})
|
|
326
338
|
public verificationCode?: string = undefined;
|
|
339
|
+
|
|
340
|
+
@ColumnAccessControl({
|
|
341
|
+
create: [],
|
|
342
|
+
read: [],
|
|
343
|
+
update: [],
|
|
344
|
+
})
|
|
345
|
+
/*
|
|
346
|
+
* When the code currently on this row stops being accepted.
|
|
347
|
+
*
|
|
348
|
+
* NULL means there is no live code: none was ever issued, or the last one
|
|
349
|
+
* was used, or it was burned by the attempt limit — or the row predates
|
|
350
|
+
* this column, which is read the same conservative way. Without an expiry
|
|
351
|
+
* the six-digit code space stood open indefinitely, which is what made
|
|
352
|
+
* walking it worthwhile.
|
|
353
|
+
*/
|
|
354
|
+
@TableColumn({
|
|
355
|
+
title: "Verification Code Expires At",
|
|
356
|
+
description: "When the verification code on this row stops being accepted",
|
|
357
|
+
computed: true,
|
|
358
|
+
type: TableColumnType.Date,
|
|
359
|
+
})
|
|
360
|
+
@Column({
|
|
361
|
+
type: ColumnType.Date,
|
|
362
|
+
nullable: true,
|
|
363
|
+
})
|
|
364
|
+
public verificationCodeExpiresAt?: Date = undefined;
|
|
365
|
+
|
|
366
|
+
@ColumnAccessControl({
|
|
367
|
+
create: [],
|
|
368
|
+
read: [],
|
|
369
|
+
update: [],
|
|
370
|
+
})
|
|
371
|
+
/*
|
|
372
|
+
* Wrong guesses made against the code currently on this row, reset to zero
|
|
373
|
+
* each time a code is issued.
|
|
374
|
+
*
|
|
375
|
+
* This is the counter that stops /verify being an unlimited oracle over a
|
|
376
|
+
* space small enough to walk in minutes. It is incremented with a single
|
|
377
|
+
* atomic UPDATE ... RETURNING rather than a read-modify-write, because
|
|
378
|
+
* requests racing each other are the normal shape of the attack.
|
|
379
|
+
*/
|
|
380
|
+
@TableColumn({
|
|
381
|
+
title: "Verification Failed Attempts",
|
|
382
|
+
description:
|
|
383
|
+
"Incorrect verification attempts made against the current verification code",
|
|
384
|
+
computed: true,
|
|
385
|
+
type: TableColumnType.Number,
|
|
386
|
+
})
|
|
387
|
+
@Column({
|
|
388
|
+
type: ColumnType.Number,
|
|
389
|
+
nullable: false,
|
|
390
|
+
default: 0,
|
|
391
|
+
})
|
|
392
|
+
public verificationFailedAttempts?: number = undefined;
|
|
393
|
+
|
|
394
|
+
@ColumnAccessControl({
|
|
395
|
+
create: [],
|
|
396
|
+
read: [],
|
|
397
|
+
update: [],
|
|
398
|
+
})
|
|
399
|
+
/*
|
|
400
|
+
* When a verification code was last sent for this row.
|
|
401
|
+
*
|
|
402
|
+
* Drives the resend cooldown. Without it, "spend the five attempts, ask for
|
|
403
|
+
* a fresh code, repeat" costs an attacker nothing — and the resend control
|
|
404
|
+
* doubles as a way to send somebody unsolicited messages at whatever rate
|
|
405
|
+
* the network allows, at the project's expense.
|
|
406
|
+
*/
|
|
407
|
+
@TableColumn({
|
|
408
|
+
title: "Verification Code Sent At",
|
|
409
|
+
description: "When a verification code was last sent for this row",
|
|
410
|
+
computed: true,
|
|
411
|
+
type: TableColumnType.Date,
|
|
412
|
+
})
|
|
413
|
+
@Column({
|
|
414
|
+
type: ColumnType.Date,
|
|
415
|
+
nullable: true,
|
|
416
|
+
})
|
|
417
|
+
public verificationCodeSentAt?: Date = undefined;
|
|
327
418
|
}
|
|
328
419
|
|
|
329
420
|
export default UserWhatsApp;
|
package/Server/API/BaseAPI.ts
CHANGED
|
@@ -298,20 +298,85 @@ export default class BaseAPI<
|
|
|
298
298
|
const databaseProps: DatabaseCommonInteractionProps =
|
|
299
299
|
await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
300
300
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
301
|
+
/*
|
|
302
|
+
* findBy and countBy are independent reads, so run them in parallel to
|
|
303
|
+
* cut list latency where the count is costly. The one thing that makes
|
|
304
|
+
* the sequential order load-bearing is a service-level onBeforeFind
|
|
305
|
+
* override that mutates the shared query/props objects in place (e.g.
|
|
306
|
+
* ProjectService elevates props.isRoot and pins query._id for users with
|
|
307
|
+
* no projects; the incident/alert privacy filters rewrite query keys):
|
|
308
|
+
* countBy historically ran after findBy and inherited those mutations.
|
|
309
|
+
* Services on the stock hook cannot mutate anything (and the permission
|
|
310
|
+
* pipeline copies the query before touching it, ReadPermission.ts:33),
|
|
311
|
+
* so only they run in parallel; hook-overriding services keep the
|
|
312
|
+
* sequential order and its exact semantics.
|
|
313
|
+
*/
|
|
314
|
+
const usesStockOnBeforeFindHook: boolean =
|
|
315
|
+
(this.service as unknown as { onBeforeFind: unknown }).onBeforeFind ===
|
|
316
|
+
(DatabaseService.prototype as unknown as { onBeforeFind: unknown })
|
|
317
|
+
.onBeforeFind;
|
|
318
|
+
|
|
319
|
+
let list: Array<BaseModel>;
|
|
320
|
+
let count: PositiveNumber;
|
|
321
|
+
|
|
322
|
+
if (usesStockOnBeforeFindHook) {
|
|
323
|
+
const listPromise: Promise<Array<BaseModel>> = this.service.findBy({
|
|
324
|
+
query,
|
|
325
|
+
select,
|
|
326
|
+
skip: skip,
|
|
327
|
+
limit: limit,
|
|
328
|
+
groupBy: groupBy,
|
|
329
|
+
sort: sort,
|
|
330
|
+
props: databaseProps,
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
/*
|
|
334
|
+
* Shallow copies so a countBy override that rewrites top-level query
|
|
335
|
+
* keys (the established privacy-filter pattern) can never race the
|
|
336
|
+
* concurrent findBy's reads of the shared objects.
|
|
337
|
+
*/
|
|
338
|
+
const countPromise: Promise<PositiveNumber> = this.service.countBy({
|
|
339
|
+
query: { ...query },
|
|
340
|
+
props: { ...databaseProps },
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* allSettled instead of Promise.all: a findBy rejection must not leave
|
|
345
|
+
* countPromise as an unhandled rejection, and findBy's error keeps
|
|
346
|
+
* priority when both fail - the same failure the sequential code
|
|
347
|
+
* surfaced.
|
|
348
|
+
*/
|
|
349
|
+
const [listResult, countResult]: [
|
|
350
|
+
PromiseSettledResult<Array<BaseModel>>,
|
|
351
|
+
PromiseSettledResult<PositiveNumber>,
|
|
352
|
+
] = await Promise.allSettled([listPromise, countPromise]);
|
|
353
|
+
|
|
354
|
+
if (listResult.status === "rejected") {
|
|
355
|
+
throw listResult.reason;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if (countResult.status === "rejected") {
|
|
359
|
+
throw countResult.reason;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
list = listResult.value;
|
|
363
|
+
count = countResult.value;
|
|
364
|
+
} else {
|
|
365
|
+
list = await this.service.findBy({
|
|
366
|
+
query,
|
|
367
|
+
select,
|
|
368
|
+
skip: skip,
|
|
369
|
+
limit: limit,
|
|
370
|
+
groupBy: groupBy,
|
|
371
|
+
sort: sort,
|
|
372
|
+
props: databaseProps,
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
count = await this.service.countBy({
|
|
376
|
+
query,
|
|
377
|
+
props: databaseProps,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
315
380
|
|
|
316
381
|
return Response.sendEntityArrayResponse(
|
|
317
382
|
req,
|
|
@@ -117,6 +117,7 @@ import StatusPageSubscriberNotificationTemplate from "../../Models/DatabaseModel
|
|
|
117
117
|
import StatusPageSubscriberNotificationTemplateService, {
|
|
118
118
|
Service as StatusPageSubscriberNotificationTemplateServiceClass,
|
|
119
119
|
} from "../Services/StatusPageSubscriberNotificationTemplateService";
|
|
120
|
+
import { canServeStatusPageCustomizations } from "../Utils/StatusPageCustomizationAccess";
|
|
120
121
|
|
|
121
122
|
type EscapeXmlFunction = (text: string) => string;
|
|
122
123
|
|
|
@@ -860,6 +861,12 @@ export default class StatusPageAPI extends BaseAPI<
|
|
|
860
861
|
ObjectID.validateUUID(statusPageIdParam);
|
|
861
862
|
const objectId: ObjectID = new ObjectID(statusPageIdParam);
|
|
862
863
|
|
|
864
|
+
const allowStatusPageCustomizations: boolean =
|
|
865
|
+
await canServeStatusPageCustomizations({
|
|
866
|
+
req,
|
|
867
|
+
statusPageId: objectId,
|
|
868
|
+
});
|
|
869
|
+
|
|
863
870
|
const select: Select<StatusPage> = {
|
|
864
871
|
_id: true,
|
|
865
872
|
slug: true,
|
|
@@ -870,11 +877,7 @@ export default class StatusPageAPI extends BaseAPI<
|
|
|
870
877
|
pageTitle: true,
|
|
871
878
|
pageDescription: true,
|
|
872
879
|
copyrightText: true,
|
|
873
|
-
customCSS: true,
|
|
874
|
-
customJavaScript: true,
|
|
875
880
|
hidePoweredByOneUptimeBranding: true,
|
|
876
|
-
headerHTML: true,
|
|
877
|
-
footerHTML: true,
|
|
878
881
|
enableEmailSubscribers: true,
|
|
879
882
|
enableSlackSubscribers: true,
|
|
880
883
|
enableMicrosoftTeamsSubscribers: true,
|
|
@@ -911,6 +914,13 @@ export default class StatusPageAPI extends BaseAPI<
|
|
|
911
914
|
enabledLanguages: true,
|
|
912
915
|
};
|
|
913
916
|
|
|
917
|
+
if (allowStatusPageCustomizations) {
|
|
918
|
+
select.customCSS = true;
|
|
919
|
+
select.customJavaScript = true;
|
|
920
|
+
select.headerHTML = true;
|
|
921
|
+
select.footerHTML = true;
|
|
922
|
+
}
|
|
923
|
+
|
|
914
924
|
const hasEnabledSSO: PositiveNumber =
|
|
915
925
|
await StatusPageSsoService.countBy({
|
|
916
926
|
query: {
|
|
@@ -934,6 +944,20 @@ export default class StatusPageAPI extends BaseAPI<
|
|
|
934
944
|
throw new BadDataException("Status Page not found");
|
|
935
945
|
}
|
|
936
946
|
|
|
947
|
+
if (!allowStatusPageCustomizations) {
|
|
948
|
+
/*
|
|
949
|
+
* The conditional select above keeps these values out of the
|
|
950
|
+
* normal database result. Explicit redaction is the second half
|
|
951
|
+
* of the boundary: it prevents a future eager-load, hook, cache,
|
|
952
|
+
* or over-populated service result from serializing tenant code
|
|
953
|
+
* onto the authenticated application's origin.
|
|
954
|
+
*/
|
|
955
|
+
delete item.customCSS;
|
|
956
|
+
delete item.customJavaScript;
|
|
957
|
+
delete item.headerHTML;
|
|
958
|
+
delete item.footerHTML;
|
|
959
|
+
}
|
|
960
|
+
|
|
937
961
|
const footerLinks: Array<StatusPageFooterLink> =
|
|
938
962
|
await StatusPageFooterLinkService.findBy({
|
|
939
963
|
query: {
|
|
@@ -987,6 +1011,7 @@ export default class StatusPageAPI extends BaseAPI<
|
|
|
987
1011
|
StatusPageHeaderLink,
|
|
988
1012
|
),
|
|
989
1013
|
hasEnabledSSO: hasEnabledSSO.toNumber(),
|
|
1014
|
+
allowStatusPageCustomizations,
|
|
990
1015
|
};
|
|
991
1016
|
|
|
992
1017
|
return Response.sendJsonObjectResponse(req, res, response);
|
|
@@ -1,22 +1,44 @@
|
|
|
1
1
|
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
+
import VerificationCodeRateLimit, {
|
|
3
|
+
VerificationCodeRateLimitBucket,
|
|
4
|
+
} from "../Middleware/VerificationCodeRateLimit";
|
|
2
5
|
import UserCallService, {
|
|
3
6
|
Service as UserCallServiceType,
|
|
4
7
|
} from "../Services/UserCallService";
|
|
5
|
-
import UserNotificationRuleService from "../Services/UserNotificationRuleService";
|
|
6
8
|
import {
|
|
7
9
|
ExpressRequest,
|
|
8
10
|
ExpressResponse,
|
|
9
11
|
NextFunction,
|
|
10
12
|
OneUptimeRequest,
|
|
11
13
|
} from "../Utils/Express";
|
|
14
|
+
import ChannelVerification, {
|
|
15
|
+
ChannelVerificationOutcome,
|
|
16
|
+
ChannelVerificationResult,
|
|
17
|
+
} from "../Utils/ChannelVerification";
|
|
12
18
|
import Response from "../Utils/Response";
|
|
13
|
-
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
14
19
|
import BaseAPI from "./BaseAPI";
|
|
15
20
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
16
21
|
import ObjectID from "../../Types/ObjectID";
|
|
17
22
|
import UserCall from "../../Models/DatabaseModels/UserCall";
|
|
18
|
-
import
|
|
23
|
+
import UserNotificationRuleService from "../Services/UserNotificationRuleService";
|
|
24
|
+
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
19
25
|
|
|
26
|
+
/*
|
|
27
|
+
* The verify and resend routes for this notification channel.
|
|
28
|
+
*
|
|
29
|
+
* Neither the checking of a submitted code nor the issuing of a new one lives
|
|
30
|
+
* here, on purpose. The state machine is shared by all five channels
|
|
31
|
+
* (Common/Server/Utils/ChannelVerification.ts) so that a control added for one
|
|
32
|
+
* of them cannot quietly go missing on another — which is exactly what went
|
|
33
|
+
* wrong before: five hand-written copies of "compare the column, set
|
|
34
|
+
* isVerified", none of which expired the code, counted attempts, or refused a
|
|
35
|
+
* caller running the comparison a million times against somebody else's phone
|
|
36
|
+
* number.
|
|
37
|
+
*
|
|
38
|
+
* What is left here is the HTTP shape: reject malformed bodies, run the rate
|
|
39
|
+
* limiter before anything costs a database read, and turn the outcome into a
|
|
40
|
+
* response.
|
|
41
|
+
*/
|
|
20
42
|
export default class UserCallAPI extends BaseAPI<
|
|
21
43
|
UserCall,
|
|
22
44
|
UserCallServiceType
|
|
@@ -27,6 +49,9 @@ export default class UserCallAPI extends BaseAPI<
|
|
|
27
49
|
this.router.post(
|
|
28
50
|
`/user-call/verify`,
|
|
29
51
|
UserMiddleware.getUserMiddleware,
|
|
52
|
+
VerificationCodeRateLimit.getMiddleware(
|
|
53
|
+
VerificationCodeRateLimitBucket.Verify,
|
|
54
|
+
),
|
|
30
55
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
31
56
|
try {
|
|
32
57
|
req = req as OneUptimeRequest;
|
|
@@ -47,33 +72,10 @@ export default class UserCallAPI extends BaseAPI<
|
|
|
47
72
|
);
|
|
48
73
|
}
|
|
49
74
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
id: req.body["itemId"],
|
|
53
|
-
props: {
|
|
54
|
-
isRoot: true,
|
|
55
|
-
},
|
|
56
|
-
select: {
|
|
57
|
-
userId: true,
|
|
58
|
-
projectId: true,
|
|
59
|
-
verificationCode: true,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
75
|
+
const userId: ObjectID | undefined = (req as OneUptimeRequest)
|
|
76
|
+
?.userAuthorization?.userId;
|
|
62
77
|
|
|
63
|
-
if (!
|
|
64
|
-
return Response.sendErrorResponse(
|
|
65
|
-
req,
|
|
66
|
-
res,
|
|
67
|
-
new BadDataException("Item not found"),
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
//check user id
|
|
72
|
-
|
|
73
|
-
if (
|
|
74
|
-
item.userId?.toString() !==
|
|
75
|
-
(req as OneUptimeRequest)?.userAuthorization?.userId?.toString()
|
|
76
|
-
) {
|
|
78
|
+
if (!userId) {
|
|
77
79
|
return Response.sendErrorResponse(
|
|
78
80
|
req,
|
|
79
81
|
res,
|
|
@@ -81,32 +83,30 @@ export default class UserCallAPI extends BaseAPI<
|
|
|
81
83
|
);
|
|
82
84
|
}
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
const result: ChannelVerificationResult =
|
|
87
|
+
await ChannelVerification.verifyCode({
|
|
88
|
+
service: this.service,
|
|
89
|
+
itemId: new ObjectID(req.body["itemId"].toString()),
|
|
90
|
+
userId: userId,
|
|
91
|
+
code: req.body["code"].toString(),
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
if (result.outcome !== ChannelVerificationOutcome.Verified) {
|
|
85
95
|
return Response.sendErrorResponse(
|
|
86
96
|
req,
|
|
87
97
|
res,
|
|
88
|
-
|
|
98
|
+
ChannelVerification.getFailureException(result.outcome),
|
|
89
99
|
);
|
|
90
100
|
}
|
|
91
101
|
|
|
92
|
-
|
|
93
|
-
id: item.id!,
|
|
94
|
-
props: {
|
|
95
|
-
isRoot: true,
|
|
96
|
-
},
|
|
97
|
-
data: {
|
|
98
|
-
isVerified: true,
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// Create default notification rules for this verified call number
|
|
102
|
+
/* Create default notification rules for this verified call number */
|
|
103
103
|
try {
|
|
104
104
|
await UserNotificationRuleService.addDefaultNotificationRulesForVerifiedMethod(
|
|
105
105
|
{
|
|
106
|
-
projectId: new ObjectID(
|
|
107
|
-
userId: new ObjectID(
|
|
106
|
+
projectId: new ObjectID(result.projectId!.toString()),
|
|
107
|
+
userId: new ObjectID(result.userId!.toString()),
|
|
108
108
|
notificationMethod: {
|
|
109
|
-
userCallId:
|
|
109
|
+
userCallId: result.itemId!,
|
|
110
110
|
},
|
|
111
111
|
},
|
|
112
112
|
);
|
|
@@ -127,6 +127,9 @@ export default class UserCallAPI extends BaseAPI<
|
|
|
127
127
|
this.router.post(
|
|
128
128
|
`/user-call/resend-verification-code`,
|
|
129
129
|
UserMiddleware.getUserMiddleware,
|
|
130
|
+
VerificationCodeRateLimit.getMiddleware(
|
|
131
|
+
VerificationCodeRateLimitBucket.Resend,
|
|
132
|
+
),
|
|
130
133
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
131
134
|
try {
|
|
132
135
|
req = req as OneUptimeRequest;
|
|
@@ -157,6 +160,11 @@ export default class UserCallAPI extends BaseAPI<
|
|
|
157
160
|
);
|
|
158
161
|
}
|
|
159
162
|
|
|
163
|
+
/*
|
|
164
|
+
* A caller may only ask for a code to be sent to a row they own.
|
|
165
|
+
* Without this the resend route is a way to make somebody else's
|
|
166
|
+
* device ring on demand.
|
|
167
|
+
*/
|
|
160
168
|
if (
|
|
161
169
|
item.userId?.toString() !==
|
|
162
170
|
(req as OneUptimeRequest)?.userAuthorization?.userId?.toString()
|