Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASA 9735 #177

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/main/java/com/hcl/appscan/sdk/CoreConstants.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* © Copyright IBM Corporation 2016.
* © Copyright HCL Technologies Ltd. 2017, 2024.
* © Copyright HCL Technologies Ltd. 2017, 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand Down Expand Up @@ -106,7 +106,8 @@ public interface CoreConstants {
String PAUSING = "Pausing"; //$NON-NLS-1$
String PAUSED = "Paused"; //$NON-NLS-1$
String SUSPENDED = "Suspended"; //$NON-NLS-1$
String UNKNOWN = "Unknown"; //$NON-NLS-1$
String UNKNOWN = "Unknown"; //$NON-NLS-1$
String UNSTABLE = "Unstable"; //$NON-NLS-1$
String SERVER_URL = "serverURL"; //$NON-NLS-1$
String ACCEPT_INVALID_CERTS = "acceptInvalidCerts"; //$NON-NLS-1$

Expand Down
16 changes: 13 additions & 3 deletions src/main/java/com/hcl/appscan/sdk/results/ASEResultsProvider.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* © Copyright HCL Technologies Ltd. 2019, 2020, 2024.
* © Copyright HCL Technologies Ltd. 2019, 2020, 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand Down Expand Up @@ -154,9 +154,19 @@ public void setReportFormat(String format) {
@Override
public void setProgress(IProgress progress) {
m_progress = progress;
m_scanProvider.setProgress(progress);
m_scanProvider.setProgress(progress);
}


@Override
public IResultsProvider getResultProvider1() {
return null;
}

@Override
public IResultsProvider getResultProvider2() {
return null;
}

private void loadResults() {
try {
m_status = getScanStatus(m_scanId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* © Copyright HCL Technologies Ltd. 2024.
* © Copyright HCL Technologies Ltd. 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand All @@ -11,13 +11,16 @@

import com.hcl.appscan.sdk.CoreConstants;
import com.hcl.appscan.sdk.logging.IProgress;
import com.hcl.appscan.sdk.utils.ServiceUtil;

public class CloudCombinedResultsProvider implements IResultsProvider, Serializable {

private static final long serialVersionUID = 1L;

private IResultsProvider m_resultsProvider1;
private IResultsProvider m_resultsProvider2;
private String status1;
private String status2;
private String m_reportFormat = DEFAULT_REPORT_FORMAT;

public CloudCombinedResultsProvider(IResultsProvider resultsProvider1, IResultsProvider resultsProvider2) {
Expand All @@ -27,22 +30,26 @@ public CloudCombinedResultsProvider(IResultsProvider resultsProvider1, IResultsP

@Override
public boolean hasResults() {
return m_resultsProvider1.hasResults() && m_resultsProvider2.hasResults();
return m_resultsProvider1.hasResults() || m_resultsProvider2.hasResults();
}

@Override
public String getStatus() {
String combinedStatus = CoreConstants.RUNNING;
String status1 = m_resultsProvider1.getStatus();
String status2 = m_resultsProvider2.getStatus();

if(status1.equalsIgnoreCase(CoreConstants.FAILED) || status2.equalsIgnoreCase(CoreConstants.FAILED)) {
combinedStatus = CoreConstants.FAILED;
if(status1 == null || !status1.equalsIgnoreCase(CoreConstants.FAILED)) {
status1 = m_resultsProvider1.getStatus();
}
if(status2 == null || !status2.equalsIgnoreCase(CoreConstants.FAILED)) {
status2 = m_resultsProvider2.getStatus();
}
else if(status1.equalsIgnoreCase(CoreConstants.READY) && status2.equalsIgnoreCase(CoreConstants.READY)) {

if(status1.equalsIgnoreCase(CoreConstants.FAILED) && status2.equalsIgnoreCase(CoreConstants.FAILED)) {
combinedStatus = CoreConstants.FAILED;
} else if ((status1.equalsIgnoreCase(CoreConstants.READY) || status2.equalsIgnoreCase(CoreConstants.READY)) && (status1.equalsIgnoreCase(CoreConstants.FAILED) || status2.equalsIgnoreCase(CoreConstants.FAILED))) {
combinedStatus = CoreConstants.UNSTABLE;
} else if(status1.equalsIgnoreCase(CoreConstants.READY) && status2.equalsIgnoreCase(CoreConstants.READY)) {
combinedStatus = CoreConstants.READY;
}

return combinedStatus;
}

Expand Down Expand Up @@ -89,10 +96,11 @@ public String getType() {
@Override
public void getResultsFile(File destination, String format) {
//Append the technology type to the end of the file name.
String name = destination.getName();
String name1 = ServiceUtil.scanTypeShortForm(m_resultsProvider1.getType()).toUpperCase()+"_"+destination.getName();
String name2 = ServiceUtil.scanTypeShortForm(m_resultsProvider2.getType()).toUpperCase()+"_"+destination.getName();
File directory = destination.getParentFile();
m_resultsProvider1.getResultsFile(new File(directory, name), format);
m_resultsProvider2.getResultsFile(new File(directory, name), format);
m_resultsProvider1.getResultsFile(new File(directory, name1), format);
m_resultsProvider2.getResultsFile(new File(directory, name2), format);
}

@Override
Expand Down Expand Up @@ -121,4 +129,14 @@ public void setProgress(IProgress progress) {
m_resultsProvider1.setProgress(progress);
m_resultsProvider2.setProgress(progress);
}

@Override
public IResultsProvider getResultProvider1() {
return m_resultsProvider1;
}

@Override
public IResultsProvider getResultProvider2() {
return m_resultsProvider2;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* © Copyright IBM Corporation 2016.
* © Copyright HCL Technologies Ltd. 2017, 2024.
* © Copyright HCL Technologies Ltd. 2017, 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand Down Expand Up @@ -153,7 +153,17 @@ public void setProgress(IProgress progress) {
m_progress = progress;
m_scanProvider.setProgress(progress);
}


@Override
public IResultsProvider getResultProvider1() {
return null;
}

@Override
public IResultsProvider getResultProvider2() {
return null;
}

/**
* Specifies the format to use for reports.
*
Expand Down
16 changes: 14 additions & 2 deletions src/main/java/com/hcl/appscan/sdk/results/IResultsProvider.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* © Copyright IBM Corporation 2016.
* © Copyright HCL Technologies Ltd. 2017, 2024.
* © Copyright HCL Technologies Ltd. 2017, 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand Down Expand Up @@ -73,7 +73,7 @@ public interface IResultsProvider {
public int getInfoCount();

/**
* The type of results. For example, SAST or DAST.
* The type of results. For example, SAST, SCA or DAST.
* @return A string identifying the type of results.
*/
public String getType();
Expand Down Expand Up @@ -109,4 +109,16 @@ public interface IResultsProvider {
* @param progress The IProgress.
*/
public void setProgress(IProgress progress);

/**
* Fetch the resultProvider.
* @return The resultProvider of the 1st scan.
*/
IResultsProvider getResultProvider1();

/**
* Fetch the resultProvider.
* @return The resultProvider of the 2nd scan.
*/
IResultsProvider getResultProvider2();
}
43 changes: 42 additions & 1 deletion src/main/java/com/hcl/appscan/sdk/utils/ServiceUtil.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* © Copyright IBM Corporation 2016.
* © Copyright HCL Technologies Ltd. 2017, 2024.
* © Copyright HCL Technologies Ltd. 2017, 2024, 2025.
* LICENSE: Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0
*/

Expand Down Expand Up @@ -223,6 +223,47 @@ private static boolean hasEntitlement(String scanType, IAuthenticationProvider p
return false;
}

/**
* Checks if the given scanId is valid for scanning.
*
* @param scanId The scanId to test.
* @param applicationId The applicationId to verify.
* @param type The scanType to verify.
* @param provider The IAuthenticationProvider for authentication.
* @return True if the scanId is valid. False is returned if the scanId is not valid, the request fails, or an exception occurs.
*/
public static boolean isScanId(String scanId, String applicationId, String type, IAuthenticationProvider provider) {
if (provider.isTokenExpired()) {
return true;
}

String request_url = provider.getServer() + API_BASIC_DETAILS;
request_url += "?$filter=Id%20eq%20" + scanId + "&%24select=AppId%2C%20Technology";
Map<String, String> request_headers = provider.getAuthorizationHeader(true);

HttpClient client = new HttpClient(provider.getProxy(), provider.getacceptInvalidCerts());
try {
HttpResponse response = client.get(request_url, request_headers, null);

if (response.isSuccess()) {
JSONObject obj = (JSONObject) response.getResponseBodyAsJSON();
JSONArray array = (JSONArray) obj.get(ITEMS);
if (array.isEmpty()) {
return false;
} else {
JSONObject body = (JSONObject) array.getJSONObject(0);
String appId = body.getString(CoreConstants.APP_ID);
String technologyName = body.getString("Technology");
return appId.equals(applicationId) && technologyName.equals(updatedScanType(type));
}
}
} catch (IOException | JSONException e) {
// Ignore and return false.
}

return false;
}

public static String updatedScanType(String type) {
switch (type) {
case "Static Analyzer":
Expand Down
Loading