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; + } + } + +} + +