@oneuptime/common 12.0.30 → 12.0.31
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/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +86 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.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/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import DetectionRule from "../../Models/DatabaseModels/DetectionRule";
|
|
2
|
+
import GoogleSecOpsConnection from "../../Models/DatabaseModels/GoogleSecOpsConnection";
|
|
3
|
+
import ThreatIntelFeed from "../../Models/DatabaseModels/ThreatIntelFeed";
|
|
4
|
+
import SecurityEvent from "../../Models/AnalyticsModels/SecurityEvent";
|
|
5
|
+
import ThreatIntelIndicator from "../../Models/AnalyticsModels/ThreatIntelIndicator";
|
|
6
|
+
import { ColumnAccessControl } from "../../Types/BaseDatabase/AccessControl";
|
|
7
|
+
import Dictionary from "../../Types/Dictionary";
|
|
8
|
+
import Permission from "../../Types/Permission";
|
|
9
|
+
import { describe, expect, test } from "@jest/globals";
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* What the Security tiers unlock, and - more to the point - what nothing else
|
|
13
|
+
* unlocks any more.
|
|
14
|
+
*
|
|
15
|
+
* The SIEM tables shipped with the same read list as Log: ProjectMember, the
|
|
16
|
+
* project-wide Viewer, and the three Telemetry tiers. Every principal in a
|
|
17
|
+
* project could therefore read every security event in it, and there was no
|
|
18
|
+
* grant an administrator could withhold to change that. This file is the
|
|
19
|
+
* regression guard on the split, at the declaration level: it reads the access
|
|
20
|
+
* lists off the model classes and asserts both halves - the Security tiers are
|
|
21
|
+
* present, and the broad roles are gone.
|
|
22
|
+
*
|
|
23
|
+
* The negative half is the one that matters. Adding Permission.ProjectMember
|
|
24
|
+
* back to any one of these lists would restore the old behaviour completely and
|
|
25
|
+
* break nothing else, so nothing but an assertion will catch it.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* A uniform view over the two model kinds. Database models expose their access
|
|
30
|
+
* lists as properties on the instance; analytics models expose them through
|
|
31
|
+
* getters. The sweep below does not care which is which, and every SIEM table
|
|
32
|
+
* has to be in here - a table left out is a table with no coverage at all.
|
|
33
|
+
*/
|
|
34
|
+
interface SecurityModel {
|
|
35
|
+
name: string;
|
|
36
|
+
read: Array<Permission>;
|
|
37
|
+
create: Array<Permission>;
|
|
38
|
+
update: Array<Permission>;
|
|
39
|
+
delete: Array<Permission>;
|
|
40
|
+
columns: Array<[string, ColumnAccessControl | null]>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* getColumnAccessControlForAllColumns is the one accessor both base classes
|
|
45
|
+
* declare - the database models build theirs from the @ColumnAccessControl
|
|
46
|
+
* decorator, the analytics models from their column definitions - so the sweep
|
|
47
|
+
* can walk a ClickHouse table and a Postgres one the same way.
|
|
48
|
+
*/
|
|
49
|
+
type ColumnsOfFunction = (model: {
|
|
50
|
+
getColumnAccessControlForAllColumns: () => Dictionary<ColumnAccessControl>;
|
|
51
|
+
}) => Array<[string, ColumnAccessControl | null]>;
|
|
52
|
+
|
|
53
|
+
const columnsOf: ColumnsOfFunction = (model: {
|
|
54
|
+
getColumnAccessControlForAllColumns: () => Dictionary<ColumnAccessControl>;
|
|
55
|
+
}): Array<[string, ColumnAccessControl | null]> => {
|
|
56
|
+
const accessControlByColumn: Dictionary<ColumnAccessControl> =
|
|
57
|
+
model.getColumnAccessControlForAllColumns();
|
|
58
|
+
|
|
59
|
+
return Object.keys(accessControlByColumn).map(
|
|
60
|
+
(column: string): [string, ColumnAccessControl | null] => {
|
|
61
|
+
return [column, accessControlByColumn[column] || null];
|
|
62
|
+
},
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
type BuildSecurityModelsFunction = () => Array<SecurityModel>;
|
|
67
|
+
|
|
68
|
+
const buildSecurityModels: BuildSecurityModelsFunction =
|
|
69
|
+
(): Array<SecurityModel> => {
|
|
70
|
+
const detectionRule: DetectionRule = new DetectionRule();
|
|
71
|
+
const threatIntelFeed: ThreatIntelFeed = new ThreatIntelFeed();
|
|
72
|
+
const googleSecOpsConnection: GoogleSecOpsConnection =
|
|
73
|
+
new GoogleSecOpsConnection();
|
|
74
|
+
const securityEvent: SecurityEvent = new SecurityEvent();
|
|
75
|
+
const threatIntelIndicator: ThreatIntelIndicator =
|
|
76
|
+
new ThreatIntelIndicator();
|
|
77
|
+
|
|
78
|
+
return [
|
|
79
|
+
{
|
|
80
|
+
name: "DetectionRule",
|
|
81
|
+
read: detectionRule.readRecordPermissions,
|
|
82
|
+
create: detectionRule.createRecordPermissions,
|
|
83
|
+
update: detectionRule.updateRecordPermissions,
|
|
84
|
+
delete: detectionRule.deleteRecordPermissions,
|
|
85
|
+
columns: columnsOf(detectionRule),
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "ThreatIntelFeed",
|
|
89
|
+
read: threatIntelFeed.readRecordPermissions,
|
|
90
|
+
create: threatIntelFeed.createRecordPermissions,
|
|
91
|
+
update: threatIntelFeed.updateRecordPermissions,
|
|
92
|
+
delete: threatIntelFeed.deleteRecordPermissions,
|
|
93
|
+
columns: columnsOf(threatIntelFeed),
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "GoogleSecOpsConnection",
|
|
97
|
+
read: googleSecOpsConnection.readRecordPermissions,
|
|
98
|
+
create: googleSecOpsConnection.createRecordPermissions,
|
|
99
|
+
update: googleSecOpsConnection.updateRecordPermissions,
|
|
100
|
+
delete: googleSecOpsConnection.deleteRecordPermissions,
|
|
101
|
+
columns: columnsOf(googleSecOpsConnection),
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "SecurityEvent",
|
|
105
|
+
read: securityEvent.getReadPermissions(),
|
|
106
|
+
create: securityEvent.getCreatePermissions(),
|
|
107
|
+
update: securityEvent.getUpdatePermissions(),
|
|
108
|
+
delete: securityEvent.getDeletePermissions(),
|
|
109
|
+
columns: columnsOf(securityEvent),
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "ThreatIntelIndicator",
|
|
113
|
+
read: threatIntelIndicator.getReadPermissions(),
|
|
114
|
+
create: threatIntelIndicator.getCreatePermissions(),
|
|
115
|
+
update: threatIntelIndicator.getUpdatePermissions(),
|
|
116
|
+
delete: threatIntelIndicator.getDeletePermissions(),
|
|
117
|
+
columns: columnsOf(threatIntelIndicator),
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const SECURITY_MODELS: Array<SecurityModel> = buildSecurityModels();
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* test.each needs the tuple type written down. Mapping to [name, model] infers
|
|
126
|
+
* Array<Array<string | SecurityModel>>, and the per-case callback signature
|
|
127
|
+
* then does not typecheck against it.
|
|
128
|
+
*/
|
|
129
|
+
const MODEL_CASES: Array<[string, SecurityModel]> = SECURITY_MODELS.map(
|
|
130
|
+
(model: SecurityModel): [string, SecurityModel] => {
|
|
131
|
+
return [model.name, model];
|
|
132
|
+
},
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
/*
|
|
136
|
+
* The roles that used to reach this data and must not any more.
|
|
137
|
+
*
|
|
138
|
+
* ProjectUser is in the list for the reason its own declaration gives: every
|
|
139
|
+
* principal who has accepted an invitation holds it, so it is reserved for the
|
|
140
|
+
* dashboard's shared furniture (labels, teams, saved views) and must never
|
|
141
|
+
* appear on a table one role should be able to keep from another.
|
|
142
|
+
*/
|
|
143
|
+
const ROLES_THAT_MUST_NOT_REACH_THE_SIEM: Array<Permission> = [
|
|
144
|
+
Permission.ProjectMember,
|
|
145
|
+
Permission.ProjectUser,
|
|
146
|
+
Permission.Viewer,
|
|
147
|
+
Permission.TelemetryAdmin,
|
|
148
|
+
Permission.TelemetryMember,
|
|
149
|
+
Permission.TelemetryViewer,
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
const SECURITY_TIERS: Array<Permission> = [
|
|
153
|
+
Permission.SecurityAdmin,
|
|
154
|
+
Permission.SecurityMember,
|
|
155
|
+
Permission.SecurityViewer,
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
describe("Security domain access control", () => {
|
|
159
|
+
test("the sweep actually covers every SIEM table", () => {
|
|
160
|
+
expect(
|
|
161
|
+
SECURITY_MODELS.map((model: SecurityModel) => {
|
|
162
|
+
return model.name;
|
|
163
|
+
}).sort(),
|
|
164
|
+
).toEqual([
|
|
165
|
+
"DetectionRule",
|
|
166
|
+
"GoogleSecOpsConnection",
|
|
167
|
+
"SecurityEvent",
|
|
168
|
+
"ThreatIntelFeed",
|
|
169
|
+
"ThreatIntelIndicator",
|
|
170
|
+
]);
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test.each(MODEL_CASES)(
|
|
174
|
+
"%s is readable by all three Security tiers",
|
|
175
|
+
(_name: string, model: SecurityModel) => {
|
|
176
|
+
expect(model.read).toEqual(expect.arrayContaining(SECURITY_TIERS));
|
|
177
|
+
},
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* The point of the whole change. If this passes for the wrong reason - say a
|
|
182
|
+
* table's read list is empty - the positive test above catches it.
|
|
183
|
+
*/
|
|
184
|
+
test.each(MODEL_CASES)(
|
|
185
|
+
"%s is not readable by any broadly-held role",
|
|
186
|
+
(name: string, model: SecurityModel) => {
|
|
187
|
+
const leaked: Array<string> = ROLES_THAT_MUST_NOT_REACH_THE_SIEM.filter(
|
|
188
|
+
(permission: Permission) => {
|
|
189
|
+
return model.read.includes(permission);
|
|
190
|
+
},
|
|
191
|
+
).map((permission: Permission) => {
|
|
192
|
+
return `${name} is readable by ${permission}`;
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
expect(leaked).toEqual([]);
|
|
196
|
+
},
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
test.each(MODEL_CASES)(
|
|
200
|
+
"%s cannot be written by any broadly-held role either",
|
|
201
|
+
(name: string, model: SecurityModel) => {
|
|
202
|
+
const leaked: Array<string> = [];
|
|
203
|
+
|
|
204
|
+
for (const permission of ROLES_THAT_MUST_NOT_REACH_THE_SIEM) {
|
|
205
|
+
for (const [operation, list] of [
|
|
206
|
+
["create", model.create],
|
|
207
|
+
["update", model.update],
|
|
208
|
+
["delete", model.delete],
|
|
209
|
+
] as Array<[string, Array<Permission>]>) {
|
|
210
|
+
if (list.includes(permission)) {
|
|
211
|
+
leaked.push(`${name} can be ${operation}d by ${permission}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
expect(leaked).toEqual([]);
|
|
217
|
+
},
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* A project must never be locked out of its own data. Owner and Admin are the
|
|
222
|
+
* principals who grant the Security tiers in the first place; if they could
|
|
223
|
+
* not read the tables, a project that had not yet created a security team
|
|
224
|
+
* would have no way to see what its SIEM had collected and no way to find out
|
|
225
|
+
* that it needed to.
|
|
226
|
+
*/
|
|
227
|
+
test.each(MODEL_CASES)(
|
|
228
|
+
"%s stays readable by the project's own administrators",
|
|
229
|
+
(_name: string, model: SecurityModel) => {
|
|
230
|
+
expect(model.read).toContain(Permission.ProjectOwner);
|
|
231
|
+
expect(model.read).toContain(Permission.ProjectAdmin);
|
|
232
|
+
},
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* The table gate is the first of two. A list request also runs through the
|
|
237
|
+
* per-column read lists, so a table a Security Viewer may open whose columns
|
|
238
|
+
* they may not select turns into an error on whichever field the page asked
|
|
239
|
+
* for. This is the same failure that produced issue #3305 one level down.
|
|
240
|
+
*/
|
|
241
|
+
test.each(MODEL_CASES)(
|
|
242
|
+
"%s columns follow the table into the Security tiers",
|
|
243
|
+
(name: string, model: SecurityModel) => {
|
|
244
|
+
const missing: Array<string> = [];
|
|
245
|
+
|
|
246
|
+
for (const [column, accessControl] of model.columns) {
|
|
247
|
+
/*
|
|
248
|
+
* `read: []` is a deliberate "nobody reads this through the API" -
|
|
249
|
+
* GoogleSecOpsConnection.serviceAccountJson is the one that matters.
|
|
250
|
+
* Those must stay closed, which the credential test below asserts.
|
|
251
|
+
*/
|
|
252
|
+
if (!accessControl?.read || accessControl.read.length === 0) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
for (const tier of SECURITY_TIERS) {
|
|
257
|
+
if (!accessControl.read.includes(tier)) {
|
|
258
|
+
missing.push(`${name}.${column} is missing ${tier}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
expect(missing).toEqual([]);
|
|
264
|
+
},
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
test.each(MODEL_CASES)(
|
|
268
|
+
"%s columns are not readable by a broadly-held role",
|
|
269
|
+
(name: string, model: SecurityModel) => {
|
|
270
|
+
const leaked: Array<string> = [];
|
|
271
|
+
|
|
272
|
+
for (const [column, accessControl] of model.columns) {
|
|
273
|
+
for (const permission of ROLES_THAT_MUST_NOT_REACH_THE_SIEM) {
|
|
274
|
+
if (accessControl?.read?.includes(permission)) {
|
|
275
|
+
leaked.push(`${name}.${column} is readable by ${permission}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
expect(leaked).toEqual([]);
|
|
281
|
+
},
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
/*
|
|
285
|
+
* The connector's service-account key is a live Google Cloud credential. It
|
|
286
|
+
* was already closed to everyone before the Security tiers existed, and
|
|
287
|
+
* giving the SIEM its own admin role must not have quietly opened it -
|
|
288
|
+
* SecurityAdmin administers the connection, which is not the same as being
|
|
289
|
+
* able to read the key back out of it.
|
|
290
|
+
*/
|
|
291
|
+
test("the SecOps service-account key stays unreadable by everyone", () => {
|
|
292
|
+
const model: GoogleSecOpsConnection = new GoogleSecOpsConnection();
|
|
293
|
+
const accessControl: ColumnAccessControl | null =
|
|
294
|
+
model.getColumnAccessControlFor("serviceAccountJson");
|
|
295
|
+
|
|
296
|
+
expect(accessControl).toBeDefined();
|
|
297
|
+
expect(accessControl?.read).toEqual([]);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
/*
|
|
301
|
+
* Tier semantics, so "Viewer" keeps meaning read-only and the three tiers
|
|
302
|
+
* stay distinguishable from each other. A family whose Viewer can delete is
|
|
303
|
+
* three names for one role.
|
|
304
|
+
*/
|
|
305
|
+
test("Security Viewer is read-only everywhere", () => {
|
|
306
|
+
const writes: Array<string> = [];
|
|
307
|
+
|
|
308
|
+
for (const model of SECURITY_MODELS) {
|
|
309
|
+
for (const [operation, list] of [
|
|
310
|
+
["create", model.create],
|
|
311
|
+
["update", model.update],
|
|
312
|
+
["delete", model.delete],
|
|
313
|
+
] as Array<[string, Array<Permission>]>) {
|
|
314
|
+
if (list.includes(Permission.SecurityViewer)) {
|
|
315
|
+
writes.push(`${model.name} can be ${operation}d by SecurityViewer`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
expect(writes).toEqual([]);
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
/*
|
|
324
|
+
* Deleting a security event destroys the record of something that happened,
|
|
325
|
+
* which is the one thing a SIEM exists to keep. It sits on the Admin tier for
|
|
326
|
+
* the same reason retention policy does, and the same applies to purging
|
|
327
|
+
* ingested indicators.
|
|
328
|
+
*/
|
|
329
|
+
test("deleting SIEM records is an Admin-tier action", () => {
|
|
330
|
+
const securityEvent: SecurityEvent = new SecurityEvent();
|
|
331
|
+
const threatIntelIndicator: ThreatIntelIndicator =
|
|
332
|
+
new ThreatIntelIndicator();
|
|
333
|
+
|
|
334
|
+
for (const deletePermissions of [
|
|
335
|
+
securityEvent.getDeletePermissions(),
|
|
336
|
+
threatIntelIndicator.getDeletePermissions(),
|
|
337
|
+
]) {
|
|
338
|
+
expect(deletePermissions).toContain(Permission.SecurityAdmin);
|
|
339
|
+
expect(deletePermissions).not.toContain(Permission.SecurityMember);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* Pointing the project at a Chronicle instance, and holding the credential
|
|
345
|
+
* that reads it, is administration of the SIEM rather than use of it.
|
|
346
|
+
*/
|
|
347
|
+
test("only the Admin tier configures the SecOps connector", () => {
|
|
348
|
+
const model: GoogleSecOpsConnection = new GoogleSecOpsConnection();
|
|
349
|
+
|
|
350
|
+
for (const list of [
|
|
351
|
+
model.createRecordPermissions,
|
|
352
|
+
model.updateRecordPermissions,
|
|
353
|
+
model.deleteRecordPermissions,
|
|
354
|
+
]) {
|
|
355
|
+
expect(list).toContain(Permission.SecurityAdmin);
|
|
356
|
+
expect(list).not.toContain(Permission.SecurityMember);
|
|
357
|
+
expect(list).not.toContain(Permission.SecurityViewer);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
expect(model.readRecordPermissions).toContain(Permission.SecurityMember);
|
|
361
|
+
expect(model.readRecordPermissions).toContain(Permission.SecurityViewer);
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
/*
|
|
365
|
+
* The Member tier is what makes the family usable without handing out admin:
|
|
366
|
+
* an analyst writes and tunes detections and subscribes to feeds. If Member
|
|
367
|
+
* lost these, every rule change would need a project administrator.
|
|
368
|
+
*/
|
|
369
|
+
test("the Member tier can author detections and feeds", () => {
|
|
370
|
+
for (const model of [new DetectionRule(), new ThreatIntelFeed()]) {
|
|
371
|
+
expect(model.createRecordPermissions).toContain(
|
|
372
|
+
Permission.SecurityMember,
|
|
373
|
+
);
|
|
374
|
+
expect(model.updateRecordPermissions).toContain(
|
|
375
|
+
Permission.SecurityMember,
|
|
376
|
+
);
|
|
377
|
+
expect(model.deleteRecordPermissions).toContain(
|
|
378
|
+
Permission.SecurityMember,
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
/*
|
|
384
|
+
* The granular Read/Create/Edit/Delete permissions predate the tiers and are
|
|
385
|
+
* how an API key is scoped to exactly one operation. The tiers are an
|
|
386
|
+
* addition, not a replacement, and dropping one would silently break every
|
|
387
|
+
* key already issued against it.
|
|
388
|
+
*/
|
|
389
|
+
test("the granular security permissions still work on their own", () => {
|
|
390
|
+
const securityEvent: SecurityEvent = new SecurityEvent();
|
|
391
|
+
|
|
392
|
+
expect(securityEvent.getReadPermissions()).toContain(
|
|
393
|
+
Permission.ReadSecurityEvent,
|
|
394
|
+
);
|
|
395
|
+
expect(securityEvent.getCreatePermissions()).toContain(
|
|
396
|
+
Permission.CreateSecurityEvent,
|
|
397
|
+
);
|
|
398
|
+
expect(securityEvent.getUpdatePermissions()).toContain(
|
|
399
|
+
Permission.EditSecurityEvent,
|
|
400
|
+
);
|
|
401
|
+
expect(securityEvent.getDeletePermissions()).toContain(
|
|
402
|
+
Permission.DeleteSecurityEvent,
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
const detectionRule: DetectionRule = new DetectionRule();
|
|
406
|
+
|
|
407
|
+
expect(detectionRule.readRecordPermissions).toContain(
|
|
408
|
+
Permission.ReadProjectDetectionRule,
|
|
409
|
+
);
|
|
410
|
+
expect(detectionRule.createRecordPermissions).toContain(
|
|
411
|
+
Permission.CreateProjectDetectionRule,
|
|
412
|
+
);
|
|
413
|
+
expect(detectionRule.updateRecordPermissions).toContain(
|
|
414
|
+
Permission.EditProjectDetectionRule,
|
|
415
|
+
);
|
|
416
|
+
expect(detectionRule.deleteRecordPermissions).toContain(
|
|
417
|
+
Permission.DeleteProjectDetectionRule,
|
|
418
|
+
);
|
|
419
|
+
|
|
420
|
+
const threatIntelFeed: ThreatIntelFeed = new ThreatIntelFeed();
|
|
421
|
+
|
|
422
|
+
expect(threatIntelFeed.readRecordPermissions).toContain(
|
|
423
|
+
Permission.ReadProjectThreatIntelFeed,
|
|
424
|
+
);
|
|
425
|
+
expect(threatIntelFeed.createRecordPermissions).toContain(
|
|
426
|
+
Permission.CreateProjectThreatIntelFeed,
|
|
427
|
+
);
|
|
428
|
+
});
|
|
429
|
+
});
|