diff --git a/.classpath b/.classpath
index 5519e78..1c0f9e7 100644
--- a/.classpath
+++ b/.classpath
@@ -1,23 +1,18 @@
+
+
-
-
-
-
-
-
-
-
+
diff --git a/.project b/.project
index 737bd0e..a2b738e 100644
--- a/.project
+++ b/.project
@@ -16,12 +16,12 @@
- org.eclipse.m2e.core.maven2Builder
+ org.eclipse.wst.validation.validationbuilder
- org.eclipse.wst.validation.validationbuilder
+ org.eclipse.m2e.core.maven2Builder
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 0ebf5b4..b73fb2e 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -1,6 +1,9 @@
+
-
-
+
+
+
+
diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..04cad8c
--- /dev/null
+++ b/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,2 @@
+disabled=06target
+eclipse.preferences.version=1
diff --git a/FactionExtender/src/META-INF/MANIFEST.MF b/FactionExtender/src/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/FactionExtender/src/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path:
-
diff --git a/pom.xml b/pom.xml
index 6276b83..afbd3c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,18 @@
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.2.0
+ test
+
+
+ org.junit.platform
+ junit-platform-runner
+ 1.2.0
+ test
+
com.googlecode.json-simple
json-simple
diff --git a/src/com/faction/extender/ExtensionMetaData.java b/src/com/faction/extender/ExtensionMetaData.java
deleted file mode 100644
index 25d4995..0000000
--- a/src/com/faction/extender/ExtensionMetaData.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.faction.extender;
-
-public interface ExtensionMetaData {
-
- public String getCreatedBy();
- public String getVersion();
- public String getDescription();
-
-
-}
diff --git a/src/com/faction/elements/Assessment.java b/src/main/java/com/faction/elements/Assessment.java
similarity index 100%
rename from src/com/faction/elements/Assessment.java
rename to src/main/java/com/faction/elements/Assessment.java
diff --git a/src/main/java/com/faction/elements/BaseExtension.java b/src/main/java/com/faction/elements/BaseExtension.java
new file mode 100644
index 0000000..8cf1d97
--- /dev/null
+++ b/src/main/java/com/faction/elements/BaseExtension.java
@@ -0,0 +1,36 @@
+package com.faction.elements;
+
+import com.faction.elements.utils.Logger;
+import com.faction.elements.utils.Log;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+public class BaseExtension {
+
+ private Logger logger;
+ private HashMap configs = new HashMap<>();
+
+ public BaseExtension() {
+ logger = new Logger();
+ }
+
+ public Logger getLogger() {
+ return logger;
+ }
+
+ public List getLogs(){
+ return logger.getLogs();
+ }
+
+ public HashMap getConfigs(){
+ return this.configs;
+ }
+
+ public void setConfigs(HashMapconfigs) {
+ this.configs = configs;
+ }
+
+
+}
diff --git a/src/com/faction/elements/Campaign.java b/src/main/java/com/faction/elements/Campaign.java
similarity index 100%
rename from src/com/faction/elements/Campaign.java
rename to src/main/java/com/faction/elements/Campaign.java
diff --git a/src/com/faction/elements/CustomField.java b/src/main/java/com/faction/elements/CustomField.java
similarity index 100%
rename from src/com/faction/elements/CustomField.java
rename to src/main/java/com/faction/elements/CustomField.java
diff --git a/src/com/faction/elements/CustomType.java b/src/main/java/com/faction/elements/CustomType.java
similarity index 100%
rename from src/com/faction/elements/CustomType.java
rename to src/main/java/com/faction/elements/CustomType.java
diff --git a/src/com/faction/elements/User.java b/src/main/java/com/faction/elements/User.java
similarity index 100%
rename from src/com/faction/elements/User.java
rename to src/main/java/com/faction/elements/User.java
diff --git a/src/com/faction/elements/Verification.java b/src/main/java/com/faction/elements/Verification.java
similarity index 100%
rename from src/com/faction/elements/Verification.java
rename to src/main/java/com/faction/elements/Verification.java
diff --git a/src/com/faction/elements/Vulnerability.java b/src/main/java/com/faction/elements/Vulnerability.java
similarity index 100%
rename from src/com/faction/elements/Vulnerability.java
rename to src/main/java/com/faction/elements/Vulnerability.java
diff --git a/src/com/faction/elements/results/AssessmentManagerResult.java b/src/main/java/com/faction/elements/results/AssessmentManagerResult.java
similarity index 100%
rename from src/com/faction/elements/results/AssessmentManagerResult.java
rename to src/main/java/com/faction/elements/results/AssessmentManagerResult.java
diff --git a/src/com/faction/elements/results/InventoryResult.java b/src/main/java/com/faction/elements/results/InventoryResult.java
similarity index 100%
rename from src/com/faction/elements/results/InventoryResult.java
rename to src/main/java/com/faction/elements/results/InventoryResult.java
diff --git a/src/com/faction/elements/utils/Logger.java b/src/main/java/com/faction/elements/utils/Log.java
similarity index 68%
rename from src/com/faction/elements/utils/Logger.java
rename to src/main/java/com/faction/elements/utils/Log.java
index 0c9e296..3fe111c 100644
--- a/src/com/faction/elements/utils/Logger.java
+++ b/src/main/java/com/faction/elements/utils/Log.java
@@ -2,15 +2,18 @@
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.Date;
-public class Logger {
+public class Log {
public enum LEVEL { INFO, WARNING, ERROR, DEBUG };
private LEVEL level;
private String message;
private String stackTrace;
+ private Date timestamp;
- public Logger(LEVEL level, Exception exception) {
+ public Log(LEVEL level, Exception exception) {
+ this.timestamp = new Date();
this.level = level;
this.message = exception.getMessage();
StringWriter sw = new StringWriter();
@@ -18,28 +21,26 @@ public Logger(LEVEL level, Exception exception) {
exception.printStackTrace(pw);
this.stackTrace = sw.toString();
+ }
+ public Log(LEVEL level, String message) {
+ this.timestamp = new Date();
+ this.level = level;
+ this.message = message;
+ this.stackTrace = "";
+
}
public LEVEL getLevel() {
return level;
}
- public void setLevel(LEVEL level) {
- this.level = level;
- }
public String getMessage() {
return message;
}
- public void setMessage(String message) {
- this.message = message;
- }
public String getStackTrace() {
return this.stackTrace;
}
-
-
-
-
-
-
+ public Date getTimeStamp() {
+ return this.timestamp;
+ }
}
diff --git a/src/main/java/com/faction/elements/utils/Logger.java b/src/main/java/com/faction/elements/utils/Logger.java
new file mode 100644
index 0000000..1ea665b
--- /dev/null
+++ b/src/main/java/com/faction/elements/utils/Logger.java
@@ -0,0 +1,26 @@
+package com.faction.elements.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.faction.elements.utils.Log.LEVEL;
+
+public class Logger {
+
+ List logs = new ArrayList();
+
+ public void addLog(LEVEL level, Exception exception) {
+ logs.add(new Log(level, exception));
+ }
+ public void addLog(LEVEL level, String message) {
+ logs.add(new Log(level, message));
+ }
+ public List getLogs() {
+ logs.sort((l1,l2) -> l1.getTimeStamp().compareTo(l2.getTimeStamp()));
+ return logs;
+
+ }
+
+
+
+}
diff --git a/src/com/faction/extender/ApplicationInventory.java b/src/main/java/com/faction/extender/ApplicationInventory.java
similarity index 86%
rename from src/com/faction/extender/ApplicationInventory.java
rename to src/main/java/com/faction/extender/ApplicationInventory.java
index b5885e1..cbc06b6 100644
--- a/src/com/faction/extender/ApplicationInventory.java
+++ b/src/main/java/com/faction/extender/ApplicationInventory.java
@@ -1,8 +1,10 @@
package com.faction.extender;
+import java.util.HashMap;
+
import com.faction.elements.results.InventoryResult;
-public interface ApplicationInventory {
+public interface ApplicationInventory extends BaseInterface {
/**
* This is an interface for the Faction API that allows
diff --git a/src/com/faction/extender/AssessmentManager.java b/src/main/java/com/faction/extender/AssessmentManager.java
similarity index 84%
rename from src/com/faction/extender/AssessmentManager.java
rename to src/main/java/com/faction/extender/AssessmentManager.java
index 232a859..27751fe 100644
--- a/src/com/faction/extender/AssessmentManager.java
+++ b/src/main/java/com/faction/extender/AssessmentManager.java
@@ -1,17 +1,20 @@
package com.faction.extender;
+import java.util.HashMap;
+
import java.util.List;
import com.faction.elements.Assessment;
import com.faction.elements.Vulnerability;
import com.faction.elements.results.AssessmentManagerResult;
+import com.faction.elements.utils.Log;
-public interface AssessmentManager {
+public interface AssessmentManager extends BaseInterface{
static public enum Operation { Create, Update, Delete,
Finalize, PeerReviewCreated, PeerReviewCompleted,
PeerReviewAccepted};
-
+
/**
* This function allows you to update other interfaces when the command is run. This can also up
@@ -24,7 +27,6 @@ static public enum Operation { Create, Update, Delete,
*/
public AssessmentManagerResult assessmentChange(Assessment asmt, List vulns, Operation Operation);
-
}
diff --git a/src/main/java/com/faction/extender/BaseInterface.java b/src/main/java/com/faction/extender/BaseInterface.java
new file mode 100644
index 0000000..32d456d
--- /dev/null
+++ b/src/main/java/com/faction/extender/BaseInterface.java
@@ -0,0 +1,27 @@
+package com.faction.extender;
+
+import java.util.HashMap;
+import java.util.List;
+
+import com.faction.elements.utils.Log;
+
+public interface BaseInterface {
+ /**
+ * This function is used by Faction to set the configurations for the extension. This should not be called
+ * locally in your classes
+ *
+ * @param configs
+ */
+ public void setConfigs(HashMapconfigs);
+
+
+ /**
+ * This function is used by Faction to get all logs for the extension. This should not be called locally in
+ * your classes
+ *
+ * @return List logs : Returns a list of logs that can be displayed in the Faction UI
+ */
+ public List getLogs();
+
+
+}
diff --git a/src/com/faction/extender/VerificationManager.java b/src/main/java/com/faction/extender/VerificationManager.java
similarity index 88%
rename from src/com/faction/extender/VerificationManager.java
rename to src/main/java/com/faction/extender/VerificationManager.java
index 1bdaa60..3336df3 100644
--- a/src/com/faction/extender/VerificationManager.java
+++ b/src/main/java/com/faction/extender/VerificationManager.java
@@ -1,10 +1,12 @@
package com.faction.extender;
+import java.util.HashMap;
+
import com.faction.elements.User;
import com.faction.elements.Verification;
import com.faction.elements.Vulnerability;
-public interface VerificationManager {
+public interface VerificationManager extends BaseInterface {
static public enum Operation { Cancel, PASS,FAIL,Assigned};
/**
diff --git a/src/com/faction/extender/VulnerabilityManager.java b/src/main/java/com/faction/extender/VulnerabilityManager.java
similarity index 84%
rename from src/com/faction/extender/VulnerabilityManager.java
rename to src/main/java/com/faction/extender/VulnerabilityManager.java
index 3a2af39..fec1a5a 100644
--- a/src/com/faction/extender/VulnerabilityManager.java
+++ b/src/main/java/com/faction/extender/VulnerabilityManager.java
@@ -1,10 +1,12 @@
package com.faction.extender;
+import java.util.HashMap;
+
import com.faction.elements.Assessment;
import com.faction.elements.Vulnerability;
import com.faction.extender.AssessmentManager.Operation;
-public interface VulnerabilityManager {
+public interface VulnerabilityManager extends BaseInterface {
static public enum Operation { Create, Update, Delete }
/**
diff --git a/src/com/faction/interfaces/_Assessment.java b/src/main/java/com/faction/interfaces/_Assessment.java
similarity index 100%
rename from src/com/faction/interfaces/_Assessment.java
rename to src/main/java/com/faction/interfaces/_Assessment.java
diff --git a/src/com/faction/interfaces/_AssessmentType.java b/src/main/java/com/faction/interfaces/_AssessmentType.java
similarity index 100%
rename from src/com/faction/interfaces/_AssessmentType.java
rename to src/main/java/com/faction/interfaces/_AssessmentType.java
diff --git a/src/com/faction/interfaces/_Campaign.java b/src/main/java/com/faction/interfaces/_Campaign.java
similarity index 100%
rename from src/com/faction/interfaces/_Campaign.java
rename to src/main/java/com/faction/interfaces/_Campaign.java
diff --git a/src/com/faction/interfaces/_Category.java b/src/main/java/com/faction/interfaces/_Category.java
similarity index 100%
rename from src/com/faction/interfaces/_Category.java
rename to src/main/java/com/faction/interfaces/_Category.java
diff --git a/src/com/faction/interfaces/_CustomField.java b/src/main/java/com/faction/interfaces/_CustomField.java
similarity index 100%
rename from src/com/faction/interfaces/_CustomField.java
rename to src/main/java/com/faction/interfaces/_CustomField.java
diff --git a/src/com/faction/interfaces/_CustomType.java b/src/main/java/com/faction/interfaces/_CustomType.java
similarity index 100%
rename from src/com/faction/interfaces/_CustomType.java
rename to src/main/java/com/faction/interfaces/_CustomType.java
diff --git a/src/com/faction/interfaces/_FinalReport.java b/src/main/java/com/faction/interfaces/_FinalReport.java
similarity index 100%
rename from src/com/faction/interfaces/_FinalReport.java
rename to src/main/java/com/faction/interfaces/_FinalReport.java
diff --git a/src/com/faction/interfaces/_Teams.java b/src/main/java/com/faction/interfaces/_Teams.java
similarity index 100%
rename from src/com/faction/interfaces/_Teams.java
rename to src/main/java/com/faction/interfaces/_Teams.java
diff --git a/src/com/faction/interfaces/_User.java b/src/main/java/com/faction/interfaces/_User.java
similarity index 100%
rename from src/com/faction/interfaces/_User.java
rename to src/main/java/com/faction/interfaces/_User.java
diff --git a/src/com/faction/interfaces/_Verification.java b/src/main/java/com/faction/interfaces/_Verification.java
similarity index 100%
rename from src/com/faction/interfaces/_Verification.java
rename to src/main/java/com/faction/interfaces/_Verification.java
diff --git a/src/com/faction/interfaces/_Vulnerability.java b/src/main/java/com/faction/interfaces/_Vulnerability.java
similarity index 100%
rename from src/com/faction/interfaces/_Vulnerability.java
rename to src/main/java/com/faction/interfaces/_Vulnerability.java
diff --git a/src/test/java/com/faction/unittests/ExtenderTestCase.java b/src/test/java/com/faction/unittests/ExtenderTestCase.java
new file mode 100644
index 0000000..c905015
--- /dev/null
+++ b/src/test/java/com/faction/unittests/ExtenderTestCase.java
@@ -0,0 +1,83 @@
+package com.faction.unittests;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ServiceLoader;
+
+import org.junit.jupiter.api.Test;
+
+import com.faction.elements.Assessment;
+import com.faction.elements.BaseExtension;
+import com.faction.elements.Vulnerability;
+import com.faction.elements.results.AssessmentManagerResult;
+import com.faction.elements.utils.Log;
+import com.faction.elements.utils.Log.LEVEL;
+import com.faction.extender.AssessmentManager;
+import com.faction.extender.AssessmentManager.Operation;
+
+
+
+public class ExtenderTestCase {
+
+ @Test
+ void test() {
+ AssessmentManager asmtMgr = new MyAssmtMgr();
+ HashMapconfigs = new HashMap<>();
+ configs.put("Test1", "Test Config 1");
+ configs.put("Test2", "Test Config 2");
+
+ asmtMgr.setConfigs(configs);
+
+ Assessment asmt = new Assessment();
+ asmt.setSummary("Default");
+
+ Vulnerability vuln = new Vulnerability();
+ List vulns = new ArrayList<>();
+ vulns.add(vuln);
+
+ AssessmentManagerResult result = asmtMgr.assessmentChange(asmt, vulns, Operation.Create);
+
+ assertTrue(result.getAssessment().getSummary().equals("This is a test"));
+
+ assertTrue(asmtMgr.getLogs().size() == 2);
+
+ List logs = asmtMgr.getLogs();
+ assertTrue(logs.stream().anyMatch( log -> log.getMessage().equals("Got Config1: Test Config 1")));
+ assertTrue(logs.stream().anyMatch( log -> log.getMessage().equals("Got Config2: Test Config 2")));
+
+
+
+ assertTrue(true);
+
+ }
+
+ public class MyAssmtMgr extends BaseExtension implements AssessmentManager{
+
+ @Override
+ public AssessmentManagerResult assessmentChange(Assessment asmt, List vulns,
+ Operation Operation) {
+ String config1 = this.getConfigs().get("Test1");
+ String config2 = this.getConfigs().get("Test2");
+
+ asmt.setSummary("This is a test");
+
+ this.getLogger().addLog(LEVEL.INFO, "Got Config1: " + config1);
+ this.getLogger().addLog(LEVEL.INFO, "Got Config2: " + config2);
+
+ AssessmentManagerResult result = new AssessmentManagerResult();
+ result.setAssessment(asmt);
+ result.setVulnerabilities(vulns);
+ return result;
+ }
+ }
+
+}
+
+