Skip to content
Merged
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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.ibm.appscan</groupId>
<artifactId>com.ibm.appscan.plugin.core</artifactId>
<version>1.0.2</version>
<version>1.0.3</version>
<packaging>jar</packaging>

<licenses>
Expand Down
139 changes: 72 additions & 67 deletions src/main/java/com/ibm/appscan/plugin/core/CoreConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,81 +7,86 @@

public interface CoreConstants {

String APP_ID = "AppId"; //$NON-NLS-1$
String EMAIL_NOTIFICATION = "EnableMailNotification"; //$NON-NLS-1$
String FILE_ID = "FileId"; //$NON-NLS-1$
String FILE_TO_UPLOAD = "fileToUpload"; //$NON-NLS-1$
String ID = "Id"; //$NON-NLS-1$
String LATEST_EXECUTION = "LatestExecution"; //$NON-NLS-1$
String LOCALE = "Locale"; //$NON-NLS-1$
String MESSAGE = "Message"; //$NON-NLS-1$
String NAME = "Name"; //$NON-NLS-1$
String SCAN_NAME = "ScanName"; //$NON-NLS-1$
String SCANNER_TYPE = "type"; //$NON-NLS-1$
String STATUS = "Status"; //$NON-NLS-1$
String TARGET = "target"; //$NON-NLS-1$
String VERSION_NUMBER = "VersionNumber"; //$NON-NLS-1$
String APP_ID = "AppId"; //$NON-NLS-1$
String EMAIL_NOTIFICATION = "EnableMailNotification"; //$NON-NLS-1$
String FILE_ID = "FileId"; //$NON-NLS-1$
String FILE_TO_UPLOAD = "fileToUpload"; //$NON-NLS-1$
String ID = "Id"; //$NON-NLS-1$
String KEY = "Key"; //$NON-NLS-1$
String LATEST_EXECUTION = "LatestExecution"; //$NON-NLS-1$
String LOCALE = "Locale"; //$NON-NLS-1$
String MESSAGE = "Message"; //$NON-NLS-1$
String NAME = "Name"; //$NON-NLS-1$
String PRESENCE_NAME = "PresenceName"; //$NON-NLS-1$
String SCAN_NAME = "ScanName"; //$NON-NLS-1$
String SCANNER_TYPE = "type"; //$NON-NLS-1$
String STATUS = "Status"; //$NON-NLS-1$
String TARGET = "target"; //$NON-NLS-1$
String VERSION_NUMBER = "VersionNumber"; //$NON-NLS-1$

String BINDING_ID = "Bindingid"; //$NON-NLS-1$
String KEY_ID = "KeyId"; //$NON-NLS-1$
String KEY_SECRET = "KeySecret"; //$NON-NLS-1$
String PASSWORD = "Password"; //$NON-NLS-1$
String TOKEN = "Token"; //$NON-NLS-1$
String USERNAME = "Username"; //$NON-NLS-1$
String BINDING_ID = "Bindingid"; //$NON-NLS-1$
String KEY_ID = "KeyId"; //$NON-NLS-1$
String KEY_SECRET = "KeySecret"; //$NON-NLS-1$
String PASSWORD = "Password"; //$NON-NLS-1$
String TOKEN = "Token"; //$NON-NLS-1$
String USERNAME = "Username"; //$NON-NLS-1$

String CHARSET = "charset"; //$NON-NLS-1$
String UTF8 = "utf-8"; //$NON-NLS-1$
String CHARSET = "charset"; //$NON-NLS-1$
String UTF8 = "utf-8"; //$NON-NLS-1$

String CONTENT_DISPOSITION = "Content-Disposition"; //$NON-NLS-1$
String CONTENT_LENGTH = "Content-Length"; //$NON-NLS-1$
String CONTENT_TYPE = "Content-Type"; //$NON-NLS-1$
String CONTENT_DISPOSITION = "Content-Disposition"; //$NON-NLS-1$
String CONTENT_LENGTH = "Content-Length"; //$NON-NLS-1$
String CONTENT_TYPE = "Content-Type"; //$NON-NLS-1$

String API_ENV = "/api/v2"; //$NON-NLS-1$
String API_BLUEMIX = "Bluemix"; //$NON-NLS-1$
String API_BLUEMIX_LOGIN = API_ENV + "/Account/BluemixLogin"; //$NON-NLS-1$
String API_IBM_LOGIN = API_ENV + "/Account/IBMIdLogin"; //$NON-NLS-1$
String API_KEY_LOGIN = API_ENV + "/Account/ApiKeyLogin"; //$NON-NLS-1$
String API_LOGOUT = API_ENV + "/Account/Logout"; //$NON-NLS-1$
String API_APPS = API_ENV + "/Apps"; //$NON-NLS-1$
String API_BASIC_DETAILS = API_ENV + "/Scans/%s"; //$NON-NLS-1$
String API_SCANNER_DETAILS = API_ENV + "/Scans/&s/&s"; //$NON-NLS-1$
String API_FILE_UPLOAD = API_ENV + "/FileUpload"; //$NON-NLS-1$
String API_SCAN = API_ENV + "/%s"; //$NON-NLS-1$
String API_SCANNER = API_ENV + "/Scans/%s"; //$NON-NLS-1$
String API_SCANS = API_ENV + "/Scans"; //$NON-NLS-1$
String API_SCANS_REPORT = API_ENV + "/Scans/%s/Report/%s"; //$NON-NLS-1$
String API_SCX = "SCX"; //$NON-NLS-1$
String API_SACLIENT_DOWNLOAD = "/api/%s/StaticAnalyzer/SAClientUtil?os=%s"; //$NON-NLS-1$
String API_ENV = "/api/v2"; //$NON-NLS-1$
String API_BLUEMIX = "Bluemix"; //$NON-NLS-1$
String API_BLUEMIX_LOGIN = API_ENV + "/Account/BluemixLogin"; //$NON-NLS-1$
String API_IBM_LOGIN = API_ENV + "/Account/IBMIdLogin"; //$NON-NLS-1$
String API_KEY_LOGIN = API_ENV + "/Account/ApiKeyLogin"; //$NON-NLS-1$
String API_LOGOUT = API_ENV + "/Account/Logout"; //$NON-NLS-1$
String API_APPS = API_ENV + "/Apps"; //$NON-NLS-1$
String API_PRESENCES = API_ENV + "/Presences"; //$NON-NLS-1$
String API_PRESENCES_ID = API_ENV + "/Presences/%s"; //$NON-NLS-1$
String API_PRESENCES_NEW_KEY = API_ENV + "/Presences/%s/NewKey"; //$NON-NLS-1$
String API_BASIC_DETAILS = API_ENV + "/Scans/%s"; //$NON-NLS-1$
String API_SCANNER_DETAILS = API_ENV + "/Scans/&s/&s"; //$NON-NLS-1$
String API_FILE_UPLOAD = API_ENV + "/FileUpload"; //$NON-NLS-1$
String API_SCAN = API_ENV + "/%s"; //$NON-NLS-1$
String API_SCANNER = API_ENV + "/Scans/%s"; //$NON-NLS-1$
String API_SCANS = API_ENV + "/Scans"; //$NON-NLS-1$
String API_SCANS_REPORT = API_ENV + "/Scans/%s/Report/%s"; //$NON-NLS-1$
String API_SCX = "SCX"; //$NON-NLS-1$
String API_SACLIENT_DOWNLOAD = "/api/%s/StaticAnalyzer/SAClientUtil?os=%s"; //$NON-NLS-1$
String API_SACLIENT_VERSION = "/api/%s/StaticAnalyzer/SAClientUtil?os=%s&meta=%s"; //$NON-NLS-1$
String API_KEY_PATH = "/api/ideclientuilogin"; //$NON-NLS-1$
String API_KEY_PATH = "/api/ideclientuilogin"; //$NON-NLS-1$

String DEFAULT_RESULT_NAME = "asoc_results"; //$NON-NLS-1$
String SACLIENT_INSTALL_DIR = "SAClientInstall"; //$NON-NLS-1$
String DEFAULT_RESULT_NAME = "asoc_results"; //$NON-NLS-1$
String SACLIENT_INSTALL_DIR = "SAClientInstall"; //$NON-NLS-1$

String RUNNING = "Running"; //$NON-NLS-1$
String READY = "Ready"; //$NON-NLS-1$
String FAILED = "Failed"; //$NON-NLS-1$
String RUNNING = "Running"; //$NON-NLS-1$
String READY = "Ready"; //$NON-NLS-1$
String FAILED = "Failed"; //$NON-NLS-1$

String TOTAL_ISSUES = "NIssuesFound"; //$NON-NLS-1$
String HIGH_ISSUES = "NHighIssues"; //$NON-NLS-1$
String MEDIUM_ISSUES = "NMediumIssues"; //$NON-NLS-1$
String LOW_ISSUES = "NLowIssues"; //$NON-NLS-1$
String INFO_ISSUES = "NInfoIssues"; //$NON-NLS-1$
String TOTAL_ISSUES = "NIssuesFound"; //$NON-NLS-1$
String HIGH_ISSUES = "NHighIssues"; //$NON-NLS-1$
String MEDIUM_ISSUES = "NMediumIssues"; //$NON-NLS-1$
String LOW_ISSUES = "NLowIssues"; //$NON-NLS-1$
String INFO_ISSUES = "NInfoIssues"; //$NON-NLS-1$

String CREATE_SCAN_SUCCESS = "message.created.scan"; //$NON-NLS-1$
String DOWNLOADING_CLIENT = "message.downloading.client"; //$NON-NLS-1$
String EXECUTING_SCAN = "message.running.scan"; //$NON-NLS-1$
String UPLOADING_FILE = "message.uploading.file"; //$NON-NLS-1$
String CREATE_SCAN_SUCCESS = "message.created.scan"; //$NON-NLS-1$
String DOWNLOADING_CLIENT = "message.downloading.client"; //$NON-NLS-1$
String EXECUTING_SCAN = "message.running.scan"; //$NON-NLS-1$
String UPLOADING_FILE = "message.uploading.file"; //$NON-NLS-1$

String ERROR_AUTHENTICATING = "error.authenticating"; //$NON-NLS-1$
String ERROR_DOWNLOADING_CLIENT = "error.download.client"; //$NON-NLS-1$
String ERROR_GETTING_DETAILS = "error.getting.details"; //$NON-NLS-1$
String ERROR_GETTING_RESULT = "error.getting.result"; //$NON-NLS-1$
String ERROR_INVALID_APP = "error.invalid.app"; //$NON-NLS-1$
String ERROR_INVALID_OPTIONS = "error.invalid.opts"; //$NON-NLS-1$
String ERROR_LOADING_APPS = "error.loading.apps"; //$NON-NLS-1$
String ERROR_LOGIN_EXPIRED = "login.token.expired"; //$NON-NLS-1$
String ERROR_INVALID_JOB_ID = "error.invalid.job.id"; //$NON-NLS-1$
String ERROR_SUBMITTING_SCAN = "error.submit.scan"; //$NON-NLS-1$
String ERROR_UPLOADING_FILE = "error.upload.file"; //$NON-NLS-1$
String ERROR_AUTHENTICATING = "error.authenticating"; //$NON-NLS-1$
String ERROR_DOWNLOADING_CLIENT = "error.download.client"; //$NON-NLS-1$
String ERROR_GETTING_DETAILS = "error.getting.details"; //$NON-NLS-1$
String ERROR_GETTING_RESULT = "error.getting.result"; //$NON-NLS-1$
String ERROR_INVALID_APP = "error.invalid.app"; //$NON-NLS-1$
String ERROR_INVALID_OPTIONS = "error.invalid.opts"; //$NON-NLS-1$
String ERROR_LOADING_APPS = "error.loading.apps"; //$NON-NLS-1$
String ERROR_LOGIN_EXPIRED = "login.token.expired"; //$NON-NLS-1$
String ERROR_INVALID_JOB_ID = "error.invalid.job.id"; //$NON-NLS-1$
String ERROR_SUBMITTING_SCAN = "error.submit.scan"; //$NON-NLS-1$
String ERROR_UPLOADING_FILE = "error.upload.file"; //$NON-NLS-1$
}
7 changes: 7 additions & 0 deletions src/main/java/com/ibm/appscan/plugin/core/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ error.invalid.job.id=Job ID {0} is invalid or does not exist.
error.loading.apps=An error occurred retrieving the application list. {0}
error.submit.scan=An error occurred submitting the scan to the service. ERROR: {0}
error.upload.file=An error occurred uploading {0} to the service. {0}
error.service.general=An unknown error occurred. Response code: {0}

