From 16ff91783766cf76e32b4850be62d5f06b3b8a52 Mon Sep 17 00:00:00 2001 From: "sven-dmlr (via github-actions)" Date: Thu, 8 Aug 2024 08:08:09 +0000 Subject: [PATCH] docs update by SecHub release job @github-actions --- docs/latest/images/diagram_encryption_pds.svg | 1 + .../diagram_encryption_sechub_config.png | Bin 0 -> 108918 bytes ...agram_encryption_sechub_use_of_commons.png | Bin 0 -> 19490 bytes .../images/diagram_pds_events_storage.svg | 2 +- .../diagram_sechub_job_cancellation.svg | 2 +- .../images/diagram_target_architecture.svg | 2 +- .../eclipse-java-formatter-activate.png | Bin 0 -> 87008 bytes .../images/eclipse-java-formatter-import.png | Bin 0 -> 87590 bytes ...admin_enables_scheduler_job_processing.svg | 2 +- ...min_updates_auto_cleanup_configuration.svg | 2 +- ...ssaging_analyze_scan_results_available.svg | 2 +- ...ing_auto_cleanup_configuration_changed.svg | 2 +- ...en_domain_messaging_binary_upload_done.svg | 2 +- ..._get_encryption_status_schedule_domain.svg | 1 + ...ain_messaging_job_cancellation_running.svg | 2 +- .../gen_domain_messaging_job_created.svg | 2 +- .../images/gen_domain_messaging_job_done.svg | 2 +- ...omain_messaging_job_execution_starting.svg | 2 +- .../gen_domain_messaging_job_failed.svg | 2 +- ..._domain_messaging_job_restart_canceled.svg | 2 +- ...domain_messaging_job_restart_triggered.svg | 2 +- .../gen_domain_messaging_job_started.svg | 2 +- ...essaging_mapping_configuration_changed.svg | 2 +- .../images/gen_domain_messaging_overview.svg | 2 +- ...roduct_executor_cancel_operations_done.svg | 2 +- ...messaging_project_access_level_changed.svg | 2 +- .../gen_domain_messaging_project_created.svg | 2 +- .../gen_domain_messaging_project_deleted.svg | 2 +- ...in_messaging_project_whitelist_updated.svg | 2 +- ...ain_messaging_request_job_cancellation.svg | 2 +- ...n_domain_messaging_request_job_restart.svg | 2 +- ...ain_messaging_request_job_restart_hard.svg | 2 +- ...in_messaging_request_purge_job_results.svg | 2 +- ...quest_scheduler_disable_job_processing.svg | 2 +- ...equest_scheduler_enable_job_processing.svg | 2 +- ...messaging_request_scheduler_job_status.svg | 2 +- ...saging_request_scheduler_status_update.svg | 2 +- ...saging_request_user_role_recalculation.svg | 2 +- ...sult_encryption_status_schedule_domain.svg | 1 + ...g_schedule_encryption_pool_initialized.svg | 1 + ...ging_scheduler_job_processing_disabled.svg | 2 +- ...aging_scheduler_job_processing_enabled.svg | 2 +- ..._domain_messaging_scheduler_job_status.svg | 2 +- ...gen_domain_messaging_scheduler_started.svg | 2 +- ...main_messaging_scheduler_status_update.svg | 2 +- ...en_domain_messaging_source_upload_done.svg | 2 +- ...in_messaging_start_encryption_rotation.svg | 1 + .../gen_domain_messaging_start_scan.svg | 2 +- ...domain_messaging_user_added_to_project.svg | 2 +- ...omain_messaging_user_api_token_changed.svg | 2 +- .../gen_domain_messaging_user_deleted.svg | 2 +- ...in_messaging_user_removed_from_project.svg | 2 +- docs/latest/images/gen_springprofiles-dev.svg | 2 +- .../gen_springprofiles-integrationtest.svg | 2 +- .../latest/images/gen_springprofiles-prod.svg | 2 +- docs/latest/images/gen_springprofiles.svg | 2 +- .../intelliJ-java-formatter-activate.png | Bin 0 -> 70581 bytes .../images/intelliJ-java-formatter-import.png | Bin 0 -> 76048 bytes docs/latest/pds-download.html | 2 +- docs/latest/sechub-architecture.html | 2325 +++++++++++++---- docs/latest/sechub-client.html | 25 +- .../sechub-developer-quickstart-guide.html | 172 +- docs/latest/sechub-getting-started.html | 6 +- docs/latest/sechub-operations.html | 70 +- .../sechub-product-delegation-server.html | 445 +++- docs/latest/sechub-restapi.html | 1024 ++++++-- docs/latest/sechub-techdoc.html | 1337 +++++++--- docs/latest/sechub-tutorials.html | 6 +- docs/latest/server-download.html | 2 +- 69 files changed, 4229 insertions(+), 1284 deletions(-) create mode 100644 docs/latest/images/diagram_encryption_pds.svg create mode 100644 docs/latest/images/diagram_encryption_sechub_config.png create mode 100644 docs/latest/images/diagram_encryption_sechub_use_of_commons.png create mode 100644 docs/latest/images/eclipse-java-formatter-activate.png create mode 100644 docs/latest/images/eclipse-java-formatter-import.png create mode 100644 docs/latest/images/gen_domain_messaging_get_encryption_status_schedule_domain.svg create mode 100644 docs/latest/images/gen_domain_messaging_result_encryption_status_schedule_domain.svg create mode 100644 docs/latest/images/gen_domain_messaging_schedule_encryption_pool_initialized.svg create mode 100644 docs/latest/images/gen_domain_messaging_start_encryption_rotation.svg create mode 100644 docs/latest/images/intelliJ-java-formatter-activate.png create mode 100644 docs/latest/images/intelliJ-java-formatter-import.png diff --git a/docs/latest/images/diagram_encryption_pds.svg b/docs/latest/images/diagram_encryption_pds.svg new file mode 100644 index 0000000000..8d9f21c209 --- /dev/null +++ b/docs/latest/images/diagram_encryption_pds.svg @@ -0,0 +1 @@ +com.mercedesbenz.sechub.commons.encryptioncom.mercedesbenz.sechub.pdsencryptionjobPersistentCipherFactoryPersistentCipherEncryptionSupportPDSStartupAssertEnvironmentVariablesUsedPDSEncryptionConfigurationPDSEncryptionServicePDSCreateJobServicePDSJobConfigurationAccess \ No newline at end of file diff --git a/docs/latest/images/diagram_encryption_sechub_config.png b/docs/latest/images/diagram_encryption_sechub_config.png new file mode 100644 index 0000000000000000000000000000000000000000..ee267b7ebd16a00c1d6d7c957250c62e192de3a5 GIT binary patch literal 108918 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 literal 0 HcmV?d00001 diff --git a/docs/latest/images/diagram_encryption_sechub_use_of_commons.png b/docs/latest/images/diagram_encryption_sechub_use_of_commons.png new file mode 100644 index 0000000000000000000000000000000000000000..1781ee588a616dd50c2664e44f25967714d81bdb GIT binary patch literal 19490 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 YKPJYos@OCLdH?_b07*qoM6N<$f|21xe*gdg literal 0 HcmV?d00001 diff --git a/docs/latest/images/diagram_pds_events_storage.svg b/docs/latest/images/diagram_pds_events_storage.svg index f60aa33e0f..335f19d0ff 100644 --- a/docs/latest/images/diagram_pds_events_storage.svg +++ b/docs/latest/images/diagram_pds_events_storage.svg @@ -1 +1 @@ -$workspace/$jobUUID/eventsPDS-Job-QueuelauncherScriptEvent FilePDSWorkspaceServicevoid sendEvent(UUID jobUUID, ExecutionEventType eventType,ExecutionEventData eventData)ExecutionEventData fetchEventDataOrNull(UUID jobUUID, ExecutionEventType eventType) {ExecutionEventDataPDSExecutionCallableFactoryPDSExecutionCallablePDSBatchTriggerServicevoid triggerExecutionOfNextJob()PDSJobCancelTriggerServicevoid triggerHandleCancelRequests()PDSCancelServicevoid handleJobCancelRequests()PDSExecutionServiceInside the event folder we havefiles with name pattern"${eventTypeName}.json". Someevents have only one file.Remark: Currently not implemented,but if an event type shall supports multiplefiles in fture the name pattern shall be:"${eventTypeName}[${nr}].json"cancel job by job UUIDcreatescreates/useswrites/reads event filesinto workspace foldercontains files whichhave JSOn contentcan readcreates processprepares workspace, sends eventscallsuses \ No newline at end of file +$workspace/$jobUUID/eventsPDS-Job-QueuelauncherScriptEvent FilePDSWorkspaceServicevoid sendEvent(UUID jobUUID, ExecutionEventType eventType,ExecutionEventData eventData)ExecutionEventData fetchEventDataOrNull(UUID jobUUID, ExecutionEventType eventType) {ExecutionEventDataPDSExecutionCallableFactoryPDSExecutionCallablePDSBatchTriggerServicevoid triggerExecutionOfNextJob()PDSJobCancelTriggerServicevoid triggerHandleCancelRequests()PDSCancelServicevoid handleJobCancelRequests()PDSExecutionServiceInside the event folder we havefiles with name pattern"${eventTypeName}.json". Someevents have only one file.Remark: Currently not implemented,but if an event type shall supports multiplefiles in future the name pattern shall be:"${eventTypeName}[${nr}].json"cancel job by job UUIDcreatescreates/useswrites/reads event filesinto workspace foldercontains files whichhave JSOn contentcan readcreates processprepares workspace, sends eventscallsuses \ No newline at end of file diff --git a/docs/latest/images/diagram_sechub_job_cancellation.svg b/docs/latest/images/diagram_sechub_job_cancellation.svg index 02671e84c8..c4053637ef 100644 --- a/docs/latest/images/diagram_sechub_job_cancellation.svg +++ b/docs/latest/images/diagram_sechub_job_cancellation.svg @@ -1 +1 @@ -Event Nr.Message IDWhat happens at this event ?A1START_SCANScan - runningB1REQUEST_SCHEDULER_JOB_STATUSScan - periodic inspection if scheduler job marked as cancel requestedC1REQUEST_JOB_CANCELLATIONCancel request startedD1CANCELLATION_RUNNINGCancel scan running/ ongoingE1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEProduct execucutor cancel operations have finished (post processing donecom.mercedesbenz.sechub.domain.schedulecom.mercedesbenz.sechub.sharedkernelcom.mercedesbenz.sechub.domain.scancom.mercedesbenz.sechub.domain.administrationcom.mercedesbenz.sechub.domain.notification«Entity»ScheduleSecHubJobExecutionStateINITIALIZINGREADY_TO_STARTSTARTEDCANCEL_REQUESTEDCANCELEDENDEDExecutionResultNONEOKFAILEDSynchronSecHubJobExecutorSchedulerJobStatusRequestHandlerScheduleJobLauncherServiceSchedulerJobBatchTriggerServiceScheduleMessagehandlerhandleCancelJobRequested()SchedulerCancelJobServiceThe steps- D*are only triggered when the SecHub job hasthe execution result NONE.The execution state isnotinspected.DomainMessageServiceEventBus«Entity»ProductResultUUID uuidUUID secHubJobUUIDUUID productExecutorConfigUUIDString resultString messagesString metaDataLocalDateTime startedLocalDateTime endedSecHubExecutionContextmarkCancelRequested()ScanProgressMonitorProductExecutorList<ProductResult> execute(SecHubExecutionContext context, ProductExecutorContext executorContext)ScanServicestartScan()ScanJobExecutorScanJobExecutionRunnableScanJobCancellationRunnableAdapterAdapterExecutionResult start(C config, AdapterMetaDataCallback callback)boolean cancel(C config, AdapterMetaDataCallback callback)ProductExecutionStoreServiceexecuteProductsAndStoreResults(SecHubExecutionContext context)AbstractProductExecutionServiceAbstractProductExecutorCanceableProductExecutorboolean cancel(ProductExecutorData data)ScanJobRunnableDataProductExecutorDataSecHubExecutionHistorySecHubExecutionHistoryElementThe scan job executor is central point ofthe scan steep in scan domain.It does the start of the scan itself anddoes also periodically the inspect the schedulerjob status via event busExecutorThreadCancellationThreadJobAdministrationRestControllerJobAdministrationMessageHandlerJobCancelServiceNotificationMessageHandlerProcuctIs used to have eventcommunications between domainssends async REQUEST_JOB_CANCELLATION (C1)sends async CANCELLATION_RUNNING (D1)sends async CANCELLATION_RUNNING (D1)stores resultusescalls cancel servicebecause of C2marks as CANCEL_REQUESTED (C3)callssends async CANCELLATION_RUNNING (D1)sends async REQUEST_JOB_CANCELLATION (C1)receives "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRONsends synch REQUEST_SCHEDULER_JOB_STATUS (B1)set SecHub job finally as CANCELEDcreatesusesstores resultsusescallsusesconfigures and usesusescreates + uses (A3)runsinterrupts ExecutorThreadwhen being canceled.This immediately interrupts all product calls hard.runscreatescancelsstartscreates if necessarystarts when necessarycreates contextcreatesmarks as cancel requestedso available in product executorscallsuses information aboutproduct executors and datasends "START_SCAN" (A1) SYNCHRONsends synchron REQUEST_SCHEDULER_JOB_STATUS (B1)and receives job statusrecevies "START_SCAN" (A2) SYNCHRON (returns result)communicationsends "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRON \ No newline at end of file +Event Nr.Message IDWhat happens at this event ?A1START_SCANScan - runningB1REQUEST_SCHEDULER_JOB_STATUSScan - periodic inspection if scheduler job marked as cancel requestedC1REQUEST_JOB_CANCELLATIONCancel request startedD1CANCELLATION_RUNNINGCancel scan running/ ongoingE1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEProduct execucutor cancel operations have finished (post processing donecom.mercedesbenz.sechub.domain.schedulecom.mercedesbenz.sechub.sharedkernelcom.mercedesbenz.sechub.domain.scancom.mercedesbenz.sechub.domain.administrationcom.mercedesbenz.sechub.domain.notification«Entity»ScheduleSecHubJobExecutionStateINITIALIZINGREADY_TO_STARTSTARTEDCANCEL_REQUESTEDCANCELEDENDEDExecutionResultNONEOKFAILEDSynchronSecHubJobExecutorSchedulerJobStatusRequestHandlerScheduleJobLauncherServiceSchedulerJobBatchTriggerServiceScheduleMessagehandlerhandleCancelJobRequested()SchedulerCancelJobServiceThe steps- D*are only triggered when the SecHub job hasthe execution result NONE.The execution state isnotinspected.DomainMessageServiceEventBus«Entity»ProductResultUUID uuidUUID secHubJobUUIDUUID productExecutorConfigUUIDString resultString messagesString metaDataLocalDateTime startedLocalDateTime endedSecHubExecutionContextmarkCancelRequested()ScanProgressMonitorProductExecutorList<ProductResult> execute(SecHubExecutionContext context, ProductExecutorContext executorContext)ScanServicestartScan()ScanJobExecutorScanJobExecutionRunnableScanJobCancellationRunnableAdapterAdapterExecutionResult start(C config, AdapterMetaDataCallback callback)boolean cancel(C config, AdapterMetaDataCallback callback)ProductExecutionStoreServiceexecuteProductsAndStoreResults(SecHubExecutionContext context)AbstractProductExecutionServiceAbstractProductExecutorCanceableProductExecutorboolean cancel(ProductExecutorData data)ScanJobRunnableDataProductExecutorDataSecHubExecutionHistorySecHubExecutionHistoryElementThe scan job executor is central point ofthe scan steep in scan domain.It does the start of the scan itself anddoes also periodically the inspect the schedulerjob status via event busExecutorThreadCancellationThreadJobAdministrationRestControllerJobAdministrationMessageHandlerJobCancelServiceNotificationMessageHandlerProcuctIs used to have eventcommunications between domainssends async REQUEST_JOB_CANCELLATION (C1)sends async CANCELLATION_RUNNING (D1)sends async CANCELLATION_RUNNING (D1)stores resultusescalls cancel servicebecause of C2marks as CANCEL_REQUESTED (C3)callssends async CANCELLATION_RUNNING (D1)sends async REQUEST_JOB_CANCELLATION (C1)receives "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRONsends synch REQUEST_SCHEDULER_JOB_STATUS (B1)set SecHub job finally as CANCELEDcreatesusesstores resultsusescallsusesconfigures and usesusescreates + uses (A3)runsinterrupts ExecutorThreadwhen being canceled.This immediately interrupts all product calls hard.runscreatescancelsstartscreates if necessarystarts when necessarycreates contextcreatesmarks as cancel requestedso available in product executorscallsuses information aboutproduct executors and datasends "START_SCAN" (A1) SYNCHRONsends synchron REQUEST_SCHEDULER_JOB_STATUS (B1)and receives job statusrecevies "START_SCAN" (A2) SYNCHRON (returns result)communicationsends "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRON \ No newline at end of file diff --git a/docs/latest/images/diagram_target_architecture.svg b/docs/latest/images/diagram_target_architecture.svg index 5ce19c0f7d..107f3308c1 100644 --- a/docs/latest/images/diagram_target_architecture.svg +++ b/docs/latest/images/diagram_target_architecture.svg @@ -1 +1 @@ -ProductExecutorList<ProductResult> execute()ScanType getScanType()int getVersion()boolean isMultipleConfigurationAllowed()SerecoReportProductExecutorProductExecutorDataNetworkLocationProviderList<URI> getURIs();List<InetAddress> getInetAdresses();NetworkTargetProductServerDataProviderString getIdentifierWhenInternetTarget();String getIdentifierWhenIntranetTarget();String getBaseURLWhenInternetTarget();String getBaseURLWhenIntranetTarget();String getUsernameWhenInternetTarget();String getUsernameWhenIntranetTarget();String getPasswordWhenInternetTarget();String getPasswordWhenIntranetTarget();boolean hasUntrustedCertificateWhenIntranetTarget();boolean hasUntrustedCertificateWhenInternetTarget();NetworkTargetInfoNetworkTargetType getNetworkTargetType()Set<URI> getNetworkTargetURIs()Set<InetAddress> getNetworkTargetIPs()AbstractProductExecutorabstract void customize(ProductExecutorData data);abstract List<ProductResult> executeByAdapter(ProductExecutorData data)NetworkTargetResolverNetworkTarget resolveTarget(URI uri);NetworkTarget resolveTarget(InetAddress inetAdress);The base class for mostly all product executors (except for Sereco).The child classes must implmemnt the `customize` method andconfigure the product executor data object accordingly.It will handle automatically target specific partsfor scan types where it is necessary (WebScan, InfraScan).All other scan types (e.g. CodeScan) do notneed to setup specific product executor data(like NetworkLocationProvider).NetworkTargetgetURI()getInetAdress()NetworkTargetType getType()Represents a network targetto use for a dedicated network typeNetworkTargetTypeNetworkTargetRegistryNetworkTargetInfoFactoryNetworkTargetInfo createInfo()Represents (final) information about whichURIs /IPs are for a dedicated networktarget type (e.g. INTERNET).NetworkTargetProductServerDataSuppportString getIdentifier(NetworkTargetType target)boolean isAbletoScan(NetworkTargetType target)String getBaseURL(NetworkTargetType type)String getUserId(NetworkTargetType type)String getPassword(NetworkTargetType target)Data normally comes fromsechub configurationData normally comes from aninstall setupcreates + customizesusesuses data supportcreate+use (if necessary)create+use (if necessary)internally created + usedusesusescontains1nprovides \ No newline at end of file +ProductExecutorList<ProductResult> execute()ScanType getScanType()int getVersion()boolean isMultipleConfigurationAllowed()SerecoReportProductExecutorProductExecutorDataNetworkLocationProviderList<URI> getURIs();List<InetAddress> getInetAdresses();NetworkTargetProductServerDataProviderString getIdentifierWhenInternetTarget();String getIdentifierWhenIntranetTarget();String getBaseURLWhenInternetTarget();String getBaseURLWhenIntranetTarget();String getUsernameWhenInternetTarget();String getUsernameWhenIntranetTarget();String getPasswordWhenInternetTarget();String getPasswordWhenIntranetTarget();boolean hasUntrustedCertificateWhenIntranetTarget();boolean hasUntrustedCertificateWhenInternetTarget();NetworkTargetInfoNetworkTargetType getNetworkTargetType()Set<URI> getNetworkTargetURIs()Set<InetAddress> getNetworkTargetIPs()AbstractProductExecutorabstract void customize(ProductExecutorData data);abstract List<ProductResult> executeByAdapter(ProductExecutorData data)NetworkTargetResolverNetworkTarget resolveTarget(URI uri);NetworkTarget resolveTarget(InetAddress inetAdress);The base class for mostly all product executors (except for Sereco).The child classes must implmemnt the `customize` method andconfigure the product executor data object accordingly.It will handle automatically target specific partsfor scan types where it is necessary (WebScan, InfraScan).All other scan types (e.g. CodeScan) do notneed to setup specific product executor data(like NetworkLocationProvider).NetworkTargetgetURI()getInetAdress()NetworkTargetType getType()Represents a network targetto use for a dedicated network typeNetworkTargetTypeNetworkTargetRegistryNetworkTargetInfoFactoryNetworkTargetInfo createInfo()Represents (final) information about whichURIs /IPs are for a dedicated networktarget type (e.g. INTERNET).NetworkTargetProductServerDataSuppportString getIdentifier(NetworkTargetType target)boolean isAbletoScan(NetworkTargetType target)String getBaseURL(NetworkTargetType type)String getUserId(NetworkTargetType type)String getPassword(NetworkTargetType target)Data normally comes fromsechub configurationData normally comes from aninstall setupcreates + customizesusesuses data supportcreate+use (if necessary)create+use (if necessary)internally created + usedusesusescontains1nprovides \ No newline at end of file diff --git a/docs/latest/images/eclipse-java-formatter-activate.png b/docs/latest/images/eclipse-java-formatter-activate.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd3f69c4e460d262b0d96ea8aa709b27900eeaf GIT binary patch literal 87008 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®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. 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 literal 0 HcmV?d00001 diff --git a/docs/latest/images/eclipse-java-formatter-import.png b/docs/latest/images/eclipse-java-formatter-import.png new file mode 100644 index 0000000000000000000000000000000000000000..cf216a12d3ba1e6253846f04d584dad2d23a7145 GIT binary patch literal 87590 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

nb+PqYLiSjufs{xjPZWV25Ui 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 literal 0 HcmV?d00001 diff --git a/docs/latest/images/event_overview_uc_admin_enables_scheduler_job_processing.svg b/docs/latest/images/event_overview_uc_admin_enables_scheduler_job_processing.svg index 104018dda4..eae359746b 100644 --- a/docs/latest/images/event_overview_uc_admin_enables_scheduler_job_processing.svg +++ b/docs/latest/images/event_overview_uc_admin_enables_scheduler_job_processing.svg @@ -1 +1 @@ -UC_ADMIN_ENABLES_SCHEDULER_JOB_PROCESSINGadministrationnotificationschedule0executedREQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLEDSCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file +UC_ADMIN_ENABLES_SCHEDULER_JOB_PROCESSINGadministrationnotificationschedule0executedREQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLEDSCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file diff --git a/docs/latest/images/event_overview_uc_admin_updates_auto_cleanup_configuration.svg b/docs/latest/images/event_overview_uc_admin_updates_auto_cleanup_configuration.svg index 2bc500512c..f1bbea3fc0 100644 --- a/docs/latest/images/event_overview_uc_admin_updates_auto_cleanup_configuration.svg +++ b/docs/latest/images/event_overview_uc_admin_updates_auto_cleanup_configuration.svg @@ -1 +1 @@ -UC_ADMIN_UPDATES_AUTO_CLEANUP_CONFIGURATIONadministrationscanschedule0executedAUTO_CLEANUP_CONFIGURATION_CHANGEDAUTO_CLEANUP_CONFIGURATION_CHANGEDAUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file +UC_ADMIN_UPDATES_AUTO_CLEANUP_CONFIGURATIONadministrationscanschedule0executedAUTO_CLEANUP_CONFIGURATION_CHANGEDAUTO_CLEANUP_CONFIGURATION_CHANGEDAUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_analyze_scan_results_available.svg b/docs/latest/images/gen_domain_messaging_analyze_scan_results_available.svg index 69c0f2f816..dda30fb34e 100644 --- a/docs/latest/images/gen_domain_messaging_analyze_scan_results_available.svg +++ b/docs/latest/images/gen_domain_messaging_analyze_scan_results_available.svg @@ -1 +1 @@ -Communication detailsofmessage ANALYZE_SCAN_RESULTS_AVAILABLEscanstatisticEventBusAnalyticsProductExecutionServiceImplStatisticMessageHandler1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE \ No newline at end of file +Communication detailsofmessage ANALYZE_SCAN_RESULTS_AVAILABLEscanstatisticEventBusAnalyticsProductExecutionServiceImplStatisticMessageHandler1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg b/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg index 8b3a03128c..d7347551f8 100644 --- a/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg +++ b/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg @@ -1 +1 @@ -Communication detailsofmessage AUTO_CLEANUP_CONFIGURATION_CHANGEDadministrationscanscheduleEventBusAdministrationConfigServiceJobAdministrationMessageHandlerScanMessageHandlerScheduleMessageHandler1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file +Communication detailsofmessage AUTO_CLEANUP_CONFIGURATION_CHANGEDschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerJobAdministrationMessageHandlerAdministrationConfigService1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_binary_upload_done.svg b/docs/latest/images/gen_domain_messaging_binary_upload_done.svg index 9c1b12d5f9..e78e62ff66 100644 --- a/docs/latest/images/gen_domain_messaging_binary_upload_done.svg +++ b/docs/latest/images/gen_domain_messaging_binary_upload_done.svg @@ -1 +1 @@ -Communication detailsofmessage BINARY_UPLOAD_DONEschedulestatisticEventBusSchedulerBinariesUploadServiceStatisticMessageHandler1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file +Communication detailsofmessage BINARY_UPLOAD_DONEschedulestatisticEventBusSchedulerBinariesUploadServiceStatisticMessageHandler1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_get_encryption_status_schedule_domain.svg b/docs/latest/images/gen_domain_messaging_get_encryption_status_schedule_domain.svg new file mode 100644 index 0000000000..7e66b74efd --- /dev/null +++ b/docs/latest/images/gen_domain_messaging_get_encryption_status_schedule_domain.svg @@ -0,0 +1 @@ +Communication detailsofmessage GET_ENCRYPTION_STATUS_SCHEDULE_DOMAINscheduleadministrationEventBusScheduleEncryptionStatusServiceAdministrationEncryptionStatusService1GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN2GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN3RESULT_ENCRYPTION_STATUS_SCHEDULE_DOMAIN4 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg b/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg index 757e8c6fcd..fc34b9ed83 100644 --- a/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg +++ b/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_CANCELLATION_RUNNINGadministrationschedulenotificationEventBusJobAdministrationMessageHandlerSchedulerCancelJobServiceNotificationMessageHandler1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING \ No newline at end of file +Communication detailsofmessage JOB_CANCELLATION_RUNNINGscheduleadministrationnotificationEventBusSchedulerCancelJobServiceJobAdministrationMessageHandlerNotificationMessageHandler1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_created.svg b/docs/latest/images/gen_domain_messaging_job_created.svg index 2d72d85371..66f8b00e84 100644 --- a/docs/latest/images/gen_domain_messaging_job_created.svg +++ b/docs/latest/images/gen_domain_messaging_job_created.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_CREATEDschedulestatisticEventBusSchedulerCreateJobServiceStatisticMessageHandler1JOB_CREATED2JOB_CREATED \ No newline at end of file +Communication detailsofmessage JOB_CREATEDschedulestatisticEventBusSchedulerCreateJobServiceStatisticMessageHandler1JOB_CREATED2JOB_CREATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_done.svg b/docs/latest/images/gen_domain_messaging_job_done.svg index 84dcb8a3a3..27bba06a8b 100644 --- a/docs/latest/images/gen_domain_messaging_job_done.svg +++ b/docs/latest/images/gen_domain_messaging_job_done.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_DONEadministrationschedulestatisticEventBusJobAdministrationMessageHandlerSynchronSecHubJobExecutorStatisticMessageHandler1JOB_DONE2JOB_DONE3JOB_DONE \ No newline at end of file +Communication detailsofmessage JOB_DONEscheduleadministrationstatisticEventBusSynchronSecHubJobExecutorJobAdministrationMessageHandlerStatisticMessageHandler1JOB_DONE2JOB_DONE3JOB_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_execution_starting.svg b/docs/latest/images/gen_domain_messaging_job_execution_starting.svg index b4a9da9b6f..ece98e84ad 100644 --- a/docs/latest/images/gen_domain_messaging_job_execution_starting.svg +++ b/docs/latest/images/gen_domain_messaging_job_execution_starting.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_EXECUTION_STARTINGschedulestatisticEventBusSynchronSecHubJobExecutorStatisticMessageHandler1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING \ No newline at end of file +Communication detailsofmessage JOB_EXECUTION_STARTINGschedulestatisticEventBusSynchronSecHubJobExecutorStatisticMessageHandler1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_failed.svg b/docs/latest/images/gen_domain_messaging_job_failed.svg index 88a6f7f8c7..1b6c6e074e 100644 --- a/docs/latest/images/gen_domain_messaging_job_failed.svg +++ b/docs/latest/images/gen_domain_messaging_job_failed.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_FAILEDadministrationschedulestatisticEventBusJobAdministrationMessageHandlerSynchronSecHubJobExecutorStatisticMessageHandler1JOB_FAILED2JOB_FAILED3JOB_FAILED \ No newline at end of file +Communication detailsofmessage JOB_FAILEDscheduleadministrationstatisticEventBusSynchronSecHubJobExecutorJobAdministrationMessageHandlerStatisticMessageHandler1JOB_FAILED2JOB_FAILED3JOB_FAILED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg b/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg index 7294b320e8..f872cc8855 100644 --- a/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg +++ b/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_RESTART_CANCELEDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED \ No newline at end of file +Communication detailsofmessage JOB_RESTART_CANCELEDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg b/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg index 9b04162f22..12c8b74c3f 100644 --- a/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg +++ b/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_RESTART_TRIGGEREDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED \ No newline at end of file +Communication detailsofmessage JOB_RESTART_TRIGGEREDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_started.svg b/docs/latest/images/gen_domain_messaging_job_started.svg index 13eaf0eb48..15c0657843 100644 --- a/docs/latest/images/gen_domain_messaging_job_started.svg +++ b/docs/latest/images/gen_domain_messaging_job_started.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_STARTEDadministrationscheduleEventBusJobAdministrationMessageHandlerScheduleJobLauncherService1JOB_STARTED2JOB_STARTED \ No newline at end of file +Communication detailsofmessage JOB_STARTEDscheduleadministrationEventBusScheduleJobLauncherServiceJobAdministrationMessageHandler1JOB_STARTED2JOB_STARTED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg b/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg index d85fec5b91..576bffb675 100644 --- a/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg +++ b/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg @@ -1 +1 @@ -Communication detailsofmessage MAPPING_CONFIGURATION_CHANGEDadministrationscanEventBusUpdateMappingServiceScanMessageHandler1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED \ No newline at end of file +Communication detailsofmessage MAPPING_CONFIGURATION_CHANGEDscanadministrationEventBusScanMessageHandlerUpdateMappingService1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_overview.svg b/docs/latest/images/gen_domain_messaging_overview.svg index d18dd1bd77..121c718e1c 100644 --- a/docs/latest/images/gen_domain_messaging_overview.svg +++ b/docs/latest/images/gen_domain_messaging_overview.svg @@ -1 +1 @@ -Overviewof domainmessagingadministrationscanauthorizationschedulestatisticnotificationEventBusadministrationscanauthorizationschedulestatisticnotification1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION61USER_CREATED2USER_CREATED3USER_CREATED1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT1USER_ROLES_CHANGED2USER_ROLES_CHANGED1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED1PROJECT_CREATED2PROJECT_CREATED1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED1JOB_CREATED2JOB_CREATED1JOB_STARTED2JOB_STARTED1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING1JOB_DONE2JOB_DONE3JOB_DONE1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED1JOB_FAILED2JOB_FAILED3JOB_FAILED1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED51REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS41SCHEDULER_STARTED2SCHEDULER_STARTED1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file +Overviewof domainmessagingschedulescanadministrationnotificationauthorizationstatisticEventBusschedulescanadministrationnotificationauthorizationstatistic1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION61USER_CREATED2USER_CREATED3USER_CREATED1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT1USER_ROLES_CHANGED2USER_ROLES_CHANGED1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED1PROJECT_CREATED2PROJECT_CREATED1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED1JOB_CREATED2JOB_CREATED1JOB_STARTED2JOB_STARTED1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING1JOB_DONE2JOB_DONE3JOB_DONE1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED1JOB_FAILED2JOB_FAILED3JOB_FAILED1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED51REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS41SCHEDULER_STARTED2SCHEDULER_STARTED1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE1START_ENCRYPTION_ROTATION2START_ENCRYPTION_ROTATION1SCHEDULE_ENCRYPTION_POOL_INITIALIZED2SCHEDULE_ENCRYPTION_POOL_INITIALIZED1GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN2GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN3RESULT_ENCRYPTION_STATUS_SCHEDULE_DOMAIN4 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg b/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg index 8847b44c80..8b50069c6a 100644 --- a/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg +++ b/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg @@ -1 +1 @@ -Communication detailsofmessage PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEscanscheduleEventBusScanJobCancellationRunnableScheduleMessageHandler1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE \ No newline at end of file +Communication detailsofmessage PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEschedulescanEventBusScheduleMessageHandlerScanJobCancellationRunnable1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg b/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg index 5dbf9919d5..94f552ec86 100644 --- a/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg +++ b/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_ACCESS_LEVEL_CHANGEDadministrationscanscheduleEventBusProjectChangeAccessLevelServiceScanMessageHandlerScheduleMessageHandler1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED \ No newline at end of file +Communication detailsofmessage PROJECT_ACCESS_LEVEL_CHANGEDschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectChangeAccessLevelService1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_created.svg b/docs/latest/images/gen_domain_messaging_project_created.svg index 715f2e7406..a778f0a378 100644 --- a/docs/latest/images/gen_domain_messaging_project_created.svg +++ b/docs/latest/images/gen_domain_messaging_project_created.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_CREATEDadministrationscheduleEventBusProjectCreationServiceScheduleMessageHandler1PROJECT_CREATED2PROJECT_CREATED \ No newline at end of file +Communication detailsofmessage PROJECT_CREATEDscheduleadministrationEventBusScheduleMessageHandlerProjectCreationService1PROJECT_CREATED2PROJECT_CREATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_deleted.svg b/docs/latest/images/gen_domain_messaging_project_deleted.svg index db3c5cc336..46a7d43fdb 100644 --- a/docs/latest/images/gen_domain_messaging_project_deleted.svg +++ b/docs/latest/images/gen_domain_messaging_project_deleted.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_DELETEDadministrationscanschedulenotificationEventBusProjectDeleteServiceScanMessageHandlerScheduleMessageHandlerNotificationMessageHandler1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED \ No newline at end of file +Communication detailsofmessage PROJECT_DELETEDschedulescanadministrationnotificationEventBusScheduleMessageHandlerScanMessageHandlerProjectDeleteServiceNotificationMessageHandler1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg b/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg index 75e18c4696..d6d09531b1 100644 --- a/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg +++ b/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_WHITELIST_UPDATEDadministrationscheduleEventBusProjectUpdateWhitelistServiceScheduleMessageHandler1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED \ No newline at end of file +Communication detailsofmessage PROJECT_WHITELIST_UPDATEDscheduleadministrationEventBusScheduleMessageHandlerProjectUpdateWhitelistService1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg b/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg index 9c28bd3b3e..dc5409f55b 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_CANCELLATIONadministrationscheduleEventBusJobCancelServiceScheduleMessageHandler1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_CANCELLATIONscheduleadministrationEventBusScheduleMessageHandlerJobCancelService1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_restart.svg b/docs/latest/images/gen_domain_messaging_request_job_restart.svg index b96b2aa0de..3f0e8cc2ac 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_restart.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_restart.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_RESTARTadministrationscheduleEventBusJobRestartRequestServiceScheduleMessageHandler1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_RESTARTscheduleadministrationEventBusScheduleMessageHandlerJobRestartRequestService1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg b/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg index 87ffcde0e5..f01267e46c 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_RESTART_HARDadministrationscheduleEventBusJobRestartRequestServiceScheduleMessageHandler1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_RESTART_HARDscheduleadministrationEventBusScheduleMessageHandlerJobRestartRequestService1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg b/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg index 6bb8b3fb5e..dfc75650f3 100644 --- a/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg +++ b/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_PURGE_JOB_RESULTSscanscheduleEventBusScanMessageHandlerSchedulerRestartJobService1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED5 \ No newline at end of file +Communication detailsofmessage REQUEST_PURGE_JOB_RESULTSschedulescanEventBusSchedulerRestartJobServiceScanMessageHandler1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED5 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg index 076e97c2fd..9aae7362b2 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_DISABLE_JOB_PROCESSINGadministrationscheduleEventBusSwitchSchedulerJobProcessingServiceScheduleMessageHandler1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_DISABLE_JOB_PROCESSINGscheduleadministrationEventBusScheduleMessageHandlerSwitchSchedulerJobProcessingService1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg index 66d755f59f..e6c281de8b 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_ENABLE_JOB_PROCESSINGadministrationscheduleEventBusSwitchSchedulerJobProcessingServiceScheduleMessageHandler1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_ENABLE_JOB_PROCESSINGscheduleadministrationEventBusScheduleMessageHandlerSwitchSchedulerJobProcessingService1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg index 770656600e..456b84cad9 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_JOB_STATUSscanscheduleEventBusScanProgressMonitorSchedulerJobStatusRequestHandler1REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS4 \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_JOB_STATUSschedulescanEventBusSchedulerJobStatusRequestHandlerScanProgressMonitor1REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS4 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg index dbf03a1b95..bcaca00a8f 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_STATUS_UPDATEadministrationscheduleEventBusTriggerSchedulerStatusRefreshServiceScheduleMessageHandler1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_STATUS_UPDATEscheduleadministrationEventBusScheduleMessageHandlerTriggerSchedulerStatusRefreshService1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg b/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg index 3d95b5833f..9df1285980 100644 --- a/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg +++ b/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_USER_ROLE_RECALCULATIONadministrationauthorizationEventBusUserRevokeSuperAdminRightsServiceUserGrantSuperAdminRightsServiceProjectCreationServiceProjectAssignUserServiceProjectUnassignUserServiceProjectDeleteServiceProjectChangeOwnerServiceUserRoleAdministrationMessageHandlerAuthUserCreationService1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION \ No newline at end of file +Communication detailsofmessage REQUEST_USER_ROLE_RECALCULATIONadministrationauthorizationEventBusUserRoleAdministrationMessageHandlerUserRevokeSuperAdminRightsServiceUserGrantSuperAdminRightsServiceProjectDeleteServiceProjectUnassignUserServiceProjectCreationServiceProjectAssignUserServiceProjectChangeOwnerServiceAuthUserCreationService1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_result_encryption_status_schedule_domain.svg b/docs/latest/images/gen_domain_messaging_result_encryption_status_schedule_domain.svg new file mode 100644 index 0000000000..4c2c3430b0 --- /dev/null +++ b/docs/latest/images/gen_domain_messaging_result_encryption_status_schedule_domain.svg @@ -0,0 +1 @@ +Communication detailsofmessage RESULT_ENCRYPTION_STATUS_SCHEDULE_DOMAINscheduleEventBusScheduleEncryptionStatusService \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_schedule_encryption_pool_initialized.svg b/docs/latest/images/gen_domain_messaging_schedule_encryption_pool_initialized.svg new file mode 100644 index 0000000000..a80377bcf9 --- /dev/null +++ b/docs/latest/images/gen_domain_messaging_schedule_encryption_pool_initialized.svg @@ -0,0 +1 @@ +Communication detailsofmessage SCHEDULE_ENCRYPTION_POOL_INITIALIZEDscheduleEventBusScheduleMessageHandlerScheduleEncryptionService1SCHEDULE_ENCRYPTION_POOL_INITIALIZED2SCHEDULE_ENCRYPTION_POOL_INITIALIZED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg index 1610fdf2f9..9d09855856 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_PROCESSING_DISABLEDadministrationschedulenotificationEventBusSchedulerAdministrationMessageHandlerSchedulerConfigServiceNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_PROCESSING_DISABLEDscheduleadministrationnotificationEventBusSchedulerConfigServiceSchedulerAdministrationMessageHandlerNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg index 8408e7dec3..b822d5847d 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_PROCESSING_ENABLEDadministrationschedulenotificationEventBusSchedulerAdministrationMessageHandlerSchedulerConfigServiceNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_PROCESSING_ENABLEDscheduleadministrationnotificationEventBusSchedulerConfigServiceSchedulerAdministrationMessageHandlerNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg index 0f2627ab51..8b38e1c31d 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_STATUSscheduleEventBusSchedulerJobStatusRequestHandler \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_STATUSscheduleEventBusSchedulerJobStatusRequestHandler \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_started.svg b/docs/latest/images/gen_domain_messaging_scheduler_started.svg index 9c48036c84..e81032306a 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_started.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_started.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_STARTEDschedulenotificationEventBusSchedulerStartHandlerNotificationMessageHandler1SCHEDULER_STARTED2SCHEDULER_STARTED \ No newline at end of file +Communication detailsofmessage SCHEDULER_STARTEDschedulenotificationEventBusSchedulerStartHandlerNotificationMessageHandler1SCHEDULER_STARTED2SCHEDULER_STARTED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg b/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg index 18c12a76a7..ae4a4230df 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_STATUS_UPDATEadministrationscheduleEventBusSchedulerAdministrationMessageHandlerSchedulerStatusService1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE \ No newline at end of file +Communication detailsofmessage SCHEDULER_STATUS_UPDATEscheduleadministrationEventBusSchedulerStatusServiceSchedulerAdministrationMessageHandler1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_source_upload_done.svg b/docs/latest/images/gen_domain_messaging_source_upload_done.svg index 81db164ad3..a332ecee36 100644 --- a/docs/latest/images/gen_domain_messaging_source_upload_done.svg +++ b/docs/latest/images/gen_domain_messaging_source_upload_done.svg @@ -1 +1 @@ -Communication detailsofmessage SOURCE_UPLOAD_DONEschedulestatisticEventBusSchedulerSourcecodeUploadServiceStatisticMessageHandler1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE \ No newline at end of file +Communication detailsofmessage SOURCE_UPLOAD_DONEschedulestatisticEventBusSchedulerSourcecodeUploadServiceStatisticMessageHandler1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_start_encryption_rotation.svg b/docs/latest/images/gen_domain_messaging_start_encryption_rotation.svg new file mode 100644 index 0000000000..16a14bc2ff --- /dev/null +++ b/docs/latest/images/gen_domain_messaging_start_encryption_rotation.svg @@ -0,0 +1 @@ +Communication detailsofmessage START_ENCRYPTION_ROTATIONscheduleadministrationEventBusScheduleMessageHandlerAdministrationEncryptionRotationService1START_ENCRYPTION_ROTATION2START_ENCRYPTION_ROTATION \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_start_scan.svg b/docs/latest/images/gen_domain_messaging_start_scan.svg index 9c28c68ee8..05c802f6ab 100644 --- a/docs/latest/images/gen_domain_messaging_start_scan.svg +++ b/docs/latest/images/gen_domain_messaging_start_scan.svg @@ -1 +1 @@ -Communication detailsofmessage START_SCANscanscheduleEventBusScanServiceSynchronSecHubJobExecutor1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION6 \ No newline at end of file +Communication detailsofmessage START_SCANschedulescanEventBusSynchronSecHubJobExecutorScanService1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION6 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_added_to_project.svg b/docs/latest/images/gen_domain_messaging_user_added_to_project.svg index c36a3bf16b..067d241ccb 100644 --- a/docs/latest/images/gen_domain_messaging_user_added_to_project.svg +++ b/docs/latest/images/gen_domain_messaging_user_added_to_project.svg @@ -1 +1 @@ -Communication detailsofmessage USER_ADDED_TO_PROJECTadministrationscanscheduleEventBusProjectAssignUserServiceScanMessageHandlerScheduleMessageHandler1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT \ No newline at end of file +Communication detailsofmessage USER_ADDED_TO_PROJECTschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectAssignUserService1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg b/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg index 8dba8e24d0..758641c792 100644 --- a/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg +++ b/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg @@ -1 +1 @@ -Communication detailsofmessage USER_API_TOKEN_CHANGEDadministrationauthorizationnotificationEventBusInternalInitialDataServiceAnonymousUserGetAPITokenByOneTimeTokenServiceAuthMessageHandlerNotificationMessageHandler1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED \ No newline at end of file +Communication detailsofmessage USER_API_TOKEN_CHANGEDadministrationnotificationauthorizationEventBusInternalInitialDataServiceAnonymousUserGetAPITokenByOneTimeTokenServiceNotificationMessageHandlerAuthMessageHandler1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_deleted.svg b/docs/latest/images/gen_domain_messaging_user_deleted.svg index 92248a3868..612b3e8ba3 100644 --- a/docs/latest/images/gen_domain_messaging_user_deleted.svg +++ b/docs/latest/images/gen_domain_messaging_user_deleted.svg @@ -1 +1 @@ -Communication detailsofmessage USER_DELETEDadministrationscanauthorizationschedulenotificationEventBusUserDeleteServiceScanMessageHandlerAuthMessageHandlerScheduleMessageHandlerNotificationMessageHandler1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED \ No newline at end of file +Communication detailsofmessage USER_DELETEDschedulescanadministrationnotificationauthorizationEventBusScheduleMessageHandlerScanMessageHandlerUserDeleteServiceNotificationMessageHandlerAuthMessageHandler1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg b/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg index bf9e3a8454..8af99eeebb 100644 --- a/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg +++ b/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg @@ -1 +1 @@ -Communication detailsofmessage USER_REMOVED_FROM_PROJECTadministrationscanscheduleEventBusProjectUnassignUserServiceScanMessageHandlerScheduleMessageHandler1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT \ No newline at end of file +Communication detailsofmessage USER_REMOVED_FROM_PROJECTschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectUnassignUserService1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-dev.svg b/docs/latest/images/gen_springprofiles-dev.svg index 2585c98b1e..34af9a15bf 100644 --- a/docs/latest/images/gen_springprofiles-dev.svg +++ b/docs/latest/images/gen_springprofiles-dev.svg @@ -1 +1 @@ -<dev>devh2initial_admin_predefinedmocked_notificationsadmin_accesspostgreslocalserverreal_productsmocked_productsdefault \ No newline at end of file +<dev>devinitial_admin_predefinedreal_productsdefaultmocked_notificationslocalserverpostgresadmin_accessh2mocked_products \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-integrationtest.svg b/docs/latest/images/gen_springprofiles-integrationtest.svg index a80559b2b5..57862fa415 100644 --- a/docs/latest/images/gen_springprofiles-integrationtest.svg +++ b/docs/latest/images/gen_springprofiles-integrationtest.svg @@ -1 +1 @@ -<integrationtest>integrationtesth2mocked_notificationsinitial_admin_staticadmin_accesspostgreslocalserverreal_productsmocked_productsdefault \ No newline at end of file +<integrationtest>integrationtestinitial_admin_staticreal_productsdefaultmocked_notificationslocalserverpostgresadmin_accessh2mocked_products \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-prod.svg b/docs/latest/images/gen_springprofiles-prod.svg index 832b2c5475..db3dfad510 100644 --- a/docs/latest/images/gen_springprofiles-prod.svg +++ b/docs/latest/images/gen_springprofiles-prod.svg @@ -1 +1 @@ -<prod>prodpostgresreal_productsinitial_admin_createdserverdefault \ No newline at end of file +<prod>prodreal_productsdefaultserverinitial_admin_createdpostgres \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles.svg b/docs/latest/images/gen_springprofiles.svg index 8f80257010..7b2188dc6f 100644 --- a/docs/latest/images/gen_springprofiles.svg +++ b/docs/latest/images/gen_springprofiles.svg @@ -1 +1 @@ -h2integrationtestdevinitial_admin_predefinedprodmocked_notificationsinitial_admin_staticadmin_accesspostgreslocalserverreal_productsinitial_admin_createdmocked_productsserverdebugdefaulttest \ No newline at end of file +initial_admin_staticinitial_admin_predefinedreal_productsdefaultdebugintegrationtestmocked_notificationsserverproddevinitial_admin_createdlocalserverpostgresadmin_accessh2mocked_productstest \ No newline at end of file diff --git a/docs/latest/images/intelliJ-java-formatter-activate.png b/docs/latest/images/intelliJ-java-formatter-activate.png new file mode 100644 index 0000000000000000000000000000000000000000..822c0fd643e890860176d2bd876c55d40f5a2d88 GIT binary patch literal 70581 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 literal 0 HcmV?d00001 diff --git a/docs/latest/images/intelliJ-java-formatter-import.png b/docs/latest/images/intelliJ-java-formatter-import.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4265796c6d63e6594ec0214b907a8bc60ae13f GIT binary patch literal 76048 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 LbHg%y=ZOCT?xHKs literal 0 HcmV?d00001 diff --git a/docs/latest/pds-download.html b/docs/latest/pds-download.html index ef8bbf8c02..0a39dab3b5 100644 --- a/docs/latest/pds-download.html +++ b/docs/latest/pds-download.html @@ -1,7 +1,7 @@ - + Main Page diff --git a/docs/latest/sechub-architecture.html b/docs/latest/sechub-architecture.html index 540570e0ba..f106efd95a 100644 --- a/docs/latest/sechub-architecture.html +++ b/docs/latest/sechub-architecture.html @@ -531,7 +531,7 @@

+
+
7.5.1.12. Other

All other use cases

@@ -3011,14 +3106,14 @@

7.5.12. UC_011-User starts scan by client

4

-

download job report and traffic light

+

get job status

SUPERADMIN, USER

4

4

-

get job status

+

download job report and traffic light

SUPERADMIN, USER

@@ -3241,17 +3336,17 @@

7.5.16. UC_015-Admin assigns user to project

2

-

Assign user

-

SUPERADMIN

+

Update schedule authorization parts

+

2

-

The service will add the user to the project. If user does not have ROLE_USER it will obtain it

+

2

-

Update schedule authorization parts

- +

Assign user

+

SUPERADMIN

3

- +

The service will add the user to the project. If user does not have ROLE_USER it will obtain it

3

@@ -3340,10 +3435,10 @@

7.5.17. UC_016-Admin unassigns user from project

2

-

Unassign user

-

SUPERADMIN

+

Update authorization parts

+

2

-

The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

+

2

@@ -3354,10 +3449,10 @@

7.5.17. UC_016-Admin unassigns user from project

2

-

Update authorization parts

- +

Unassign user

+

SUPERADMIN

4

- +

The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

4

@@ -5125,24 +5220,24 @@

7.5.43. UC_042-Admin restarts a job (hard)

3

-

Inform sechub admins when job restart was canceled

+

Try to restart job

3

- +

When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

3

-

Try to restart job

+

Try to rstart job (hard)

3

-

When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

+

When job is found, a restart will be triggered. Existing batch jobs will be terminated

3

-

Try to rstart job (hard)

+

Inform sechub admins when job restart was canceled

4

-

When job is found, a restart will be triggered. Existing batch jobs will be terminated

+

4

@@ -6524,16 +6619,23 @@

7.5.69. UC_068-Sechub schedule domain auto clean

2

Delete old data

- +

3

deletes old job information

+ +

3

+

Schedule cipher pool data cleanup

+ + +

Removes cipher pool data entries from database which are no longer used by any job

+

7.5.70. UC_069-User uploads binaries

The binaries must be inside a valid tar file.

@@ -6707,81 +6809,336 @@

7.5.73. UC_072-Admin shows user details for emai

-
-
-

7.6. Rest API documentation

-

7.6.1. Overview

-
-
7.6.1.1. Anonymous
+

7.5.74. UC_073-Admin starts encryption rotation

-

All these usecases handling anonymous access.

+

An administrator starts encryption rotation.

-
- +
+

Steps

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NrTitleRole(s)NextDescription

1

Rest call

SUPERADMIN

2

Admin triggers rotation of encryption via REST

2

Service call

3

Triggers rotation of encryption via domain message

3

Service call

4

Forces new cipher pool entry creation and triggers encryption service pool refresh

4

Service call

5

Creates new cipher pool entry in database in own transaction

5

Refresh encryption pool

6

Encryption pool is refreshed (necessary because pool changed before this method call)

6

Update encrypted data

Encrypted data is updated (a direct pool refresh was triggered by admin action)

-
-
7.6.1.2. User administration
+
+

7.5.75. UC_074-Scheduler encryption pool refresh

-

Usecases handling administration of users

+

The scheduler refreshes its encryption pool data to handle new setup

-
- +
+

Steps

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NrTitleRole(s)NextDescription

1

Init encryption pool

3

Encryption pool is created on startup

1

Encryption pool data refresh trigger

2

Scheduler instance will check if encryption pool is in sync with the database definitions. If not, the instance will try to create new encryption pool object and provide the new setup.

2

Refresh encryption pool

3

Encryption pool is refreshed (if necessary)

3

Update encrypted data

Encrypted data is updated (all other cluster members)

-
-
7.6.1.3. Project administration
+
+

7.5.76. UC_075-Scheduler rotates data encryption

-

Usecases for project administration

+

The scheduler checks for old encrypted data and will encrypt with latest cipher

-
-
    -
  • +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Update encrypted data

    Final update of encrypted job data. Will update all SecHub jobs having a pool id which is lower than latest from encryption pool

    +
+
+

7.5.77. UC_076-Admin fetches encryption status

+
+

An administrator fetches encryption status from all domains where encryption is used.

+
+
+

Steps

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NrTitleRole(s)NextDescription

1

Rest call

SUPERADMIN

1

Admin fetches encryption status from domains via REST

1

Service call

Services collects encryption status from domains via event bus

+
+
+

7.5.78. UC_077-SecHub does cleanup encryption

+
+

Secub does an ecnryption cleanup.

+
+
+

Inside relevant domains the encryption situation will be checked and +old encryption setup, which is no longer necessary, will be dropped.

+
+
+

For example: When encryption was done with formerly via ENV variable +SECRET_1_AES_256 and the new one setup is using SECRET_2_AES_256 and +all jobs have been migrated to the new encryption, the cipher setup +using SECRET_1_AES_256 will become obsolete and will be automatically +removed. After the remove is done, there is no longer a need to +start the server with SECRET_1_AES_256, but only with SECRET_2_AES_256 …​

+
+
+

Steps

+
+ +++++++ + + + + + + + + + + + + + + + + + + +
NrTitleRole(s)NextDescription

1

Schedule cipher pool data cleanup

Removes cipher pool data entries from database which are no longer used by any job

+
+
+
+

7.6. Rest API documentation

+
+

7.6.1. Overview

+
+
7.6.1.1. Anonymous
+
+

All these usecases handling anonymous access.

+
+ +
+ +
+
7.6.1.3. Project administration
+
+

Usecases for project administration

+
+
+
-
7.6.1.10. Other
+
7.6.1.10. Encryption
+
+

Usecases for encryption parts

+
+ +
+
+
7.6.1.11. Other

All other use cases

@@ -7020,7 +7393,7 @@

7.6.2. Check if the server is

REST API for usecase UC_039-Check if the server is alive and running.

-
7.6.2.1. GET variant
+
7.6.2.1. HEAD variant

Definition

@@ -7043,7 +7416,7 @@
7.6.2.1. GET variant

Method

-

GET

+

HEAD

Status code

@@ -7059,7 +7432,7 @@
7.6.2.1. GET variant
-
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
+
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
@@ -7068,7 +7441,7 @@
7.6.2.1. GET variant
-
7.6.2.2. HEAD variant
+
7.6.2.2. GET variant

Definition

@@ -7091,7 +7464,7 @@
7.6.2.2. HEAD variant

Method

-

HEAD

+

GET

Status code

@@ -7107,7 +7480,7 @@
7.6.2.2. HEAD variant
-
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
+
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
@@ -7822,7 +8195,7 @@

7.6.9. Admin downloads all

-
$ curl 'https://sechub.example.com/api/admin/scan/download/65fc6925-ffcb-4f71-8468-01b1a5b5a65d' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/admin/scan/download/50a3de31-e207-4ac3-a6da-0f46e478d7ff' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -8987,7 +9360,7 @@

7.6.20. Admin shows scan logs for pro

-
[{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
+
[{"sechubJobUUID":"fc559da4-0535-46c7-941f-1a76d09a2ca1","executedBy":"spartakus","started":"2024-08-07T08:05:51.724664496","ended":"2024-08-08T08:05:51.724691357","status":"OK"}]
@@ -9597,7 +9970,7 @@
7.6.25.1. Code Scan variant
-
{"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
+
{"jobId":"e80bc191-1fab-4e51-9c53-44b956b37b88"}
@@ -9776,7 +10149,7 @@
7.6.25.2. Code Sc
-
{"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
+
{"jobId":"278d510e-e7b2-4d07-b593-7fa77b54eef8"}
@@ -9935,7 +10308,7 @@
7.6.25.3. Secret scan variant
-
{"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
+
{"jobId":"07c86999-76c1-4a12-90b7-4b97a7632579"}
@@ -10094,7 +10467,7 @@
7.6.25.4. License scan variant
-
{"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
+
{"jobId":"18b74d14-fd93-4beb-9ed0-623ba27171df"}
@@ -10248,7 +10621,7 @@
7.6.25.5. Infrastructure s
-
{"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
+
{"jobId":"a47a9992-6b75-46db-a77a-5590b115e8e4"}
@@ -10417,7 +10790,7 @@
7.6.25.6. Web scan anonymou
-
{"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
+
{"jobId":"ad2715a7-ed7c-49c5-9b0d-ef7b80f276c1"}
@@ -10581,7 +10954,7 @@
7.6.25.7. Web sca
-
{"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
+
{"jobId":"f4542da9-59bb-41d2-a120-39a5f14e286a"}
@@ -10740,7 +11113,7 @@
7.
-
{"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
+
{"jobId":"361d942a-c955-42ba-baea-41bfccfe08e3"}
@@ -10914,7 +11287,7 @@
7.6.25.9. Web Scan login
-
{"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
+
{"jobId":"48c03859-a741-4e25-9ade-314a1583e45f"}
@@ -11108,7 +11481,7 @@
7.6.25.10. Web Sc
-
{"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
+
{"jobId":"046e0236-dd5f-4b07-8c57-3c45801b6c37"}
@@ -11272,7 +11645,7 @@
7.6.25.11. Web Scan headers v
-
{"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
+
{"jobId":"dd1b6f6b-7a47-408d-a919-0f06c9b43200"}
@@ -11361,7 +11734,7 @@

7.6.26. User uploads source code

-
$ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
+
$ curl 'https://sechub.example.com/api/project/project1/job/d26d431f-532e-403d-8649-41840afaf02a/sourcecode?checkSum=checkSumValue' -i -X POST \
     -H 'Content-Type: multipart/form-data;charset=UTF-8' \
     -F 'file=PK  
       �<M                       test1.txtPK  ?
@@ -11458,7 +11831,7 @@ 

7.6.27. User approves sechub job

-
$ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
+
$ curl 'https://sechub.example.com/api/project/project1/job/2599f5c1-4bb0-4ca2-9745-49411e356282/approve' -i -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -11610,7 +11983,7 @@

7.6.28. User checks sechub job state

-
$ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/job/acd54ae3-6a88-4002-85f0-c7026639380a' -i -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -11619,7 +11992,7 @@

7.6.28. User checks sechub job state

-
{"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
+
{"jobUUID":"acd54ae3-6a88-4002-85f0-c7026639380a","owner":"CREATOR1","created":"","started":"2024-08-08T07:50:50.192109111","ended":"2024-08-08T08:05:50.192137775","state":"ENDED","result":"OK","trafficLight":"GREEN"}
@@ -11694,7 +12067,7 @@
7.6.29.1. JSON variant
-
$ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/5e4d6d16-930d-4a32-9277-b178d2e0a033' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/json'
@@ -11766,7 +12139,7 @@
7.6.29.2. HTML variant
-
$ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/d2552d0b-e265-4673-ad90-e43e0f61a610' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/xhtml+xml'
@@ -12324,7 +12697,7 @@

7.6.33. User uploads binaries

-
$ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
+
$ curl 'https://sechub.example.com/api/project/project1/job/897847f1-3e25-44cc-a4cf-67508dbd295a/binaries' -i -X POST \
     -H 'Content-Type: multipart/form-data;charset=UTF-8' \
     -H 'x-file-size: 10240' \
     -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
@@ -12405,7 +12778,7 @@ 

7.6.34. User downloads job rep

-
$ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/spdx/28097c41-5d4d-4355-a509-ce22bdb69537' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/json'
@@ -12944,11 +13317,6 @@

7.6.40. Admin lists all running jobs

String

Timestamp since when job has been started

- -

[].configuration

-

String

-

Configuration used for this job

-
@@ -12968,7 +13336,7 @@

7.6.40. Admin lists all running jobs

-
[{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
+
[{"jobUUID":"1761a2a9-37a9-48e1-98e5-63e3c2785c67","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-08-08T08:05:55.044912463"}]
@@ -13052,7 +13420,7 @@

7.6.41. Admin cancels a job

-
$ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/cancel/08eaf3b6-4d6e-4ad9-a7ac-7d88b4884d13' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13141,7 +13509,7 @@

7.6.42. Admin restarts a job

-
$ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/restart/98470906-23a7-4233-8228-4e213cb5b173' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13230,7 +13598,7 @@

7.6.43. Admin restarts a job (hard)

-
$ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/c3a07e23-27f4-4a02-9313-c5e8ee6aa8f7' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13755,7 +14123,7 @@

7.6.48. Admin creates an execut
$ curl 'https://sechub.example.com/api/admin/config/executor' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8' \
-    -d '{"name":"PDS gosec config 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'
+ -d '{"name":"PDS gosec configuration 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'
@@ -13763,7 +14131,7 @@

7.6.48. Admin creates an execut

-
16d02d16-9d30-4b50-a079-0a992d5d1f8c
+
19a513e8-f664-43f3-ad0e-ec881c7762f7
@@ -13847,7 +14215,7 @@

7.6.49. Admin deletes executor con
-
$ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/22fb2f08-7b58-4d57-acbb-00f12619c6e1' -i -u 'user:secret' -X DELETE \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13962,7 +14330,7 @@

7.6.50. Admin fetches executo
-
{"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
+
{"executorConfigurations":[{"uuid":"7d298d34-1148-4803-975d-226862654d0b","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
@@ -14115,7 +14483,7 @@

7.6.51. Admin fetches executor con
-
$ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/b60c002d-6882-41b7-9378-a1279f10fca9' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -14124,7 +14492,7 @@

7.6.51. Admin fetches executor con
-
{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
+
{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"b60c002d-6882-41b7-9378-a1279f10fca9"}
@@ -14272,7 +14640,7 @@

7.6.52. Admin updates execut
-
$ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/70e7df3d-e2c9-4416-b64e-4d93d5500933' -i -u 'user:secret' -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
@@ -14616,7 +14984,7 @@

7.6.55. Admin updates execution profile
$ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8' \
-    -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
+ -d '{"description":"changed description","configurations":[{"uuid":"44742c74-0b9b-46c2-afa7-1c0e8e7f3291","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

@@ -14736,7 +15104,7 @@

7.6.56. Admin fetches execution profile

configurations[].enabled

Boolean

-

enabled state of this config

+

enabled state of this configuration

configurations[].productIdentifier

@@ -14772,7 +15140,7 @@

7.6.56. Admin fetches execution profile

-
{"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
+
{"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"ce989c37-b285-4975-a802-3930530d627b"}],"projectIds":["project-1","project-2"]}
@@ -15212,11 +15580,11 @@

7.6.61. Admin updates auto cle
-

7.6.62. Admin disables job processing in scheduler

-
-

REST API for usecase UC_030-Admin disables job processing in scheduler

+

7.6.62. Admin starts encryption rotation

+ -
+

Definition

@@ -15234,7 +15602,7 @@

7.6.62. Admin disables job p

- + @@ -15242,7 +15610,7 @@

7.6.62. Admin disables job p

- +

Path

/api/admin/scheduler/disable/job-processing

/api/admin/encryption/rotate

Method

Status code

202 ACCEPTED

200 OK

@@ -15269,8 +15637,13 @@

7.6.62. Admin disables job p

-
$ curl 'https://sechub.example.com/api/admin/scheduler/disable/job-processing' -i -u 'user:secret' -X POST \
-    -H 'Content-Type: application/json;charset=UTF-8'
+
$ curl 'https://sechub.example.com/api/admin/encryption/rotate' -i -u 'user:secret' -X POST \
+    -H 'Content-Type: application/json;charset=UTF-8' \
+    -d '{
+  "algorithm" : "AES_GCM_SIV_256",
+  "passwordSourceType" : "ENVIRONMENT_VARIABLE",
+  "passwordSourceData" : "SECRET_1"
+}'
@@ -15279,11 +15652,11 @@

7.6.62. Admin disables job p

-

7.6.63. Admin enables scheduler job processing

-
-

REST API for usecase UC_031-Admin enables scheduler job processing

+

7.6.63. Admin fetches encryption status

+ -
+

Definition

@@ -15301,15 +15674,15 @@

7.6.63. Admin enables scheduler

- + - + - +

Path

/api/admin/scheduler/enable/job-processing

/api/admin/encryption/status

Method

POST

GET

Status code

202 ACCEPTED

200 OK

@@ -15329,45 +15702,252 @@

7.6.63. Admin enables scheduler
-

Example

-
-
-

Curl request

-
-
-
-
$ curl 'https://sechub.example.com/api/admin/scheduler/enable/job-processing' -i -u 'user:secret' -X POST \
-    -H 'Content-Type: application/json;charset=UTF-8'
-
-
-
-

Response body
-(empty)

-
-

-
-

7.6.64. Admin get scheduler status

-
-

REST API for usecase UC_032-Admin get scheduler status

-
-
-

Definition

+

Response fields

---+++ - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 131. General request information
ValuePathTypeDescription

Path

type

String

The type description of the json content

domains[].name

String

Name of the domain which will provide this encryption data elements

domains[].data[].id

String

Unique identifier

domains[].data[].algorithm

String

Algorithm used for encryption

domains[].data[].passwordSource.type

String

Type of password source. Can be [NONE, ENVIRONMENT_VARIABLE]

domains[].data[].passwordSource.data

String

Data for password source. If type is ENVIRONMENT_VARIABLE then it is the the name of the environment variable.

domains[].data[].usage

Object

Map containing information about usage of this encryption

domains[].data[].usage.*

Number

Key value data

domains[].data[].created

String

Creation timestamp

domains[].data[].createdFrom

String

User id of admin who created the encryption entry

+
+

Example

+
+
+

Curl request

+
+
+
+
$ curl 'https://sechub.example.com/api/admin/encryption/status' -i -u 'user:secret' -X GET \
+    -H 'Content-Type: application/json;charset=UTF-8'
+
+
+
+

Response body

+
+
+
+
{"type":"encryptionStatus","domains":[{"name":"schedule","data":[{"id":"1","algorithm":"AES_GCM_SIV_256","passwordSource":{"type":"ENVIRONMENT_VARIABLE","data":"SECRET_1"},"usage":{"job.state.cancel_requested":4,"job.state.canceled":5,"job.state.ended":6,"job.state.initializing":1,"job.state.ready_to_start":2,"job.state.started":3},"createdFrom":"admin-username","created":"2024-08-01T09:26:00"}]}]}
+
+
+
+
+

7.6.64. Admin disables job processing in scheduler

+ +
+

Definition

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + +
Table 131. General request information
Value

Path

/api/admin/scheduler/disable/job-processing

Method

POST

Status code

202 ACCEPTED

+
+

Request headers

+
+ ++++ + + + + + + +
NameDescription
+
+

Example

+
+
+

Curl request

+
+
+
+
$ curl 'https://sechub.example.com/api/admin/scheduler/disable/job-processing' -i -u 'user:secret' -X POST \
+    -H 'Content-Type: application/json;charset=UTF-8'
+
+
+
+

Response body
+(empty)

+
+
+
+

7.6.65. Admin enables scheduler job processing

+ +
+

Definition

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + +
Table 132. General request information
Value

Path

/api/admin/scheduler/enable/job-processing

Method

POST

Status code

202 ACCEPTED

+
+

Request headers

+
+ ++++ + + + + + + +
NameDescription
+
+

Example

+
+
+

Curl request

+
+
+
+
$ curl 'https://sechub.example.com/api/admin/scheduler/enable/job-processing' -i -u 'user:secret' -X POST \
+    -H 'Content-Type: application/json;charset=UTF-8'
+
+
+
+

Response body
+(empty)

+
+
+
+

7.6.66. Admin get scheduler status

+
+

REST API for usecase UC_032-Admin get scheduler status

+
+
+

Definition

+
+ + ++++ + + + + + + + + + @@ -15413,7 +15993,7 @@

7.6.64. Admin get scheduler status

-

7.6.65. Admin lists status information

+

7.6.67. Admin lists status information

@@ -15421,7 +16001,7 @@

7.6.65. Admin lists status informationDefinition

Table 133. General request information
Value

Path

/api/admin/scheduler/status/refresh

- +@@ -15513,7 +16093,7 @@

7.6.65. Admin lists status information
-

7.6.66. Admin fetches server runtime data

+

7.6.68. Admin fetches server runtime data

@@ -15521,7 +16101,7 @@

7.6.66. Admin fetches server runtime

Definition

Table 132. General request informationTable 134. General request information
- +@@ -15593,7 +16173,7 @@

7.6.66. Admin fetches server runtime
-

7.6.67. User lists jobs for project

+

7.6.69. User lists jobs for project

@@ -15601,7 +16181,7 @@

7.6.67. User lists jobs for project

Definition

Table 133. General request informationTable 135. General request information
- +@@ -15631,7 +16211,7 @@

7.6.67. User lists jobs for project

Path parameters

Table 134. General request informationTable 136. General request information
- +@@ -15755,7 +16335,7 @@

7.6.67. User lists jobs for project

-
{"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
+
{"page":0,"totalPages":1,"content":[{"jobUUID":"048f9167-5b7a-41fb-a235-8e3a7e996efa","executedBy":"User1","created":"2024-08-08T07:48:50.319019742","started":"2024-08-08T07:50:50.319048296","ended":"2024-08-08T08:05:50.319059717","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
@@ -15794,7 +16374,7 @@
7.7.2.1. Overview
7.7.2.1.1. Diagram
-Sequence diagram of messaging overview +Sequence diagram of messaging overview
@@ -15812,6 +16392,9 @@
Table 135. https://localhost:8081/api/project/{projectId}/jobsTable 137. https://localhost:8081/api/project/{projectId}/jobs
- +
Table 136. Scope 'administration'
+@@ -17245,8 +17869,8 @@

8.2.3. General configuration

Table 138. Scope 'administration'
- - +
Table 137. Scope 'anonymous'
+@@ -17267,8 +17891,8 @@

8.2.3. General configuration

Table 139. Scope 'anonymous'
- - +
Table 138. Scope 'checkmarx'
+@@ -17299,8 +17923,8 @@

8.2.3. General configuration

Table 140. Scope 'checkmarx'
- - +
Table 139. Scope 'initial'
+@@ -17331,8 +17955,8 @@

8.2.3. General configuration

Table 141. Scope 'initial'
- - +
Table 140. Scope 'migration'
+@@ -17353,8 +17977,8 @@

8.2.3. General configuration

Table 142. Scope 'migration'
- - +
Table 141. Scope 'mock'
+@@ -17375,8 +17999,8 @@

8.2.3. General configuration

Table 143. Scope 'mock'
- - +
Table 142. Scope 'nessus'
+@@ -17452,8 +18076,8 @@

8.2.3. General configuration

Table 144. Scope 'nessus'
- - +
Table 143. Scope 'netsparker'
+@@ -17524,8 +18148,8 @@

8.2.3. General configuration

Table 145. Scope 'netsparker'
- - +
Table 144. Scope 'new'
+@@ -17546,8 +18170,8 @@

8.2.3. General configuration

Table 146. Scope 'new'
- - +
Table 145. Scope 'notification'
+@@ -17578,8 +18202,8 @@

8.2.3. General configuration

Table 147. Scope 'notification'
- - +
Table 146. Scope 'p'
+@@ -17623,10 +18247,20 @@

8.2.3. General configuration

+ + + + + + + + + +
Table 148. Scope 'p'

240

Time in minutes when adapter result check will automatically time out and adapter stops execution automatically. When -1 timeout is 7200 minutes

sechub.adapter.pds.resilience.encryption-out-of-sync.retry.max

3

Amount of retries done when a PDS encryption out of sync problem happens

sechub.adapter.pds.resilience.encryption-out-of-sync.retry.wait

2000

Time to wait until retry is done when a PDS encryption out of sync problem happens

- - +
Table 147. Scope 's'
+@@ -17667,8 +18301,8 @@

8.2.3. General configuration

Table 149. Scope 's'
- - +
Table 148. Scope 'scan'
+@@ -17704,8 +18338,8 @@

8.2.3. General configuration

Table 150. Scope 'scan'
- - +
Table 149. Scope 'scheduler'
+@@ -17722,7 +18356,7 @@

8.2.3. General configuration

- + @@ -17737,7 +18371,7 @@

8.2.3. General configuration

- + @@ -17766,8 +18400,8 @@

8.2.3. General configuration

Table 151. Scope 'scheduler'

sechub.config.trigger.healthcheck.enabled

true

When enabled each trigger will do an healtching by monitoring service. If system has too much CPU load or uses too much memory, the trigger will not execute until memory and CPU load is at normal level!

When enabled each trigger will do an health check by monitoring service. If system has too much CPU load or uses too much memory, the trigger will not execute until memory and CPU load is at normal level!

sechub.config.trigger.nextjob.delay

sechub.config.trigger.nextjob.maxwaitretry

300

When retry mechanism is enabled by sechub.config.trigger.nextjob.retries, and a retry is necessary, this value is used to define the maximum time period in millis which will be waited before retry. Why max value? Because cluster instances seems to be created often on exact same time by kubernetes. So having here a max value will result in a randomized wait time so cluster members will do fetch operations time shifted and automatically reduce collisions!

When retry mechanism is enabled by sechub.config.trigger.nextjob.retries, and a retry is necessary, this value is used to define the maximum time period in millis which will be waited before retry. Why max value? Because cluster instances seems to be created often on exact same time by kubernetes. So having here a max value will result in a randomized wait time: means cluster members will do fetch operations time shifted and this automatically reduces collisions!

sechub.config.trigger.nextjob.retries

- - +
Table 150. Scope 'sec'
+@@ -17822,14 +18456,19 @@

8.2.3. General configuration

+ + + + +
Table 152. Scope 'sec'

Maximum limit for job information list entries per page

sechub.schedule.encryption.refresh.accept-outdated.milliseconds

1800000

The maximum amount of milliseconds an outdated encryption pool is still accepted in refresh phase

sechub.server.baseurl

Base url of SecHub server - e.g. https://sechub.example.org

- - +
Table 151. Scope 'security'
+@@ -17850,8 +18489,8 @@

8.2.3. General configuration

Table 153. Scope 'security'
- - +
Table 152. Scope 'server'
+@@ -17872,8 +18511,8 @@

8.2.3. General configuration

Table 154. Scope 'server'
- - +
Table 153. Scope 'storage'
+@@ -17959,8 +18598,8 @@

8.2.3. General configuration

Table 155. Scope 'storage'
- - +
Table 154. Scope 'system'
+@@ -17991,8 +18630,8 @@

8.2.3. General configuration

Table 156. Scope 'system'
- - +
Table 155. Scope 'target'
+@@ -18024,7 +18663,7 @@

8.2.3. General configuration

8.2.4. Scheduling definitions

Table 157. Scope 'target'
- +@@ -18046,7 +18685,7 @@

8.2.4. Scheduling definitions

- +@@ -18068,7 +18707,7 @@

8.2.4. Scheduling definitions

Table 157. Scope 'scan'Table 159. Scope 'scan'
- +@@ -18092,13 +18731,18 @@

8.2.4. Scheduling definitions

+ + + + +
Table 158. Scope 'schedule'Table 160. Scope 'schedule'

initial delay:${sechub.config.trigger.nextjob.initialdelay:5000} fixed delay:${sechub.config.trigger.nextjob.delay:10000}

Job scheduling is triggered by a cron job operation - default is 10 seconds to delay after last execution. For initial delay 5000 milliseconds are defined. It can be configured differently. This is useful when you need to startup a cluster. Simply change the initial delay values in to allow the cluster to startup.

Fixed

initial delay:${sechub.schedule.encryption.refresh.initialdelay:5000} fixed delay:${sechub.schedule.encryption.refresh.delay:300000}

Defines the initial and also the fixed delay for the refresh interval. These values are also used for calculation of remaining run time of outdated encrytion pools (when refresh fails)

8.2.5. Configuration properties for mocked adapters

- - +
Table 159. Scope 'abstract'
+@@ -18119,8 +18763,8 @@

8.2.5. Configuration properties for mocked adapters

Table 161. Scope 'abstract'
- - +
Table 160. Scope 'mocked'
+@@ -18971,7 +19615,7 @@

9.5.1. General

provides REST access

  • -

    a very simple priviledge model with just two users (tech user + admin user), +

    a very simple privilege model with just two users (tech user + admin user), basic auth via TLS, credentials are simply defined by environment entries on startup

  • @@ -19009,9 +19653,212 @@

    9.5.3. Big picture

    -

    9.5.4. Storage and sharing

    +

    9.5.4. Encryption

    +
    +

    In PDS we can have also some sensitive data we want to be encrypted. For example: The remote data +section inside the sechub job configuration contains credentials to fetch data. +Such sensitive information shall be always encrypted.

    +
    +
    +
    9.5.4.1. General
    -

    PDS needs - like SecHub - the possiblity to store job data in a central storage location when +

    We want

    +
    +
    +
      +
    1. +

      Simple encryption rotation approach
      +In contrast to SecHub, the data in the PDS is only temporary and is not made available for a +longer period of time. Subsequent access to encrypted data is also no longer necessary, +but only while a SecHub job is running. +
      +
      +This means we simply accept the situation that a PDS restart with new encryption setup could +lead to a situation where a former created job is no longer executable by PDS.

      +
    2. +
    +
    +
    +

    When the encryption changes for a job between its creation and when it begins running, the job will +be marked automatically as failed and having encryption out of sync. +The PDS product executor at SecHub side will take care of such a situation and will restart +a new PDS job (which will then be encrypted correctly again).

    +
    +
    +
      +
    1. +

      Full automated
      +There is no need for manual interaction - means it is not necessary to create any cron jobs or +something else to convert non encrypted data to encrypted data or to rotate a password or to +use a new encryption method.

      +
    2. +
    3. +

      Data protection /Privacy policy

      +
      +
        +
      • +

        Even for administrators it shall not be possible to fetch the information directly
        +(of course a person who knows the encryption password and has access to the database will always + be able to calculate values - but we separate here between administration and operation inside + this concept, so protection is fully possible)

        +
      • +
      • +

        The data must not be accidentally made available in decrypted form - for example through a REST +call in which the data object is passed along unencrypted.

        +
      • +
      +
      +
    4. +
    5. +

      Easy encryption administration

      +
      +
        +
      • +

        It shall be possible for an administrator to configure a new cipher entry at deployment time

        +
      • +
      +
      +
    6. +
    7. +

      Secure storage of encryption passwords

      +
      +
        +
      • +

        Encryption passwords are always provided via environment entries, we store always +the environment variable name to use inside the database but never plain values!

        +
      • +
      +
      +
    8. +
    +
    +
    +
    +
    9.5.4.2. PDS startup
    +
    +

    A PDS server only knows the encryption defined inside two variables:

    +
    +
    +
      +
    • +

      PDS_ENCRYPTION_SECRET_KEY
      +contains the base64 encoded secret key used for encryption

      +
    • +
    • +

      PDS_ENCRYPTION_ALGORITHM
      +contains the information about the used encryption algorithm. Can be
      +NONE, AES_GCM_SIV_128 or AES_GCM_SIV_256 .

      +
    • +
    +
    +
    +

    This setup will be used inside the complete instance as long as it is running. +There is no pooling of different encryptions (in constrast to SecHub, where pooling feature exists).

    +
    +
    +
  • Table 162. Scope 'mocked'
    + + + + +
    + + +
    +

    If the secret key is not a base 64 value the server startup will fail!

    +
    +
    +
    +
    +
    +
    9.5.4.3. Administration
    +
    +
    9.5.4.3.1. Encryption rotation
    +
    +

    There is no complete rotation of encryption - old data will have no encryption update.

    +
    +
    +

    But an administrator is able to do re-deployment of the PDS cluster +and using other secret or algorithm.

    +
    +
    +

    This will

    +
    +
    +
      +
    • +

      use new encryption setup for all new PDS jobs

      +
    • +
    • +

      keep existing encrypted data as is

      +
    • +
    • +

      can lead to a rare race condition when SecHub has created the job with old PDS instance and +new PDS instance tries to run the PDS job (the access to the encrypted data is no longer possible)

      +
    • +
    +
    +
    + + + + + +
    + + +
    +

    Via auto cleanup the old data will automatically disappear. +If an encryption cleanup for PDS via auto cleanup is too late (e.g. credentials were leaked and +an update is really urgent) , it is still possible to just delete +via SQL all jobs at database which have a timestamp older then the newest deployment time (or +just all).

    +
    +
    +
    +
    +
    +
    9.5.4.3.2. Encryption status
    +
    +

    There is no direct possibility to check encryption status. But the job contains a creation time stamp +and can be mapped to the startup of containers if this would become necessary.

    +
    +
    +
    +
    9.5.4.3.3. Cleanup old encrypted data
    +
    +

    Auto Cleanup automatically removes old information. +This means that old encrypted information (with older encryption settings) automatically +disappears after a certain period of time.

    +
    +
    +

    Since no other encryption data is persisted except in the PDS job, nothing else needs to be cleaned up.

    +
    +
    +
    +
    +
    9.5.4.4. Diagrams
    +
    +
    +Diagram +
    +
    Figure 10. title
    +
    +
    +
    +
    +

    9.5.5. Auto cleanup

    +
    +

    The PDS provides an auto cleanup mechanism which will remove old PDS jobs automatically.

    +
    +
    +

    The default configuration is set to 2 days. +Administrators can change the default configuration via REST.

    +
    +
    +
    +

    9.5.6. Storage and sharing

    +
    +

    PDS needs - like SecHub - the possiblity to store job data in a central storage location when operating inside a cluster (it’s not clear which cluster member uploads job data and which one does execute the job and need the data at exectuion time).

    @@ -19069,7 +19916,7 @@

    9.5.4. Storage and sharing

    -
    9.5.4.1. Shared S3 storage
    +
    9.5.6.1. Shared S3 storage

    In the next example PDS and SecHub are using the same S3 bucket to store files uploaded by the user.

    @@ -19116,7 +19963,7 @@
    9.5.4.1. Shared S3 storage
    -
    9.5.4.2. Different S3 storages
    +
    9.5.6.2. Different S3 storages

    In the next example PDS and SecHub are using different S3 buckets as storage.

    @@ -19177,7 +20024,7 @@
    9.5.4.2. Different S3 storages
    -
    9.5.4.3. Same shared volume (NFS)
    +
    9.5.6.3. Same shared volume (NFS)

    In the next example PDS server and SecHub are using same shared volume as storage.

    @@ -19224,7 +20071,7 @@
    9.5.4.3. Same shared volume (NFS)
    -
    9.5.4.4. Different shared volumes (NFS)
    +
    9.5.6.4. Different shared volumes (NFS)

    In the next example PDS and SecHub are using different shared volumes as storage.

    @@ -19285,7 +20132,7 @@
    9.5.4.4. Different shared volumes (N
    -
    9.5.4.5. Mixing S3 and shared volume (NFS)
    +
    9.5.6.5. Mixing S3 and shared volume (NFS)

    This example is only mentioned for the sake of completeness: It is the same as before described for different S3 and different shared volumes: pds.config.use.sechub.storage cannot be used in this case.

    @@ -19302,7 +20149,7 @@
    9.5.4.5. Mixing S3 and shared vo
    -

    9.5.5. Process execution

    +

    9.5.7. Process execution

    PDS instances are executing so called caller scripts by spanning a new process. At this time dedicated environment variables are automatically injected and available inside the scripts.

    @@ -19327,7 +20174,7 @@

    9.5.5. Process execution

    -
    9.5.5.1. How PDS provides output and error stream content of running jobs in clustered environments
    +
    9.5.7.1. How PDS provides output and error stream content of running jobs in clustered environments

    We use error.txt and output.txt inside the workspace location of a running PDS job.

    @@ -19368,7 +20215,7 @@
    -
    9.5.5.2. How PDS handles meta data
    +
    9.5.7.2. How PDS handles meta data

    When communication of PDS with the used product is stateful and is a long running operation, it can be useful to store such state/meta data.

    @@ -19410,7 +20257,7 @@
    9.5.5.2. How PDS handles meta data
    -
    9.5.5.2.1. Checkmarx PDS solution adapter meta data handling
    +
    9.5.7.2.1. Checkmarx PDS solution adapter meta data handling

    The PDS solution for Checkmarx does reuse the already existing CheckmarxAdapter class. A sechub-wrapper-checkmarx gradle project was introduced which contains a simple spring boot @@ -19428,14 +20275,14 @@

    9.5.5.2.1. Checkmarx
    -
    9.5.5.3. How PDS handles storage data
    +
    9.5.7.3. How PDS handles storage data

    The PDS does automatically fetch uploaded files from shared storage temporary into its local filesystem. After the scan has been done, the temporary local files will be automatically deleted.

    -
    9.5.5.3.1. Source code fetching
    +
    9.5.7.3.1. Source code fetching

    Source code is always contained in a file called sourcecode.zip. When a PDS starts a new job, it will fetch the complete ZIP file from storage @@ -19450,7 +20297,7 @@

    9.5.5.3.1. Source code fetching
    -
    9.5.5.3.2. Binaries fetching
    +
    9.5.7.3.2. Binaries fetching

    Binaries are always contained in a file called binaries.tar. When a PDS starts a new job and the scan does references a binary data section, it will fetch @@ -19465,7 +20312,7 @@

    9.5.5.3.2. Binaries fetching
    -
    9.5.5.3.3. Data structure inside TAR and ZIP files
    +
    9.5.7.3.3. Data structure inside TAR and ZIP files

    The data structure inside TAR and ZIP files contains data configuration parts inside data folder.

    @@ -19664,7 +20511,7 @@
    9.5.5.3.3. Data structure inside TAR and
    -
    9.5.5.3.4. Automated Extraction of relevant parts
    +
    9.5.7.3.4. Automated Extraction of relevant parts

    Only files and folders which are available for the configured scan type will be automatically extracted!
    @@ -19809,7 +20656,7 @@

    9.5.5.3.4. Automated Extraction
    -
    9.5.5.4. How PDS handles user messages
    +
    9.5.7.4. How PDS handles user messages

    Inside a PDS workspace a special messages folder exists. The launcher script can create there dedicated user message files by creating simple text files (see PDS_JOB_USER_MESSAGES_FOLDER @@ -19821,22 +20668,22 @@

    9.5.5.4. How PDS handles user messages Diagram
    -
    Figure 10. PDS user message handling
    +
    Figure 11. PDS user message handling
    -
    9.5.5.5. How PDS handles execution events
    +
    9.5.7.5. How PDS handles execution events
    -

    9.5.6. PDS events

    +

    9.5.8. PDS events

    Sometimes it is necessary that the PDS inform the script about changes. This can be done by execution events.

    -
    9.5.6.1. Overview
    +
    9.5.8.1. Overview

    The product adapter is able to read and write events into a dedicated folder inside the workspace. This is utilized by the PDSWorkspaceService class.

    @@ -19857,11 +20704,11 @@
    9.5.6.1. Overview
    Diagram
    -
    Figure 11. Storing PDS events
    +
    Figure 12. Storing PDS events
    -
    9.5.6.2. Handling events in launcher script
    +
    9.5.8.2. Handling events in launcher script

    The launcher scripts (or in started wrapper applications by these scripts) have the environment variable PDS_JOB_EVENTS_FOLDER injected.

    @@ -19892,7 +20739,7 @@
    9.5.6.2. Handling events in launcher
    -
    9.5.6.3. How PDS product executors configure the PDS adapter
    +
    9.5.8.3. How PDS product executors configure the PDS adapter

    The different PDS product executors have different config builders which inherit from different abstract base classes (e.g. AbstractCodeScanAdapterConfigBuilder). We have no multi inheritance in Java, but we do also not @@ -19903,7 +20750,7 @@

    9.5.6.3. How PDS pr
    -
    9.5.6.4. Overview
    +
    9.5.8.4. Overview
    Diagram @@ -19912,11 +20759,11 @@
    9.5.6.4. Overview
    -

    9.5.7. SecHub integration

    +

    9.5.9. SecHub integration

    -
    9.5.7.1. Executors and Adapters
    +
    9.5.9.1. Executors and Adapters
    -
    9.5.7.1.1. Executors
    +
    9.5.9.1.1. Executors

    With PDS there is a default REST API available.

    @@ -19926,7 +20773,7 @@
    9.5.7.1.1. Executors
    -
    9.5.7.1.2. Adapters
    +
    9.5.9.1.2. Adapters

    The Adapter will always be the same, but filled with other necessary parameters.

    @@ -19945,9 +20792,8 @@
    9.5.7.1.2. Adapters
    -
    -
    -

    9.6. HowTo integrate a new product via PDS

    +
    +

    9.5.10. HowTo integrate a new product via PDS

    Having new security product XYZ but being a command line tool, we

    @@ -20025,9 +20871,28 @@

    9.6. HowTo integrate a new produc

    +
    + + + + + +
    + + +
    +

    Output and error stream of a PDS launcher script are stored in PDS database as plain text! +Means: NEVER log any sensitive data in launcher scripts!

    +
    +
    +

    If you want to give hints for debugging etc. you have to mask the information in log output.

    +
    +
    +
    +
    -

    9.7. Archive extraction

    +

    9.6. Archive extraction

    The data structure concept does need an automated archive extraction. The main java class is ArchiveSupport.

    @@ -20042,16 +20907,16 @@

    9.7. Archive extraction

    -

    9.8. False-positive handling

    +

    9.7. False-positive handling

    SecHub must be able to handle false positives of used products.

    -

    9.8.1. General

    +

    9.7.1. General

    -
    9.8.1.1. How can false positives be handled across multiple security products?
    +
    9.7.1.1. How can false positives be handled across multiple security products?
    -
    9.8.1.1.1. Problem
    +
    9.7.1.1.1. Problem
    1. @@ -20065,7 +20930,7 @@
      9.8.1.1.1. Problem
    -
    9.8.1.1.2. Solution
    +
    9.7.1.1.2. Solution

    Instead of configuring false positives for each product (e.g. by calling a REST API) we do the filtering of false positives always at SecHub side only!

    @@ -20082,12 +20947,12 @@
    9.8.1.1.2. Solution
    -
    9.8.1.2. Different kinds of false-positive filtering
    +
    9.7.1.2. Different kinds of false-positive filtering

    Some people prefer code/API-centric way to define false positives, some prefer a WebUI.

    -
    9.8.1.2.1. API centric
    +
    9.7.1.2.1. API centric

    Define false positive handling in JSON by referencing a former SecHub job UUID and the corresponding finding entry (by id) and post it to REST API.

    @@ -20172,13 +21037,13 @@
    9.8.1.2.1. API centr
    -
    9.8.1.2.2. Web UI
    +
    9.7.1.2.2. Web UI

    Just uses the API centric approach (by using given REST API,) over UI.

    -
    9.8.1.2.3. Code centric
    +
    9.7.1.2.3. Code centric

    Inside source code / deployment scripts etc. users can define comments to define false positive handling - this is only possible for situations where we have access to source code - means SAST @@ -20207,14 +21072,14 @@

    9.8.1.2.3. Code cen
    -

    9.8.2. Code scan

    +

    9.7.2. Code scan

    -
    9.8.2.1. API centric
    +
    9.7.2.1. API centric
    -
    9.8.2.1.1. How to identify same vulnerability on code changes?
    +
    9.7.2.1.1. How to identify same vulnerability on code changes?
    • @@ -20259,13 +21124,13 @@
      9.8.2.1.1. How to id
    -
    9.8.2.2. Web UI
    +
    9.7.2.2. Web UI
    -
    9.8.2.3. Code centric
    +
    9.7.2.3. Code centric
    @@ -20322,7 +21187,7 @@
    9.8.2.3. Code centric
    -
    9.8.2.3.1. Java
    +
    9.7.2.3.1. Java

    We will provide single comments (//)

    @@ -20358,36 +21223,36 @@
    9.8.2.3.1. Java
    -

    9.8.3. Web scan

    +

    9.7.3. Web scan

    -
    9.8.3.1. Code centric
    +
    9.7.3.1. Code centric

    Not possible

    -
    9.8.3.2. API centric
    +
    9.7.3.2. API centric
    -
    9.8.3.3. Web UI
    +
    9.7.3.3. Web UI
    -

    9.8.4. Infra scan

    +

    9.7.4. Infra scan

    -
    9.8.4.1. Code centric
    +
    9.7.4.1. Code centric

    Not possible

    -
    9.8.4.2. API centric
    +
    9.7.4.2. API centric
    @@ -20420,7 +21285,7 @@
    9.8.4.2. API centric
    -
    9.8.4.3. Web UI
    +
    9.7.4.3. Web UI
    @@ -20428,7 +21293,7 @@
    9.8.4.3. Web UI
    -

    9.9. Product execution profiles and executor configuration

    +

    9.8. Product execution profiles and executor configuration

    To have the possibility of using dedicated security products for different projects, to disable/enable products on demand without server restart or just to test new products in one evaluation project but @@ -20438,23 +21303,23 @@

    9.9. Product execution profiles and

    This is provided by execution profiles and and executor configurations.

    -

    9.9.1. Overview

    +

    9.8.1. Overview

    Diagram
    -
    Figure 12. Overview profiles and configurations
    +
    Figure 13. Overview profiles and configurations
    -

    9.9.2. Executor configuration

    +

    9.8.2. Executor configuration

    An executor configuration represents a runtime configuration for product executors. The configuration has an enabled state. So it is possible to enable/disable product execution.

    -

    9.9.3. Execution profile

    +

    9.8.3. Execution profile

    An execution profile can contain multiple executor configurations. The configurations can be shared between multiple profiles. E.g. a config with name "pds-gosec-1" can be used in profiles "profileA" @@ -20469,7 +21334,7 @@

    9.9.3. Execution profile

    -

    9.9.4. How execution process uses profiles and configurations

    +

    9.8.4. How execution process uses profiles and configurations

    ScanService is called by SecHub batch operation from scheduler and contains the project id for the project to scan for.

    @@ -20479,7 +21344,7 @@

    9.9.4. How execu project id and executes all enabled product executors for the wanted scan job - e.g. code scan product executors

    -
    9.9.4.1. Results handling done by configured report executor or fallback
    +
    9.8.4.1. Results handling done by configured report executor or fallback

    All of the results returned by the dedicated product executors are stored in database. After this has been done, the configured report product executor(s) is (are) executed (if none has been defined in at least one profile, the @@ -20489,7 +21354,7 @@

    9.9.4.1
    -

    9.10. Product results

    +

    9.9. Product results

    Product results can be either from security products or from reporting products.

    @@ -20514,12 +21379,12 @@

    9.10. Product results

    -

    9.10.1. Product messages inside product result

    +

    9.9.1. Product messages inside product result

    Every product can add custom messages which shall be available to user.

    -
    9.10.1.1. Storing product messages
    +
    9.9.1.1. Storing product messages

    The product adapter fetches the information from the product and delivers it to the product executor, who stores the SecHub messages inside the ProductResult entity.

    @@ -20528,11 +21393,11 @@
    9.10.1.1. Storing product messages
    Diagram
    -
    Figure 13. Storing product messages
    +
    Figure 14. Storing product messages
    -
    9.10.1.2. Read and delivery of report data to end user
    +
    9.9.1.2. Read and delivery of report data to end user

    SerecoProductExecutor collects all SecHub messages from other job results and combines them inside its own data as SerecoAnnotation. The annotations will be inspected on report creation @@ -20545,14 +21410,14 @@

    9.10.1.2. Read and deliver
    Diagram
    -
    Figure 14. Messages to Sereco annotations
    +
    Figure 15. Messages to Sereco annotations
    -

    9.10.2. Report data flow

    +

    9.9.2. Report data flow

    -
    9.10.2.1. Report model
    +
    9.9.2.1. Report model

    Here a reduced class model of the report data model:

    @@ -20560,11 +21425,11 @@
    9.10.2.1. Report model
    Diagram
    -
    Figure 15. Report data model
    +
    Figure 16. Report data model
    -
    9.10.2.2. Creation of ScanReport entities
    +
    9.9.2.2. Creation of ScanReport entities

    Here a graphical overview how the report data is created by the ScanService and finally written as ScanReport entity into the database:

    @@ -20573,11 +21438,11 @@
    9.10.2.2. Creation of ScanReport entiti
    Diagram
    -
    Figure 16. Report data flow
    +
    Figure 17. Report data flow
    -
    9.10.2.3. Read and delivery of report data to end user
    +
    9.9.2.3. Read and delivery of report data to end user

    When the user downloads the report, the result inside the persisted scan report entity will be used.

    @@ -20585,41 +21450,41 @@
    9.10.2.3. Read and deliv
    Diagram
    -
    Figure 17. Report delivery to user
    +
    Figure 18. Report delivery to user
    -

    9.11. Job status

    +

    9.10. Job status

    After a SecHub job has been created, it has a status which will change at the different process steps. Some of these steps are described here.

    -

    9.11.1. Job status fetching

    +

    9.10.1. Job status fetching

    Diagram
    -
    Figure 18. Job status fetrching
    +
    Figure 19. Job status fetrching
    -

    9.11.2. Job status data flow

    +

    9.10.2. Job status data flow

    -
    9.11.2.1. Job execution done, final Job status update
    +
    9.10.2.1. Job execution done, final Job status update
    Diagram
    -
    Figure 19. Delivery
    +
    Figure 20. Delivery
    -

    9.12. SecHub job cancellation

    +

    9.11. SecHub job cancellation

    An administrator is able to cancel a running SecHub job. This is done across different domains and there are multiple events involved. The next diagram shall bring an overview.

    @@ -20628,14 +21493,17 @@

    9.12. SecHub job cancellation

    Diagram
    -
    Figure 20. Overview SecHub job cancellation
    +
    Figure 21. Overview SecHub job cancellation
    -

    9.13. Auto cleanup

    +

    9.12. Auto cleanup

    To prevent full hard drives there is an option to automatically remove old data.

    +
    +

    It also cleans up old encryption settings when it comes to encryption rotation.

    +
    @@ -20670,7 +21538,7 @@

    9.13. Auto cleanup

    -

    9.13.1. Configuration

    +

    9.12.1. Configuration

    Administrators can configure the auto cleanup configuration by uploading a json configuration via REST (see REST API for UC_065-Admin updates auto cleanup configuration ).

    @@ -20717,13 +21585,13 @@

    9.13.1. Configuration

    -

    9.13.2. Execution

    +

    9.12.2. Execution

    The execution is automatically done by SecHub.

    -

    9.13.3. Cleaned data

    +

    9.12.3. Cleaned data

    All data which is older than the defined time period is removed from:

    @@ -20762,7 +21630,7 @@

    9.13.3. Cleaned data

    -

    9.14. PDS solutions

    +

    9.13. PDS solutions

    It is easy to integrate security products, even command line tools without a network API, into SecHub via PDS (Product delegation server).

    @@ -20784,7 +21652,7 @@

    9.14. PDS solutions

    -

    9.14.1. Checkmarx PDS solution

    +

    9.13.1. Checkmarx PDS solution

    The checkmarx PDS solution uses sechub-wrapper-checkmarx which is a standalone Spring Boot application. If started in non production mode, the data will be mocked when inside IDE.

    @@ -20796,7 +21664,7 @@

    9.14.1. Checkmarx PDS solution

    -

    9.14.2. PDS code scan executor Configuration

    +

    9.13.2. PDS code scan executor Configuration

    @@ -20896,7 +21764,7 @@

    9.14.2. PDS code scan executor Con
    -

    9.15. Analytics

    +

    9.14. Analytics

    SecHub can be configured to analyze a scan situation at the beginning to improve runtime behavior or to create statistic data. This is done before all other scans.

    @@ -20918,7 +21786,7 @@

    9.15. Analytics

    -

    9.16. Statistics

    +

    9.15. Statistics

    For statistic data handling exists an own domain statistic. The data is collected in dedicated statistic SQL tables.

    @@ -20937,10 +21805,405 @@

    9.16. Statistics

    +
    +
    +

    9.16. Data encryption

    +
    +

    In SecHub we have some sensitive data we want to be encrypted. For example: Inside remote data +section the configuration contains credentials to fetch data. These sensitive information shall +be always encrypted.

    +
    +
    +

    9.16.1. General

    +
    +

    We want

    +
    +
    +
      +
    1. +

      Data consistency

      +
      +
        +
      • +

        It shall not be possible that we loose data by encryption in any way.
        +It must be ensured that the servers are always able to read and write data.

        +
      • +
      +
      +
    2. +
    3. +

      Full automated cipher rotation
      +There is no need for manual interaction - means it is not necessary to create any cron jobs or +something else to convert non encrypted data to encrypted data or to rotate a password or to +use a new encryption method.

      +
    4. +
    5. +

      Data protection /Privacy policy

      +
      +
        +
      • +

        Even for administrators it shall not be possible to fetch the information directly
        +(of course a person who knows the encryption password and has access to the database will always + be able to calculate values - but we separate here between administration and operation inside + this concept, so protection is fully possible)

        +
      • +
      • +

        The data must not be accidentally made available in decrypted form - for example through a REST +call in which the data object is passed along unencrypted.

        +
      • +
      +
      +
    6. +
    7. +

      Easy encryption administration

      +
      +
        +
      • +

        It shall be possible for an administrator to configure a new cipher entry via REST

        +
      • +
      +
      +
    8. +
    9. +

      Secure storage of encryption passwords

      +
      +
        +
      • +

        Encryption passwords are always provided via environment entries, we store always +the environment variable name to use inside the database but never plain values!

        +
      • +
      +
      +
    10. +
    +
    +
    +
    +

    9.16.2. Server startup

    +
    +

    A SecHub server will stop on startup phase when one of the entries inside the cipher pool cannot +be handled by this server.

    +
    +
    +

    This ensures that every new started server is able to handle all of them / is always readable.

    +
    +
    +
    +

    9.16.3. Administration

    +
    +
    9.16.3.1. Encryption rotation
    +
    +

    An administrator is able to start encryption rotation via REST. This will

    +
    +
    +
      +
    • +

      use new encryption setup for all new data

      +
    • +
    • +

      automatically convert existing encrypted data with new encryption setup in background

      +
    • +
    +
    +
    +
    +
    9.16.3.2. Encryption status
    +
    +

    An administrator is able to fetch encryption status from SecHub server. All domains which are +doing data encryption add their current status information into result.

    +
    +
    +
    +
    9.16.3.3. Cleanup old encryption setup
    +
    +

    Auto Cleanup automatically removes old information. +This means that old encrypted information that cannot be updated for some reason may eventually +disappear and old encryption configurations are then no longer needed and can be removed.

    +
    +
    +

    To fully automate this, after the respective Auto Cleanup, the domains are always checked for encryption configurations that are no longer used and these are then automatically removed (except for the most recent encryption configuration).

    +
    +
    + + + + + +
    + + +
    +

    If you have setup auto cleanup to 0 days, the auto cleanup is disabled completely and +unused encryption setup will also not be removed.

    +
    +
    +
    +
    +
    +
    +

    9.16.4. Scheduler

    +
    +

    Inside the schedule domain, the sensitive information is the sechub job configuration.

    +
    +
    +
    9.16.4.1. Database
    +
    +
    9.16.4.1.1. Table
    +
    +

    We store the cipher information inside table: SCHEDULE_CIPHER_POOL_DATA.

    +
    +
    + + + + + +
    + + +
    +

    Why in schedule domain and only there? Because it is the responsible domain for the storage. All other +domains may NEVER persist this information (for PDS the configuration will be sent from SecHub +and stored at PDS side encrypted as well)

    +
    +
    +
    +
    +

    Here an an overview of the table (names can be different in database):

    +
    + ++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    idalgorithmpassword_source_typepassword_source_dataencodingtest_texttest_initial_vectortest_encryptedcreation_timestampcreated_from

    0

    NO_ENCRYPTION

    PLAIN_TEXT

    PLAIN

    no-encryption

    no-encryption

    2024-06-24_10:00:01

    null

    1

    AES_GCM_SIV_128

    ENVIRONMENT_VARIABLE

    SECHUB_CRYPTO_P0

    PLAIN

    SecHub

    easdfa313334

    53d$125666eeffeded

    2024-06-24_10:05:34

    Admin1

    2

    AES_GCM_SIV_256

    ENVIRONMENT_VARIABLE

    SECHUB_CRYPTO_P1

    PLAIN

    Apfel

    fxadsfeec33s

    13x313412124$rfewd

    2024-06-24_11:02:14

    Admin2

    +
    +

    algorithm

    +
    +
    +

    Algorithm to use in encryption - currently we provide:

    +
    +
    +
      +
    • +

      NONE (means not encrypted!)

      +
    • +
    • +

      AES_GCM_SIV_128

      +
    • +
    • +

      AES_GCM_SIV_256

      +
    • +
    +
    +
    +

    password_source_type

    +
    +
    +

    Currently supported password source types are

    +
    +
    +
      +
    1. +

      ENVIRONMENT_VARIABLE
      +Here we provide environment variables, the password source data is the name of the environment variable

      +
    2. +
    3. +

      NONE
      +No password - only allowed for NONE algorithm

      +
    4. +
    +
    +
    +

    We separated source type and source data to be able to provide additional source - e.g. a password fault for the future.

    +
    +
    +

    password_source_data

    +
    +
    +

    Depends on the source

    +
    +
    +
      +
    • +

      If source is env than this is the name of the environment variable which holds the secret

      +
    • +
    +
    +
    +
    +
    9.16.4.1.2. Usage inside rows
    +
    +

    Inside the encrypted rows we will persist the pool id together with an initial vector

    +
    +
    +

    initial vector +Some algorithm like AES_GCM_SIV do need an initial vector to encrypt secure. The value here is +auto generated by SecHub and is dependent on the algorithm.

    +
    +
    +

    SecHub will always auto generate a dedicate value when it comes to encryption and the vector +will be stored together with the encrypted data. If the initial vector is changed, the row cannot +be decrypted, even when the secret key is known!

    +
    +
    +
    +
    +
    9.16.4.2. Constraints on scheduling
    +
    +

    The only situation we need to access the encrypted job configuration is the point, when +it comes to job execution. At all other situations it does not matter if the configuration +can be decrypted or not.

    +
    +
    +

    This means that it may not be possible that an scheduler instance executes a job which is +not supported by the current encryption pool!

    +
    +
    +
    +
    +

    9.16.5. Handling server updates

    +
    +
    9.16.5.1. SecHub server 1.x to 2.x
    +
    +

    Old server versions do not have the encryption field inside the scheduler job table or the cipher pool table.

    +
    +
    +

    Our SQL migration scripts will initialize scheduler cipher pool table on creation time with a +NONE entry (pool id = 0). This is encryption setup (meaning no encryption) will be added +to all existing jobs.

    +
    +
    +

    We want to have zero downtime and rolling updates with k8s and SecHub. To provide this, +it must be ensured, that there is no old server running which creates new jobs with +plain text configurations while update is running. To prevent such a situation +the column name inside schedule_sechub_job have been renamed from configuration to unencrypted_configuration. +If there appears any race conditions, old servers would no longer be able to write data and a +SQL error would happen.

    +
    +
    +
    +
    +

    9.16.6. Handling server downgrade

    +
    +
    9.16.6.1. SecHub server 2.x to 1.x
    +
    +

    For a downgrade from SecHub server V2.x to V1.x it is necessary to ensure, that all data is +encrypted with NONE cipher type (can be done by encryption rotation). When ensured that everything +is "encrypted" with this cipher type, the old server version can be deployed/used and migration +is automatically done as usual.

    +
    +
    +
    +
    +

    9.16.7. Handling sensitive data at runtime

    +
    +

    JVM crash dumps contain string information. Classes containing sensitive information shall +store such information inside sealed objects.

    +
    +
    +
    +

    9.16.8. Handling metadata from job configuration

    +
    +

    The SecHub configuration is encrypted, because it can contain sensitive data. E.g. when defining a remote data +section.

    +
    +
    +

    There exists a REST endpoint which gives users the possiblity to fetch job information, together with +the meta data defined inside the SecHub configuration.

    +
    +
    +

    To obtain this information, the configuration will be decrypted temporary at runtime and the meta +data are resolved and returned.

    +
    +
    +

    Because meta data shall not contain any sensitive information, this will not be audit logged.

    +
    +
    +
    +

    9.16.9. Diagrams

    +
    +
    9.16.9.1. Usage of encryption commons
    +
    +
    +Diagram +
    +
    +
    +
    +
    9.16.9.2. Encryption rotation overview
    +
    +
    +Diagram +
    +
    Figure 22. a reduced view of the steps done on encryption rotation
    +
    +
    +

    10. Design Decisions

    @@ -21127,7 +22390,7 @@

    13. Glossary

    diff --git a/docs/latest/sechub-client.html b/docs/latest/sechub-client.html index 54d991c225..365533918d 100644 --- a/docs/latest/sechub-client.html +++ b/docs/latest/sechub-client.html @@ -531,7 +531,7 @@ @@ -1045,7 +1045,7 @@

    1.2.7. Install SecHub’s

    diff --git a/docs/latest/sechub-operations.html b/docs/latest/sechub-operations.html index 7f8c73bb14..b52bab919e 100644 --- a/docs/latest/sechub-operations.html +++ b/docs/latest/sechub-operations.html @@ -531,7 +531,7 @@
    -
    3.1.4.3. Same shared volume (NFS)
    +
    3.1.6.3. Same shared volume (NFS)

    In the next example PDS server and SecHub are using same shared volume as storage.

    @@ -1128,7 +1346,7 @@
    3.1.4.3. Same shared volume (NFS)
    -
    3.1.4.4. Different shared volumes (NFS)
    +
    3.1.6.4. Different shared volumes (NFS)

    In the next example PDS and SecHub are using different shared volumes as storage.

    @@ -1189,7 +1407,7 @@
    3.1.4.4. Different shared volumes (N
    -
    3.1.4.5. Mixing S3 and shared volume (NFS)
    +
    3.1.6.5. Mixing S3 and shared volume (NFS)

    This example is only mentioned for the sake of completeness: It is the same as before described for different S3 and different shared volumes: pds.config.use.sechub.storage cannot be used in this case.

    @@ -1206,7 +1424,7 @@
    3.1.4.5. Mixing S3 and shared vo
    -

    3.1.5. Process execution

    +

    3.1.7. Process execution

    PDS instances are executing so called caller scripts by spanning a new process. At this time dedicated environment variables are automatically injected and available inside the scripts.

    @@ -1231,7 +1449,7 @@

    3.1.5. Process execution

    -
    3.1.5.1. How PDS provides output and error stream content of running jobs in clustered environments
    +
    3.1.7.1. How PDS provides output and error stream content of running jobs in clustered environments

    We use error.txt and output.txt inside the workspace location of a running PDS job.

    @@ -1272,7 +1490,7 @@
    -
    3.1.5.2. How PDS handles meta data
    +
    3.1.7.2. How PDS handles meta data

    When communication of PDS with the used product is stateful and is a long running operation, it can be useful to store such state/meta data.

    @@ -1314,7 +1532,7 @@
    3.1.5.2. How PDS handles meta data
    -
    3.1.5.2.1. Checkmarx PDS solution adapter meta data handling
    +
    3.1.7.2.1. Checkmarx PDS solution adapter meta data handling

    The PDS solution for Checkmarx does reuse the already existing CheckmarxAdapter class. A sechub-wrapper-checkmarx gradle project was introduced which contains a simple spring boot @@ -1332,14 +1550,14 @@

    3.1.5.2.1. Checkmarx
    -
    3.1.5.3. How PDS handles storage data
    +
    3.1.7.3. How PDS handles storage data

    The PDS does automatically fetch uploaded files from shared storage temporary into its local filesystem. After the scan has been done, the temporary local files will be automatically deleted.

    -
    3.1.5.3.1. Source code fetching
    +
    3.1.7.3.1. Source code fetching

    Source code is always contained in a file called sourcecode.zip. When a PDS starts a new job, it will fetch the complete ZIP file from storage @@ -1354,7 +1572,7 @@

    3.1.5.3.1. Source code fetching
    -
    3.1.5.3.2. Binaries fetching
    +
    3.1.7.3.2. Binaries fetching

    Binaries are always contained in a file called binaries.tar. When a PDS starts a new job and the scan does references a binary data section, it will fetch @@ -1369,7 +1587,7 @@

    3.1.5.3.2. Binaries fetching
    -
    3.1.5.3.3. Data structure inside TAR and ZIP files
    +
    3.1.7.3.3. Data structure inside TAR and ZIP files

    The data structure inside TAR and ZIP files contains data configuration parts inside data folder.

    @@ -1568,7 +1786,7 @@
    3.1.5.3.3. Data structure inside TAR and
    -
    3.1.5.3.4. Automated Extraction of relevant parts
    +
    3.1.7.3.4. Automated Extraction of relevant parts

    Only files and folders which are available for the configured scan type will be automatically extracted!
    @@ -1713,7 +1931,7 @@

    3.1.5.3.4. Automated Extraction
    -
    3.1.5.4. How PDS handles user messages
    +
    3.1.7.4. How PDS handles user messages

    Inside a PDS workspace a special messages folder exists. The launcher script can create there dedicated user message files by creating simple text files (see PDS_JOB_USER_MESSAGES_FOLDER @@ -1725,22 +1943,22 @@

    3.1.5.4. How PDS handles user messages Diagram
    -
    Figure 1. PDS user message handling
    +
    Figure 2. PDS user message handling
    -
    3.1.5.5. How PDS handles execution events
    +
    3.1.7.5. How PDS handles execution events
    -

    3.1.6. PDS events

    +

    3.1.8. PDS events

    Sometimes it is necessary that the PDS inform the script about changes. This can be done by execution events.

    -
    3.1.6.1. Overview
    +
    3.1.8.1. Overview

    The product adapter is able to read and write events into a dedicated folder inside the workspace. This is utilized by the PDSWorkspaceService class.

    @@ -1761,11 +1979,11 @@
    3.1.6.1. Overview
    Diagram
    -
    Figure 2. Storing PDS events
    +
    Figure 3. Storing PDS events
    -
    3.1.6.2. Handling events in launcher script
    +
    3.1.8.2. Handling events in launcher script

    The launcher scripts (or in started wrapper applications by these scripts) have the environment variable PDS_JOB_EVENTS_FOLDER injected.

    @@ -1796,7 +2014,7 @@
    3.1.6.2. Handling events in launcher
    -
    3.1.6.3. How PDS product executors configure the PDS adapter
    +
    3.1.8.3. How PDS product executors configure the PDS adapter

    The different PDS product executors have different config builders which inherit from different abstract base classes (e.g. AbstractCodeScanAdapterConfigBuilder). We have no multi inheritance in Java, but we do also not @@ -1807,7 +2025,7 @@

    3.1.6.3. How PDS pr
    -
    3.1.6.4. Overview
    +
    3.1.8.4. Overview
    Diagram @@ -1816,11 +2034,11 @@
    3.1.6.4. Overview
    -

    3.1.7. SecHub integration

    +

    3.1.9. SecHub integration

    -
    3.1.7.1. Executors and Adapters
    +
    3.1.9.1. Executors and Adapters
    -
    3.1.7.1.1. Executors
    +
    3.1.9.1.1. Executors

    With PDS there is a default REST API available.

    @@ -1830,7 +2048,7 @@
    3.1.7.1.1. Executors
    -
    3.1.7.1.2. Adapters
    +
    3.1.9.1.2. Adapters

    The Adapter will always be the same, but filled with other necessary parameters.

    @@ -1849,9 +2067,8 @@
    3.1.7.1.2. Adapters
    -
    -
    -

    3.2. HowTo integrate a new product via PDS

    +
    +

    3.1.10. HowTo integrate a new product via PDS

    Having new security product XYZ but being a command line tool, we

    @@ -1929,6 +2146,25 @@

    3.2. HowTo integrate a new produc

    +
    + + + + + +
    + + +
    +

    Output and error stream of a PDS launcher script are stored in PDS database as plain text! +Means: NEVER log any sensitive data in launcher scripts!

    +
    +
    +

    If you want to give hints for debugging etc. you have to mask the information in log output.

    +
    +
    +
    +
    @@ -2125,8 +2361,35 @@

    4.1.4. General configuration

    - - +
    Table 1. Scope 'credentials'
    + +++++ + + + + + + + + + + + + + + + + + + + +
    Table 1. Scope 'Encryption'
    Key or variable nameDefaultDescription

    PDS_ENCRYPTION_ALGORITHM

    NONE

    The encryption type. Allowed values are: NONE, AES_GCM_SIV_128 or AES_GCM_SIV_256 This must be defined as an environment variable!

    PDS_ENCRYPTION_SECRET_KEY

    The secret key used for encryption. It must be base64 encoded, otherwise it is not accepted. This must be defined as an environment variable!

    + +@@ -2157,8 +2420,8 @@

    4.1.4. General configuration

    Table 2. Scope 'credentials'
    - - +
    Table 2. Scope 'credentials.'
    +@@ -2175,12 +2438,12 @@

    4.1.4. General configuration

    - +
    Table 3. Scope 'credentials.'

    PDS_TECHUSER_USERID

    Techuser user id This must be defined as an environment variable!

    Techuser user id. This must be defined as an environment variable!

    - - +
    Table 3. Scope 'development'
    +@@ -2206,8 +2469,8 @@

    4.1.4. General configuration

    Table 4. Scope 'development'
    - - +
    Table 4. Scope 'execution'
    +@@ -2273,8 +2536,8 @@

    4.1.4. General configuration

    Table 5. Scope 'execution'
    - - +
    Table 5. Scope 'migration'
    +@@ -2295,8 +2558,8 @@

    4.1.4. General configuration

    Table 6. Scope 'migration'
    - - +
    Table 6. Scope 'monitoring'
    +@@ -2332,8 +2595,8 @@

    4.1.4. General configuration

    Table 7. Scope 'monitoring'
    - - +
    Table 7. Scope 'p'
    +@@ -2374,8 +2637,8 @@

    4.1.4. General configuration

    Table 8. Scope 'p'
    - - +
    Table 8. Scope 'scheduler'
    +@@ -2406,8 +2669,8 @@

    4.1.4. General configuration

    Table 9. Scope 'scheduler'
    - - +
    Table 9. Scope 'security'
    +@@ -2428,8 +2691,8 @@

    4.1.4. General configuration

    Table 10. Scope 'security'
    - - +
    Table 10. Scope 'startup'
    +@@ -2445,7 +2708,7 @@

    4.1.4. General configuration

    - + @@ -2455,8 +2718,8 @@

    4.1.4. General configuration

    Table 11. Scope 'startup'

    pds.config.file

    ./pds-config.json

    ./pds-configuration.json

    Define path to PDS configuration file

    - - +
    Table 11. Scope 'storage'
    +@@ -2542,8 +2805,8 @@

    4.1.4. General configuration

    Table 12. Scope 'storage'
    - - +
    Table 12. Scope 'upload'
    +@@ -3067,7 +3330,7 @@

    4.6.2. Parameter variables

    We have following standard parameters:

    Table 13. Scope 'upload'
    - +@@ -4366,7 +4629,7 @@

    4.7.14. PDS_UC_013-Admin fetches auto cleanu

    - + @@ -4409,7 +4672,7 @@

    4.7.15. PDS_UC_014-Admin updates auto cleanu

    - + @@ -4813,7 +5076,7 @@

    4.8.8. Get monitoring status

    diff --git a/docs/latest/sechub-restapi.html b/docs/latest/sechub-restapi.html index d01716833a..d0bc6c7c98 100644 --- a/docs/latest/sechub-restapi.html +++ b/docs/latest/sechub-restapi.html @@ -531,7 +531,7 @@
    Table 13. PDS executor configuration parametersTable 14. PDS executor configuration parameters

    2

    Fetches auto cleanup config

    Fetches auto cleanup configuration

    Fetches auto cleanup configuration from database

    2

    Updates auto cleanup config

    Updates auto cleanup configuration

    3, 4, 5

    Updates auto cleanup configuration as JSON in database

    -

    Documentation version: Server 1.10.0 - Build date: 20240710135650

    +

    Documentation version: Server 2.0.0 - Build date: 20240808080534


    @@ -2554,6 +2567,25 @@

    2.1.10. MetaData

    The SecHub configuration file can have optional meta data.

    +
    + + + + + +
    + + +
    +

    The SecHub configuration is stored encrypted in database and access is restricted, even +for administrators. But the meta data can be fetched by users of the project or administrators +without additional audit logging.

    +
    +
    +

    Because of this you should never store sensitive information inside the meta data!

    +
    +
    +
    2.1.10.1. Labels
    @@ -2924,7 +2956,23 @@
    2.2.1.9. Configuration
    -
    2.2.1.10. Other
    +
    2.2.1.10. Encryption
    +
    +

    Usecases for encryption parts

    +
    + +
    +
    +
    2.2.1.11. Other

    All other use cases

    @@ -2958,7 +3006,7 @@

    2.2.2. Check if the server is

    REST API for usecase UC_039-Check if the server is alive and running.

    -
    2.2.2.1. GET variant
    +
    2.2.2.1. HEAD variant

    Definition

    @@ -2981,7 +3029,7 @@
    2.2.2.1. GET variant

    Method

    -

    GET

    +

    HEAD

    Status code

    @@ -2997,7 +3045,7 @@
    2.2.2.1. GET variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    @@ -3006,7 +3054,7 @@
    2.2.2.1. GET variant
    -
    2.2.2.2. HEAD variant
    +
    2.2.2.2. GET variant

    Definition

    @@ -3029,7 +3077,7 @@
    2.2.2.2. HEAD variant

    Method

    -

    HEAD

    +

    GET

    Status code

    @@ -3045,7 +3093,7 @@
    2.2.2.2. HEAD variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    @@ -3760,7 +3808,7 @@

    2.2.9. Admin downloads all

    -
    $ curl 'https://sechub.example.com/api/admin/scan/download/65fc6925-ffcb-4f71-8468-01b1a5b5a65d' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/scan/download/50a3de31-e207-4ac3-a6da-0f46e478d7ff' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -4925,7 +4973,7 @@

    2.2.20. Admin shows scan logs for pro
    -
    [{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
    +
    [{"sechubJobUUID":"fc559da4-0535-46c7-941f-1a76d09a2ca1","executedBy":"spartakus","started":"2024-08-07T08:05:51.724664496","ended":"2024-08-08T08:05:51.724691357","status":"OK"}]
    @@ -5535,7 +5583,7 @@

    2.2.25.1. Code Scan variant
    -
    {"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
    +
    {"jobId":"e80bc191-1fab-4e51-9c53-44b956b37b88"}
    @@ -5714,7 +5762,7 @@
    2.2.25.2. Code Sc
    -
    {"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
    +
    {"jobId":"278d510e-e7b2-4d07-b593-7fa77b54eef8"}
    @@ -5873,7 +5921,7 @@
    2.2.25.3. Secret scan variant
    -
    {"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
    +
    {"jobId":"07c86999-76c1-4a12-90b7-4b97a7632579"}
    @@ -6032,7 +6080,7 @@
    2.2.25.4. License scan variant
    -
    {"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
    +
    {"jobId":"18b74d14-fd93-4beb-9ed0-623ba27171df"}
    @@ -6186,7 +6234,7 @@
    2.2.25.5. Infrastructure s
    -
    {"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
    +
    {"jobId":"a47a9992-6b75-46db-a77a-5590b115e8e4"}
    @@ -6355,7 +6403,7 @@
    2.2.25.6. Web scan anonymou
    -
    {"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
    +
    {"jobId":"ad2715a7-ed7c-49c5-9b0d-ef7b80f276c1"}
    @@ -6519,7 +6567,7 @@
    2.2.25.7. Web sca
    -
    {"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
    +
    {"jobId":"f4542da9-59bb-41d2-a120-39a5f14e286a"}
    @@ -6678,7 +6726,7 @@
    2.
    -
    {"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
    +
    {"jobId":"361d942a-c955-42ba-baea-41bfccfe08e3"}
    @@ -6852,7 +6900,7 @@
    2.2.25.9. Web Scan login
    -
    {"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
    +
    {"jobId":"48c03859-a741-4e25-9ade-314a1583e45f"}
    @@ -7046,7 +7094,7 @@
    2.2.25.10. Web Sc
    -
    {"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
    +
    {"jobId":"046e0236-dd5f-4b07-8c57-3c45801b6c37"}
    @@ -7210,7 +7258,7 @@
    2.2.25.11. Web Scan headers v
    -
    {"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
    +
    {"jobId":"dd1b6f6b-7a47-408d-a919-0f06c9b43200"}
    @@ -7299,7 +7347,7 @@

    2.2.26. User uploads source code

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/d26d431f-532e-403d-8649-41840afaf02a/sourcecode?checkSum=checkSumValue' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -F 'file=PK  
           �<M                       test1.txtPK  ?
    @@ -7396,7 +7444,7 @@ 

    2.2.27. User approves sechub job

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/2599f5c1-4bb0-4ca2-9745-49411e356282/approve' -i -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -7548,7 +7596,7 @@

    2.2.28. User checks sechub job state

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/acd54ae3-6a88-4002-85f0-c7026639380a' -i -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -7557,7 +7605,7 @@

    2.2.28. User checks sechub job state

    -
    {"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    +
    {"jobUUID":"acd54ae3-6a88-4002-85f0-c7026639380a","owner":"CREATOR1","created":"","started":"2024-08-08T07:50:50.192109111","ended":"2024-08-08T08:05:50.192137775","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    @@ -7632,7 +7680,7 @@
    2.2.29.1. JSON variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/5e4d6d16-930d-4a32-9277-b178d2e0a033' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -7704,7 +7752,7 @@
    2.2.29.2. HTML variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/d2552d0b-e265-4673-ad90-e43e0f61a610' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/xhtml+xml'
    @@ -8262,7 +8310,7 @@

    2.2.33. User uploads binaries

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/897847f1-3e25-44cc-a4cf-67508dbd295a/binaries' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -H 'x-file-size: 10240' \
         -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
    @@ -8343,7 +8391,7 @@ 

    2.2.34. User downloads job rep

    -
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/28097c41-5d4d-4355-a509-ce22bdb69537' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -8882,11 +8930,6 @@

    2.2.40. Admin lists all running jobs

    String

    Timestamp since when job has been started

    - -

    [].configuration

    -

    String

    -

    Configuration used for this job

    -
    @@ -8906,7 +8949,7 @@

    2.2.40. Admin lists all running jobs

    -
    [{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
    +
    [{"jobUUID":"1761a2a9-37a9-48e1-98e5-63e3c2785c67","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-08-08T08:05:55.044912463"}]
    @@ -8990,7 +9033,7 @@

    2.2.41. Admin cancels a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/08eaf3b6-4d6e-4ad9-a7ac-7d88b4884d13' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9079,7 +9122,7 @@

    2.2.42. Admin restarts a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/98470906-23a7-4233-8228-4e213cb5b173' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9168,7 +9211,7 @@

    2.2.43. Admin restarts a job (hard)

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/c3a07e23-27f4-4a02-9313-c5e8ee6aa8f7' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9693,7 +9736,7 @@

    2.2.48. Admin creates an execut
    $ curl 'https://sechub.example.com/api/admin/config/executor' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"name":"PDS gosec config 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'
    + -d '{"name":"PDS gosec configuration 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'
    @@ -9701,7 +9744,7 @@

    2.2.48. Admin creates an execut

    -
    16d02d16-9d30-4b50-a079-0a992d5d1f8c
    +
    19a513e8-f664-43f3-ad0e-ec881c7762f7
    @@ -9785,7 +9828,7 @@

    2.2.49. Admin deletes executor con
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/22fb2f08-7b58-4d57-acbb-00f12619c6e1' -i -u 'user:secret' -X DELETE \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9900,7 +9943,7 @@

    2.2.50. Admin fetches executo
    -
    {"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    +
    {"executorConfigurations":[{"uuid":"7d298d34-1148-4803-975d-226862654d0b","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    @@ -10053,7 +10096,7 @@

    2.2.51. Admin fetches executor con
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/b60c002d-6882-41b7-9378-a1279f10fca9' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -10062,7 +10105,7 @@

    2.2.51. Admin fetches executor con
    -
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
    +
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"b60c002d-6882-41b7-9378-a1279f10fca9"}
    @@ -10210,7 +10253,7 @@

    2.2.52. Admin updates execut
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/70e7df3d-e2c9-4416-b64e-4d93d5500933' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
    @@ -10554,7 +10597,7 @@

    2.2.55. Admin updates execution profile
    $ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
    + -d '{"description":"changed description","configurations":[{"uuid":"44742c74-0b9b-46c2-afa7-1c0e8e7f3291","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

    @@ -10674,7 +10717,7 @@

    2.2.56. Admin fetches execution profile

    configurations[].enabled

    Boolean

    -

    enabled state of this config

    +

    enabled state of this configuration

    configurations[].productIdentifier

    @@ -10710,7 +10753,7 @@

    2.2.56. Admin fetches execution profile

    -
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
    +
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"ce989c37-b285-4975-a802-3930530d627b"}],"projectIds":["project-1","project-2"]}
    @@ -11150,7 +11193,219 @@

    2.2.61. Admin updates auto cle
    -

    2.2.62. Admin disables job processing in scheduler

    +

    2.2.62. Admin starts encryption rotation

    + +
    +

    Definition

    +
    + + ++++ + + + + + + + + + + + + + + + + + + + + +
    Table 129. General request information
    Value

    Path

    /api/admin/encryption/rotate

    Method

    POST

    Status code

    200 OK

    +
    +

    Request headers

    +
    + ++++ + + + + + + +
    NameDescription
    +
    +

    Example

    +
    +
    +

    Curl request

    +
    +
    +
    +
    $ curl 'https://sechub.example.com/api/admin/encryption/rotate' -i -u 'user:secret' -X POST \
    +    -H 'Content-Type: application/json;charset=UTF-8' \
    +    -d '{
    +  "algorithm" : "AES_GCM_SIV_256",
    +  "passwordSourceType" : "ENVIRONMENT_VARIABLE",
    +  "passwordSourceData" : "SECRET_1"
    +}'
    +
    +
    +
    +

    Response body
    +(empty)

    +
    +
    +
    +

    2.2.63. Admin fetches encryption status

    + +
    +

    Definition

    +
    + + ++++ + + + + + + + + + + + + + + + + + + + + +
    Table 130. General request information
    Value

    Path

    /api/admin/encryption/status

    Method

    GET

    Status code

    200 OK

    +
    +

    Request headers

    +
    + ++++ + + + + + + +
    NameDescription
    +
    +

    Response fields

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PathTypeDescription

    type

    String

    The type description of the json content

    domains[].name

    String

    Name of the domain which will provide this encryption data elements

    domains[].data[].id

    String

    Unique identifier

    domains[].data[].algorithm

    String

    Algorithm used for encryption

    domains[].data[].passwordSource.type

    String

    Type of password source. Can be [NONE, ENVIRONMENT_VARIABLE]

    domains[].data[].passwordSource.data

    String

    Data for password source. If type is ENVIRONMENT_VARIABLE then it is the the name of the environment variable.

    domains[].data[].usage

    Object

    Map containing information about usage of this encryption

    domains[].data[].usage.*

    Number

    Key value data

    domains[].data[].created

    String

    Creation timestamp

    domains[].data[].createdFrom

    String

    User id of admin who created the encryption entry

    +
    +

    Example

    +
    +
    +

    Curl request

    +
    +
    +
    +
    $ curl 'https://sechub.example.com/api/admin/encryption/status' -i -u 'user:secret' -X GET \
    +    -H 'Content-Type: application/json;charset=UTF-8'
    +
    +
    +
    +

    Response body

    +
    +
    +
    +
    {"type":"encryptionStatus","domains":[{"name":"schedule","data":[{"id":"1","algorithm":"AES_GCM_SIV_256","passwordSource":{"type":"ENVIRONMENT_VARIABLE","data":"SECRET_1"},"usage":{"job.state.cancel_requested":4,"job.state.canceled":5,"job.state.ended":6,"job.state.initializing":1,"job.state.ready_to_start":2,"job.state.started":3},"createdFrom":"admin-username","created":"2024-08-01T09:26:00"}]}]}
    +
    +
    +
    +
    +

    2.2.64. Admin disables job processing in scheduler

    @@ -11158,7 +11413,7 @@

    2.2.62. Admin disables job p

    Definition

    - +@@ -11217,7 +11472,7 @@

    2.2.62. Admin disables job p
    -

    2.2.63. Admin enables scheduler job processing

    +

    2.2.65. Admin enables scheduler job processing

    @@ -11225,7 +11480,7 @@

    2.2.63. Admin enables scheduler

    Definition

    Table 129. General request informationTable 131. General request information
    - +@@ -11284,7 +11539,7 @@

    2.2.63. Admin enables scheduler
    -

    2.2.64. Admin get scheduler status

    +

    2.2.66. Admin get scheduler status

    @@ -11292,7 +11547,7 @@

    2.2.64. Admin get scheduler status

    Definition

    Table 130. General request informationTable 132. General request information
    - +@@ -11351,7 +11606,7 @@

    2.2.64. Admin get scheduler status

    -

    2.2.65. Admin lists status information

    +

    2.2.67. Admin lists status information

    @@ -11359,7 +11614,7 @@

    2.2.65. Admin lists status informationDefinition

    Table 131. General request informationTable 133. General request information
    - +@@ -11451,7 +11706,7 @@

    2.2.65. Admin lists status information
    -

    2.2.66. Admin fetches server runtime data

    +

    2.2.68. Admin fetches server runtime data

    @@ -11459,7 +11714,7 @@

    2.2.66. Admin fetches server runtime

    Definition

    Table 132. General request informationTable 134. General request information
    - +@@ -11531,7 +11786,7 @@

    2.2.66. Admin fetches server runtime
    -

    2.2.67. User lists jobs for project

    +

    2.2.69. User lists jobs for project

    @@ -11539,7 +11794,7 @@

    2.2.67. User lists jobs for project

    Definition

    Table 133. General request informationTable 135. General request information
    - +@@ -11569,7 +11824,7 @@

    2.2.67. User lists jobs for project

    Path parameters

    Table 134. General request informationTable 136. General request information
    - +@@ -11693,7 +11948,7 @@

    2.2.67. User lists jobs for project

    -
    {"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    +
    {"page":0,"totalPages":1,"content":[{"jobUUID":"048f9167-5b7a-41fb-a235-8e3a7e996efa","executedBy":"User1","created":"2024-08-08T07:48:50.319019742","started":"2024-08-08T07:50:50.319048296","ended":"2024-08-08T08:05:50.319059717","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    @@ -12252,7 +12507,32 @@
    4.1.1.10. Configuration
    +
    +
    4.1.1.12. Other

    All other use cases

    @@ -12956,14 +13236,14 @@

    4.1.12. UC_011-User starts scan by client

    - + - + @@ -13186,17 +13466,17 @@

    4.1.16. UC_015-Admin assigns user to project

    - - + + - + - - + + - + @@ -13285,10 +13565,10 @@

    4.1.17. UC_016-Admin unassigns user from project

    - - + + - + @@ -13299,10 +13579,10 @@

    4.1.17. UC_016-Admin unassigns user from project

    - - + + - + @@ -15070,24 +15350,24 @@

    4.1.43. UC_042-Admin restarts a job (hard)

    - + - + - + - + - + - + @@ -16469,16 +16749,23 @@

    4.1.69. UC_068-Sechub schedule domain auto clean

    - + + + + + + + +
    Table 135. https://localhost:8081/api/project/{projectId}/jobsTable 137. https://localhost:8081/api/project/{projectId}/jobs

    4

    download job report and traffic light

    get job status

    SUPERADMIN, USER

    4

    4

    get job status

    download job report and traffic light

    SUPERADMIN, USER

    2

    Assign user

    SUPERADMIN

    Update schedule authorization parts

    2

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    2

    Update schedule authorization parts

    Assign user

    SUPERADMIN

    3

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    3

    2

    Unassign user

    SUPERADMIN

    Update authorization parts

    2

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    2

    2

    Update authorization parts

    Unassign user

    SUPERADMIN

    4

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    4

    3

    Inform sechub admins when job restart was canceled

    Try to restart job

    3

    When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

    3

    Try to restart job

    Try to rstart job (hard)

    3

    When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

    When job is found, a restart will be triggered. Existing batch jobs will be terminated

    3

    Try to rstart job (hard)

    Inform sechub admins when job restart was canceled

    4

    When job is found, a restart will be triggered. Existing batch jobs will be terminated

    4

    2

    Delete old data

    3

    deletes old job information

    3

    Schedule cipher pool data cleanup

    Removes cipher pool data entries from database which are no longer used by any job

    4.1.70. UC_069-User uploads binaries

    The binaries must be inside a valid tar file.

    @@ -16651,18 +16938,273 @@

    4.1.73. UC_072-Admin shows user details for emai +

    +
    +

    4.1.74. UC_073-Admin starts encryption rotation

    +
    +

    An administrator starts encryption rotation.

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Rest call

    SUPERADMIN

    2

    Admin triggers rotation of encryption via REST

    2

    Service call

    3

    Triggers rotation of encryption via domain message

    3

    Service call

    4

    Forces new cipher pool entry creation and triggers encryption service pool refresh

    4

    Service call

    5

    Creates new cipher pool entry in database in own transaction

    5

    Refresh encryption pool

    6

    Encryption pool is refreshed (necessary because pool changed before this method call)

    6

    Update encrypted data

    Encrypted data is updated (a direct pool refresh was triggered by admin action)

    +
    +
    +

    4.1.75. UC_074-Scheduler encryption pool refresh

    +
    +

    The scheduler refreshes its encryption pool data to handle new setup

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Init encryption pool

    3

    Encryption pool is created on startup

    1

    Encryption pool data refresh trigger

    2

    Scheduler instance will check if encryption pool is in sync with the database definitions. If not, the instance will try to create new encryption pool object and provide the new setup.

    2

    Refresh encryption pool

    3

    Encryption pool is refreshed (if necessary)

    3

    Update encrypted data

    Encrypted data is updated (all other cluster members)

    +
    +
    +

    4.1.76. UC_075-Scheduler rotates data encryption

    +
    +

    The scheduler checks for old encrypted data and will encrypt with latest cipher

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Update encrypted data

    Final update of encrypted job data. Will update all SecHub jobs having a pool id which is lower than latest from encryption pool

    +
    +
    +

    4.1.77. UC_076-Admin fetches encryption status

    +
    +

    An administrator fetches encryption status from all domains where encryption is used.

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Rest call

    SUPERADMIN

    1

    Admin fetches encryption status from domains via REST

    1

    Service call

    Services collects encryption status from domains via event bus

    +
    +
    +

    4.1.78. UC_077-SecHub does cleanup encryption

    +
    +

    Secub does an ecnryption cleanup.

    +
    +
    +

    Inside relevant domains the encryption situation will be checked and +old encryption setup, which is no longer necessary, will be dropped.

    +
    +
    +

    For example: When encryption was done with formerly via ENV variable +SECRET_1_AES_256 and the new one setup is using SECRET_2_AES_256 and +all jobs have been migrated to the new encryption, the cipher setup +using SECRET_1_AES_256 will become obsolete and will be automatically +removed. After the remove is done, there is no longer a need to +start the server with SECRET_1_AES_256, but only with SECRET_2_AES_256 …​

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Schedule cipher pool data cleanup

    Removes cipher pool data entries from database which are no longer used by any job

    -
    4.1.73.1. Overview
    +
    4.1.78.1. Overview
    -
    4.1.73.1.1. Diagram
    +
    4.1.78.1.1. Diagram
    -Sequence diagram of messaging overview +Sequence diagram of messaging overview
    - +
    -
    4.1.73.2. Message ANALYZE_SCAN_RESULTS_AVAILABLE
    +
    4.1.78.2. Message ANALYZE_SCAN_RESULTS_AVAILABLE
    Sequence diagram of messaging ANALYZE_SCAN_RESULTS_AVAILABLE @@ -16831,10 +17385,10 @@
    4.1.73.2. Message
    -
    4.1.73.3. Message AUTO_CLEANUP_CONFIGURATION_CHANGED
    +
    4.1.78.3. Message AUTO_CLEANUP_CONFIGURATION_CHANGED
    -Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED +Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED
    @@ -16860,7 +17414,7 @@
    4.1.73.3. Mess
    -
    4.1.73.4. Message BINARY_UPLOAD_DONE
    +
    4.1.78.4. Message BINARY_UPLOAD_DONE
    Sequence diagram of messaging BINARY_UPLOAD_DONE @@ -16868,15 +17422,23 @@
    4.1.73.4. Message BINARY_UPLOA
    -
    4.1.73.5. Message JOB_CANCELLATION_RUNNING
    +
    4.1.78.5. Message GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN
    -Sequence diagram of messaging JOB_CANCELLATION_RUNNING +Sequence diagram of messaging GET_ENCRYPTION_STATUS_SCHEDULE_DOMAIN
    -
    4.1.73.6. Message JOB_CREATED
    +
    4.1.78.6. Message JOB_CANCELLATION_RUNNING
    +
    +
    +Sequence diagram of messaging JOB_CANCELLATION_RUNNING +
    +
    +
    +
    +
    4.1.78.7. Message JOB_CREATED
    Sequence diagram of messaging JOB_CREATED @@ -16884,7 +17446,7 @@
    4.1.73.6. Message JOB_CREATED
    -
    4.1.73.7. Message JOB_DONE
    +
    4.1.78.8. Message JOB_DONE
    Sequence diagram of messaging JOB_DONE @@ -16916,7 +17478,7 @@
    4.1.73.7. Message JOB_DONE
    -
    4.1.73.8. Message JOB_EXECUTION_STARTING
    +
    4.1.78.9. Message JOB_EXECUTION_STARTING
    Sequence diagram of messaging JOB_EXECUTION_STARTING @@ -16948,7 +17510,7 @@
    4.1.73.8. Message JOB_EXEC
    -
    4.1.73.9. Message JOB_FAILED
    +
    4.1.78.10. Message JOB_FAILED
    Sequence diagram of messaging JOB_FAILED @@ -16956,7 +17518,7 @@
    4.1.73.9. Message JOB_FAILED
    -
    4.1.73.10. Message JOB_RESTART_CANCELED
    +
    4.1.78.11. Message JOB_RESTART_CANCELED
    Sequence diagram of messaging JOB_RESTART_CANCELED @@ -16988,7 +17550,7 @@
    4.1.73.10. Message JOB_RESTA
    -
    4.1.73.11. Message JOB_RESTART_TRIGGERED
    +
    4.1.78.12. Message JOB_RESTART_TRIGGERED
    Sequence diagram of messaging JOB_RESTART_TRIGGERED @@ -17020,7 +17582,7 @@
    4.1.73.11. Message JOB_REST
    -
    4.1.73.12. Message JOB_RESULTS_PURGED
    +
    4.1.78.13. Message JOB_RESULTS_PURGED
    Sequence diagram of messaging JOB_RESULTS_PURGED @@ -17049,7 +17611,7 @@
    4.1.73.12. Message JOB_RESULTS
    -
    4.1.73.13. Message JOB_RESULT_PURGE_DONE
    +
    4.1.78.14. Message JOB_RESULT_PURGE_DONE
    Sequence diagram of messaging JOB_RESULT_PURGE_DONE @@ -17057,7 +17619,7 @@
    4.1.73.13. Message JOB_RESU
    -
    4.1.73.14. Message JOB_RESULT_PURGE_FAILED
    +
    4.1.78.15. Message JOB_RESULT_PURGE_FAILED
    Sequence diagram of messaging JOB_RESULT_PURGE_FAILED @@ -17065,7 +17627,7 @@
    4.1.73.14. Message JOB_RE
    -
    4.1.73.15. Message JOB_STARTED
    +
    4.1.78.16. Message JOB_STARTED
    Sequence diagram of messaging JOB_STARTED @@ -17097,7 +17659,7 @@
    4.1.73.15. Message JOB_STARTED
    -
    4.1.73.16. Message MAPPING_CONFIGURATION_CHANGED
    +
    4.1.78.17. Message MAPPING_CONFIGURATION_CHANGED
    Sequence diagram of messaging MAPPING_CONFIGURATION_CHANGED @@ -17105,7 +17667,7 @@
    4.1.73.16. Message
    -
    4.1.73.17. Message PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE
    +
    4.1.78.18. Message PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE
    Sequence diagram of messaging PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE @@ -17113,15 +17675,15 @@
    4.1.73.17
    -
    4.1.73.18. Message PROJECT_ACCESS_LEVEL_CHANGED
    +
    4.1.78.19. Message PROJECT_ACCESS_LEVEL_CHANGED
    -Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED +Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED
    -
    4.1.73.19. Message PROJECT_CREATED
    +
    4.1.78.20. Message PROJECT_CREATED
    Sequence diagram of messaging PROJECT_CREATED @@ -17129,15 +17691,15 @@
    4.1.73.19. Message PROJECT_CREATE
    -
    4.1.73.20. Message PROJECT_DELETED
    +
    4.1.78.21. Message PROJECT_DELETED
    -Sequence diagram of messaging PROJECT_DELETED +Sequence diagram of messaging PROJECT_DELETED
    -
    4.1.73.21. Message PROJECT_OWNER_CHANGED
    +
    4.1.78.22. Message PROJECT_OWNER_CHANGED
    Sequence diagram of messaging PROJECT_OWNER_CHANGED @@ -17145,7 +17707,7 @@
    4.1.73.21. Message PROJECT_
    -
    4.1.73.22. Message PROJECT_WHITELIST_UPDATED
    +
    4.1.78.23. Message PROJECT_WHITELIST_UPDATED
    Sequence diagram of messaging PROJECT_WHITELIST_UPDATED @@ -17153,7 +17715,7 @@
    4.1.73.22. Message PROJ
    -
    4.1.73.23. Message REQUEST_JOB_CANCELLATION
    +
    4.1.78.24. Message REQUEST_JOB_CANCELLATION
    Sequence diagram of messaging REQUEST_JOB_CANCELLATION @@ -17161,7 +17723,7 @@
    4.1.73.23. Message REQUE
    -
    4.1.73.24. Message REQUEST_JOB_RESTART
    +
    4.1.78.25. Message REQUEST_JOB_RESTART
    Sequence diagram of messaging REQUEST_JOB_RESTART @@ -17190,7 +17752,7 @@
    4.1.73.24. Message REQUEST_JO
    -
    4.1.73.25. Message REQUEST_JOB_RESTART_HARD
    +
    4.1.78.26. Message REQUEST_JOB_RESTART_HARD
    Sequence diagram of messaging REQUEST_JOB_RESTART_HARD @@ -17219,7 +17781,7 @@
    4.1.73.25. Message REQUE
    -
    4.1.73.26. Message REQUEST_PURGE_JOB_RESULTS
    +
    4.1.78.27. Message REQUEST_PURGE_JOB_RESULTS
    Sequence diagram of messaging REQUEST_PURGE_JOB_RESULTS @@ -17248,7 +17810,7 @@
    4.1.73.26. Message REQU
    -
    4.1.73.27. Message REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING
    +
    4.1.78.28. Message REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING
    Sequence diagram of messaging REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING @@ -17277,7 +17839,7 @@
    4.1.73.2
    -
    4.1.73.28. Message REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING
    +
    4.1.78.29. Message REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING
    Sequence diagram of messaging REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING @@ -17306,7 +17868,7 @@
    4.1.73.28
    -
    4.1.73.29. Message REQUEST_SCHEDULER_JOB_STATUS
    +
    4.1.78.30. Message REQUEST_SCHEDULER_JOB_STATUS
    Sequence diagram of messaging REQUEST_SCHEDULER_JOB_STATUS @@ -17338,7 +17900,7 @@
    4.1.73.29. Message R
    -
    4.1.73.30. Message REQUEST_SCHEDULER_STATUS_UPDATE
    +
    4.1.78.31. Message REQUEST_SCHEDULER_STATUS_UPDATE
    Sequence diagram of messaging REQUEST_SCHEDULER_STATUS_UPDATE @@ -17346,10 +17908,10 @@
    4.1.73.30. Messag
    -
    4.1.73.31. Message REQUEST_USER_ROLE_RECALCULATION
    +
    4.1.78.32. Message REQUEST_USER_ROLE_RECALCULATION
    -Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION +Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION
    @@ -17381,7 +17943,15 @@
    4.1.73.31. Messag
    -
    4.1.73.32. Message SCAN_DONE
    +
    4.1.78.33. Message RESULT_ENCRYPTION_STATUS_SCHEDULE_DOMAIN
    +
    +
    +Sequence diagram of messaging RESULT_ENCRYPTION_STATUS_SCHEDULE_DOMAIN +
    +
    +
    +
    +
    4.1.78.34. Message SCAN_DONE
    Sequence diagram of messaging SCAN_DONE @@ -17389,7 +17959,7 @@
    4.1.73.32. Message SCAN_DONE
    -
    4.1.73.33. Message SCAN_FAILED
    +
    4.1.78.35. Message SCAN_FAILED
    Sequence diagram of messaging SCAN_FAILED @@ -17397,10 +17967,10 @@
    4.1.73.33. Message SCAN_FAILED
    -
    4.1.73.34. Message SCHEDULER_JOB_PROCESSING_DISABLED
    +
    4.1.78.36. Message SCHEDULER_JOB_PROCESSING_DISABLED
    -Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED
    @@ -17426,10 +17996,10 @@
    4.1.73.34. Mess
    -
    4.1.73.35. Message SCHEDULER_JOB_PROCESSING_ENABLED
    +
    4.1.78.37. Message SCHEDULER_JOB_PROCESSING_ENABLED
    -Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED
    @@ -17455,7 +18025,7 @@
    4.1.73.35. Messa
    -
    4.1.73.36. Message SCHEDULER_JOB_STATUS
    +
    4.1.78.38. Message SCHEDULER_JOB_STATUS
    Sequence diagram of messaging SCHEDULER_JOB_STATUS @@ -17463,7 +18033,7 @@
    4.1.73.36. Message SCHEDULER
    -
    4.1.73.37. Message SCHEDULER_STARTED
    +
    4.1.78.39. Message SCHEDULER_STARTED
    Sequence diagram of messaging SCHEDULER_STARTED @@ -17471,15 +18041,23 @@
    4.1.73.37. Message SCHEDULER_ST
    -
    4.1.73.38. Message SCHEDULER_STATUS_UPDATE
    +
    4.1.78.40. Message SCHEDULER_STATUS_UPDATE
    -Sequence diagram of messaging SCHEDULER_STATUS_UPDATE +Sequence diagram of messaging SCHEDULER_STATUS_UPDATE
    -
    4.1.73.39. Message SOURCE_UPLOAD_DONE
    +
    4.1.78.41. Message SCHEDULE_ENCRYPTION_POOL_INITIALIZED
    +
    +
    +Sequence diagram of messaging SCHEDULE_ENCRYPTION_POOL_INITIALIZED +
    +
    +
    +
    +
    4.1.78.42. Message SOURCE_UPLOAD_DONE
    Sequence diagram of messaging SOURCE_UPLOAD_DONE @@ -17487,10 +18065,18 @@
    4.1.73.39. Message SOURCE_UPLO
    -
    4.1.73.40. Message START_SCAN
    +
    4.1.78.43. Message START_ENCRYPTION_ROTATION
    +
    +
    +Sequence diagram of messaging START_ENCRYPTION_ROTATION +
    +
    +
    +
    +
    4.1.78.44. Message START_SCAN
    -Sequence diagram of messaging START_SCAN +Sequence diagram of messaging START_SCAN
    @@ -17519,7 +18105,7 @@
    4.1.73.40. Message START_SCAN
    -
    4.1.73.41. Message UNSUPPORTED_OPERATION
    +
    4.1.78.45. Message UNSUPPORTED_OPERATION
    Sequence diagram of messaging UNSUPPORTED_OPERATION @@ -17527,10 +18113,10 @@
    4.1.73.41. Message UNSUPPOR
    -
    4.1.73.42. Message USER_ADDED_TO_PROJECT
    +
    4.1.78.46. Message USER_ADDED_TO_PROJECT
    -Sequence diagram of messaging USER_ADDED_TO_PROJECT +Sequence diagram of messaging USER_ADDED_TO_PROJECT
    @@ -17556,7 +18142,7 @@
    4.1.73.42. Message USER_ADD
    -
    4.1.73.43. Message USER_API_TOKEN_CHANGED
    +
    4.1.78.47. Message USER_API_TOKEN_CHANGED
    Sequence diagram of messaging USER_API_TOKEN_CHANGED @@ -17564,7 +18150,7 @@
    4.1.73.43. Message USER_AP
    -
    4.1.73.44. Message USER_BECOMES_SUPERADMIN
    +
    4.1.78.48. Message USER_BECOMES_SUPERADMIN
    Sequence diagram of messaging USER_BECOMES_SUPERADMIN @@ -17572,7 +18158,7 @@
    4.1.73.44. Message USER_B
    -
    4.1.73.45. Message USER_CREATED
    +
    4.1.78.49. Message USER_CREATED
    Sequence diagram of messaging USER_CREATED @@ -17601,15 +18187,15 @@
    4.1.73.45. Message USER_CREATED
    -
    4.1.73.46. Message USER_DELETED
    +
    4.1.78.50. Message USER_DELETED
    -Sequence diagram of messaging USER_DELETED +Sequence diagram of messaging USER_DELETED
    -
    4.1.73.47. Message USER_EMAIL_ADDRESS_CHANGED
    +
    4.1.78.51. Message USER_EMAIL_ADDRESS_CHANGED
    Sequence diagram of messaging USER_EMAIL_ADDRESS_CHANGED @@ -17617,7 +18203,7 @@
    4.1.73.47. Message USE
    -
    4.1.73.48. Message USER_NEW_API_TOKEN_REQUESTED
    +
    4.1.78.52. Message USER_NEW_API_TOKEN_REQUESTED
    Sequence diagram of messaging USER_NEW_API_TOKEN_REQUESTED @@ -17646,7 +18232,7 @@
    4.1.73.48. Message U
    -
    4.1.73.49. Message USER_NO_LONGER_SUPERADMIN
    +
    4.1.78.53. Message USER_NO_LONGER_SUPERADMIN
    Sequence diagram of messaging USER_NO_LONGER_SUPERADMIN @@ -17654,10 +18240,10 @@
    4.1.73.49. Message USER
    -
    4.1.73.50. Message USER_REMOVED_FROM_PROJECT
    +
    4.1.78.54. Message USER_REMOVED_FROM_PROJECT
    -Sequence diagram of messaging USER_REMOVED_FROM_PROJECT +Sequence diagram of messaging USER_REMOVED_FROM_PROJECT
    @@ -17683,7 +18269,7 @@
    4.1.73.50. Message USER
    -
    4.1.73.51. Message USER_ROLES_CHANGED
    +
    4.1.78.55. Message USER_ROLES_CHANGED
    Sequence diagram of messaging USER_ROLES_CHANGED @@ -17718,7 +18304,7 @@
    4.1.73.51. Message USER_ROLES_
    -
    4.1.73.52. Message USER_SIGNUP_REQUESTED
    +
    4.1.78.56. Message USER_SIGNUP_REQUESTED
    Sequence diagram of messaging USER_SIGNUP_REQUESTED @@ -17753,7 +18339,7 @@
    4.1.73.52. Message USER_SIG
    diff --git a/docs/latest/sechub-techdoc.html b/docs/latest/sechub-techdoc.html index 0920ab2668..31cb32670f 100644 --- a/docs/latest/sechub-techdoc.html +++ b/docs/latest/sechub-techdoc.html @@ -531,7 +531,7 @@
    2.1.3.2. Others
    @@ -1651,6 +1700,40 @@
    2.1.3.2.2. Create localhost serve

    This will generate a self signed server certificate for localhost.

    +
    +
    2.1.3.2.3. Add Sechub Java Code Formatter (IntelliJ)
    +
    +
      +
    1. +

      Download the formatter xml file here and unzip it.

      +
    2. +
    3. +

      Open Java Formatter page in preferences (File→Settings). Then press the import button and select the former unpacked xml file.

      +
      +
      +intelliJ java formatter import +
      +
      +
    4. +
    5. +

      Ensure SecHub is your active profile. Select SecHub as active profile, then press apply and close.

      +
      +
      +intelliJ java formatter activate +
      +
      +
    6. +
    7. +

      Before pushing your code please check your java format by executing spotless check.

      +
      +
      +
      ./gradlew clean spotlessCheck
      +
      +
      +
    8. +
    +
    +
    @@ -2096,7 +2179,7 @@
    3.1.1.1.2. PROD
    3.1.1.1.3. DEV
    -Diagram +Diagram
    Figure 3. Spring profile dev and its explicit/implicit included parts
    @@ -2240,7 +2323,7 @@

    3.1.3. General configuration

    - +
    @@ -2268,7 +2351,7 @@

    3.1.3. General configuration

    Table 1. Scope 'administration'
    - +
    @@ -2290,7 +2373,7 @@

    3.1.3. General configuration

    Table 2. Scope 'anonymous'
    - +
    @@ -2322,7 +2405,7 @@

    3.1.3. General configuration

    Table 3. Scope 'checkmarx'
    - +
    @@ -2354,7 +2437,7 @@

    3.1.3. General configuration

    Table 4. Scope 'initial'
    - +
    @@ -2376,7 +2459,7 @@

    3.1.3. General configuration

    Table 5. Scope 'migration'
    - +
    @@ -2398,7 +2481,7 @@

    3.1.3. General configuration

    Table 6. Scope 'mock'
    - +
    @@ -2475,7 +2558,7 @@

    3.1.3. General configuration

    Table 7. Scope 'nessus'
    - +
    @@ -2547,7 +2630,7 @@

    3.1.3. General configuration

    Table 8. Scope 'netsparker'
    - +
    @@ -2569,7 +2652,7 @@

    3.1.3. General configuration

    Table 9. Scope 'new'
    - +
    @@ -2601,7 +2684,7 @@

    3.1.3. General configuration

    Table 10. Scope 'notification'
    - +
    @@ -2646,9 +2729,19 @@

    3.1.3. General configuration

    + + + + + + + + + +
    Table 11. Scope 'p'

    240

    Time in minutes when adapter result check will automatically time out and adapter stops execution automatically. When -1 timeout is 7200 minutes

    sechub.adapter.pds.resilience.encryption-out-of-sync.retry.max

    3

    Amount of retries done when a PDS encryption out of sync problem happens

    sechub.adapter.pds.resilience.encryption-out-of-sync.retry.wait

    2000

    Time to wait until retry is done when a PDS encryption out of sync problem happens

    - +
    @@ -2690,7 +2783,7 @@

    3.1.3. General configuration

    Table 12. Scope 's'
    - +
    @@ -2727,7 +2820,7 @@

    3.1.3. General configuration

    Table 13. Scope 'scan'
    - +
    @@ -2745,7 +2838,7 @@

    3.1.3. General configuration

    - + @@ -2760,7 +2853,7 @@

    3.1.3. General configuration

    - + @@ -2789,7 +2882,7 @@

    3.1.3. General configuration

    Table 14. Scope 'scheduler'

    sechub.config.trigger.healthcheck.enabled

    true

    When enabled each trigger will do an healtching by monitoring service. If system has too much CPU load or uses too much memory, the trigger will not execute until memory and CPU load is at normal level!

    When enabled each trigger will do an health check by monitoring service. If system has too much CPU load or uses too much memory, the trigger will not execute until memory and CPU load is at normal level!

    sechub.config.trigger.nextjob.delay

    sechub.config.trigger.nextjob.maxwaitretry

    300

    When retry mechanism is enabled by sechub.config.trigger.nextjob.retries, and a retry is necessary, this value is used to define the maximum time period in millis which will be waited before retry. Why max value? Because cluster instances seems to be created often on exact same time by kubernetes. So having here a max value will result in a randomized wait time so cluster members will do fetch operations time shifted and automatically reduce collisions!

    When retry mechanism is enabled by sechub.config.trigger.nextjob.retries, and a retry is necessary, this value is used to define the maximum time period in millis which will be waited before retry. Why max value? Because cluster instances seems to be created often on exact same time by kubernetes. So having here a max value will result in a randomized wait time: means cluster members will do fetch operations time shifted and this automatically reduces collisions!

    sechub.config.trigger.nextjob.retries

    - +
    @@ -2845,13 +2938,18 @@

    3.1.3. General configuration

    + + + + +
    Table 15. Scope 'sec'

    Maximum limit for job information list entries per page

    sechub.schedule.encryption.refresh.accept-outdated.milliseconds

    1800000

    The maximum amount of milliseconds an outdated encryption pool is still accepted in refresh phase

    sechub.server.baseurl

    Base url of SecHub server - e.g. https://sechub.example.org

    - +
    @@ -2873,7 +2971,7 @@

    3.1.3. General configuration

    Table 16. Scope 'security'
    - +
    @@ -2895,7 +2993,7 @@

    3.1.3. General configuration

    Table 17. Scope 'server'
    - +
    @@ -2982,7 +3080,7 @@

    3.1.3. General configuration

    Table 18. Scope 'storage'
    - +
    @@ -3014,7 +3112,7 @@

    3.1.3. General configuration

    Table 19. Scope 'system'
    - +
    @@ -3129,6 +3227,11 @@

    3.1.4. Scheduling definitions

    + + + + +
    Table 20. Scope 'target'

    initial delay:${sechub.config.trigger.nextjob.initialdelay:5000} fixed delay:${sechub.config.trigger.nextjob.delay:10000}

    Job scheduling is triggered by a cron job operation - default is 10 seconds to delay after last execution. For initial delay 5000 milliseconds are defined. It can be configured differently. This is useful when you need to startup a cluster. Simply change the initial delay values in to allow the cluster to startup.

    Fixed

    initial delay:${sechub.schedule.encryption.refresh.initialdelay:5000} fixed delay:${sechub.schedule.encryption.refresh.delay:300000}

    Defines the initial and also the fixed delay for the refresh interval. These values are also used for calculation of remaining run time of outdated encrytion pools (when refresh fails)

    @@ -3150,7 +3253,7 @@

    3.1.5. Configuration properties for mocked adapters

    - +
    @@ -3172,7 +3275,7 @@

    3.1.5. Configuration properties for mocked adapters

    Table 24. Scope 'abstract'
    - +
    @@ -5160,7 +5263,7 @@
    8.2.4.1. Domain messaging over
    -Sequence diagram of messaging +Sequence diagram of messaging
    @@ -7563,6 +7666,9 @@

    10.6. Auto cleanup

    To prevent full hard drives there is an option to automatically remove old data.

    +
    +

    It also cleans up old encryption settings when it comes to encryption rotation.

    +
    Table 25. Scope 'mocked'
    @@ -7817,7 +7923,7 @@
    10.9.2.1. Overview
    10.9.2.1.1. Diagram
    -Sequence diagram of messaging overview +Sequence diagram of messaging overview
    @@ -7835,6 +7941,9 @@ - + - + - + - +

    4

    download job report and traffic light

    get job status

    SUPERADMIN, USER

    4

    This step is defined at method getScanSecHubReportAsJSON in class `com.mercedesbenz.sechub.domain.scan.report.ScanReportRestController`

    This step is defined at method getJobStatus in class `com.mercedesbenz.sechub.domain.schedule.SchedulerRestController`

    4

    get job status

    download job report and traffic light

    SUPERADMIN, USER

    This step is defined at method getJobStatus in class `com.mercedesbenz.sechub.domain.schedule.SchedulerRestController`

    This step is defined at method getScanSecHubReportAsJSON in class `com.mercedesbenz.sechub.domain.scan.report.ScanReportRestController`

    @@ -10311,18 +10486,18 @@

    10.10.16. UC_015-Admin assigns user to project

    2

    -

    Assign user

    -

    SUPERADMIN

    +

    Update schedule authorization parts

    +

    2

    -

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    -

    This step is defined at method assignUserToProject in class `com.mercedesbenz.sechub.domain.administration.project.ProjectAssignUserService`

    +

    This step is defined at method grantUserAccessToProject in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleGrantUserAccessToProjectService`

    2

    -

    Update schedule authorization parts

    - +

    Assign user

    +

    SUPERADMIN

    3

    -

    This step is defined at method grantUserAccessToProject in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleGrantUserAccessToProjectService`

    +

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    +

    This step is defined at method assignUserToProject in class `com.mercedesbenz.sechub.domain.administration.project.ProjectAssignUserService`

    3

    @@ -10422,11 +10597,10 @@

    10.10.17. UC_016-Admin unassigns user from proje

    2

    -

    Unassign user

    -

    SUPERADMIN

    +

    Update authorization parts

    +

    2

    -

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    -

    This step is defined at method unassignUserFromProject in class `com.mercedesbenz.sechub.domain.administration.project.ProjectUnassignUserService`

    +

    This step is defined at method revokeUserAccessFromProject in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleRevokeUserAccessFromProjectService`

    2

    @@ -10437,10 +10611,11 @@

    10.10.17. UC_016-Admin unassigns user from proje

    2

    -

    Update authorization parts

    - +

    Unassign user

    +

    SUPERADMIN

    4

    -

    This step is defined at method revokeUserAccessFromProject in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleRevokeUserAccessFromProjectService`

    +

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    +

    This step is defined at method unassignUserFromProject in class `com.mercedesbenz.sechub.domain.administration.project.ProjectUnassignUserService`

    4

    @@ -10579,14 +10754,14 @@

    10.10.19. UC_018-Admin deletes a user

    revoke user from schedule access

    3

    -

    This step is defined at method revokeUserAccess in class `com.mercedesbenz.sechub.domain.scan.access.ScanRevokeUserAccessAtAllService`

    +

    This step is defined at method revokeUserAccess in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleRevokeUserAccessAtAllService`

    3

    revoke user from schedule access

    4

    -

    This step is defined at method revokeUserAccess in class `com.mercedesbenz.sechub.domain.schedule.access.ScheduleRevokeUserAccessAtAllService`

    +

    This step is defined at method revokeUserAccess in class `com.mercedesbenz.sechub.domain.scan.access.ScanRevokeUserAccessAtAllService`

    4

    @@ -12491,13 +12666,6 @@

    10.10.43. UC_042-Admin restarts a job (hard)

    3

    -

    Inform sechub admins when job restart was canceled

    - -

    3

    -

    This step is defined at method notify in class `com.mercedesbenz.sechub.domain.notification.superadmin.InformAdminsThatJobRestartWasCanceledService`

    - - -

    3

    Try to restart job

    3

    @@ -12508,11 +12676,18 @@

    10.10.43. UC_042-Admin restarts a job (hard)

    3

    Try to rstart job (hard)

    -

    4

    +

    3

    When job is found, a restart will be triggered. Existing batch jobs will be terminated

    This step is defined at method restartJobHard in class `com.mercedesbenz.sechub.domain.schedule.SchedulerRestartJobService`

    +

    3

    +

    Inform sechub admins when job restart was canceled

    + +

    4

    +

    This step is defined at method notify in class `com.mercedesbenz.sechub.domain.notification.superadmin.InformAdminsThatJobRestartWasCanceledService`

    + +

    4

    Inform sechub admins when job has been restarted

    @@ -12580,7 +12755,7 @@

    10.10.44. UC_043-Admin receives notification abo

    Inform sechub admins that new scheduler job has been started

    -

    This step is defined at method notify in class `com.mercedesbenz.sechub.domain.notification.superadmin.InformAdminsThatNewSchedulerInstanceHasBeenStarted`

    +

    This step is defined at method notify in class `com.mercedesbenz.sechub.domain.notification.superadmin.InformAdminsThatNewSchedulerInstanceHasBeenStartedNotificationService`

    @@ -13002,7 +13177,7 @@

    10.10.52. UC_051-Admin updates executor configur

    SUPERADMIN

    2

    Service updates existing executor configuration

    -

    This step is defined at method updateProductExecutorSetup in class `com.mercedesbenz.sechub.domain.scan.product.config.UpdateProductExecutorConfigService`

    +

    This step is defined at method updateExecutionProfile in class `com.mercedesbenz.sechub.domain.scan.product.config.UpdateProductExecutionProfileService`

    2

    @@ -13010,7 +13185,7 @@

    10.10.52. UC_051-Admin updates executor configur

    SUPERADMIN

    Service updates existing executor configuration

    -

    This step is defined at method updateExecutionProfile in class `com.mercedesbenz.sechub.domain.scan.product.config.UpdateProductExecutionProfileService`

    +

    This step is defined at method updateProductExecutorSetup in class `com.mercedesbenz.sechub.domain.scan.product.config.UpdateProductExecutorConfigService`

    @@ -14165,17 +14340,25 @@

    10.10.69. UC_068-Sechub schedule domain auto cle

    2

    Delete old data

    - +

    3

    deletes old job information

    This step is defined at method cleanup in class `com.mercedesbenz.sechub.domain.schedule.autocleanup.ScheduleAutoCleanupService`

    + +

    3

    +

    Schedule cipher pool data cleanup

    + + +

    Removes cipher pool data entries from database which are no longer used by any job

    +

    This step is defined at method cleanupCipherPoolDataIfNecessaryAndPossible in class `com.mercedesbenz.sechub.domain.schedule.encryption.ScheduleCipherPoolCleanupService`

    +

    10.10.70. UC_069-User uploads binaries

    The binaries must be inside a valid tar file.

    @@ -14387,84 +14570,389 @@

    10.10.73. UC_072-Admin shows user details for em -
    -

    -
    -
    -
    -
    -

    11. API

    -
    -
    -

    11.1. Rest API documentation

    -
    - - - - - -
    - - -The complete documentation about REST API is generated. If you want to change content, please search for - @UseCaseRestDoc references in source code and make necessary changes inside code! -
    -

    11.1.1. Overview

    -
    -
    11.1.1.1. Anonymous
    +

    10.10.74. UC_073-Admin starts encryption rotation

    -

    All these usecases handling anonymous access.

    +

    An administrator starts encryption rotation.

    -
    - +
    +

    Technical information

    +
    +

    You will find relevant code parts by searching for references of @com.mercedesbenz.sechub.sharedkernel.usecases.encryption.UseCaseAdminStartsEncryptionRotation

    -
    -
    11.1.1.2. User administration
    -

    Usecases handling administration of users

    +

    Steps

    -
    -
    +
    +

    10.10.75. UC_074-Scheduler encryption pool refresh

    +
    +

    The scheduler refreshes its encryption pool data to handle new setup

    +
    +
    +

    Technical information

    +
    +
    +

    You will find relevant code parts by searching for references of @com.mercedesbenz.sechub.sharedkernel.usecases.encryption.UseCaseScheduleEncryptionPoolRefresh

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Init encryption pool

    3

    Encryption pool is created on startup

    +

    This step is defined at method applicationStarted in class `com.mercedesbenz.sechub.domain.schedule.encryption.ScheduleEncryptionService`

    1

    Encryption pool data refresh trigger

    2

    Scheduler instance will check if encryption pool is in sync with the database definitions. If not, the instance will try to create new encryption pool object and provide the new setup.

    +

    This step is defined at method triggerEncryptionSetupRefresh in class `com.mercedesbenz.sechub.domain.schedule.encryption.ScheduleRefreshEncryptionServiceSetupTriggerService`

    2

    Refresh encryption pool

    3

    Encryption pool is refreshed (if necessary)

    +

    This step is defined at method refreshEncryptionPoolAndLatestPoolIdIfNecessary in class `com.mercedesbenz.sechub.domain.schedule.encryption.ScheduleEncryptionService`

    3

    Update encrypted data

    Encrypted data is updated (all other cluster members)

    +

    This step is defined at method updateEncryptedDataIfNecessary in class `com.mercedesbenz.sechub.domain.schedule.job.ScheduleSecHubJobEncryptionUpdateService`

    +
    +
    +

    10.10.76. UC_075-Scheduler rotates data encryption

    +
    +

    The scheduler checks for old encrypted data and will encrypt with latest cipher

    +
    +
    +

    Technical information

    +
    +
    +

    You will find relevant code parts by searching for references of @com.mercedesbenz.sechub.sharedkernel.usecases.encryption.UseCaseScheduleRotateDataEncryption

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Update encrypted data

    Final update of encrypted job data. Will update all SecHub jobs having a pool id which is lower than latest from encryption pool

    +

    This step is defined at method updateEncryptedDataIfNecessary in class `com.mercedesbenz.sechub.domain.schedule.job.ScheduleSecHubJobEncryptionUpdateService`

    +
    +
    +

    10.10.77. UC_076-Admin fetches encryption status

    +
    +

    An administrator fetches encryption status from all domains where encryption is used.

    +
    +
    +

    Technical information

    +
    +
    +

    You will find relevant code parts by searching for references of @com.mercedesbenz.sechub.sharedkernel.usecases.encryption.UseCaseAdminFetchesEncryptionStatus

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Rest call

    SUPERADMIN

    1

    Admin fetches encryption status from domains via REST

    +

    This step is defined at method fetchEncryptionStatus in class `com.mercedesbenz.sechub.domain.administration.encryption.EncryptionAdministrationRestController`

    1

    Service call

    Services collects encryption status from domains via event bus

    +

    This step is defined at method fetchStatus in class `com.mercedesbenz.sechub.domain.administration.encryption.AdministrationEncryptionStatusService`

    + +
    +
    +

    10.10.78. UC_077-SecHub does cleanup encryption

    +
    +

    Secub does an ecnryption cleanup.

    +
    +
    +

    Inside relevant domains the encryption situation will be checked and +old encryption setup, which is no longer necessary, will be dropped.

    +
    +
    +

    For example: When encryption was done with formerly via ENV variable +SECRET_1_AES_256 and the new one setup is using SECRET_2_AES_256 and +all jobs have been migrated to the new encryption, the cipher setup +using SECRET_1_AES_256 will become obsolete and will be automatically +removed. After the remove is done, there is no longer a need to +start the server with SECRET_1_AES_256, but only with SECRET_2_AES_256 …​

    +
    +
    +

    Technical information

    +
    +
    +

    You will find relevant code parts by searching for references of @com.mercedesbenz.sechub.sharedkernel.usecases.encryption.UseCaseEncryptionCleanup

    +
    +
    +

    Steps

    +
    + +++++++ + + + + + + + + + + + + + + + + + + +
    NrTitleRole(s)NextDescription

    1

    Schedule cipher pool data cleanup

    Removes cipher pool data entries from database which are no longer used by any job

    +

    This step is defined at method cleanupCipherPoolDataIfNecessaryAndPossible in class `com.mercedesbenz.sechub.domain.schedule.encryption.ScheduleCipherPoolCleanupService`

    +
    +
    +
    +
    +
    +
    +

    11. API

    +
    +
    +

    11.1. Rest API documentation

    +
    + + + + + +
    + + +The complete documentation about REST API is generated. If you want to change content, please search for + @UseCaseRestDoc references in source code and make necessary changes inside code! +
    +
    +
    +

    11.1.1. Overview

    +
    +
    11.1.1.1. Anonymous
    +
    +

    All these usecases handling anonymous access.

    +
    + +
    +
    -
    11.1.1.10. Other
    +
    11.1.1.10. Encryption
    +
    +

    Usecases for encryption parts

    +
    + +
    +
    +
    11.1.1.11. Other

    All other use cases

    @@ -14720,7 +15224,7 @@

    11.1.2. Check if the server is

    REST API for usecase UC_039-Check if the server is alive and running.

    -
    11.1.2.1. GET variant
    +
    11.1.2.1. HEAD variant

    Definition

    @@ -14743,7 +15247,7 @@
    11.1.2.1. GET variant

    Method

    -

    GET

    +

    HEAD

    Status code

    @@ -14759,7 +15263,7 @@
    11.1.2.1. GET variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    @@ -14768,7 +15272,7 @@
    11.1.2.1. GET variant
    -
    11.1.2.2. HEAD variant
    +
    11.1.2.2. GET variant

    Definition

    @@ -14791,7 +15295,7 @@
    11.1.2.2. HEAD variant

    Method

    -

    HEAD

    +

    GET

    Status code

    @@ -14807,7 +15311,7 @@
    11.1.2.2. HEAD variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    @@ -15522,7 +16026,7 @@

    11.1.9. Admin downloads al

    -
    $ curl 'https://sechub.example.com/api/admin/scan/download/65fc6925-ffcb-4f71-8468-01b1a5b5a65d' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/scan/download/50a3de31-e207-4ac3-a6da-0f46e478d7ff' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -16687,7 +17191,7 @@

    11.1.20. Admin shows scan logs for pr

    -
    [{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
    +
    [{"sechubJobUUID":"fc559da4-0535-46c7-941f-1a76d09a2ca1","executedBy":"spartakus","started":"2024-08-07T08:05:51.724664496","ended":"2024-08-08T08:05:51.724691357","status":"OK"}]
    @@ -17297,7 +17801,7 @@
    11.1.25.1. Code Scan variant
    -
    {"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
    +
    {"jobId":"e80bc191-1fab-4e51-9c53-44b956b37b88"}
    @@ -17476,7 +17980,7 @@
    11.1.25.2. Code S
    -
    {"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
    +
    {"jobId":"278d510e-e7b2-4d07-b593-7fa77b54eef8"}
    @@ -17635,7 +18139,7 @@
    11.1.25.3. Secret scan variant
    -
    {"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
    +
    {"jobId":"07c86999-76c1-4a12-90b7-4b97a7632579"}
    @@ -17794,7 +18298,7 @@
    11.1.25.4. License scan variant
    -
    {"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
    +
    {"jobId":"18b74d14-fd93-4beb-9ed0-623ba27171df"}
    @@ -17948,7 +18452,7 @@
    11.1.25.5. Infrastructure
    -
    {"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
    +
    {"jobId":"a47a9992-6b75-46db-a77a-5590b115e8e4"}
    @@ -18117,7 +18621,7 @@
    11.1.25.6. Web scan anonymo
    -
    {"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
    +
    {"jobId":"ad2715a7-ed7c-49c5-9b0d-ef7b80f276c1"}
    @@ -18281,7 +18785,7 @@
    11.1.25.7. Web sc
    -
    {"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
    +
    {"jobId":"f4542da9-59bb-41d2-a120-39a5f14e286a"}
    @@ -18440,7 +18944,7 @@
    11
    -
    {"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
    +
    {"jobId":"361d942a-c955-42ba-baea-41bfccfe08e3"}
    @@ -18614,7 +19118,7 @@
    11.1.25.9. Web Scan login
    -
    {"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
    +
    {"jobId":"48c03859-a741-4e25-9ade-314a1583e45f"}
    @@ -18808,7 +19312,7 @@
    11.1.25.10. Web S
    -
    {"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
    +
    {"jobId":"046e0236-dd5f-4b07-8c57-3c45801b6c37"}
    @@ -18972,7 +19476,7 @@
    11.1.25.11. Web Scan headers
    -
    {"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
    +
    {"jobId":"dd1b6f6b-7a47-408d-a919-0f06c9b43200"}
    @@ -19061,7 +19565,7 @@

    11.1.26. User uploads source code

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/d26d431f-532e-403d-8649-41840afaf02a/sourcecode?checkSum=checkSumValue' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -F 'file=PK  
           �<M                       test1.txtPK  ?
    @@ -19158,7 +19662,7 @@ 

    11.1.27. User approves sechub job

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/2599f5c1-4bb0-4ca2-9745-49411e356282/approve' -i -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -19310,7 +19814,7 @@

    11.1.28. User checks sechub job state

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/acd54ae3-6a88-4002-85f0-c7026639380a' -i -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -19319,7 +19823,7 @@

    11.1.28. User checks sechub job state

    -
    {"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    +
    {"jobUUID":"acd54ae3-6a88-4002-85f0-c7026639380a","owner":"CREATOR1","created":"","started":"2024-08-08T07:50:50.192109111","ended":"2024-08-08T08:05:50.192137775","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    @@ -19394,7 +19898,7 @@
    11.1.29.1. JSON variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/5e4d6d16-930d-4a32-9277-b178d2e0a033' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -19466,7 +19970,7 @@
    11.1.29.2. HTML variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/d2552d0b-e265-4673-ad90-e43e0f61a610' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/xhtml+xml'
    @@ -20024,7 +20528,7 @@

    11.1.33. User uploads binaries

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/897847f1-3e25-44cc-a4cf-67508dbd295a/binaries' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -H 'x-file-size: 10240' \
         -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
    @@ -20105,7 +20609,7 @@ 

    11.1.34. User downloads job re

    -
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/28097c41-5d4d-4355-a509-ce22bdb69537' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -20644,11 +21148,6 @@

    11.1.40. Admin lists all running jobs

    String

    Timestamp since when job has been started

    - -

    [].configuration

    -

    String

    -

    Configuration used for this job

    -
    @@ -20668,7 +21167,7 @@

    11.1.40. Admin lists all running jobs

    -
    [{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
    +
    [{"jobUUID":"1761a2a9-37a9-48e1-98e5-63e3c2785c67","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-08-08T08:05:55.044912463"}]
    @@ -20752,7 +21251,7 @@

    11.1.41. Admin cancels a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/08eaf3b6-4d6e-4ad9-a7ac-7d88b4884d13' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -20841,7 +21340,7 @@

    11.1.42. Admin restarts a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/98470906-23a7-4233-8228-4e213cb5b173' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -20930,7 +21429,7 @@

    11.1.43. Admin restarts a job (hard)

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/c3a07e23-27f4-4a02-9313-c5e8ee6aa8f7' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21455,7 +21954,7 @@

    11.1.48. Admin creates an execu
    $ curl 'https://sechub.example.com/api/admin/config/executor' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"name":"PDS gosec config 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'
    + -d '{"name":"PDS gosec configuration 1","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productXYZ.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"},{"key":"example.key2","value":"Another value"}]}}'

    @@ -21463,7 +21962,7 @@

    11.1.48. Admin creates an execu

    -
    16d02d16-9d30-4b50-a079-0a992d5d1f8c
    +
    19a513e8-f664-43f3-ad0e-ec881c7762f7
    @@ -21547,7 +22046,7 @@

    11.1.49. Admin deletes executor co

    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/22fb2f08-7b58-4d57-acbb-00f12619c6e1' -i -u 'user:secret' -X DELETE \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21662,7 +22161,7 @@

    11.1.50. Admin fetches execut

    -
    {"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    +
    {"executorConfigurations":[{"uuid":"7d298d34-1148-4803-975d-226862654d0b","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    @@ -21815,7 +22314,7 @@

    11.1.51. Admin fetches executor co

    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/b60c002d-6882-41b7-9378-a1279f10fca9' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21824,7 +22323,7 @@

    11.1.51. Admin fetches executor co

    -
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
    +
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"b60c002d-6882-41b7-9378-a1279f10fca9"}
    @@ -21972,7 +22471,7 @@

    11.1.52. Admin updates execu

    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/70e7df3d-e2c9-4416-b64e-4d93d5500933' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
    @@ -22316,7 +22815,7 @@

    11.1.55. Admin updates execution profil
    $ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
    + -d '{"description":"changed description","configurations":[{"uuid":"44742c74-0b9b-46c2-afa7-1c0e8e7f3291","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

    @@ -22436,7 +22935,7 @@

    11.1.56. Admin fetches execution profil

    configurations[].enabled

    Boolean

    -

    enabled state of this config

    +

    enabled state of this configuration

    configurations[].productIdentifier

    @@ -22472,7 +22971,7 @@

    11.1.56. Admin fetches execution profil

    -
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
    +
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"ce989c37-b285-4975-a802-3930530d627b"}],"projectIds":["project-1","project-2"]}
    @@ -22912,7 +23411,219 @@

    11.1.61. Admin updates auto cl

    -

    11.1.62. Admin disables job processing in scheduler

    +

    11.1.62. Admin starts encryption rotation

    + +
    +

    Definition

    +
    + + ++++ + + + + + + + + + + + + + + + + + + + + +
    Table 155. General request information
    Value

    Path

    /api/admin/encryption/rotate

    Method

    POST

    Status code

    200 OK

    +
    +

    Request headers

    +
    + ++++ + + + + + + +
    NameDescription
    +
    +

    Example

    +
    +
    +

    Curl request

    +
    +
    +
    +
    $ curl 'https://sechub.example.com/api/admin/encryption/rotate' -i -u 'user:secret' -X POST \
    +    -H 'Content-Type: application/json;charset=UTF-8' \
    +    -d '{
    +  "algorithm" : "AES_GCM_SIV_256",
    +  "passwordSourceType" : "ENVIRONMENT_VARIABLE",
    +  "passwordSourceData" : "SECRET_1"
    +}'
    +
    +
    +
    +

    Response body
    +(empty)

    +
    +
    +
    +

    11.1.63. Admin fetches encryption status

    + +
    +

    Definition

    +
    + + ++++ + + + + + + + + + + + + + + + + + + + + +
    Table 156. General request information
    Value

    Path

    /api/admin/encryption/status

    Method

    GET

    Status code

    200 OK

    +
    +

    Request headers

    +
    + ++++ + + + + + + +
    NameDescription
    +
    +

    Response fields

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PathTypeDescription

    type

    String

    The type description of the json content

    domains[].name

    String

    Name of the domain which will provide this encryption data elements

    domains[].data[].id

    String

    Unique identifier

    domains[].data[].algorithm

    String

    Algorithm used for encryption

    domains[].data[].passwordSource.type

    String

    Type of password source. Can be [NONE, ENVIRONMENT_VARIABLE]

    domains[].data[].passwordSource.data

    String

    Data for password source. If type is ENVIRONMENT_VARIABLE then it is the the name of the environment variable.

    domains[].data[].usage

    Object

    Map containing information about usage of this encryption

    domains[].data[].usage.*

    Number

    Key value data

    domains[].data[].created

    String

    Creation timestamp

    domains[].data[].createdFrom

    String

    User id of admin who created the encryption entry

    +
    +

    Example

    +
    +
    +

    Curl request

    +
    +
    +
    +
    $ curl 'https://sechub.example.com/api/admin/encryption/status' -i -u 'user:secret' -X GET \
    +    -H 'Content-Type: application/json;charset=UTF-8'
    +
    +
    +
    +

    Response body

    +
    +
    +
    +
    {"type":"encryptionStatus","domains":[{"name":"schedule","data":[{"id":"1","algorithm":"AES_GCM_SIV_256","passwordSource":{"type":"ENVIRONMENT_VARIABLE","data":"SECRET_1"},"usage":{"job.state.cancel_requested":4,"job.state.canceled":5,"job.state.ended":6,"job.state.initializing":1,"job.state.ready_to_start":2,"job.state.started":3},"createdFrom":"admin-username","created":"2024-08-01T09:26:00"}]}]}
    +
    +
    +
    +
    +

    11.1.64. Admin disables job processing in scheduler

    @@ -22920,7 +23631,7 @@

    11.1.62. Admin disables job

    Definition

    - +@@ -22979,7 +23690,7 @@

    11.1.62. Admin disables job
    -

    11.1.63. Admin enables scheduler job processing

    +

    11.1.65. Admin enables scheduler job processing

    @@ -22987,7 +23698,7 @@

    11.1.63. Admin enables scheduler

    Definition

    Table 155. General request informationTable 157. General request information
    - +@@ -23046,7 +23757,7 @@

    11.1.63. Admin enables scheduler
    -

    11.1.64. Admin get scheduler status

    +

    11.1.66. Admin get scheduler status

    @@ -23054,7 +23765,7 @@

    11.1.64. Admin get scheduler status

    Definition

    Table 156. General request informationTable 158. General request information
    - +@@ -23113,7 +23824,7 @@

    11.1.64. Admin get scheduler status

    -

    11.1.65. Admin lists status information

    +

    11.1.67. Admin lists status information

    @@ -23121,7 +23832,7 @@

    11.1.65. Admin lists status information<

    Definition

    Table 157. General request informationTable 159. General request information
    - +@@ -23213,7 +23924,7 @@

    11.1.65. Admin lists status information<
    -

    11.1.66. Admin fetches server runtime data

    +

    11.1.68. Admin fetches server runtime data

    @@ -23221,7 +23932,7 @@

    11.1.66. Admin fetches server runtime

    Definition

    Table 158. General request informationTable 160. General request information
    - +@@ -23293,7 +24004,7 @@

    11.1.66. Admin fetches server runtime
    -

    11.1.67. User lists jobs for project

    +

    11.1.69. User lists jobs for project

    @@ -23301,7 +24012,7 @@

    11.1.67. User lists jobs for project

    Definition

    Table 159. General request informationTable 161. General request information
    - +@@ -23331,7 +24042,7 @@

    11.1.67. User lists jobs for project

    Path parameters

    Table 160. General request informationTable 162. General request information
    - +@@ -23455,7 +24166,7 @@

    11.1.67. User lists jobs for project

    -
    {"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    +
    {"page":0,"totalPages":1,"content":[{"jobUUID":"048f9167-5b7a-41fb-a235-8e3a7e996efa","executedBy":"User1","created":"2024-08-08T07:48:50.319019742","started":"2024-08-08T07:50:50.319048296","ended":"2024-08-08T08:05:50.319059717","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    @@ -25300,7 +26011,7 @@
    15.5.2.2.3. Profiles
    diff --git a/docs/latest/sechub-tutorials.html b/docs/latest/sechub-tutorials.html index 04b610b5b1..3d263540be 100644 --- a/docs/latest/sechub-tutorials.html +++ b/docs/latest/sechub-tutorials.html @@ -531,7 +531,7 @@
    Table 161. https://localhost:8081/api/project/{projectId}/jobsTable 163. https://localhost:8081/api/project/{projectId}/jobs
    -

    Documentation version: Server 1.10.0 - Build date: 20240710135650

    +

    Documentation version: Server 2.0.0 - Build date: 20240808080534


    @@ -1030,7 +1030,7 @@

    2.2.2. Test PDS solutio

    diff --git a/docs/latest/server-download.html b/docs/latest/server-download.html index 8a3fea04d6..32302ef294 100644 --- a/docs/latest/server-download.html +++ b/docs/latest/server-download.html @@ -1,7 +1,7 @@ - + Main Page