Skip to content

Commit

Permalink
initial template healthcheck implementation #3616
Browse files Browse the repository at this point in the history
  • Loading branch information
de-jcup committed Jan 24, 2025
1 parent 0d87d28 commit c6e189f
Show file tree
Hide file tree
Showing 35 changed files with 1,793 additions and 269 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mercedesbenz.sechub.adapter.DefaultExecutorConfigSupport;
import com.mercedesbenz.sechub.adapter.checkmarx.CheckmarxConstants;
import com.mercedesbenz.sechub.commons.core.environment.SystemEnvironmentVariableSupport;
import com.mercedesbenz.sechub.commons.core.util.SimpleStringUtils;
import com.mercedesbenz.sechub.commons.model.SecHubRuntimeException;
import com.mercedesbenz.sechub.domain.scan.DefaultExecutorConfigSupport;
import com.mercedesbenz.sechub.domain.scan.product.ProductExecutorContext;
import com.mercedesbenz.sechub.domain.scan.product.config.ProductExecutorConfig;
import com.mercedesbenz.sechub.sharedkernel.error.NotAcceptableException;
Expand Down Expand Up @@ -39,7 +39,7 @@ private CheckmarxExecutorConfigSuppport(ProductExecutorContext context, SystemEn
}

public boolean isAlwaysFullScanEnabled() {
return getParameterBooleanValue(CheckmarxExecutorConfigParameterKeys.CHECKMARX_FULLSCAN_ALWAYS);
return getJobParameterProvider().getBoolean(CheckmarxExecutorConfigParameterKeys.CHECKMARX_FULLSCAN_ALWAYS);
}