#Presence
error.getting.presence.details=An error occurred retrieving details for Presence with id {0}.
error.loading.presences=An error occurred retrieving the list of Presences.
error.getting.new.key=An error occurred generating a new key for Presence with id {0}.
error.deleting.presence=An error occurred deleting Presence with id {0}.

#Authentication
login.error=Unable to authenticate to the service.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
package com.ibm.appscan.plugin.core.presence;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.apache.wink.json4j.JSONArray;
import org.apache.wink.json4j.JSONException;
import org.apache.wink.json4j.JSONObject;

import com.ibm.appscan.plugin.core.CoreConstants;
import com.ibm.appscan.plugin.core.Messages;
import com.ibm.appscan.plugin.core.auth.IAuthenticationProvider;
import com.ibm.appscan.plugin.core.http.HttpClient;
import com.ibm.appscan.plugin.core.http.HttpResponse;
import com.ibm.appscan.plugin.core.logging.DefaultProgress;
import com.ibm.appscan.plugin.core.logging.IProgress;
import com.ibm.appscan.plugin.core.logging.Message;

public class CloudPresenceProvider implements IPresenceProvider, CoreConstants {

private Map<String, String> m_presences;
private IProgress m_progress;
private IAuthenticationProvider m_authProvider;

public CloudPresenceProvider(IAuthenticationProvider provider) {
this(provider, new DefaultProgress());
}

public CloudPresenceProvider(IAuthenticationProvider provider, IProgress progress) {
m_authProvider = provider;
m_progress = progress;
}

@Override
public Map<String, String> getPresences() {
if(m_presences == null)
loadPresences();
return m_presences;
}

@Override
public String getName(String id) {
return getPresences().get(id);
}

@Override
public boolean delete(String id) {
if(!authenticated())
return false;

String url = m_authProvider.getServer() + String.format(API_PRESENCES_ID, id);
Map<String, String> headers = m_authProvider.getAuthorizationHeader(true);

HttpClient client = new HttpClient();

try {
HttpResponse response = client.delete(url, headers, null);
if(response.isSuccess())
return true;
handleError(response);
}
catch(IOException | JSONException e) {
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("error.deleting.presence", id)), e); //$NON-NLS-1$
}

