From 22fdcbfcdabbbd405b93ff6050ef2e38cc942542 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Sun, 4 Sep 2022 18:44:13 +0200
Subject: [PATCH 01/11] Path handling
---
.../docgen/graphviz/StateMachineToGraphviz.java | 16 ++++++++++++----
src/main/java/de/upb/docgen/utils/Utils.java | 8 ++++++--
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java b/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
index d5932fc..6f757a8 100644
--- a/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
+++ b/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
@@ -13,6 +13,8 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -131,8 +133,11 @@ private static String getShortName(CrySLMethod label) {
}
public static void toPNG(String name) {
- try { MutableGraph g = new Parser().read(new File("dotFSMs\\" + name +".dot"));
- Graphviz.fromGraph(g).render(Format.SVG).toFile(new File("dotFSMs/" +name +".svg"));
+ try {
+ Path dot = Paths.get("dotFSMs", name + ".dot");
+ MutableGraph g = new Parser().read(dot.toFile());
+ Path svg = Paths.get("dotFSMs", name + ".svg");
+ Graphviz.fromGraph(g).render(Format.SVG).toFile(svg.toFile());
} catch (IOException e) {
e.printStackTrace();
@@ -140,8 +145,11 @@ public static void toPNG(String name) {
}
//reads the dot translation and creates a png file that is later used by the FTL template
public static void toPNG(String name, String pathToRootpage) {
- try { MutableGraph g = new Parser().read(new File(pathToRootpage+"\\"+"dotFSMs\\" + name +".dot"));
- Graphviz.fromGraph(g).render(Format.SVG).toFile(new File(pathToRootpage+"/"+"dotFSMs/" +name +".svg"));
+ try {
+ Path dotPath = Paths.get(pathToRootpage, "dotFSMs", name + ".dot");
+ MutableGraph g = new Parser().read(dotPath.toFile());
+ Path svgPath = Paths.get(pathToRootpage, "dotFSMs", name + ".svg");
+ Graphviz.fromGraph(g).render(Format.SVG).toFile(svgPath.toFile());
} catch (IOException e) {
e.printStackTrace();
diff --git a/src/main/java/de/upb/docgen/utils/Utils.java b/src/main/java/de/upb/docgen/utils/Utils.java
index 336d20b..aa8ee70 100644
--- a/src/main/java/de/upb/docgen/utils/Utils.java
+++ b/src/main/java/de/upb/docgen/utils/Utils.java
@@ -11,6 +11,8 @@
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.*;
/**
@@ -143,7 +145,8 @@ public static Map>>> mapPredicates(Map
Date: Sun, 4 Sep 2022 18:56:24 +0200
Subject: [PATCH 02/11] Fix template loader for unix systems
---
.../upb/docgen/writer/FreeMarkerWriter.java | 29 ++++++++++++-------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
index 8ce4165..9906ead 100644
--- a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
+++ b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
@@ -9,6 +9,8 @@
import java.awt.*;
import java.io.*;
import java.net.URI;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.*;
import java.util.List;
@@ -30,7 +32,8 @@ public static void createSidebar(List composedRuleList, Configurat
Map input = new HashMap();
input.put("title", "Sidebar");
input.put("rules", composedRuleList);
- Template template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "sidebar.ftl"));
+ Path sidebarFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"sidebar.ftl");
+ Template template = cfg.getTemplate(sidebarFilePath.toFile().getName());
// 2.3. Generate the output
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"navbar.html"))) {
template.process(input, fileWriter);
@@ -71,7 +74,8 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("booleanF", f);
// 2.2. Get the template
- Template template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+"singleclass.ftl"));
+ File templateFile = new File(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "singleclass.ftl");
+ Template template = cfg.getTemplate(templateFile.getName());
//create composedRules directory where single pages are stored
new File(DocSettings.getInstance().getReportDirectory()+"/"+"composedRules/").mkdir();
@@ -88,7 +92,7 @@ public static void createSinglePage(List composedRuleList, Configu
*/
public static void setupFreeMarker(Configuration cfg) {
// setup freemarker to load absolute paths
- cfg.setTemplateLoader(new TemplateAbsolutePathLoader());
+ //cfg.setTemplateLoader(new TemplateAbsolutePathLoader());
// Some other recommended settings:
cfg.setDefaultEncoding("UTF-8");
cfg.setLocale(Locale.ENGLISH);
@@ -103,18 +107,21 @@ public static void setupFreeMarker(Configuration cfg) {
*/
public static void createCogniCryptLayout(Configuration cfg) throws IOException, TemplateException {
Map input = new HashMap();
- /* Not used anymore
- Template headerTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "header.ftl"));
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"header.html"))) {
- headerTemplate.process(input, fileWriter);
- }
- */
- Template frontpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "frontpage.ftl"));
+ Path frontpageFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"frontpage.ftl");
+ File frontpageFile = frontpageFilePath.toFile();
+ File templateDir = frontpageFile.getParentFile();
+ if ( null == templateDir ){
+ templateDir = new File("./");
+ }
+ cfg.setDirectoryForTemplateLoading(templateDir);
+ Template frontpageTemplate = cfg.getTemplate(frontpageFile.getName());
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
frontpageTemplate.process(input, fileWriter);
}
- Template rootpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "rootpage.ftl"));
+
+ Path rootpageFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"rootpage.ftl");
+ Template rootpageTemplate = cfg.getTemplate(rootpageFilePath.toFile().getName());
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
rootpageTemplate.process(input, fileWriter);
}
From fc8222e7f8bd2df86d3b4e63bb2145e96605314b Mon Sep 17 00:00:00 2001
From: svenfeld <76941845+svenfeld@users.noreply.github.com>
Date: Sun, 4 Sep 2022 19:20:27 +0200
Subject: [PATCH 03/11] Rename ConstraintsVCClauseCon to ConstraintsVcClauseCon
---
.../Templates/{ConstraintsVCClauseCon => ConstraintsVcClauseCon} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename src/main/resources/Templates/{ConstraintsVCClauseCon => ConstraintsVcClauseCon} (100%)
diff --git a/src/main/resources/Templates/ConstraintsVCClauseCon b/src/main/resources/Templates/ConstraintsVcClauseCon
similarity index 100%
rename from src/main/resources/Templates/ConstraintsVCClauseCon
rename to src/main/resources/Templates/ConstraintsVcClauseCon
From d421498518315c13f083d012b8886d2718a9c795 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Wed, 5 Oct 2022 16:36:44 +0200
Subject: [PATCH 04/11] Default ressource handling
---
src/main/java/de/upb/docgen/DocSettings.java | 22 +++----
.../de/upb/docgen/DocumentGeneratorMain.java | 46 +++++++++----
src/main/java/de/upb/docgen/Order.java | 21 +++++-
.../java/de/upb/docgen/crysl/CrySLReader.java | 61 +++++++++++++++--
.../graphviz/StateMachineToGraphviz.java | 11 +++-
.../utils/FTLTemplateLoaderFromJar.java | 27 ++++++++
src/main/java/de/upb/docgen/utils/Utils.java | 50 ++++++++++++--
.../upb/docgen/writer/FreeMarkerWriter.java | 65 ++++++++++++++++---
.../resources/FTLTemplates/singleclass.ftl | 2 +-
9 files changed, 257 insertions(+), 48 deletions(-)
create mode 100644 src/main/java/de/upb/docgen/utils/FTLTemplateLoaderFromJar.java
diff --git a/src/main/java/de/upb/docgen/DocSettings.java b/src/main/java/de/upb/docgen/DocSettings.java
index fe23176..c5f2eab 100644
--- a/src/main/java/de/upb/docgen/DocSettings.java
+++ b/src/main/java/de/upb/docgen/DocSettings.java
@@ -116,7 +116,6 @@ public void parseSettingsFromCLI(String[] settings) {
case "--rulesdir":
setRulesetPathDir(settings[i+1]);
i++;
- mandatorySettings++;
break;
case "--reportpath":
setReportDirectory(settings[i+1]);
@@ -126,12 +125,10 @@ public void parseSettingsFromCLI(String[] settings) {
case "--ftltemplatespath":
setFTLTemplatesPath(settings[i+1]);
i++;
- mandatorySettings++;
break;
case "--langtemplatespath":
setLangTemplatesPath(settings[i+1]);
i++;
- mandatorySettings++;
break;
case "--booleana":
setBooleanA(false);
@@ -159,32 +156,31 @@ public void parseSettingsFromCLI(String[] settings) {
System.exit(255);
}
}
- if(mandatorySettings != 4) {
+
+ if(mandatorySettings != 1) {
showErrorMessage();
System.exit(255);
}
+
}
private static void showErrorMessage() {
String errorMessage = "An error occurred while trying to parse the CLI arguments.\n"
+"The default command for running CogniCryptDOC is: \n"+
"java -jar \\\r\n"+
- " --rulesDir \\\r\n" +
- " --FTLtemplatesPath \\\r\n" +
- " --LANGtemplatesPath \\\r\n" +
" --reportPath \n";
System.out.println(errorMessage);
}
private static void showErrorMessage(String arg) {
String errorMessage = "An error occurred while trying to parse the CLI argument: "+arg+".\n"
- +"The default command for running CogniCryptDOC is: \n"+
- "java -jar \\\r\n"+
- " --rulesDir \\\r\n" +
- " --templatesPath \\\r\n" +
- " --LANGtemplatesPath \\\r\n" +
- " --reportPath \n"
+ +"The default command for running CogniCryptDOC is: \n"
+ +"java -jar \\\r\n"
+ +" --reportPath \n"
+ "\nAdditional arguments that can be used are:\n"
+ + " --rulesDir \\\r\n"
+ + " --templatesPath \\\r\n"
+ + " --LANGtemplatesPath \\\r\n"
+ "--booleanA \n"
+ "--booleanB \n"
+ "--booleanC \n"
diff --git a/src/main/java/de/upb/docgen/DocumentGeneratorMain.java b/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
index 9375c3b..fd34178 100644
--- a/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
+++ b/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
@@ -1,6 +1,9 @@
package de.upb.docgen;
import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
import java.util.*;
import crypto.rules.CrySLPredicate;
@@ -25,12 +28,28 @@ public class DocumentGeneratorMain {
public static void main(String[] args) throws IOException, TemplateException {
//create singleton to access parsed flags from other classes
+ System.out.println("Starting the documentation generation.");
+ Map rules;
DocSettings docSettings = DocSettings.getInstance();
docSettings.parseSettingsFromCLI(args);
- //generate Graphviz dot and pngs set --booleanC to turnOff generation
- if(docSettings.isBooleanE()) StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getRulesetPathDir(),docSettings.getReportDirectory());
//read CryslRules from absolutePath provided by the user
- Map rules = CrySLReader.readRulesFromSourceFiles(docSettings.getRulesetPathDir());
+ if (docSettings.getRulesetPathDir() != null) {
+ rules = CrySLReader.readRulesFromSourceFiles(docSettings.getRulesetPathDir());
+ //Generate dot files from given ruleset
+ if(docSettings.isBooleanE()) {
+ System.out.println("Generating the statemachine files from " + docSettings.getRulesetPathDir() + ".");
+ StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getRulesetPathDir(),docSettings.getReportDirectory());
+ }
+ } else {
+ //read rules from jar resources
+ rules = CrySLReader.readRulesFromJar();
+ //generate dot files from jar resources
+ if(docSettings.isBooleanE()) {
+ System.out.println("Generating the statemachine files from default resources.");
+ StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getReportDirectory());
+ }
+ }
+ //read CryslRules from absolutePath provided by the user
ClassEventForb cef = new ClassEventForb();
ConstraintsVc valueconstraint = new ConstraintsVc();
@@ -122,22 +141,23 @@ public static void main(String[] args) throws IOException, TemplateException {
//Freemarker Setup and create cognicryptdoc html pages
+ System.out.println("Using FreeMarker to generate the html files of the documentation.");
Configuration cfg = new Configuration(new Version(2, 3, 20));
FreeMarkerWriter.setupFreeMarker(cfg);
FreeMarkerWriter.createCogniCryptLayout(cfg);
FreeMarkerWriter.createSidebar(composedRuleList, cfg);
FreeMarkerWriter.createSinglePage(composedRuleList, cfg, ensToReq, reqToEns, docSettings.isBooleanA(), docSettings.isBooleanB(), docSettings.isBooleanC() , docSettings.isBooleanD() , docSettings.isBooleanE() , docSettings.isBooleanF());
- //copy CryslRulesFolder into generated Cognicrypt folder
- //specifify this flag to distribute the documentation
- if (!docSettings.isBooleanF()) {
- File source = new File(docSettings.getRulesetPathDir());
- File dest = new File(docSettings.getReportDirectory() + File.separator + "rules");
- try {
- FileUtils.copyDirectory(source, dest);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ new File(docSettings.getReportDirectory() + File.separator + "rules").mkdir();
+ Map rulesDist;
+ if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
+ rulesDist = CrySLReader.readRulesFromJar();
+ } else {
+ rulesDist = CrySLReader.readRulesFromSourceFiles(docSettings.getRulesetPathDir());
+ }
+ for (File f : rulesDist.keySet()) {
+ Files.copy(f.toPath(), Paths.get(docSettings.getReportDirectory() , "rules", f.getName()), StandardCopyOption.REPLACE_EXISTING);
}
+ System.out.println("Generated the documentation to " + docSettings.getReportDirectory());
diff --git a/src/main/java/de/upb/docgen/Order.java b/src/main/java/de/upb/docgen/Order.java
index 9514f4b..db5c6de 100644
--- a/src/main/java/de/upb/docgen/Order.java
+++ b/src/main/java/de/upb/docgen/Order.java
@@ -19,6 +19,8 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import de.upb.docgen.crysl.CrySLReader;
+import de.upb.docgen.utils.Utils;
import org.apache.commons.lang3.StringUtils;
import crypto.rules.CrySLRule;
@@ -52,6 +54,12 @@ private static List getCryslFiles(String folderPath) throws IOException {
return fileNames;
}
+ private static List getCryslFiles() throws IOException {
+ Map rules = CrySLReader.readRulesFromSourceFiles(DocSettings.getInstance().getRulesetPathDir());
+ return new ArrayList<>(rules.keySet());
+
+ }
+
// reading the file and adding it to map(k,v), k- event , v- content inside it
private static Map> readCryslFile(String filePath) throws IOException {
Map> cryslFileContentMap = new LinkedHashMap<>();
@@ -84,7 +92,16 @@ private static Map getSymValues() throws IOException {
Properties properties = new Properties();
try {
- File fileone = new File(DocSettings.getInstance().getLangTemplatesPath()+"/symbol.properties");
+ File fileone;
+ String pathToSymbolPropertiesFolder;
+ if (DocSettings.getInstance().getLangTemplatesPath() == null) {
+ pathToSymbolPropertiesFolder = Order.class.getResource("/Templates").getPath();
+ String folderName = pathToSymbolPropertiesFolder.substring(pathToSymbolPropertiesFolder.lastIndexOf("/") + 1);
+ fileone = Utils.extract(folderName + "/symbol.properties");
+ } else {
+ pathToSymbolPropertiesFolder = DocSettings.getInstance().getLangTemplatesPath();
+ fileone = new File(pathToSymbolPropertiesFolder+"/symbol.properties");
+ }
FileInputStream fileInput = new FileInputStream(fileone);
properties.load(fileInput);
fileInput.close();
@@ -350,7 +367,7 @@ private static void getProcessedMap(List eventList) {
public List runOrder(CrySLRule rule, File file) throws IOException {
String cname = new String(rule.getClassName().replace(".", ","));
List strArray = Arrays.asList(cname.split(","));
- List fileNames = getCryslFiles(FOLDER_PATH);
+ //List fileNames = getCryslFiles(FOLDER_PATH);
// for (File file : fileNames)
diff --git a/src/main/java/de/upb/docgen/crysl/CrySLReader.java b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
index 2656d1e..68310d7 100644
--- a/src/main/java/de/upb/docgen/crysl/CrySLReader.java
+++ b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
@@ -1,14 +1,21 @@
package de.upb.docgen.crysl;
import java.io.File;
+import java.io.IOException;
import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
import crypto.cryslhandler.CrySLModelReader;
import crypto.rules.CrySLRule;
+import de.upb.docgen.utils.Utils;
+import sun.misc.Launcher;
/**
* @author Ritika Singh
@@ -43,4 +50,50 @@ public static Map readRulesFromSourceFiles(final String folderP
return null;
}
+
+ public static Map readRulesFromJar() throws IOException {
+
+ final String path = "CrySLRules";
+ final File jarFile = new File(CrySLReader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+ CrySLModelReader cryslmodelreader = new CrySLModelReader();
+
+ Map rules = new HashMap<>();
+ if(jarFile.isFile()) { // Run with JAR file
+ final JarFile jar = new JarFile(jarFile);
+ final Enumeration entries = jar.entries(); //gives ALL entries in jar
+ while(entries.hasMoreElements()) {
+ final JarEntry name = entries.nextElement();
+ if (name.getName().endsWith(".crysl")) { //only handle crysl files
+ File extractedRule = Utils.extract(name.getName()); //Create a temporary crysl file
+ String shortend = extractedRule.getName().substring(0,extractedRule.getName().indexOf("crysl")+"crysl".length()); //CrySL Rule name without temp file ending
+ Files.move(extractedRule.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
+ File renamedTempFile = (Paths.get(shortend).toFile());
+ CrySLRule rule = cryslmodelreader.readRule(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
+ renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
+ rules.put(renamedTempFile, rule);
+
+ }
+ }
+ jar.close();
+ } else { // Run with IDE
+ final URL url = Launcher.class.getResource("/" + path);
+ if (url != null) {
+ try {
+ final File apps = new File(url.toURI());
+ for (File file : apps.listFiles()) {
+ rules.put(file, cryslmodelreader.readRule(file));
+
+ }
+ } catch (URISyntaxException ex) {
+
+ }
+ }
+ }
+ return rules;
+
+
+ }
+
+
+
}
\ No newline at end of file
diff --git a/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java b/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
index 6f757a8..21e702e 100644
--- a/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
+++ b/src/main/java/de/upb/docgen/graphviz/StateMachineToGraphviz.java
@@ -37,7 +37,16 @@ public static void main(String[] args) throws IOException {
//Runs the translation and generation of PNG for every rule
public static void generateGraphvizStateMachines(String pathToCryslRules, String pathToRootpage) throws IOException {
Map rules = CrySLReader.readRulesFromSourceFiles(pathToCryslRules);
- new File(pathToRootpage+"/"+"dotFSMs/").mkdir();
+ new File(pathToRootpage + "/" + "dotFSMs/").mkdir();
+ for (Map.Entry ruleEntry : rules.entrySet()) {
+ rulesOrderSectionToDot(ruleEntry.getValue(), pathToRootpage);
+ toPNG(ruleEntry.getValue().getClassName(), pathToRootpage);
+ }
+ }
+
+ public static void generateGraphvizStateMachines(String pathToRootpage) throws IOException {
+ Map rules = CrySLReader.readRulesFromJar();
+ new File(pathToRootpage + "/" + "dotFSMs/").mkdir();
for (Map.Entry ruleEntry : rules.entrySet()) {
rulesOrderSectionToDot(ruleEntry.getValue(), pathToRootpage);
toPNG(ruleEntry.getValue().getClassName(), pathToRootpage);
diff --git a/src/main/java/de/upb/docgen/utils/FTLTemplateLoaderFromJar.java b/src/main/java/de/upb/docgen/utils/FTLTemplateLoaderFromJar.java
new file mode 100644
index 0000000..3050d13
--- /dev/null
+++ b/src/main/java/de/upb/docgen/utils/FTLTemplateLoaderFromJar.java
@@ -0,0 +1,27 @@
+package de.upb.docgen.utils;
+
+import de.upb.docgen.Order;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+public class FTLTemplateLoaderFromJar {
+ public static File readFtlTemplateFromJar(String templateName) throws IOException {
+ String pathToLangTemplates = Order.class.getResource("/FTLTemplates").getPath();
+ File template;
+ String folderName = pathToLangTemplates.substring(pathToLangTemplates.lastIndexOf("/") + 1);
+ template = Utils.extract(folderName + "/" + templateName);
+ return template;
+ /*
+ String shortend = template.getName().substring(0,template.getName().indexOf("ftl")+"ftl".length()); //CrySL Rule name without temp file ending
+ Files.move(template.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
+ File renamedTempFile = (Paths.get(shortend).toFile());
+ renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
+ return renamedTempFile;
+
+*/
+ }
+}
diff --git a/src/main/java/de/upb/docgen/utils/Utils.java b/src/main/java/de/upb/docgen/utils/Utils.java
index aa8ee70..8f9087e 100644
--- a/src/main/java/de/upb/docgen/utils/Utils.java
+++ b/src/main/java/de/upb/docgen/utils/Utils.java
@@ -7,6 +7,8 @@
import crypto.rules.TransitionEdge;
import de.upb.docgen.ComposedRule;
import de.upb.docgen.DocSettings;
+import de.upb.docgen.Order;
+import de.upb.docgen.crysl.CrySLReader;
import java.io.*;
import java.net.URL;
@@ -145,8 +147,16 @@ public static Map>>> mapPredicates(Map 0) {
+//Write the bytes to the output stream
+ resourceOS.write(byteArray, 0, i);
+ }
+//Close streams to prevent errors
+ classIS.close();
+ resourceOS.close();
+ return f;
+ } catch (Exception e) {
+ System.out.println("Error during the file creation process from jar: " + e.getMessage());
+ return null;
+ }
+ }
+
+
}
diff --git a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
index 9906ead..001c054 100644
--- a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
+++ b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
@@ -1,6 +1,7 @@
package de.upb.docgen.writer;
import de.upb.docgen.*;
+import de.upb.docgen.utils.FTLTemplateLoaderFromJar;
import de.upb.docgen.utils.TemplateAbsolutePathLoader;
import de.upb.docgen.utils.TreeNode;
import de.upb.docgen.utils.Utils;
@@ -32,8 +33,23 @@ public static void createSidebar(List composedRuleList, Configurat
Map input = new HashMap();
input.put("title", "Sidebar");
input.put("rules", composedRuleList);
- Path sidebarFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"sidebar.ftl");
- Template template = cfg.getTemplate(sidebarFilePath.toFile().getName());
+ File sidebarFile;
+ String pathToFTLTemplatesFolder;
+ if (DocSettings.getInstance().getLangTemplatesPath() == null) {
+ pathToFTLTemplatesFolder = Order.class.getResource("/FTLTemplates").getPath();
+ String folderName = pathToFTLTemplatesFolder.substring(pathToFTLTemplatesFolder.lastIndexOf("/") + 1);
+ //sidebarFile = Utils.extract(folderName + "/sidebar.ftl");
+ sidebarFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("sidebar.ftl");
+ } else {
+ pathToFTLTemplatesFolder = DocSettings.getInstance().getLangTemplatesPath();
+ sidebarFile = new File(pathToFTLTemplatesFolder+"/sidebar.ftl");
+ }
+ //Template template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "sidebar.ftl"));
+ System.out.println(sidebarFile.getAbsolutePath());
+ Template template = cfg.getTemplate(sidebarFile.getName());
+
+ //Path sidebarFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"sidebar.ftl");
+ //Template template = cfg.getTemplate(sidebarFilePath.toFile().getName());
// 2.3. Generate the output
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"navbar.html"))) {
template.process(input, fileWriter);
@@ -64,7 +80,7 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("ensures", rootEns); //ensures tree parsed by the template
//necessary input for the template to load abslote path from crysl rule which can be displayed
- input.put("pathToRules", Utils.pathForTemplates("file://"+DocSettings.getInstance().getRulesetPathDir()));
+ input.put("pathToRules", Utils.pathForTemplates("file://"+DocSettings.getInstance().getReportDirectory()+"/rules"));
//Set flags
input.put("booleanA", a); //To show StateMachineGraph
input.put("booleanB", b); //To show Help Button
@@ -74,8 +90,18 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("booleanF", f);
// 2.2. Get the template
- File templateFile = new File(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "singleclass.ftl");
- Template template = cfg.getTemplate(templateFile.getName());
+ //File templateFile = new File(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "singleclass.ftl");
+ File singleclassFile;
+ String pathToFTLTemplatesFolder;
+ if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
+ pathToFTLTemplatesFolder = Order.class.getResource("/FTLTemplates").getPath();
+ String folderName = pathToFTLTemplatesFolder.substring(pathToFTLTemplatesFolder.lastIndexOf("/") + 1);
+ singleclassFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("singleclass.ftl");
+ } else {
+ pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
+ singleclassFile = new File(pathToFTLTemplatesFolder+"/singleclass.ftl");
+ }
+ Template template = cfg.getTemplate(singleclassFile.getName());
//create composedRules directory where single pages are stored
new File(DocSettings.getInstance().getReportDirectory()+"/"+"composedRules/").mkdir();
@@ -108,8 +134,20 @@ public static void setupFreeMarker(Configuration cfg) {
public static void createCogniCryptLayout(Configuration cfg) throws IOException, TemplateException {
Map input = new HashMap();
- Path frontpageFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"frontpage.ftl");
- File frontpageFile = frontpageFilePath.toFile();
+ File frontpageFile;
+ String pathToFTLTemplatesFolder;
+ if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
+ pathToFTLTemplatesFolder = Order.class.getResource("/FTLTemplates").getPath();
+ String folderName = pathToFTLTemplatesFolder.substring(pathToFTLTemplatesFolder.lastIndexOf("/") + 1);
+ frontpageFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar( "frontpage.ftl");
+ } else {
+ pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
+ frontpageFile = new File(pathToFTLTemplatesFolder+"/frontpage.ftl");
+ }
+
+ //Path frontpageFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"frontpage.ftl");
+ //Path frontpageFilePath = frontpageFile.toPath();
+ //File frontpage = frontpageFilePath.toFile();
File templateDir = frontpageFile.getParentFile();
if ( null == templateDir ){
templateDir = new File("./");
@@ -119,9 +157,16 @@ public static void createCogniCryptLayout(Configuration cfg) throws IOException,
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
frontpageTemplate.process(input, fileWriter);
}
-
- Path rootpageFilePath = Paths.get(DocSettings.getInstance().getFtlTemplatesPath(),"rootpage.ftl");
- Template rootpageTemplate = cfg.getTemplate(rootpageFilePath.toFile().getName());
+ File rootpageFile;
+ if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
+ pathToFTLTemplatesFolder = Order.class.getResource("/FTLTemplates").getPath();
+ String folderName = pathToFTLTemplatesFolder.substring(pathToFTLTemplatesFolder.lastIndexOf("/") + 1);
+ rootpageFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("rootpage.ftl");
+ } else {
+ pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
+ rootpageFile = new File(pathToFTLTemplatesFolder+"/rootpage.ftl");
+ }
+ Template rootpageTemplate = cfg.getTemplate(rootpageFile.getName());
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
rootpageTemplate.process(input, fileWriter);
}
diff --git a/src/main/resources/FTLTemplates/singleclass.ftl b/src/main/resources/FTLTemplates/singleclass.ftl
index 1b8f1fa..97cf52d 100644
--- a/src/main/resources/FTLTemplates/singleclass.ftl
+++ b/src/main/resources/FTLTemplates/singleclass.ftl
@@ -414,7 +414,7 @@
The CrySL rule on Github.
-
#if>
From f6203010aec6a57b2ac690c52c6d629bfe62b746 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Wed, 19 Oct 2022 18:40:40 +0200
Subject: [PATCH 06/11] Refactor
---
.../upb/docgen/writer/FreeMarkerWriter.java | 56 +++++++------------
1 file changed, 21 insertions(+), 35 deletions(-)
diff --git a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
index 79a75b7..08c6c41 100644
--- a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
+++ b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
@@ -33,18 +33,9 @@ public static void createSidebar(List composedRuleList, Configurat
Map input = new HashMap();
input.put("title", "Sidebar");
input.put("rules", composedRuleList);
- File sidebarFile;
- String pathToFTLTemplatesFolder;
- if (DocSettings.getInstance().getLangTemplatesPath() == null) {
- sidebarFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("sidebar.ftl");
- } else {
- pathToFTLTemplatesFolder = DocSettings.getInstance().getLangTemplatesPath();
- sidebarFile = new File(pathToFTLTemplatesFolder+"/sidebar.ftl");
- }
+ File sidebarFile = getTemplateFile("sidebar.ftl");
Template template = cfg.getTemplate(sidebarFile.getName());
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"navbar.html"))) {
- template.process(input, fileWriter);
- }
+ processTemplate(input, template, "navbar.html");
}
/**
@@ -77,14 +68,7 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("booleanE", e);
input.put("booleanF", f);
- File singleclassFile;
- String pathToFTLTemplatesFolder;
- if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
- singleclassFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("singleclass.ftl");
- } else {
- pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
- singleclassFile = new File(pathToFTLTemplatesFolder+"/singleclass.ftl");
- }
+ File singleclassFile = getTemplateFile("singleclass.ftl");
Template template = cfg.getTemplate(singleclassFile.getName());
//create composedRules directory where single pages are stored
@@ -117,33 +101,35 @@ public static void createCogniCryptLayout(Configuration cfg) throws IOException,
Map input = new HashMap();
File frontpageFile;
- String pathToFTLTemplatesFolder;
- if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
- frontpageFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar( "frontpage.ftl");
- } else {
- pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
- frontpageFile = new File(pathToFTLTemplatesFolder+"/frontpage.ftl");
- }
+ frontpageFile = getTemplateFile("frontpage.ftl");
File templateDir = frontpageFile.getParentFile();
if ( null == templateDir ){
templateDir = new File("./");
}
cfg.setDirectoryForTemplateLoading(templateDir);
Template frontpageTemplate = cfg.getTemplate(frontpageFile.getName());
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
- frontpageTemplate.process(input, fileWriter);
+ processTemplate(input, frontpageTemplate, "frontpage.html");
+ File rootpageFile = getTemplateFile("rootpage.ftl");
+ Template rootpageTemplate = cfg.getTemplate(rootpageFile.getName());
+ processTemplate(input, rootpageTemplate, "rootpage.html");
+ }
+
+ private static void processTemplate(Map input, Template rootpageTemplate, String htmlName) throws IOException, TemplateException {
+ try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+ htmlName))) {
+ rootpageTemplate.process(input, fileWriter);
}
- File rootpageFile;
+ }
+
+ private static File getTemplateFile(String templateName) throws IOException {
+ File frontpageFile;
+ String pathToFTLTemplatesFolder;
if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
- rootpageFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar("rootpage.ftl");
+ frontpageFile = FTLTemplateLoaderFromJar.readFtlTemplateFromJar( templateName);
} else {
pathToFTLTemplatesFolder = DocSettings.getInstance().getFtlTemplatesPath();
- rootpageFile = new File(pathToFTLTemplatesFolder+"/rootpage.ftl");
- }
- Template rootpageTemplate = cfg.getTemplate(rootpageFile.getName());
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
- rootpageTemplate.process(input, fileWriter);
+ frontpageFile = new File(pathToFTLTemplatesFolder + "/" + templateName);
}
+ return frontpageFile;
}
}
From aa521091581df09f9c2855fa9b64609f7419d2c9 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Fri, 19 Jul 2024 11:07:16 +0200
Subject: [PATCH 07/11] default resource loading for java11
---
src/main/java/de/upb/docgen/DocSettings.java | 8 +-
.../de/upb/docgen/DocumentGeneratorMain.java | 100 +++++----
src/main/java/de/upb/docgen/Order.java | 38 +++-
.../java/de/upb/docgen/crysl/CrySLReader.java | 192 +++++++++++++++---
src/main/java/de/upb/docgen/utils/Utils.java | 17 +-
.../upb/docgen/writer/FreeMarkerWriter.java | 62 ++++--
6 files changed, 316 insertions(+), 101 deletions(-)
diff --git a/src/main/java/de/upb/docgen/DocSettings.java b/src/main/java/de/upb/docgen/DocSettings.java
index 959484f..f2bdf79 100644
--- a/src/main/java/de/upb/docgen/DocSettings.java
+++ b/src/main/java/de/upb/docgen/DocSettings.java
@@ -118,7 +118,7 @@ public void parseSettingsFromCLI(String[] settings) {
case "--rulesdir":
setRulesetPathDir(settings[i + 1]);
i++;
- mandatorySettings++;
+ // mandatorySettings++;
break;
case "--reportpath":
setReportDirectory(settings[i + 1]);
@@ -128,12 +128,12 @@ public void parseSettingsFromCLI(String[] settings) {
case "--ftltemplatespath":
setFTLTemplatesPath(settings[i + 1]);
i++;
- mandatorySettings++;
+ // mandatorySettings++;
break;
case "--langtemplatespath":
setLangTemplatesPath(settings[i + 1]);
i++;
- mandatorySettings++;
+ // mandatorySettings++;
break;
case "--booleana":
setBooleanA(false);
@@ -161,7 +161,7 @@ public void parseSettingsFromCLI(String[] settings) {
System.exit(255);
}
}
- if (mandatorySettings != 4) {
+ if (mandatorySettings != 1) {
showErrorMessage();
System.exit(255);
}
diff --git a/src/main/java/de/upb/docgen/DocumentGeneratorMain.java b/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
index 0dde0b3..1fe12b6 100644
--- a/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
+++ b/src/main/java/de/upb/docgen/DocumentGeneratorMain.java
@@ -1,22 +1,24 @@
package de.upb.docgen;
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.util.*;
-
import crypto.exceptions.CryptoAnalysisException;
import crypto.rules.CrySLPredicate;
import crypto.rules.CrySLRule;
import crypto.rules.CrySLRuleReader;
+import de.upb.docgen.crysl.CrySLReader;
import de.upb.docgen.utils.PredicateTreeGenerator;
import de.upb.docgen.utils.TreeNode;
import de.upb.docgen.utils.Utils;
import de.upb.docgen.writer.FreeMarkerWriter;
-import freemarker.template.*;
+import freemarker.template.Configuration;
+import freemarker.template.TemplateException;
+import freemarker.template.Version;
+import org.apache.commons.io.FileUtils;
-import javax.print.Doc;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
+import java.util.*;
/**
* @author Ritika Singh
@@ -32,28 +34,17 @@ public static void main(String[] args) throws IOException, TemplateException, Cr
DocSettings docSettings = DocSettings.getInstance();
System.out.println("Parsing CLI Flags");
docSettings.parseSettingsFromCLI(args);
- //read CryslRules from absolutePath provided by the user
+
+ // read CryslRules from absolutePath provided by the user
+ System.out.println("Reading CrySL Rules");
+
+
+ List rules = null;
if (docSettings.getRulesetPathDir() != null) {
- rules = CrySLReader.readCrySLRuleFromSourceFiles(docSettings.getRulesetPathDir());
- //Generate dot files from given ruleset
- if(docSettings.isBooleanE()) {
- System.out.println("Generating the statemachine files from " + docSettings.getRulesetPathDir() + ".");
- StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getRulesetPathDir(),docSettings.getReportDirectory());
- }
+ rules = ruleReader.readFromDirectory(new File(docSettings.getRulesetPathDir()));
} else {
- //read rules from jar resources
rules = CrySLReader.readRulesFromJar();
- //generate dot files from jar resources
- if(docSettings.isBooleanE()) {
- System.out.println("Generating the statemachine files from default resources.");
- StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getReportDirectory());
- }
}
- //read CryslRules from absolutePath provided by the user
-
- // read CryslRules from absolutePath provided by the user
- System.out.println("Reading CrySL Rules");
- List rules = ruleReader.readFromDirectory(new File(docSettings.getRulesetPathDir()));
@@ -159,18 +150,53 @@ public static void main(String[] args) throws IOException, TemplateException, Cr
FreeMarkerWriter.setupFreeMarker(cfg);
FreeMarkerWriter.createCogniCryptLayout(cfg);
FreeMarkerWriter.createSidebar(composedRuleList, cfg);
- FreeMarkerWriter.createSinglePage(composedRuleList, cfg, ensToReq, reqToEns, docSettings.isBooleanA(), docSettings.isBooleanB(), docSettings.isBooleanC() , docSettings.isBooleanD() , docSettings.isBooleanE() , docSettings.isBooleanF());
- new File(docSettings.getReportDirectory() + File.separator + "rules").mkdir();
- Map rulesDist;
- if (DocSettings.getInstance().getFtlTemplatesPath() == null) {
- rulesDist = CrySLReader.readRulesFromJar();
- } else {
- rulesDist = CrySLReader.readCrySLRuleFromSourceFiles(docSettings.getRulesetPathDir());
- }
- for (File f : rulesDist.keySet()) {
- Files.copy(f.toPath(), Paths.get(docSettings.getReportDirectory() , "rules", f.getName()), StandardCopyOption.REPLACE_EXISTING);
+ FreeMarkerWriter.createSinglePage(composedRuleList, cfg, ensToReq, reqToEns, docSettings.isBooleanA(),
+ docSettings.isBooleanB(), docSettings.isBooleanC(), docSettings.isBooleanD(), docSettings.isBooleanE(),
+ docSettings.isBooleanF(), cryslRuleList);
+ // copy CryslRulesFolder into generated Cognicrypt folder
+ // specifify this flag to distribute the documentation
+ System.out.println("CogniCryptDOC generated to: " + DocSettings.getInstance().getReportDirectory());
+ if (!docSettings.isBooleanF()) {
+ boolean readFromJar = false;
+ File source = null;
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ source = new File(docSettings.getRulesetPathDir());
+ } else {
+ readFromJar = true;
+ source = new File("tempRulesDir");
+ if (!source.exists()) {
+ source.mkdir();
+ }
+
+ // Read each rule and save it in the temporary directory
+ for (CrySLRule rule : rules) {
+ File ruleFile = CrySLReader.readRuleFromJarFile(rule.getClassName().substring(rule.getClassName().lastIndexOf(".") + 1));
+ if (ruleFile != null && ruleFile.exists()) {
+ try {
+ // Copy each rule file into the temporary directory
+ Files.copy(ruleFile.toPath(), new File(source, ruleFile.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ File dest = new File(docSettings.getReportDirectory() + File.separator + "rules");
+ try {
+ FileUtils.copyDirectory(source, dest);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ // Cleanup the temporary directory
+ if (readFromJar) {
+ try {
+ FileUtils.deleteDirectory(source);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
- System.out.println("Generated the documentation to " + docSettings.getReportDirectory());
}
diff --git a/src/main/java/de/upb/docgen/Order.java b/src/main/java/de/upb/docgen/Order.java
index 8c6378c..0dfa4a3 100644
--- a/src/main/java/de/upb/docgen/Order.java
+++ b/src/main/java/de/upb/docgen/Order.java
@@ -17,6 +17,8 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import crypto.exceptions.CryptoAnalysisException;
+import de.upb.docgen.crysl.CrySLReader;
import org.apache.commons.lang3.StringUtils;
import crypto.rules.CrySLRule;
@@ -66,7 +68,19 @@ private static Map getSymValues() throws IOException {
Properties properties = new Properties();
try {
- File fileone = new File(DocSettings.getInstance().getLangTemplatesPath() + "/symbol.properties");
+ File fileone = null;
+
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ fileone = new File(DocSettings.getInstance().getLangTemplatesPath() + "/symbol.properties");
+
+ } else {
+ fileone = CrySLReader.readSymbolPropertiesFromJar();
+ }
+
+
+
+
+
FileInputStream fileInput = new FileInputStream(fileone);
properties.load(fileInput);
fileInput.close();
@@ -314,10 +328,24 @@ private static void getProcessedMap(List eventList) {
}
- public List runOrder(CrySLRule file) throws IOException {
- String filePath = DocSettings.getInstance().getRulesetPathDir();
- filePath += File.separator + file.getClassName().substring(file.getClassName().lastIndexOf(".") + 1) + ".crysl";
- Map> fileContent = readCryslFile(filePath);
+ public List runOrder(CrySLRule file) throws IOException, CryptoAnalysisException {
+
+
+ File rule = null;
+ Map> fileContent = null;
+
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ String filePath = DocSettings.getInstance().getRulesetPathDir();
+ filePath += File.separator + file.getClassName().substring(file.getClassName().lastIndexOf(".") + 1) + ".crysl";
+ fileContent = readCryslFile(filePath);
+
+ } else {
+ rule = CrySLReader.readRuleFromJarFile(file.getClassName().substring(file.getClassName().lastIndexOf(".") + 1));
+ fileContent = readCryslFile(rule.getPath());
+ }
+ //String filePath = DocSettings.getInstance().getRulesetPathDir();
+ //filePath += File.separator + file.getClassName().substring(file.getClassName().lastIndexOf(".") + 1) + ".crysl";
+ //Map> fileContent = readCryslFile(filePath);
List objectList = fileContent.get("OBJECTS");
for (String pair : objectList) {
diff --git a/src/main/java/de/upb/docgen/crysl/CrySLReader.java b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
index cd42727..f7d2dde 100644
--- a/src/main/java/de/upb/docgen/crysl/CrySLReader.java
+++ b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
@@ -8,14 +8,17 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
+import java.security.CodeSource;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import crypto.cryslhandler.CrySLModelReader;
+import crypto.exceptions.CryptoAnalysisException;
import crypto.rules.CrySLRule;
+import crypto.rules.CrySLRuleReader;
+import de.upb.docgen.DocSettings;
import de.upb.docgen.utils.Utils;
-import sun.misc.Launcher;
/**
* @author Ritika Singh
@@ -23,72 +26,197 @@
public class CrySLReader {
+/*
+if (docSettings.getRulesetPathDir() != null) {
+ rules = ruleReader.readFromDirectory(new File(docSettings.getRulesetPathDir()));
+ //Generate dot files from given ruleset
+ if(docSettings.isBooleanE()) {
+ System.out.println("Generating the statemachine files from " + docSettings.getRulesetPathDir() + ".");
+ StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getRulesetPathDir(),docSettings.getReportDirectory());
+ }
+ } else {
+ //read rules from jar resources
+ rules = CrySLReader.readRulesFromJar();
+ //generate dot files from jar resources
+ if(docSettings.isBooleanE()) {
+ System.out.println("Generating the statemachine files from default resources.");
+ StateMachineToGraphviz.generateGraphvizStateMachines(docSettings.getReportDirectory());
+ }
+ }
+ */
+
- public static Map readCrySLRuleFromSourceFiles(String folderPath) {
+ public static List readRulesFromJar() throws IOException, CryptoAnalysisException {
- File f = null;
- try {
- CrySLModelReader cryslmodelreader = new CrySLModelReader();
- Map rules = new HashMap<>();
- File[] files = new File(folderPath).listFiles();
- for (File file : files) {
- if (file != null && file.getName().endsWith(".crysl")) {
- f = file;
- rules.put(file, cryslmodelreader.readRule(file));
+ final String path = "CrySLRules";
+ final File jarFile = new File(CrySLReader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+ CrySLRuleReader cryslmodelreader = new CrySLRuleReader();
+
+ List rules = new ArrayList<>();
+
+ if(jarFile.isFile()) { // Run with JAR file
+ final JarFile jar = new JarFile(jarFile);
+ final Enumeration entries = jar.entries(); //gives ALL entries in jar
+ try {
+ while (entries.hasMoreElements()) {
+ final JarEntry name = entries.nextElement();
+ if (name.getName().endsWith(".crysl")) { //only handle crysl files
+ File extractedRule = Utils.extract(name.getName()); //Create a temporary crysl file
+ String shortend = extractedRule.getName().substring(0, extractedRule.getName().indexOf("crysl") + "crysl".length()); //CrySL Rule name without temp file ending
+ Files.move(extractedRule.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
+ File renamedTempFile = (Paths.get(shortend).toFile());
+ System.out.println(renamedTempFile.getPath());
+ CrySLRule rule = cryslmodelreader.readFromSourceFile(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
+ renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
+ rules.add(rule);
+
+ }
}
+ } catch (CryptoAnalysisException ex) {
+
}
- return rules;
+ jar.close();
+
+
+ } else { // Run with IDE
+ final URL url = CrySLReader.class.getResource("/" + path);
+ if (url != null) {
+ try {
+ final File apps = new File(url.toURI());
+ for (File file : apps.listFiles()) {
+ rules.add(cryslmodelreader.readFromSourceFile(file));
+
+ }
+ } catch (URISyntaxException | CryptoAnalysisException ex) {
- } catch (MalformedURLException e) {
- e.printStackTrace();
+ }
+ }
}
- return null;
+ return rules;
+
+
}
- public static Map readRulesFromJar() throws IOException {
+ public static File readRuleFromJarFile(String ruleName) throws IOException, CryptoAnalysisException {
final String path = "CrySLRules";
+ final CodeSource codeSource = CrySLReader.class.getProtectionDomain().getCodeSource();
+ final File jarFile = new File(codeSource.getLocation().getPath());
+ CrySLRuleReader cryslModelReader = new CrySLRuleReader();
+
+ if (jarFile.isFile()) { // Run with JAR file
+ try (JarFile jar = new JarFile(jarFile)) {
+ final Enumeration entries = jar.entries(); // gives ALL entries in jar
+ while (entries.hasMoreElements()) {
+ final JarEntry entry = entries.nextElement();
+ if (entry.getName().endsWith(".crysl") && entry.getName().contains(ruleName)) { // only handle crysl files
+ File extractedRule = Utils.extract(entry.getName()); // Create a temporary crysl file
+ String shortName = extractedRule.getName().substring(0, extractedRule.getName().indexOf("crysl") + "crysl".length()); // CrySL Rule name without temp file ending
+ Files.move(extractedRule.toPath(), Paths.get(shortName), StandardCopyOption.REPLACE_EXISTING);
+ File renamedTempFile = (Paths.get(shortName).toFile());
+ CrySLRule rule = cryslModelReader.readFromSourceFile(renamedTempFile); // Renaming allows the file to be read by the CrySLModelReader
+ renamedTempFile.deleteOnExit(); // Removes the temp CrySL file after JVM is finished
+ return renamedTempFile;
+ }
+ }
+ }
+ } else { // Run with IDE
+ final URL url = CrySLReader.class.getResource("/" + path);
+ if (url != null) {
+ try {
+ final File apps = new File(url.toURI());
+ for (File file : apps.listFiles()) {
+ if (file.getName().contains(ruleName)) {
+ return file;
+ }
+ }
+ } catch (URISyntaxException ex) {
+ // Handle exception
+ }
+ }
+ }
+ return null;
+ }
+
+
+ public static File readSymbolPropertiesFromJar() {
+ final String path = "Templates" + "/" + "symbol.properties";
+ final CodeSource codeSource = CrySLReader.class.getProtectionDomain().getCodeSource();
+ final File jarFile = new File(codeSource.getLocation().getPath());
+
+ if (jarFile.isFile()) { // Run with JAR file
+ try (JarFile jar = new JarFile(jarFile)) {
+ final Enumeration entries = jar.entries(); // gives ALL entries in jar
+ while (entries.hasMoreElements()) {
+ final JarEntry entry = entries.nextElement();
+ if (entry.getName().endsWith(".properties")) { // only handle crysl files
+ File extractedRule = Utils.extract(entry.getName()); // Create a temporary crysl file
+ String shortName = extractedRule.getName().substring(0, extractedRule.getName().indexOf("properties") + "properties".length()); // CrySL Rule name without temp file ending
+ Files.move(extractedRule.toPath(), Paths.get(shortName), StandardCopyOption.REPLACE_EXISTING);
+ File renamedTempFile = (Paths.get(shortName).toFile());
+ //CrySLRule rule = cryslModelReader.readFromSourceFile(renamedTempFile); // Renaming allows the file to be read by the CrySLModelReader
+ renamedTempFile.deleteOnExit(); // Removes the temp CrySL file after JVM is finished
+ return renamedTempFile;
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else { // Run with IDE
+ final URL url = CrySLReader.class.getResource("/" + path);
+ if (url != null) {
+ try {
+ final File apps = new File(url.toURI());
+ return apps;
+ } catch (URISyntaxException ex) {
+ // Handle exception
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+ public static File readFTLFromJar(String FTLname) throws IOException {
+
+ final String path = "FTLTemplates" + "/" + FTLname;
final File jarFile = new File(CrySLReader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
- CrySLModelReader cryslmodelreader = new CrySLModelReader();
- Map rules = new HashMap<>();
+
+
if(jarFile.isFile()) { // Run with JAR file
final JarFile jar = new JarFile(jarFile);
final Enumeration entries = jar.entries(); //gives ALL entries in jar
while(entries.hasMoreElements()) {
final JarEntry name = entries.nextElement();
- if (name.getName().endsWith(".crysl")) { //only handle crysl files
+ if (name.getName().contains(FTLname)) { //only handle crysl files
File extractedRule = Utils.extract(name.getName()); //Create a temporary crysl file
- String shortend = extractedRule.getName().substring(0,extractedRule.getName().indexOf("crysl")+"crysl".length()); //CrySL Rule name without temp file ending
+ String shortend = extractedRule.getName().substring(0,extractedRule.getName().indexOf("ftl")+"ftl".length()); //CrySL Rule name without temp file ending
Files.move(extractedRule.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
File renamedTempFile = (Paths.get(shortend).toFile());
- CrySLRule rule = cryslmodelreader.readRule(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
+ //CrySLRule rule = cryslmodelreader.readFromSourceFile(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
- rules.put(renamedTempFile, rule);
+ return renamedTempFile;
}
}
jar.close();
+
} else { // Run with IDE
- final URL url = Launcher.class.getResource("/" + path);
+ final URL url = CrySLReader.class.getResource("/" + path);
if (url != null) {
try {
final File apps = new File(url.toURI());
- for (File file : apps.listFiles()) {
- rules.put(file, cryslmodelreader.readRule(file));
-
- }
+ return apps;
} catch (URISyntaxException ex) {
-
+ // Handle exception
}
}
}
- return rules;
+ return null;
}
-
-
-
}
\ No newline at end of file
diff --git a/src/main/java/de/upb/docgen/utils/Utils.java b/src/main/java/de/upb/docgen/utils/Utils.java
index 1db3648..085d5b3 100644
--- a/src/main/java/de/upb/docgen/utils/Utils.java
+++ b/src/main/java/de/upb/docgen/utils/Utils.java
@@ -8,13 +8,10 @@
import de.upb.docgen.ComposedRule;
import de.upb.docgen.DocSettings;
import de.upb.docgen.Order;
-import de.upb.docgen.crysl.CrySLReader;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.*;
/**
@@ -22,7 +19,14 @@
*/
public class Utils {
-
+ public static File getFileFromResources(String fileName) {
+ URL resource = Utils.class.getResource(fileName);
+ if (resource == null) {
+ throw new IllegalArgumentException("File could not be found!");
+ } else {
+ return new File(resource.getFile());
+ }
+ }
public static String replaceLast(String string, String toReplace, String replacement) {
int pos = string.lastIndexOf(toReplace);
@@ -184,7 +188,9 @@ public static String getTemplatesTextString(String templateName) throws IOExcept
return strD + "\n";
}
-
+ public static String pathForTemplates(String path) {
+ return path.replaceAll("\\\\","/");
+ }
public static File extract(String filePath) {
try {
@@ -210,5 +216,4 @@ public static File extract(String filePath) {
}
-
}
diff --git a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
index 9f44d14..c8c3b0e 100644
--- a/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
+++ b/src/main/java/de/upb/docgen/writer/FreeMarkerWriter.java
@@ -1,7 +1,9 @@
package de.upb.docgen.writer;
+import crypto.exceptions.CryptoAnalysisException;
import crypto.rules.CrySLRule;
import de.upb.docgen.*;
+import de.upb.docgen.crysl.CrySLReader;
import de.upb.docgen.graphviz.StateMachineToGraphviz;
import de.upb.docgen.utils.TemplateAbsolutePathLoader;
import de.upb.docgen.utils.TreeNode;
@@ -32,7 +34,13 @@ public static void createSidebar(List composedRuleList, Configurat
Map input = new HashMap();
input.put("title", "Sidebar");
input.put("rules", composedRuleList);
- Template template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "sidebar.ftl"));
+ Template template = null;
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/" + "sidebar.ftl"));
+ } else {
+ template = cfg.getTemplate(CrySLReader.readFTLFromJar("sidebar.ftl").getPath());
+
+ }
// 2.3. Generate the output
try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"navbar.html"))) {
template.process(input, fileWriter);
@@ -52,7 +60,7 @@ public static void createSidebar(List composedRuleList, Configurat
* @throws IOException
* @throws TemplateException
*/
- public static void createSinglePage(List composedRuleList, Configuration cfg, Map> reqToEns, Map> ensToReq, boolean a, boolean b, boolean c, boolean d, boolean e, boolean f, List crySLRules) throws IOException, TemplateException {
+ public static void createSinglePage(List composedRuleList, Configuration cfg, Map> reqToEns, Map> ensToReq, boolean a, boolean b, boolean c, boolean d, boolean e, boolean f, List crySLRules) throws IOException, TemplateException, CryptoAnalysisException {
for (int i = 0; i < composedRuleList.size(); i++) {
ComposedRule rule = composedRuleList.get(i);
Map input = new HashMap();
@@ -64,8 +72,12 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("ensures", rootEns); // ensures tree parsed by the template
// necessary input for the template to load absolute path from crysl rule which can be displayed
- input.put("pathToRules", Utils.pathForTemplates("file://" + DocSettings.getInstance().getRulesetPathDir()));
- // Set flags
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ input.put("pathToRules", Utils.pathForTemplates("file://" + DocSettings.getInstance().getRulesetPathDir()));
+ } else {
+ input.put("pathToRules", Utils.pathForTemplates("file://" + CrySLReader.readRuleFromJarFile(composedRuleList.get(i).getOnlyRuleName()).getPath()));
+ }
+ // Set flags
input.put("booleanA", a); // To show StateMachineGraph
input.put("booleanB", b); // To show Help Button
input.put("booleanC", c);
@@ -76,7 +88,12 @@ public static void createSinglePage(List composedRuleList, Configu
input.put("stateMachine", StateMachineToGraphviz.toGraphviz(crySLRules.get(i).getUsagePattern()));
// 2.2. Get the template
- Template template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/" + "singleclass.ftl"));
+ Template template = null;
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ template = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/" + "singleclass.ftl"));
+ } else {
+ template = cfg.getTemplate(CrySLReader.readFTLFromJar("singleclass.ftl").getPath());
+ }
// create composedRules directory where single pages are stored
new File(DocSettings.getInstance().getReportDirectory() + "/" + "composedRules/").mkdir();
@@ -88,10 +105,10 @@ public static void createSinglePage(List composedRuleList, Configu
}
- /**
- * sets freemarker settings
- * @param cfg
- */
+ /**
+ * sets freemarker settings
+ * @param cfg
+ */
public static void setupFreeMarker(Configuration cfg) {
// setup freemarker to load absolute paths
cfg.setTemplateLoader(new TemplateAbsolutePathLoader());
@@ -109,7 +126,7 @@ public static void setupFreeMarker(Configuration cfg) {
*/
public static void createCogniCryptLayout(Configuration cfg) throws IOException, TemplateException {
Map input = new HashMap();
-
+
if (!Files.exists(Paths.get(DocSettings.getInstance().getReportDirectory()))) {
try {
// Attempt to create the directory
@@ -121,13 +138,24 @@ public static void createCogniCryptLayout(Configuration cfg) throws IOException,
} else {
System.out.println("Directory already exists.");
}
- Template frontpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "frontpage.ftl"));
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
- frontpageTemplate.process(input, fileWriter);
- }
- Template rootpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "rootpage.ftl"));
- try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
- rootpageTemplate.process(input, fileWriter);
+ if (DocSettings.getInstance().getRulesetPathDir() != null) {
+ Template frontpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "frontpage.ftl"));
+ try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
+ frontpageTemplate.process(input, fileWriter);
+ }
+ Template rootpageTemplate = cfg.getTemplate(Utils.pathForTemplates(DocSettings.getInstance().getFtlTemplatesPath() + "/"+ "rootpage.ftl"));
+ try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
+ rootpageTemplate.process(input, fileWriter);
+ }
+ } else {
+ Template frontpageTemplate = cfg.getTemplate(CrySLReader.readFTLFromJar("frontpage.ftl").getPath());
+ try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"frontpage.html"))) {
+ frontpageTemplate.process(input, fileWriter);
+ }
+ Template rootpageTemplate = cfg.getTemplate(CrySLReader.readFTLFromJar("rootpage.ftl").getPath());
+ try (Writer fileWriter = new FileWriter(new File(DocSettings.getInstance().getReportDirectory() + File.separator+"rootpage.html"))) {
+ rootpageTemplate.process(input, fileWriter);
+ }
}
}
}
From cd4710a13c8e5617723fed2c0b969935c005090c Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Fri, 9 Aug 2024 10:50:06 +0200
Subject: [PATCH 08/11] Include newest JCA ruleset as default
---
pom.xml | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 52 insertions(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index be93181..ad056be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
UTF-8
+
src/main/java
@@ -40,6 +41,7 @@
org.apache.maven.plugins
maven-dependency-plugin
+
copy-dependencies
prepare-package
@@ -53,11 +55,61 @@
true
+
+
+
+ unpack-ruleset
+ process-resources
+
+ unpack
+
+
+
+
+ de.darmstadt.tu.crossing
+ JavaCryptographicArchitecture
+ 3.1.1
+ zip
+ ruleset
+ true
+ ${project.build.directory}/generated-resources
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.2.0
+
+
+ copy-ruleset-to-resources
+ process-resources
+
+ copy-resources
+
+
+ src/main/resources/CrySLRules
+
+
+ ${project.build.directory}/generated-resources
+
+ **/*
+
+
+
+
+
+
+
@@ -72,7 +124,6 @@
3.1.1
-
junit
junit
From 86ff9df7b33032b2c7078cc0dd94c58793c79669 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Fri, 9 Aug 2024 11:12:25 +0200
Subject: [PATCH 09/11] Include folder in jar
---
pom.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/pom.xml b/pom.xml
index ad056be..3620d37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,7 +59,7 @@
unpack-ruleset
- process-resources
+ generate-resources
unpack
@@ -69,7 +69,7 @@
de.darmstadt.tu.crossing
JavaCryptographicArchitecture
3.1.1
- zip
+ zip
ruleset
true
${project.build.directory}/generated-resources
@@ -87,7 +87,7 @@
copy-ruleset-to-resources
- process-resources
+ generate-resources
copy-resources
@@ -97,7 +97,7 @@
${project.build.directory}/generated-resources
- **/*
+ **/*.crysl
From 7596d3839afc25d5fe00fb6b40d51e793b537092 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Fri, 9 Aug 2024 11:18:25 +0200
Subject: [PATCH 10/11] Don't create subfolder
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3620d37..27d2014 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
src/main/resources/CrySLRules
- ${project.build.directory}/generated-resources
+ ${project.build.directory}/generated-resources/JavaCryptographicArchitecture
**/*.crysl
From fdc4286d669eb0de3e21b3eaa9378a97173e48a8 Mon Sep 17 00:00:00 2001
From: svenfeld
Date: Thu, 22 Aug 2024 12:32:25 +0200
Subject: [PATCH 11/11] Move error handling while reading rules into loop
---
.../java/de/upb/docgen/crysl/CrySLReader.java | 30 ++++++++-----------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/src/main/java/de/upb/docgen/crysl/CrySLReader.java b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
index f7d2dde..ea44d78 100644
--- a/src/main/java/de/upb/docgen/crysl/CrySLReader.java
+++ b/src/main/java/de/upb/docgen/crysl/CrySLReader.java
@@ -13,11 +13,9 @@
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import crypto.cryslhandler.CrySLModelReader;
import crypto.exceptions.CryptoAnalysisException;
import crypto.rules.CrySLRule;
import crypto.rules.CrySLRuleReader;
-import de.upb.docgen.DocSettings;
import de.upb.docgen.utils.Utils;
/**
@@ -57,23 +55,23 @@ public static List readRulesFromJar() throws IOException, CryptoAnaly
if(jarFile.isFile()) { // Run with JAR file
final JarFile jar = new JarFile(jarFile);
final Enumeration entries = jar.entries(); //gives ALL entries in jar
- try {
- while (entries.hasMoreElements()) {
+ while (entries.hasMoreElements()) {
+ try {
final JarEntry name = entries.nextElement();
if (name.getName().endsWith(".crysl")) { //only handle crysl files
File extractedRule = Utils.extract(name.getName()); //Create a temporary crysl file
String shortend = extractedRule.getName().substring(0, extractedRule.getName().indexOf("crysl") + "crysl".length()); //CrySL Rule name without temp file ending
Files.move(extractedRule.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
File renamedTempFile = (Paths.get(shortend).toFile());
- System.out.println(renamedTempFile.getPath());
CrySLRule rule = cryslmodelreader.readFromSourceFile(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
rules.add(rule);
}
+ } catch (CryptoAnalysisException ex ) {
+ System.err.println("Error processing: " + " - " + ex.getMessage());
}
- } catch (CryptoAnalysisException ex) {
-
+
}
jar.close();
@@ -84,15 +82,18 @@ public static List readRulesFromJar() throws IOException, CryptoAnaly
try {
final File apps = new File(url.toURI());
for (File file : apps.listFiles()) {
- rules.add(cryslmodelreader.readFromSourceFile(file));
-
+ try {
+ rules.add(cryslmodelreader.readFromSourceFile(file));
+ } catch (CryptoAnalysisException ex) {
+ System.err.println("Error processing file: " + file.getName() + " - " + ex.getMessage());
+ }
}
- } catch (URISyntaxException | CryptoAnalysisException ex) {
-
+ } catch (URISyntaxException ex) {
+ System.err.println("URI syntax error: " + ex.getMessage());
}
}
}
- return rules;
+ return rules;
}
@@ -103,8 +104,6 @@ public static File readRuleFromJarFile(String ruleName) throws IOException, Cryp
final String path = "CrySLRules";
final CodeSource codeSource = CrySLReader.class.getProtectionDomain().getCodeSource();
final File jarFile = new File(codeSource.getLocation().getPath());
- CrySLRuleReader cryslModelReader = new CrySLRuleReader();
-
if (jarFile.isFile()) { // Run with JAR file
try (JarFile jar = new JarFile(jarFile)) {
final Enumeration entries = jar.entries(); // gives ALL entries in jar
@@ -115,7 +114,6 @@ public static File readRuleFromJarFile(String ruleName) throws IOException, Cryp
String shortName = extractedRule.getName().substring(0, extractedRule.getName().indexOf("crysl") + "crysl".length()); // CrySL Rule name without temp file ending
Files.move(extractedRule.toPath(), Paths.get(shortName), StandardCopyOption.REPLACE_EXISTING);
File renamedTempFile = (Paths.get(shortName).toFile());
- CrySLRule rule = cryslModelReader.readFromSourceFile(renamedTempFile); // Renaming allows the file to be read by the CrySLModelReader
renamedTempFile.deleteOnExit(); // Removes the temp CrySL file after JVM is finished
return renamedTempFile;
}
@@ -155,7 +153,6 @@ public static File readSymbolPropertiesFromJar() {
String shortName = extractedRule.getName().substring(0, extractedRule.getName().indexOf("properties") + "properties".length()); // CrySL Rule name without temp file ending
Files.move(extractedRule.toPath(), Paths.get(shortName), StandardCopyOption.REPLACE_EXISTING);
File renamedTempFile = (Paths.get(shortName).toFile());
- //CrySLRule rule = cryslModelReader.readFromSourceFile(renamedTempFile); // Renaming allows the file to be read by the CrySLModelReader
renamedTempFile.deleteOnExit(); // Removes the temp CrySL file after JVM is finished
return renamedTempFile;
}
@@ -196,7 +193,6 @@ public static File readFTLFromJar(String FTLname) throws IOException {
String shortend = extractedRule.getName().substring(0,extractedRule.getName().indexOf("ftl")+"ftl".length()); //CrySL Rule name without temp file ending
Files.move(extractedRule.toPath(), Paths.get(shortend), StandardCopyOption.REPLACE_EXISTING);
File renamedTempFile = (Paths.get(shortend).toFile());
- //CrySLRule rule = cryslmodelreader.readFromSourceFile(renamedTempFile); //Renaming allows the file to be read by the CrySLModelReader
renamedTempFile.deleteOnExit(); //Removes the temp CrySL file after jvm is finished
return renamedTempFile;