public String getTeamIdForNewProjects(String projectId) {
Expand Down Expand Up @@ -67,7 +67,7 @@ public Long getPresetIdForNewProjects(String projectId) {
}

public String getEngineConfigurationName() {
String configuredEngineConfigurationName = getParameter(CheckmarxExecutorConfigParameterKeys.CHECKMARX_ENGINE_CONFIGURATIONNAME);
String configuredEngineConfigurationName = getJobParameterProvider().get(CheckmarxExecutorConfigParameterKeys.CHECKMARX_ENGINE_CONFIGURATIONNAME);

if (SimpleStringUtils.isEmpty(configuredEngineConfigurationName)) {

Expand All @@ -77,7 +77,7 @@ public String getEngineConfigurationName() {
}

public String getClientSecret() {
String configuredClientSecret = getParameter(CheckmarxExecutorConfigParameterKeys.CHECKMARX_CLIENT_SECRET);
String configuredClientSecret = getJobParameterProvider().get(CheckmarxExecutorConfigParameterKeys.CHECKMARX_CLIENT_SECRET);

if (SimpleStringUtils.isEmpty(configuredClientSecret)) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mercedesbenz.sechub.adapter.DefaultExecutorConfigSupport;
import com.mercedesbenz.sechub.commons.core.ConfigurationFailureException;
import com.mercedesbenz.sechub.commons.core.environment.SystemEnvironmentVariableSupport;
import com.mercedesbenz.sechub.commons.core.util.SecHubStorageUtil;
Expand All @@ -28,6 +27,8 @@
import com.mercedesbenz.sechub.commons.pds.PDSKey;
import com.mercedesbenz.sechub.commons.pds.PDSKeyProvider;
import com.mercedesbenz.sechub.commons.pds.data.PDSTemplateMetaData;
import com.mercedesbenz.sechub.domain.scan.DefaultExecutorConfigSupport;
import com.mercedesbenz.sechub.domain.scan.JobParameterProvider;
import com.mercedesbenz.sechub.domain.scan.NetworkTargetProductServerDataProvider;
import com.mercedesbenz.sechub.domain.scan.NetworkTargetType;
import com.mercedesbenz.sechub.domain.scan.SecHubExecutionContext;
Expand All @@ -50,8 +51,6 @@ public class PDSExecutorConfigSupport extends DefaultExecutorConfigSupport imple
private PDSExecutorConfigSuppportServiceCollection serviceCollection;
private SecHubDataConfigurationTypeListParser parser = new SecHubDataConfigurationTypeListParser();

PDSTemplateMetaDataService templateMetaDataTransformer = new PDSTemplateMetaDataService();

static {
List<PDSKeyProvider<?>> allParameterProviders = new ArrayList<>();
allParameterProviders.addAll(Arrays.asList(SecHubProductExecutionPDSKeyProvider.values()));
Expand Down Expand Up @@ -174,7 +173,7 @@ private void addMappingsAsJobParameter(Map<String, String> parametersToSend) {

private Map<String, String> createParametersToSendByProviders(List<PDSKeyProvider<?>> providers) {
Map<String, String> parametersToSend = new TreeMap<>();
for (String originKey : configuredExecutorParameters.keySet()) {
for (String originKey : getJobParameterProvider().getKeys()) {
PDSKeyProvider<?> foundProvider = null;
for (PDSKeyProvider<?> provider : providers) {
String key = provider.getKey().getId();
Expand All @@ -185,7 +184,7 @@ private Map<String, String> createParametersToSendByProviders(List<PDSKeyProvide
}
/* either not special (so always sent to PDS) or special but must be sent */
if (foundProvider == null || foundProvider.getKey().isSentToPDS()) {
parametersToSend.put(originKey, configuredExecutorParameters.get(originKey));
parametersToSend.put(originKey, getJobParameterProvider().get(originKey));
}
}
return parametersToSend;
Expand All @@ -196,7 +195,18 @@ public boolean isReusingSecHubStorage() {
}

public String getPDSProductIdentifier() {
return getParameter(PDSConfigDataKeyProvider.PDS_CONFIG_PRODUCTIDENTIFIER);
return getPDSProductIdentifier(getJobParameterProvider());
}

/**
* Public available static method to access pds product identifier, without
* creating a config support object but using still same logic.
*
* @param provider
* @return pds product identiier or <code>null</code>
*/
public static String getPDSProductIdentifier(JobParameterProvider provider) {
return provider.get(PDSConfigDataKeyProvider.PDS_CONFIG_PRODUCTIDENTIFIER.getKey().getId());
}

public int getTimeToWaitForNextCheckOperationInMilliseconds(PDSInstallSetup setup) {
Expand Down Expand Up @@ -250,15 +260,15 @@ private String getParameter(PDSKeyProvider<?> keyProvider) {
}

private String getParameter(PDSKey configDataKey) {
return getParameter(configDataKey.getId());
return getJobParameterProvider().get(configDataKey.getId());
}

private int getParameterIntValue(PDSKeyProvider<? extends PDSKey> provider) {
return getParameterIntValue(provider.getKey().getId());
return getJobParameterProvider().getInt(provider.getKey().getId());
}

private boolean getParameterBooleanValue(PDSKeyProvider<? extends PDSKey> provider) {
return getParameterBooleanValue(provider.getKey().getId());
return getJobParameterProvider().getBoolean(provider.getKey().getId());
}

@Override
Expand Down Expand Up @@ -316,11 +326,11 @@ public boolean isPDSScriptTrustingAllCertificates() {
}

public int getPDSAdapterResilienceMaxRetries() {
return getParameterIntValue(PDSProductExecutorKeyConstants.ADAPTER_RESILIENCE_RETRY_MAX);
return getJobParameterProvider().getInt(PDSProductExecutorKeyConstants.ADAPTER_RESILIENCE_RETRY_MAX);
}

public long getPDSAdapterResilienceRetryWaitInMilliseconds() {
return getParameterLongValue(PDSProductExecutorKeyConstants.ADAPTER_RESILIENCE_RETRY_WAIT_MILLISECONDS);
return getJobParameterProvider().getLong(PDSProductExecutorKeyConstants.ADAPTER_RESILIENCE_RETRY_WAIT_MILLISECONDS);
}

public boolean isGivenStorageSupportedByPDSProduct(PDSStorageContentProvider contentProvider) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.mercedesbenz.sechub.domain.scan.product.pds;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.mercedesbenz.sechub.domain.scan.JobParameterProvider;
import com.mercedesbenz.sechub.domain.scan.asset.ProductExecutorConfigAssetFileNameResolver;
import com.mercedesbenz.sechub.domain.scan.product.config.ProductExecutorConfig;

@Component
public class PDSProductExecutorConfigAssetFileNameResolver implements ProductExecutorConfigAssetFileNameResolver {

private static final Logger LOG = LoggerFactory.getLogger(PDSProductExecutorConfigAssetFileNameResolver.class);

@Autowired
PDSExecutorConfigSuppportServiceCollection serviceCollection;

@Override
public String resolveAssetFilename(ProductExecutorConfig config) {
JobParameterProvider provider = new JobParameterProvider(config.getSetup().getJobParameters());
String pdsProductId = PDSExecutorConfigSupport.getPDSProductIdentifier(provider);
if (pdsProductId == null) {
return null;
}
String filename = pdsProductId + ".zip";
LOG.debug("resolved file name for PDS product id '{}' is '{}'", pdsProductId, filename);

return filename;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.mercedesbenz.sechub.domain.scan.asset.AssetDetailData;
import com.mercedesbenz.sechub.domain.scan.asset.AssetFileData;
import com.mercedesbenz.sechub.domain.scan.asset.AssetService;
import com.mercedesbenz.sechub.domain.scan.template.RelevantScanTemplateDefinitionFilter;
import com.mercedesbenz.sechub.sharedkernel.error.NotFoundException;

@Service
Expand All @@ -31,6 +32,9 @@ public class PDSTemplateMetaDataService {
@Autowired
RelevantScanTemplateDefinitionFilter filter;

@Autowired
PDSProductExecutorConfigAssetFileNameResolver assetFileNameResolver;

public List<PDSTemplateMetaData> createTemplateMetaData(List<TemplateDefinition> templateDefinitions, String pdsProductId, ScanType scanType,
SecHubConfigurationModel configuration) throws ConfigurationFailureException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.mercedesbenz.sechub.domain.scan.asset.AssetDetailData;
import com.mercedesbenz.sechub.domain.scan.asset.AssetFileData;
import com.mercedesbenz.sechub.domain.scan.asset.AssetService;
import com.mercedesbenz.sechub.domain.scan.template.RelevantScanTemplateDefinitionFilter;
import com.mercedesbenz.sechub.sharedkernel.error.NotFoundException;

class PDSTemplateMetaDataServiceTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.mercedesbenz.sechub.adapter.AdapterConfig;
import com.mercedesbenz.sechub.adapter.AdapterConfigBuilder;
import com.mercedesbenz.sechub.adapter.AdapterConfigurationStrategy;
import com.mercedesbenz.sechub.adapter.DefaultExecutorConfigSupport;
import com.mercedesbenz.sechub.commons.core.ConfigurationFailureException;
import com.mercedesbenz.sechub.commons.model.ScanType;
import com.mercedesbenz.sechub.domain.scan.product.ProductExecutorData;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
package com.mercedesbenz.sechub.adapter;
package com.mercedesbenz.sechub.domain.scan;

import static com.mercedesbenz.sechub.sharedkernel.util.Assert.*;
import static com.mercedesbenz.sechub.sharedkernel.util.Assert.notNull;

import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -34,14 +34,15 @@ public class DefaultExecutorConfigSupport {

private static final NamePatternIdProvider FALLBACK_NOT_FOUND_PROVIDER = new NamePatternIdProvider("fallback");

protected Map<String, String> configuredExecutorParameters = new TreeMap<>();
private Map<String, NamePatternIdProvider> namePatternIdProviders = new TreeMap<>();
private SystemEnvironmentVariableSupport variableSupport;

protected ProductExecutorConfig config;

NamePatternIdProviderFactory providerFactory;

private JobParameterProvider jobParameterProvider;

public DefaultExecutorConfigSupport(ProductExecutorContext context, SystemEnvironmentVariableSupport variableSupport,
Validation<ProductExecutorConfig> validation) {
notNull(context, "context may not be null!");
Expand All @@ -59,10 +60,12 @@ public DefaultExecutorConfigSupport(ProductExecutorContext context, SystemEnviro

/* create a simple map containing parameters */
List<ProductExecutorConfigSetupJobParameter> jobParameters = config.getSetup().getJobParameters();
for (ProductExecutorConfigSetupJobParameter jobParameter : jobParameters) {
configuredExecutorParameters.put(jobParameter.getKey(), jobParameter.getValue());
}
jobParameterProvider = new JobParameterProvider(jobParameters);

}

public JobParameterProvider getJobParameterProvider() {
return jobParameterProvider;
}

public String getPasswordOrAPIToken() {
Expand All @@ -81,67 +84,6 @@ public String getUser() {
return variableSupport.getValueOrVariableContent(user);
}

/**
* Get parameter boolean value for given key
*
* @param key
* @return <code>true</code> when value for given key is "true" or "TRUE",
* otherwise false
*/
protected boolean getParameterBooleanValue(String key) {
String asText = getParameter(key);
return Boolean.parseBoolean(asText);
}

/**
* Get parameter string value for given key
*
* @param key
* @return string or <code>null</code>
*/
protected String getParameter(String key) {
if (key == null) {
return null;
}
return configuredExecutorParameters.get(key);
}

/**
* Get parameter integer value for given key
*
* @param key
* @return integer value or -1 if not defined
*/
protected int getParameterIntValue(String key) {
String asText = getParameter(key);
if (asText == null) {
return -1;
}
try {
return Integer.parseInt(asText);
} catch (NumberFormatException e) {
return -1;
}
}

/**
* Get parameter long value for given key
*
* @param key
* @return long value or -1 if not defined
*/
protected long getParameterLongValue(String key) {
String asText = getParameter(key);
if (asText == null) {
return -1;
}
try {
return Integer.parseInt(asText);
} catch (NumberFormatException e) {
return -1;
}
}

/**
* Resolves a name pattern provider for given id
*
Expand Down Expand Up @@ -169,7 +111,7 @@ public NamePatternIdProvider getNamePatternIdProvider(String id, boolean failWhe
return provider;
}

String parameterValue = getParameter(id);
String parameterValue = jobParameterProvider.get(id);
if (parameterValue == null) {
if (failWhenNotConfigured) {
throw new SecHubRuntimeException("No parameter found for necessary mapping key:" + id);
Expand Down
Loading

0 comments on commit c6e189f

Please sign in to comment.