return false;
}

@Override
public Map<String, String> getDetails(String id) {
if(!authenticated())
return null;

String url = m_authProvider.getServer() + String.format(API_PRESENCES_ID, id);
Map<String, String> headers = m_authProvider.getAuthorizationHeader(true);
Map<String, String> details = new HashMap<String, String>();

HttpClient client = new HttpClient();

try {
HttpResponse response = client.get(url, headers, null);
if(response.isSuccess()) {
JSONObject json = (JSONObject) response.getResponseBodyAsJSON();
for(Object key : json.keySet())
details.put((String)key, json.getString((String)key));
}
else
handleError(response);
}
catch(IOException | JSONException e) {
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("error.getting.presence.details", id)), e); //$NON-NLS-1$
}

return details;
}

@Override
public String getNewKey(String id) {
if(!authenticated())
return null;

String key = null;
String url = m_authProvider.getServer() + String.format(API_PRESENCES_NEW_KEY, id);
Map<String, String> headers = m_authProvider.getAuthorizationHeader(true);

HttpClient client = new HttpClient();

try {
HttpResponse response = client.get(url, headers, null);
if(response.isSuccess()) {
JSONObject json = (JSONObject) response.getResponseBodyAsJSON();
key = json.getString(KEY);
}
else
handleError(response);
}
catch(IOException | JSONException e) {
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("error.getting.new.key", id)), e); //$NON-NLS-1$
}

