diff --git a/plugins/de.cognicrypt.codegenerator/.classpath b/plugins/de.cognicrypt.codegenerator/.classpath
index e70863972..620e33854 100644
--- a/plugins/de.cognicrypt.codegenerator/.classpath
+++ b/plugins/de.cognicrypt.codegenerator/.classpath
@@ -38,5 +38,6 @@
+
diff --git a/plugins/de.cognicrypt.codegenerator/META-INF/MANIFEST.MF b/plugins/de.cognicrypt.codegenerator/META-INF/MANIFEST.MF
index 1fd59cc1e..deee6c5fd 100644
--- a/plugins/de.cognicrypt.codegenerator/META-INF/MANIFEST.MF
+++ b/plugins/de.cognicrypt.codegenerator/META-INF/MANIFEST.MF
@@ -29,7 +29,8 @@ Bundle-ClassPath: lib/claferchocoig.jar,
src/main/resources/,
src/main/java/,
lib/dom4j-2.0.0.jar,
- lib/saxon9he.jar
+ lib/saxon9he.jar,
+ lib/json-simple.jar
Automatic-Module-Name: de.cognicrypt.codegenerator
Bundle-Vendor: TU Darmstadt, Paderborn University
Export-Package: de.cognicrypt.codegenerator,
diff --git a/plugins/de.cognicrypt.codegenerator/build.properties b/plugins/de.cognicrypt.codegenerator/build.properties
index 330d861c4..518f24263 100644
--- a/plugins/de.cognicrypt.codegenerator/build.properties
+++ b/plugins/de.cognicrypt.codegenerator/build.properties
@@ -9,4 +9,6 @@ bin.includes = plugin.xml,\
src/main/java/,\
target/classes/Tasks/tasks.json,\
lib/dom4j-2.0.0.jar,\
- lib/saxon9he.jar
\ No newline at end of file
+ lib/saxon9he.jar,\
+ lib/json-simple.jar
+
diff --git a/plugins/de.cognicrypt.codegenerator/lib/json-simple.jar b/plugins/de.cognicrypt.codegenerator/lib/json-simple.jar
new file mode 100644
index 000000000..dfd5856d0
Binary files /dev/null and b/plugins/de.cognicrypt.codegenerator/lib/json-simple.jar differ
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/AltConfigWizard.java b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/AltConfigWizard.java
index 1b598d752..efb0fe643 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/AltConfigWizard.java
+++ b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/AltConfigWizard.java
@@ -263,7 +263,7 @@ public boolean performFinish() {
codeGenerator.getDeveloperProject().refresh();
resetAnswers();
- chosenConfig = new CrySLConfiguration(resFileOSPath, ((CrySLBasedCodeGenerator) codeGenerator).setUpTemplateClass(pathToTemplateFile));
+ chosenConfig = new CrySLConfiguration(resFileOSPath, ((CrySLBasedCodeGenerator) codeGenerator).setUpTemplateClass(pathToTemplateFile), selectedTask.getName());
break;
case XSL:
this.constraints = (this.constraints != null) ? this.constraints : new HashMap<>();
@@ -274,7 +274,7 @@ public boolean performFinish() {
// Initialize Code Generation
codeGenerator = new XSLBasedGenerator(targetFile, selectedTask.getCodeTemplate());
chosenConfig = new XSLConfiguration(instanceGenerator.getInstances().values().iterator()
- .next(), this.constraints, codeGenerator.getDeveloperProject().getProjectPath() + Constants.innerFileSeparator + Constants.pathToClaferInstanceFile);
+ .next(), this.constraints, codeGenerator.getDeveloperProject().getProjectPath() + Constants.innerFileSeparator + Constants.pathToClaferInstanceFile, selectedTask.getName());
break;
default:
return false;
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/Configuration.java b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/Configuration.java
index 1a45b3d46..5547017ae 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/Configuration.java
+++ b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/Configuration.java
@@ -13,6 +13,7 @@
package de.cognicrypt.codegenerator.wizard;
import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -20,9 +21,12 @@
import org.dom4j.io.XMLWriter;
import de.cognicrypt.codegenerator.question.Answer;
-import de.cognicrypt.codegenerator.question.Question;
-import de.cognicrypt.utils.FileUtils;
+import de.cognicrypt.codegenerator.question.Question;
+import de.cognicrypt.core.Constants;
+import de.cognicrypt.utils.Utils;
+import de.cognicrypt.utils.FileUtils;
+import org.json.simple.JSONObject;
/**
* This class is a storage for the configuration chosen by the user.
*
@@ -32,11 +36,27 @@ public abstract class Configuration {
final protected Map options;
final protected String pathOnDisk;
+ protected Answer answr;
+ final protected String taskName;
- @SuppressWarnings("unchecked")
- public Configuration(Map, ?> constraints, String pathOnDisk) {
+ @SuppressWarnings("unchecked")
+ public Configuration(Map, ?> constraints, String pathOnDisk, String taskName) throws IOException {
+
+ this.answr = new Answer();
this.pathOnDisk = pathOnDisk;
this.options = (Map) constraints;
+ this.taskName = taskName;
+
+ JSONObject obj = new JSONObject();
+ this.options.forEach((question,answer) ->obj.put(question.getQuestionText(), answer.getValue()));
+ String jsonPath = Utils.getCurrentProject().getLocation().toOSString() + Constants.innerFileSeparator + taskName + Constants.JSON_EXTENSION;
+
+ File file = new File(jsonPath);
+ file.createNewFile();
+ FileWriter fileWriter = new FileWriter(file);
+ fileWriter.write(obj.toJSONString());
+ fileWriter.flush();
+ fileWriter.close();
}
/**
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/CrySLConfiguration.java b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/CrySLConfiguration.java
index 8499d6fd9..5762ab927 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/CrySLConfiguration.java
+++ b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/CrySLConfiguration.java
@@ -21,8 +21,8 @@ public class CrySLConfiguration extends Configuration {
private final GeneratorClass template;
- public CrySLConfiguration(String pathOnDisk, GeneratorClass templateClass) {
- super(new HashMap<>(), pathOnDisk);
+ public CrySLConfiguration(String pathOnDisk, GeneratorClass templateClass, String selectedTask) throws IOException {
+ super(new HashMap<>(), pathOnDisk, selectedTask);
this.template = templateClass;
}
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/XSLConfiguration.java b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/XSLConfiguration.java
index de000599d..2bfd9aaed 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/XSLConfiguration.java
+++ b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/XSLConfiguration.java
@@ -33,8 +33,8 @@ public class XSLConfiguration extends Configuration {
final private InstanceClafer instance;
- public XSLConfiguration(InstanceClafer instance, Map constraints, String pathOnDisk) {
- super(constraints, pathOnDisk);
+ public XSLConfiguration(InstanceClafer instance, Map constraints, String pathOnDisk, String taskName) throws IOException {
+ super(constraints, pathOnDisk, taskName);
this.instance = instance;
}
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/beginner/BeginnerTaskQuestionPage.java b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/beginner/BeginnerTaskQuestionPage.java
index 42d599fb7..99503a88b 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/beginner/BeginnerTaskQuestionPage.java
+++ b/plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/wizard/beginner/BeginnerTaskQuestionPage.java
@@ -24,6 +24,7 @@
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -706,6 +707,7 @@ public void widgetSelected(final SelectionEvent e) {
}
private Group createNote(final Composite parent, final Question question, boolean visible) {
+ IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
final Group notePanel = new Group(parent, SWT.NONE);
notePanel.setText("Note:");
final GridLayout gridLayout = new GridLayout();
@@ -722,7 +724,12 @@ private Group createNote(final Composite parent, final Question question, boolea
note.setLayoutData(new GridData(GridData.FILL_BOTH));
String noteText = question.getNote();
if (noteText.contains("$$$")) {
- noteText = noteText.split("\\$\\$\\$")[1];
+
+ String[] noteText1 = noteText.split("\\$\\$\\$");
+ noteText = noteText1[1];
+ if (!prefStore.getBoolean(Constants.SUPPRESS_LEGACYCLIENT_ERRORS)) {
+ noteText = noteText + noteText1[2];
+ }
}
note.setText(noteText);
note.pack();
diff --git a/plugins/de.cognicrypt.codegenerator/src/main/resources/TaskDesc/SecureCommunication.json b/plugins/de.cognicrypt.codegenerator/src/main/resources/TaskDesc/SecureCommunication.json
index 37733e5cd..314aa548e 100644
--- a/plugins/de.cognicrypt.codegenerator/src/main/resources/TaskDesc/SecureCommunication.json
+++ b/plugins/de.cognicrypt.codegenerator/src/main/resources/TaskDesc/SecureCommunication.json
@@ -164,7 +164,7 @@
{
"id": "0",
"element": "radio",
- "note": "1$$$It is highly discouraged to enable support for legacy clients. This may have grave security implications.",
+ "note": "1$$$It is highly discouraged to enable support for legacy clients. This may have grave security implications.$$$\nCogniCrypt's analysis raises warnings when this option is selected. You can however disable such warnings for legacy configurations in the CogniCrypt preferences.",
"questionText": "Which clients should the server at least support?",
"answers": [
{
diff --git a/plugins/de.cognicrypt.core/META-INF/MANIFEST.MF b/plugins/de.cognicrypt.core/META-INF/MANIFEST.MF
index 627b52f22..4f42f7f48 100644
--- a/plugins/de.cognicrypt.core/META-INF/MANIFEST.MF
+++ b/plugins/de.cognicrypt.core/META-INF/MANIFEST.MF
@@ -241,6 +241,7 @@ Export-Package: boomerang;
org.eclipse.egit.github.core.service,
org.ini4j;uses:="org.ini4j.spi,new org.ini4j",
org.ini4j.spi,
+ org.json.simple,
soot;
uses:="soot.jimple.toolkits.scalar,
soot.toolkits.graph,
diff --git a/plugins/de.cognicrypt.core/src/de/cognicrypt/core/Constants.java b/plugins/de.cognicrypt.core/src/de/cognicrypt/core/Constants.java
index 3aa9e6210..3c432b95b 100644
--- a/plugins/de.cognicrypt.core/src/de/cognicrypt/core/Constants.java
+++ b/plugins/de.cognicrypt.core/src/de/cognicrypt/core/Constants.java
@@ -538,6 +538,7 @@ public String toString() {
public static final String SHOW_SECURE_OBJECTS = "de.cognicrypt.staticanalyzer.secureObjects";
public static final String CALL_GRAPH_SELECTION = "de.cognicrypt.staticanalyzer.callgraphSelection";
public static final String SELECT_CUSTOM_RULES = "de.cognicrypt.staticanalyzer.selectCustomRules";
+ public static final String SUPPRESS_LEGACYCLIENT_ERRORS = "de.cognicrypt.staticanalyzer.suppressConstraintErrors";
public static final String ANALYSE_DEPENDENCIES = "de.cognicrypt.staticanalyzer.dependencyAnalysis";
@@ -617,4 +618,7 @@ public String toString() {
public static final String codeTemplateFolder =
"src" + Constants.innerFileSeparator + "main" + Constants.innerFileSeparator + "java" + Constants.innerFileSeparator + "de" + Constants.innerFileSeparator + "cognicrypt"
+ Constants.innerFileSeparator + "codegenerator" + Constants.innerFileSeparator + "crysl" + Constants.innerFileSeparator + "templates" + Constants.innerFileSeparator;
+
+ //name of tasks
+ public final static String SECURE_COMMUNICATION = "SecureCommunication";
}
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/ArithConstraintTestRule.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/ArithConstraintTestRule.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/ArithConstraintTestRule.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/ArithConstraintTestRule.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/CompConstraintTestRule.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/CompConstraintTestRule.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/CompConstraintTestRule.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/CompConstraintTestRule.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/ComplexConstraintTestRule.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/ComplexConstraintTestRule.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/ComplexConstraintTestRule.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/ComplexConstraintTestRule.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/InConstraintTestRule.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/InConstraintTestRule.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/InConstraintTestRule.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/InConstraintTestRule.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule1.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule1.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule1.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule1.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule10.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule10.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule10.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule10.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule11.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule11.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule11.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule11.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule12.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule12.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule12.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule12.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule13.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule13.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule13.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule13.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule14.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule14.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule14.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule14.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule15.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule15.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule15.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule15.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule16.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule16.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule16.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule16.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule17.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule17.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule17.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule17.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule2.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule2.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule2.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule2.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule3.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule3.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule3.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule3.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule4.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule4.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule4.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule4.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule5.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule5.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule5.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule5.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule6.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule6.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule6.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule6.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule7.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule7.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule7.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule7.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule8.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule8.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule8.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule8.cryptsl
diff --git a/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule9.crysl b/plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule9.cryptsl
similarity index 100%
rename from plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule9.crysl
rename to plugins/de.cognicrypt.crysl.handler/src/test/resources/Testrule9.cryptsl
diff --git a/plugins/de.cognicrypt.staticanalyzer/.classpath b/plugins/de.cognicrypt.staticanalyzer/.classpath
index 66438e56a..aa2de0cb7 100644
--- a/plugins/de.cognicrypt.staticanalyzer/.classpath
+++ b/plugins/de.cognicrypt.staticanalyzer/.classpath
@@ -1,8 +1,12 @@
-
+
+
+
+
+
-
+
diff --git a/plugins/de.cognicrypt.staticanalyzer/META-INF/MANIFEST.MF b/plugins/de.cognicrypt.staticanalyzer/META-INF/MANIFEST.MF
index b547db499..fc666c0c4 100644
--- a/plugins/de.cognicrypt.staticanalyzer/META-INF/MANIFEST.MF
+++ b/plugins/de.cognicrypt.staticanalyzer/META-INF/MANIFEST.MF
@@ -21,6 +21,7 @@ Require-Bundle: org.eclipse.ui,
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,
- resources/
+ resources/json-simple.jar
Automatic-Module-Name: de.cognicrypt.staticanalyzer
-Import-Package: org.eclipse.ui.texteditor
+Import-Package: org.eclipse.ui.texteditor,
+ org.json.simple
diff --git a/plugins/de.cognicrypt.staticanalyzer/build.properties b/plugins/de.cognicrypt.staticanalyzer/build.properties
index 9902751f9..346b4b957 100644
--- a/plugins/de.cognicrypt.staticanalyzer/build.properties
+++ b/plugins/de.cognicrypt.staticanalyzer/build.properties
@@ -2,5 +2,6 @@ source.. = src/
bin.includes = plugin.xml,\
META-INF/,\
.,\
- src/,\
- experimental/
+ experimental/,\
+ resources/json-simple.jar
+src.includes = resources/json-simple.jar
diff --git a/plugins/de.cognicrypt.staticanalyzer/resources/json-simple.jar b/plugins/de.cognicrypt.staticanalyzer/resources/json-simple.jar
new file mode 100644
index 000000000..dfd5856d0
Binary files /dev/null and b/plugins/de.cognicrypt.staticanalyzer/resources/json-simple.jar differ
diff --git a/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/StaticAnalyzerPreferences.java b/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/StaticAnalyzerPreferences.java
index 7d207ea42..bbf7bf5fc 100644
--- a/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/StaticAnalyzerPreferences.java
+++ b/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/StaticAnalyzerPreferences.java
@@ -1,6 +1,11 @@
/********************************************************************************
- * Copyright (c) 2015-2019 TU Darmstadt, Paderborn University This program and the accompanying materials are made available under the terms of the Eclipse Public License v. 2.0
- * which is available at http://www.eclipse.org/legal/epl-2.0. SPDX-License-Identifier: EPL-2.0
+ * Copyright (c) 2015-2019 TU Darmstadt, Paderborn University
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
********************************************************************************/
package de.cognicrypt.staticanalyzer;
@@ -51,7 +56,8 @@ public class StaticAnalyzerPreferences extends PreferenceListener {
private Button secureObjectsCheckBox;
private Button analyseDependenciesCheckBox;
private Button addNewRulesetButton, selectCustomRulesCheckBox;
- private CheckboxTableViewer table;
+ private Button suppressLegacyClientErrorsCheckBox;
+ private CheckboxTableViewer table;
private Combo CGSelection;
private Combo forbidden;
@@ -60,7 +66,7 @@ public class StaticAnalyzerPreferences extends PreferenceListener {
private Combo neverType;
private Combo incompleteOp;
private Combo typestate;
-
+
private List listOfRulesets = new ArrayList();
@Override
@@ -83,6 +89,7 @@ private void initializeBasicValues() {
secureObjectsCheckBox.setSelection(preferences.getBoolean(Constants.SHOW_SECURE_OBJECTS));
analyseDependenciesCheckBox.setSelection(preferences.getBoolean(Constants.ANALYSE_DEPENDENCIES));
selectCustomRulesCheckBox.setSelection(preferences.getBoolean(Constants.SELECT_CUSTOM_RULES));
+ suppressLegacyClientErrorsCheckBox.setSelection(preferences.getBoolean(Constants.SUPPRESS_LEGACYCLIENT_ERRORS));
}
private void performBasicDefaults() {
@@ -92,201 +99,206 @@ private void performBasicDefaults() {
preferences.setDefault(Constants.SHOW_SECURE_OBJECTS, false);
preferences.setDefault(Constants.ANALYSE_DEPENDENCIES, true);
preferences.setDefault(Constants.CALL_GRAPH_SELECTION, 0);
+ preferences.setDefault(Constants.SUPPRESS_LEGACYCLIENT_ERRORS, true);
}
-
- /***
- * This method creates a row for each of the rule set with a drop-down list of versions passed.
- *
- * @param ruleset rule set to be added
- */
- private void createRulesTableRow(Ruleset ruleset) {
-
- TableEditor editor = new TableEditor(table.getTable());
- TableItem rulesRow = new TableItem(table.getTable(), SWT.NONE);
- rulesRow.setText(0, ruleset.getFolderName());
- editor.grabHorizontal = true;
- editor.setEditor(ruleset.getVersions(), rulesRow, 1);
- rulesRow.setText(2, ruleset.getUrl());
- rulesRow.setChecked(ruleset.isChecked());
- ruleset.setRulesRow(rulesRow);
- }
-
- /**
- * This method fetches the list of rule sets which are stored in preference file
- *
- * @return list of rule sets
- */
- private List getRulesetsFromPrefs() {
- List ruleSets = new ArrayList();
-
- try {
- String[] listOfNodes = rulePreferences.childrenNames();
-
- for (String currentNode : listOfNodes) {
- Ruleset loadedRuleset = new Ruleset(currentNode);
- Preferences subPref = rulePreferences.node(currentNode);
- String[] keys = subPref.keys();
- for (String key : keys) {
- switch (key) {
- case "FolderName":
- loadedRuleset.setFolderName(subPref.get(key, ""));
- break;
- case "CheckboxState":
- loadedRuleset.setChecked(subPref.getBoolean(key, false));
- break;
- case "SelectedVersion":
- loadedRuleset.setSelectedVersion(subPref.get(key, ""));
- break;
- case "Url":
- loadedRuleset.setUrl(subPref.get(key, ""));
- break;
- default:
- break;
- }
- }
- ruleSets.add(loadedRuleset);
- }
- }
- catch (BackingStoreException e) {
- Activator.getDefault().logError(e);
- }
- return ruleSets;
- }
-
+
/***
- * This method creates a table with check boxes for the CrySL rule sets.
- */
- private void createRulesTable() {
- TableViewerColumn rulesColumn = new TableViewerColumn(table, SWT.FILL);
- TableViewerColumn versionsColumn = new TableViewerColumn(table, SWT.FILL);
- TableViewerColumn rulesURL = new TableViewerColumn(table, SWT.FILL);
- rulesColumn.getColumn().setText(Constants.TABLE_HEADER_RULES);
- versionsColumn.getColumn().setText(Constants.TABLE_HEADER_VERSION);
- rulesURL.getColumn().setText(Constants.TABLE_HEADER_URL);
- rulesColumn.getColumn().setWidth(200);
- versionsColumn.getColumn().setWidth(100);
- rulesURL.getColumn().setWidth(200);
+ * This method creates a row for each of the rule set with a drop-down list of
+ * versions passed.
+ *
+ * @param ruleset rule set to be added
+ */
+ private void createRulesTableRow(Ruleset ruleset) {
+
+ TableEditor editor = new TableEditor(table.getTable());
+ TableItem rulesRow = new TableItem(table.getTable(), SWT.NONE);
+ rulesRow.setText(0, ruleset.getFolderName());
+ editor.grabHorizontal = true;
+ editor.setEditor(ruleset.getVersions(), rulesRow, 1);
+ rulesRow.setText(2, ruleset.getUrl());
+ rulesRow.setChecked(ruleset.isChecked());
+ ruleset.setRulesRow(rulesRow);
+ }
+
+ /**
+ * This method fetches the list of rule sets which are stored in preference file
+ *
+ * @return list of rule sets
+ */
+ private List getRulesetsFromPrefs() {
+ List ruleSets = new ArrayList();
+
+ try {
+ String[] listOfNodes = rulePreferences.childrenNames();
+
+ for (String currentNode : listOfNodes) {
+ Ruleset loadedRuleset = new Ruleset(currentNode);
+ Preferences subPref = rulePreferences.node(currentNode);
+ String[] keys = subPref.keys();
+ for (String key : keys) {
+ switch (key) {
+ case "FolderName":
+ loadedRuleset.setFolderName(subPref.get(key, ""));
+ break;
+ case "CheckboxState":
+ loadedRuleset.setChecked(subPref.getBoolean(key, false));
+ break;
+ case "SelectedVersion":
+ loadedRuleset.setSelectedVersion(subPref.get(key, ""));
+ break;
+ case "Url":
+ loadedRuleset.setUrl(subPref.get(key, ""));
+ break;
+ default:
+ break;
+ }
+ }
+ ruleSets.add(loadedRuleset);
+ }
+ } catch (BackingStoreException e) {
+ Activator.getDefault().logError(e);
+ }
+ return ruleSets;
+ }
+
+ /***
+ * This method creates a table with check boxes for the CrySL rule sets.
+ */
+ private void createRulesTable() {
+ TableViewerColumn rulesColumn = new TableViewerColumn(table, SWT.FILL);
+ TableViewerColumn versionsColumn = new TableViewerColumn(table, SWT.FILL);
+ TableViewerColumn rulesURL = new TableViewerColumn(table, SWT.FILL);
+ rulesColumn.getColumn().setText(Constants.TABLE_HEADER_RULES);
+ versionsColumn.getColumn().setText(Constants.TABLE_HEADER_VERSION);
+ rulesURL.getColumn().setText(Constants.TABLE_HEADER_URL);
+ rulesColumn.getColumn().setWidth(200);
+ versionsColumn.getColumn().setWidth(100);
+ rulesURL.getColumn().setWidth(200);
listOfRulesets = getRulesetsFromPrefs();
- for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
- Ruleset ruleset = (Ruleset) itr.next();
- ruleset.setVersions(new CCombo(table.getTable(), SWT.NONE));
- String[] items = CrySLUtils.getRuleVersions(ruleset.getFolderName());
- if (items != null) {
+ for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
+ Ruleset ruleset = (Ruleset) itr.next();
+ ruleset.setVersions(new CCombo(table.getTable(), SWT.NONE));
+ String[] items = CrySLUtils.getRuleVersions(ruleset.getFolderName());
+ if (items != null) {
ruleset.getVersions().setItems(items);
- ruleset.getVersions().setItems(CrySLUtils.getRuleVersions(ruleset.getFolderName()));
- ruleset.setSelectedVersion(
- (ruleset.getSelectedVersion().length() > 0) ? ruleset.getSelectedVersion() : ruleset.getVersions().getItem(ruleset.getVersions().getItemCount() - 1));
- ruleset.getVersions().select(ruleset.getVersions().indexOf(ruleset.getSelectedVersion()));
+ ruleset.getVersions()
+ .setItems(CrySLUtils.getRuleVersions(ruleset.getFolderName()));
+ ruleset.setSelectedVersion((ruleset.getSelectedVersion().length() > 0) ? ruleset.getSelectedVersion()
+ : ruleset.getVersions().getItem(ruleset.getVersions().getItemCount() - 1));
+ ruleset.getVersions().select(ruleset.getVersions().indexOf(ruleset.getSelectedVersion()));
}
createRulesTableRow(ruleset);
- ruleset.getVersions().addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- super.widgetSelected(e);
-
- ruleset.setSelectedVersion(ruleset.getVersions().getItem(ruleset.getVersions().getSelectionIndex()));
- }
- });
- }
- }
-
- /***
- * This method modifies the rule set table by adding a new rule set entry
- *
- * @param newRuleset The new rule set which is added to the table
- */
- private void modifyRulesTable(Ruleset newRuleset) {
- newRuleset.setVersions(new CCombo(table.getTable(), SWT.NONE));
- newRuleset.getVersions().setItems(CrySLUtils.getRuleVersions(newRuleset.getFolderName()));
- newRuleset.setSelectedVersion(newRuleset.getVersions().getItem(newRuleset.getVersions().getItemCount() - 1));
- newRuleset.getVersions().select(newRuleset.getVersions().getItemCount() - 1);
- createRulesTableRow(newRuleset);
- newRuleset.getVersions().addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- super.widgetSelected(e);
- newRuleset.setSelectedVersion(newRuleset.getVersions().getItem(newRuleset.getVersions().getSelectionIndex()));
- }
- });
- }
-
- /***
- * This method creates the UI for the preference page.
- *
- * @param parent Instance of the eclipse preference window on which UI widgets for CogniCrypt are added.
- */
+ ruleset.getVersions().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+
+ ruleset.setSelectedVersion(
+ ruleset.getVersions().getItem(ruleset.getVersions().getSelectionIndex()));
+ }
+ });
+ }
+ }
+
+ /***
+ * This method modifies the rule set table by adding a new rule set entry
+ * @param newRuleset The new rule set which is added to the table
+ */
+ private void modifyRulesTable(Ruleset newRuleset) {
+ newRuleset.setVersions(new CCombo(table.getTable(), SWT.NONE));
+ newRuleset.getVersions()
+ .setItems(CrySLUtils.getRuleVersions(newRuleset.getFolderName()));
+ newRuleset.setSelectedVersion(newRuleset.getVersions().getItem(newRuleset.getVersions().getItemCount() - 1));
+ newRuleset.getVersions().select(newRuleset.getVersions().getItemCount() - 1);
+ createRulesTableRow(newRuleset);
+ newRuleset.getVersions().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ newRuleset.setSelectedVersion(
+ newRuleset.getVersions().getItem(newRuleset.getVersions().getSelectionIndex()));
+ }
+ });
+ }
+
+ /***
+ * This method creates the UI for the preference page.
+ *
+ * @param parent Instance of the eclipse preference window on which UI widgets
+ * for CogniCrypt are added.
+ */
private void createBasicContents(Composite parent) {
final Group staticAnalysisGroup = UIUtils.addHeaderGroup(parent, "Analysis");
final Composite source = new Composite(staticAnalysisGroup, SWT.FILL);
source.setLayout(new GridLayout(3, true));
final Label ruleSource = new Label(source, SWT.NONE);
- ruleSource.setText("Source of CrySL Rules: ");
-
+ ruleSource.setText("Source of CrySL rules: ");
+
table = CheckboxTableViewer.newCheckList(staticAnalysisGroup, SWT.CHECK);
- table.getTable().setHeaderVisible(true);
- table.getTable().setLinesVisible(true);
- createRulesTable();
- table.getTable().addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- super.widgetSelected(e);
- if (e.detail == SWT.CHECK) {
- TableItem item = (TableItem) e.item;
-
- for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
- Ruleset ruleset = (Ruleset) itr.next();
- if (item.getText(0) == ruleset.getFolderName())
- ruleset.setChecked(item.getChecked());
- }
- }
- }
- });
- addNewRulesetButton = new Button(staticAnalysisGroup, SWT.PUSH);
- addNewRulesetButton.setText("Add Ruleset");
- addNewRulesetButton.addListener(SWT.Selection, new Listener() {
-
- @Override
- public void handleEvent(Event e) {
- addNewRuleset();
- }
- });
- selectCustomRulesCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
- selectCustomRulesCheckBox.setText("Select Custom Rules");
- selectCustomRulesCheckBox.addListener(SWT.Selection, new Listener() {
- @Override
- public void handleEvent(Event e) {
- preferences.setValue(Constants.SELECT_CUSTOM_RULES,selectCustomRulesCheckBox.getSelection());
- }
- });
-
+ table.getTable().setHeaderVisible(true);
+ table.getTable().setLinesVisible(true);
+ createRulesTable();
+ table.getTable().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ if (e.detail == SWT.CHECK) {
+ TableItem item = (TableItem) e.item;
+
+ for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
+ Ruleset ruleset = (Ruleset) itr.next();
+ if (item.getText(0) == ruleset.getFolderName())
+ ruleset.setChecked(item.getChecked());
+ }
+ }
+ }
+ });
+
+ selectCustomRulesCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
+ selectCustomRulesCheckBox.setText("Select custom rules");
+
automatedAnalysisCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
- automatedAnalysisCheckBox.setText("Enable Automated Analysis when Saving");
-
+ automatedAnalysisCheckBox.setText("Enable automated analysis when saving");
+
providerDetectionCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
- providerDetectionCheckBox.setText("Enable Provider-Detection Analysis");
+ providerDetectionCheckBox.setText("Enable provider detection analysis");
secureObjectsCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
- secureObjectsCheckBox.setText("Show Secure Objects");
+ secureObjectsCheckBox.setText("Show secure objects");
analyseDependenciesCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
- analyseDependenciesCheckBox.setText("Include Dependencies into Project Analysis");
+ analyseDependenciesCheckBox.setText("Include dependencies to projects analysis");
analyseDependenciesCheckBox.setSelection(preferences.getBoolean(Constants.ANALYSE_DEPENDENCIES));
-
+
+ suppressLegacyClientErrorsCheckBox = new Button(staticAnalysisGroup, SWT.CHECK);
+ suppressLegacyClientErrorsCheckBox.setText("Suppress warnings related to legacy code generated by CogniCrypt");
+ suppressLegacyClientErrorsCheckBox.setSelection(preferences.getBoolean(Constants.SUPPRESS_LEGACYCLIENT_ERRORS));
+
+ addNewRulesetButton = new Button(staticAnalysisGroup, SWT.PUSH);
+ addNewRulesetButton.setText("Add ruleset");
+ addNewRulesetButton.addListener(SWT.Selection, new Listener() {
+
+ @Override
+ public void handleEvent(Event e) {
+ addNewRuleset();
+ }
+ });
}
-
+
protected void addNewRuleset() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
AddNewRulesetDialog dialog = new AddNewRulesetDialog(window.getShell());
dialog.create();
if (dialog.open() == Window.OK) {
- if (ifExists(dialog.getRulesetUrl())) {
+ if(ifExists(dialog.getRulesetUrl())) {
MessageDialog.openError(window.getShell(), "Duplicate Ruleset", "You are trying to add an existing ruleset!");
return;
- } else {
- if (ArtifactUtils.downloadRulesets(dialog.getRulesetUrl())) {
+ }
+ else {
+ if(ArtifactUtils.downloadRulesets(dialog.getRulesetUrl())) {
Activator.getDefault().logInfo("Rulesets updated.");
}
Ruleset newRuleset = new Ruleset(dialog.getRulesetUrl());
@@ -295,11 +307,11 @@ protected void addNewRuleset() {
}
}
}
-
+
boolean ifExists(String url) {
List existingRulesets = getRulesetsFromPrefs();
for (Ruleset ruleset : existingRulesets) {
- if (ruleset.getUrl().equals(url)) {
+ if(ruleset.getUrl().equals(url)) {
return true;
}
}
@@ -360,7 +372,7 @@ private void createAdvancedContents(Composite parent) {
final Composite constraintContainer = new Composite(errorTypeGroup, SWT.None);
constraintContainer.setLayout(new GridLayout(2, true));
final Label constraintLabel = new Label(constraintContainer, SWT.None);
- constraintLabel.setText("Incorrect-Parameter Problem:");
+ constraintLabel.setText("Incorrect Parameter Problem:");
constraint = new Combo(constraintContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
constraint.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
@@ -368,7 +380,7 @@ private void createAdvancedContents(Composite parent) {
final Composite typestateContainer = new Composite(errorTypeGroup, SWT.None);
typestateContainer.setLayout(new GridLayout(2, true));
final Label typestateLabel = new Label(typestateContainer, SWT.None);
- typestateLabel.setText("Incorrect-Method-Call Problem:");
+ typestateLabel.setText("Incorrect Method Call Problem:");
typestate = new Combo(typestateContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
typestate.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
@@ -376,14 +388,14 @@ private void createAdvancedContents(Composite parent) {
final Composite incompleteContainer = new Composite(errorTypeGroup, SWT.None);
incompleteContainer.setLayout(new GridLayout(2, true));
final Label incompleteLabel = new Label(incompleteContainer, SWT.None);
- incompleteLabel.setText("Missing-Method-Call Problem:");
+ incompleteLabel.setText("Missing Method Call Problem:");
incompleteOp = new Combo(incompleteContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
incompleteOp.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
final Composite forbiddenContainer = new Composite(errorTypeGroup, SWT.None);
forbiddenContainer.setLayout(new GridLayout(2, true));
final Label forbiddenLabel = new Label(forbiddenContainer, SWT.None);
- forbiddenLabel.setText("Forbidden-Method Problem:");
+ forbiddenLabel.setText("Forbidden Method Problem:");
forbidden = new Combo(forbiddenContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
forbidden.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
@@ -391,7 +403,7 @@ private void createAdvancedContents(Composite parent) {
final Composite reqPredContainer = new Composite(errorTypeGroup, SWT.None);
reqPredContainer.setLayout(new GridLayout(2, true));
final Label reqPredLabel = new Label(reqPredContainer, SWT.None);
- reqPredLabel.setText("Insecure-Class-Composition Problem:");
+ reqPredLabel.setText("Insecure Class Composition Problem:");
reqPred = new Combo(reqPredContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
reqPred.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
@@ -399,33 +411,35 @@ private void createAdvancedContents(Composite parent) {
final Composite neverTypeContainer = new Composite(errorTypeGroup, SWT.None);
neverTypeContainer.setLayout(new GridLayout(2, true));
final Label neverTypeLabel = new Label(neverTypeContainer, SWT.None);
- neverTypeLabel.setText("Wrong-Type Problem:");
+ neverTypeLabel.setText("Wrong Type Problem:");
neverType = new Combo(neverTypeContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
neverType.setItems(Arrays.stream(Constants.Severities.values()).map(Enum::name).toArray(String[]::new));
}
/***
- * This method assigns default values for each of the preference options and is invoked when Restore defaults is clicked.
- */
+ * This method assigns default values for each of the preference options and is
+ * invoked when Restore defaults is clicked.
+ */
@Override
public void setDefaultValues() {
- selectCustomRulesCheckBox.setSelection(preferences.getDefaultBoolean(Constants.SELECT_CUSTOM_RULES));
+ selectCustomRulesCheckBox.setSelection(true);
automatedAnalysisCheckBox.setSelection(preferences.getDefaultBoolean(Constants.AUTOMATED_ANALYSIS));
providerDetectionCheckBox.setSelection(preferences.getDefaultBoolean(Constants.PROVIDER_DETECTION_ANALYSIS));
secureObjectsCheckBox.setSelection(preferences.getDefaultBoolean(Constants.SHOW_SECURE_OBJECTS));
analyseDependenciesCheckBox.setSelection(preferences.getDefaultBoolean(Constants.ANALYSE_DEPENDENCIES));
-
+ suppressLegacyClientErrorsCheckBox.setSelection(preferences.getDefaultBoolean(Constants.SUPPRESS_LEGACYCLIENT_ERRORS));
+
for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
- Ruleset ruleset = (Ruleset) itr.next();
- ruleset.getVersions().select(ruleset.getVersions().getItemCount() - 1);
- if (ruleset.getFolderName().equals("JavaCryptographicArchitecture"))
- ruleset.getRulesRow().setChecked(true);
- else
- ruleset.getRulesRow().setChecked(false);
- ruleset.setSelectedVersion(ruleset.getVersions().getItem(ruleset.getVersions().getItemCount() - 1));
- ruleset.setChecked(ruleset.getRulesRow().getChecked());
- }
-
+ Ruleset ruleset = (Ruleset) itr.next();
+ ruleset.getVersions().select(ruleset.getVersions().getItemCount() - 1);
+ if (ruleset.getFolderName().equals("JavaCryptographicArchitecture"))
+ ruleset.getRulesRow().setChecked(true);
+ else
+ ruleset.getRulesRow().setChecked(false);
+ ruleset.setSelectedVersion(ruleset.getVersions().getItem(ruleset.getVersions().getItemCount() - 1));
+ ruleset.setChecked(ruleset.getRulesRow().getChecked());
+ }
+
CGSelection.select(preferences.getDefaultInt(Constants.CALL_GRAPH_SELECTION));
forbidden.select(preferences.getDefaultInt(Constants.FORBIDDEN_METHOD_MARKER_TYPE));
@@ -449,16 +463,17 @@ protected void storeValues() {
preferences.setValue(Constants.NEVER_TYPEOF_MARKER_TYPE, neverType.getSelectionIndex());
preferences.setValue(Constants.REQUIRED_PREDICATE_MARKER_TYPE, reqPred.getSelectionIndex());
preferences.setValue(Constants.TYPESTATE_ERROR_MARKER_TYPE, typestate.getSelectionIndex());
-
+ preferences.setValue(Constants.SUPPRESS_LEGACYCLIENT_ERRORS, suppressLegacyClientErrorsCheckBox.getSelection());
+
for (Iterator itr = listOfRulesets.iterator(); itr.hasNext();) {
- Ruleset ruleset = (Ruleset) itr.next();
-
- Preferences subPref = rulePreferences.node(ruleset.getFolderName());
- subPref.putBoolean("CheckboxState", ruleset.isChecked());
- subPref.put("FolderName", ruleset.getFolderName());
- subPref.put("SelectedVersion", ruleset.getSelectedVersion());
- subPref.put("Url", ruleset.getUrl());
- }
+ Ruleset ruleset = (Ruleset) itr.next();
+
+ Preferences subPref = rulePreferences.node(ruleset.getFolderName());
+ subPref.putBoolean("CheckboxState", ruleset.isChecked());
+ subPref.put("FolderName", ruleset.getFolderName());
+ subPref.put("SelectedVersion", ruleset.getSelectedVersion());
+ subPref.put("Url", ruleset.getUrl());
+ }
}
}
diff --git a/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/results/ResultsCCUIListener.java b/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/results/ResultsCCUIListener.java
index 397ea2316..3ccfc2c8d 100644
--- a/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/results/ResultsCCUIListener.java
+++ b/plugins/de.cognicrypt.staticanalyzer/src/de/cognicrypt/staticanalyzer/results/ResultsCCUIListener.java
@@ -6,6 +6,11 @@
package de.cognicrypt.staticanalyzer.results;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -68,6 +73,9 @@
import soot.tagkit.AbstractHost;
import typestate.TransitionFunction;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
/**
* This listener is notified of any misuses the analysis finds. It also reports the results of the analysis to the Statistics View
*
@@ -118,9 +126,16 @@ public void analyzeDependenciesOnly(final Boolean depOnly) {
@Override
public void reportError(final AbstractError error) {
IResource sourceFile = null;
+ IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
if (this.depOnly) {
return;
}
+ if (error instanceof ConstraintError) {
+ ConstraintError conError = (ConstraintError) error;
+ if (prefStore.getBoolean(Constants.SUPPRESS_LEGACYCLIENT_ERRORS) && conError.getBrokenConstraint().toString().equals("VC:protocol - TLSv1.2,") && isLegacyClient()) {
+ return;
+ }
+ }
final String errorMessage = error.toErrorMarkerString();
final Statement errorLocation = error.getErrorLocation();
final String errorJimpleBody = errorLocation.getMethod().getActiveBody().toString();
@@ -230,6 +245,27 @@ public void reportError(final AbstractError error) {
}
}
+
+ @SuppressWarnings("unchecked")
+ public Boolean isLegacyClient() {
+ final String path = this.currentProject.getLocation().toOSString() + Constants.innerFileSeparator + Constants.SECURE_COMMUNICATION + Constants.JSON_EXTENSION;
+ JSONParser parser = new JSONParser();
+ try {
+ if (Files.exists(Paths.get(path))) {
+
+ Object obj = parser.parse(new InputStreamReader(new FileInputStream(path)));
+ JSONObject jsonObject = (JSONObject) obj;
+ String clientsQuestion = "Which clients should the server at least support?";
+
+ if (jsonObject.containsKey(clientsQuestion) && jsonObject.get(clientsQuestion).equals("Legacy Clients (since 2001)")) {
+ return true;
+ }
+ }
+ } catch (ParseException | IOException e2) {
+ Activator.getDefault().logError(e2);
+ }
+ return false;
+ }
// It only works when the secure object checkbox in preference page is checked
@Override