return key;
}

private void loadPresences() {
if(!authenticated())
return;

m_presences = new HashMap<String, String>();
String url = m_authProvider.getServer() + API_PRESENCES + "?fields=Name&sort=%2BName"; //$NON-NLS-1$
Map<String, String> headers = m_authProvider.getAuthorizationHeader(true);
headers.putAll(Collections.singletonMap("range", "items=0-999999")); //$NON-NLS-1$ //$NON-NLS-2$

HttpClient client = new HttpClient();

try {
HttpResponse response = client.get(url, headers, null);

if (response.isSuccess()) {
JSONArray array = (JSONArray)response.getResponseBodyAsJSON();
if(array == null)
return;

for(int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
String id = object.getString(ID);
String name = object.getString(PRESENCE_NAME);
m_presences.put(id, name);
}
}
else
handleError(response);
}
catch(IOException | JSONException e) {
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("error.loading.presences")), e); //$NON-NLS-1$
m_presences = null;
}
}

private void handleError(HttpResponse response) throws IOException, JSONException {
JSONObject json = (JSONObject)response.getResponseBodyAsJSON();
if(json != null && json.has(MESSAGE))
m_progress.setStatus(new Message(Message.ERROR, json.getString(MESSAGE)));
else
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("error.service.general", response.getResponseCode()))); //$NON-NLS-1$
}

private boolean authenticated() {
if(m_authProvider.isTokenExpired()) {
m_progress.setStatus(new Message(Message.ERROR, Messages.getMessage("login.error"))); //$NON-NLS-1$
return false;
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.ibm.appscan.plugin.core.presence;

import java.util.Map;

public interface IPresenceProvider {

/**
* Gets the available presences.
* @return A Map of presences, keyed by the presence id.
*/
public Map<String, String> getPresences();

/**
* Gets the name of the presence with the given id.
* @param id The id of the presence.
* @return The presence name.
*/
public String getName(String id);

/**
* Deletes the presence with the given id.
* @param id The id of the presence to delete.
* @return true if the delete was successful.
*/
public boolean delete(String id);

/**
* Retrieves details about the presence with the given id.
* @param id The id of the presence.
* @return A Map containing details of the presence.
*/
public Map<String, String> getDetails(String id);

/**
* Generate a new key for the given presence.
* @param id The id of the presence to generate the new key for.
* @return The new key.
*/
public String getNewKey(String id);
}