diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..15b8bc28e24d7601b055c06ba364453e07aced03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/src/server/logs/ +*.class +/.idea/inspectionProfiles/Project_Default.xml +/.idea/sqldialects.xml diff --git a/.idea/KPI_Visualizer.iml b/.idea/KPI_Visualizer.iml index 5238031a375408b9c6347b8e00d8ac1b0c58938f..86244925c0ada3af6a807f73b866954a657fe418 100644 --- a/.idea/KPI_Visualizer.iml +++ b/.idea/KPI_Visualizer.iml @@ -18,6 +18,8 @@ + + diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd0cc224050391cd6d1e0f7196d9af2a5c84a945 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + mariadb + true + org.mariadb.jdbc.Driver + jdbc:mariadb://localhost:3306 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java index 7219e60708915dbb961cbfbb6ae3fbe47ad70e61..cbe12755b276016f23f03e8cb0fdc4d17b0f03c7 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java @@ -1,83 +1,47 @@ package de._82grfl1bif.KPI_Visualizer.commands; -import com.google.gson.Gson; -import com.google.gson.stream.JsonReader; import de._82grfl1bif.KPI_Visualizer.data.DataHolder; +import de._82grfl1bif.KPI_Visualizer.structures.Builder; import de._82grfl1bif.KPI_Visualizer.structures.Building; import de._82grfl1bif.KPI_Visualizer.structures.Structure; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Server; -import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import java.io.FileReader; import java.util.logging.Level; -public class SetPreset implements CommandExecutor{ +public class SetPreset implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { Server server = sender.getServer(); + Builder builder = new Builder(server); Player player = server.getPlayer(sender.getName()); - Location location = player.getLocation(); - - if(location == null){ - Bukkit.getLogger().log(Level.SEVERE,"Keine Location gefunden."); - return false; - } //if no Player is found - - if (args.length != 1){ - sender.sendMessage("try with one Number behind the command."); - return false; - }else { - Runnable t = new Runnable() { - @Override - public void run() { + if (player != null) { + Location location = player.getLocation(); + if (args.length != 1) { + sender.sendMessage("try with one Number behind the command."); + return false; + } else { + Runnable t = () -> { DataHolder.foundation.setLocation(location); DataHolder.generateSimpleData(Integer.parseInt(args[0])); - fillPlane(server, location, DataHolder.foundation.getWidth(), DataHolder.foundation.getWidth(), DataHolder.foundation.getMaterial()); + builder.setFoundation(location, DataHolder.foundation.getWidth().x, DataHolder.foundation.getWidth().y, DataHolder.foundation.getMaterial()); for (Structure structure : DataHolder.foundation.getChildren()) { Building building = (Building) structure; sender.sendMessage("bau" + building.toString()); - fillQube(server, building.getLocation(), building.getWidth(), building.getHeight(), building.getWidth(), building.getMaterial());//Not yet ready to print foundations + builder.fillQube(building.getLocation(), building.getWidth().x, building.getHeight(), building.getWidth().y, building.getMaterial());//Not yet ready to print foundations } - } - }; - t.run(); - } - return true; - } - - private void fillPlane(Server server, Location startLocation, int x, int z, Material material){ - for (int cx = 0; cx < x; cx++ ) { - for ( int cz = 0; cz < z; cz++){ - Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,0,cz)); - block.setType(material); + }; + t.run(); } - } - } - - private void fillQube(Server server,Location startLocation, int x, int y, int z, Material material){ - for(int cy = 0; cy < y; cy++){ - fillPlane(server,startLocation.clone().add(0,cy,0),x,z,material); - } - } - - private boolean evalJson(String fileName){ - if(!fileName.contains(".json")){ - fileName = fileName + ".json"; - } //Add .json in case user forgets - try(JsonReader reader = new JsonReader(new FileReader("/Users/flgr/Desktop/PaperServer/LayoutJson"+ fileName))){ - Gson gson = new Gson(); - - }catch (Exception ex){ - Bukkit.getLogger().log(Level.SEVERE, String.valueOf(ex)); + } else { + Bukkit.getLogger().log(Level.SEVERE, "Kein Spieler gefunden."); return false; } return true; diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java index 3e8426373dbe86400165a90cad9d318103d09165..492f264787326856c49e6c865fd972803ea8b5b1 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java @@ -1,13 +1,15 @@ package de._82grfl1bif.KPI_Visualizer.commands; import de._82grfl1bif.KPI_Visualizer.data.DataHolder; -import de._82grfl1bif.KPI_Visualizer.structures.Building; -import de._82grfl1bif.KPI_Visualizer.structures.Foundation; -import de._82grfl1bif.KPI_Visualizer.structures.Structure; +import de._82grfl1bif.KPI_Visualizer.data.JsonParser; +import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Rectangle; +import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Row; +import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.SquarifiedTreemapLayout; +import de._82grfl1bif.KPI_Visualizer.structures.*; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Server; -import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -15,124 +17,75 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; +import java.awt.*; +import java.util.Map; +import java.util.logging.Level; + public class generateLayout implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - sender.sendMessage("generating Layout"); + if (args.length < 2) { + sender.sendMessage("please type or select the needed Arguments with tab."); + return false; + } + sender.sendMessage("generating SimpleSquareLayout"); Server server = sender.getServer(); + Builder builder = new Builder(server); Player player = server.getPlayer(sender.getName()); - Location location = player.getLocation(); - - BukkitRunnable t = new BukkitRunnable() { - @Override - public void run() { - DataHolder.ComplexData(); - DataHolder.foundation.setLocation(location); - DataHolder.foundation.organizeFoundation(); - DataHolder.foundation.correctAllLocations(location); - setFoundation(server, DataHolder.foundation.getLocation().clone().add(0, DataHolder.foundation.getDepth(), 0), DataHolder.foundation.getWidth(), DataHolder.foundation.getWidth(), DataHolder.foundation.getMaterial()); - setAllChildren(server, DataHolder.foundation); - } - }; - t.run(); - return true; - } - - private void setFoundation(Server server, Location startLocation, int x, int z, Material material) { - for (int cx = 0; cx < x; cx++) { - for (int cz = 0; cz < z; cz++) { - Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx, 0, cz)); - block.setType(material); - } - } - } - - private void buildBuilding(Server server, Location startLocation, int x, int y, Material material) { - setWalls(server, startLocation.clone().add(0, 1, 0), x, y); - } - - private void setWalls(Server server, Location startLocation, int x, int y) { - Location save = startLocation.clone(); - Location temp = startLocation.clone(); - for (int cx = 0; cx < x - 1; cx++) {// x+x Wall - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(cx,cy,1)).setType(Material.RED_CONCRETE); - } - } - temp = save.clone(); - for (int cz = 0; cz < x - 1; cz++) {// z+x Wall - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(1, cy, cz)).setType(Material.RED_CONCRETE); - } - } - temp = save.clone().add(0, 0, x - 1); - for (int cx = 0; cx < x; cx++) {// x+x z+x Wall from x+x - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, -1)).setType(Material.RED_CONCRETE); - } - } - temp = save.clone().add(x - 1, 0, 0); - for (int cz = 0; cz < x - 1; cz++) {// x+x z+x Wall from x+z - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(-1, cy, cz)).setType(Material.RED_CONCRETE); - } - } - - temp = save.clone(); - for (int cx = 0; cx < x - 1; cx++) {// x+x Wall - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(Material.GLASS); - } - } - temp = save.clone(); - for (int cz = 0; cz < x - 1; cz++) {// z+x Wall - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(Material.GLASS); - } - } - temp = save.clone().add(0, 0, x - 1); - for (int cx = 0; cx < x; cx++) {// x+x z+x Wall from x+x - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(Material.GLASS); - } - } - temp = save.clone().add(x - 1, 0, 0); - for (int cz = 0; cz < x - 1; cz++) {// x+x z+x Wall from x+z - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(Material.GLASS); - } + JsonParser jsonParser = new JsonParser(); + if (!jsonParser.evalJson(args[0])) { + sender.sendMessage("failed to parse Json"); + return false; } + if (player != null) { //check if Player exists for getting Start coordinates. + Location location = player.getLocation(); + if (args[1].equals("SquarifiedTreemap")) { //check 2. Argument whether to use SquarifiedTreemap or SimpleSquare Layout. + BukkitRunnable t = new BukkitRunnable() { + @Override + public void run() { + SquarifiedTreemapLayout squarifiedTreemapLayout = new SquarifiedTreemapLayout(); + squarifiedTreemapLayout.generateLayout(DataHolder.foundation, new Rectangle(DataHolder.foundation.getArea(), Math.sqrt(DataHolder.foundation.getArea()), new Point(0, 0))); + builder.setFoundation(location,(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())),(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())), Material.COBBLESTONE); + for (Row row : squarifiedTreemapLayout.getRows()) { + for (Map.Entry entry : row.getRectangles().entrySet()) { + Rectangle r = entry.getKey(); + Structure s = entry.getValue(); + if(s.getClass() == Foundation.class){ + builder.setFoundation(location.clone().add(r.getOrigin().x,s.getDepth(),r.getOrigin().y),(int)(r.getWidth()),(int)(r.getHeight()),s.getMaterial()); + }else{ + builder.fillQube(location.clone().add(r.getOrigin().x,s.getDepth()+100,r.getOrigin().y),(int)(r.getWidth()),((Building)s).getHeight(),(int)(r.getHeight()),s.getMaterial()); + } + if(r.getHeight() >= 5 && r.getWidth() >= 5){ - temp = save.clone(); - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE); - } - temp = save.clone().add(x - 1, 0, 0); - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE); - } - temp = save.clone().add(0, 0, x - 1); - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE); - } - temp = save.clone().add(x - 1, 0, x - 1); - for (int cy = 0; cy < y; cy++) { - server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE); - } - - save.add(0,y,0);//roof - setFoundation(server,save,x,x,Material.BLACKSTONE); - } - - private void setAllChildren(Server server, Foundation foundation) { - for (Structure s : foundation.getChildren()) { - if (s.getClass() == Foundation.class) { - setFoundation(server, s.getLocation().clone().add(0, s.getDepth(), 0), s.getWidth(), s.getWidth(), s.getMaterial()); - setAllChildren(server, (Foundation) s); + }else{ + Bukkit.getLogger().log(Level.SEVERE,"the rectangle is too small"); + } + } + } + } + }; + t.run(); + return true; } else { - buildBuilding(server, s.getLocation().clone().add(1, s.getDepth(), 1), s.getWidth() - 2, ((Building) s).getHeight(), s.getMaterial()); + BukkitRunnable t = new BukkitRunnable() { + @Override + public void run() { + DataHolder.foundation.setLocation(location); + DataHolder.foundation.organizeFoundation(); + DataHolder.foundation.correctAllLocations(location); + builder.setFoundation(DataHolder.foundation.getLocation().clone().add(0, DataHolder.foundation.getDepth(), 0), DataHolder.foundation.getWidth().x, DataHolder.foundation.getWidth().x, DataHolder.foundation.getMaterial()); + builder.setAllChildren(DataHolder.foundation); + builder.setLegend(location); + } + }; + t.run(); + return true; } + + } else { + Bukkit.getLogger().log(Level.SEVERE, "Kein Spieler gefunden."); + return false; } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java index 83c8afd272a91f93829349ec891ae182c8946a80..de8bdd967b8300253fb58fc03f4b0c49ed506eaa 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java @@ -12,63 +12,94 @@ public class DataHolder { public static Foundation foundation = new Foundation(0, Material.COBBLESTONE); - public static void generateSimpleData(int buildingCount){ + @Deprecated + public static void generateSimpleData(int buildingCount) { foundation.removeChildren(); ArrayList buildings = new ArrayList<>(); - for(int c = 0; c < buildingCount; c++){ + for (int c = 0; c < buildingCount; c++) { buildings.add(generateBuilding()); } foundation.addChildren(buildings); foundation.optimizeLayout(); } - public static void ComplexData(){ - Foundation foundation3 = new Foundation(3,Material.BLACK_CONCRETE); - ArrayList buildins3 = new ArrayList<>(); + @Deprecated + public static void ComplexData() { + Foundation foundation3 = new Foundation(3, Material.BLACK_CONCRETE); + ArrayList buildings3 = new ArrayList<>(); for (int i = 0; i < 5; i++) { - buildins3.add(generateBuilding()); + buildings3.add(generateBuilding()); } - foundation3.addChildren(buildins3); + foundation3.addChildren(buildings3); - - ArrayList buildins2_1 = new ArrayList<>(); - Foundation foundation2_1 = new Foundation(2,Material.BROWN_CONCRETE); + ArrayList buildings2_1 = new ArrayList<>(); + Foundation foundation2_1 = new Foundation(2, Material.BROWN_CONCRETE); for (int i = 0; i < 5; i++) { - buildins2_1.add(generateBuilding()); + buildings2_1.add(generateBuilding()); } - buildins2_1.add(foundation3); - foundation2_1.addChildren(buildins2_1); + buildings2_1.add(foundation3); + foundation2_1.addChildren(buildings2_1); - ArrayList buildins2_2 = new ArrayList<>(); - Foundation foundation2_2 = new Foundation(2,Material.LIGHT_GRAY_CONCRETE); + ArrayList buildings2_2 = new ArrayList<>(); + Foundation foundation2_2 = new Foundation(2, Material.LIGHT_GRAY_CONCRETE); for (int i = 0; i < 5; i++) { - buildins2_2.add(generateBuilding()); + buildings2_2.add(generateBuilding()); } - foundation2_2.addChildren(buildins2_2); + foundation2_2.addChildren(buildings2_2); - ArrayList buildins1 = new ArrayList<>(); - Foundation foundation1 = new Foundation(1,Material.GRAY_CONCRETE); + ArrayList buildings1 = new ArrayList<>(); + Foundation foundation1 = new Foundation(1, Material.GRAY_CONCRETE); for (int i = 0; i < 5; i++) { - buildins1.add(generateBuilding()); + buildings1.add(generateBuilding()); } - buildins1.add(foundation2_1); - buildins1.add(foundation2_2); - foundation1.addChildren(buildins1); + buildings1.add(foundation2_1); + buildings1.add(foundation2_2); + foundation1.addChildren(buildings1); - ArrayList buildins0 = new ArrayList<>(); + ArrayList buildings0 = new ArrayList<>(); for (int i = 0; i < 5; i++) { - buildins1.add(generateBuilding()); + buildings1.add(generateBuilding()); } - buildins0.add(foundation1); - foundation = new Foundation(0,Material.COBBLESTONE); - foundation.addChildren(buildins0); + buildings0.add(foundation1); + foundation = new Foundation(0, Material.COBBLESTONE); + foundation.addChildren(buildings0); foundation.setDepth(0); } + public static void generateTreeFromKlassenList(ArrayList klassen) { + foundation = new Foundation(0, Material.YELLOW_CONCRETE); + ArrayList Pakete = new ArrayList<>(); + for (Klasse currentKlasse : klassen) { + if (currentKlasse.depth >= 0) { + String[] strings = currentKlasse.path.split("/"); + Foundation f = foundation; + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < currentKlasse.depth + 2; i++) { + sb.append(strings[i]); + if (!(strings[i].contains(".java"))){//is foundation + sb.append("/"); + } + if (foundation.getFromTree(sb.toString()) == null) {// checks Tree for Element doesn't find it + if (strings[i].contains(".java")) {//is not foundation + f.generateChild(false, currentKlasse, sb.toString()); + f = foundation; + } else { + f = (Foundation) f.generateChild(true,currentKlasse,sb.toString()); + } + }else{//finds Element in tree + if ((foundation.getFromTree(sb.toString()).getClass() == Foundation.class)){ + f = (Foundation) foundation.getFromTree(sb.toString()); + } + } + } + } + } + } + private static Building generateBuilding() { - Building result = new Building(ThreadLocalRandom.current().nextInt(4, 60 + 1),ThreadLocalRandom.current().nextInt(4, 200 + 1),Material.LIME_CONCRETE); + Building result = new Building(ThreadLocalRandom.current().nextInt(4, 60 + 1), ThreadLocalRandom.current().nextInt(4, 200 + 1), Material.LIME_CONCRETE); result.setLocation(foundation.getLocation()); return result; } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java new file mode 100644 index 0000000000000000000000000000000000000000..31e1318ff6a0454e71b94449fd47fb4eccd3ee80 --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java @@ -0,0 +1,98 @@ +package de._82grfl1bif.KPI_Visualizer.data; + +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import java.io.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.logging.Level; + +public class JsonParser { + String standardPath = System.getProperty("user.dir"); + + public boolean evalJson(@NotNull String fileName) { + if (!fileName.contains(".json")) { + fileName = fileName + ".json"; + } //Add .json in case user forgets + if (!(fileName.contains("/"))) { + fileName = standardPath + "/" + fileName; + } + try (FileReader jsonFileReader = new FileReader(fileName)) { + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(jsonFileReader); + if (!(getFileHistory().contains(fileName))) { //if file isn't in history add it. + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(standardPath + "/plugins/JsonFileHistory",true))){ + bufferedWriter.newLine(); + bufferedWriter.write(fileName); + } catch (Exception e) { + Bukkit.getLogger().log(Level.SEVERE, String.valueOf(e)); + } + } + JSONArray entities = (JSONArray) jsonObject.get("entities"); + ArrayList entitiesList = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd kk:mm:ss Z"); + for (int i=0; i < entities.size(); i++) { + JSONObject object = (JSONObject) entities.get(i); + JSONArray commits = (JSONArray) ((JSONObject) entities.get(i)).get("commits"); + ArrayList dates = new ArrayList<>(); + for (Object o: commits){ + Object date = ((JSONObject) o).get("date"); + LocalDateTime time = LocalDateTime.parse(date.toString(),formatter); + dates.add(time); + } + Klasse currentKlasse = new Klasse( + Integer.parseInt(object.get("entity_id").toString()), + object.get("name").toString(), + object.get("path").toString(), + Integer.parseInt(object.get("qloc").toString()), + Integer.parseInt(object.get("loc").toString()), + ((JSONArray) object.get("commits")).size(), + ((JSONArray) object.get("functions")).size(), + ((JSONArray) object.get("variables")).size(), + Math.round(Float.parseFloat(object.get("complexity").toString())), + dates); + if(currentKlasse.depth != -1)entitiesList.add(currentKlasse); + } + entitiesList.sort(new DepthComparator()); + DataHolder.generateTreeFromKlassenList(entitiesList); + } catch (Exception ex) { + Bukkit.getLogger().log(Level.SEVERE, String.valueOf(ex)); + return false; + } + return true; + } + + private static class DepthComparator implements Comparator { + @Override + public int compare(Klasse o1, Klasse o2) { + return Integer.compare(o1.depth,o2.depth); + } + } + + public List getFileHistory() { + String path = System.getProperty("user.dir"); + String fileName = "/plugins/JsonFileHistory"; + List filesInHistory = new ArrayList<>(); + try { + File file = new File(path + fileName); + if (file.createNewFile()) {//Create file + return null; + } //File exists + BufferedReader br = new BufferedReader(new FileReader(path + fileName)); + String line; + while ((line = br.readLine()) != null) { + filesInHistory.add(line); + } + br.close(); + } catch (Exception e) { + Bukkit.getLogger().log(Level.SEVERE, String.valueOf(e)); + return null; + } + return filesInHistory; + } +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java new file mode 100644 index 0000000000000000000000000000000000000000..d401cd44131f8425de152c1cdf8d528588d74189 --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java @@ -0,0 +1,102 @@ +package de._82grfl1bif.KPI_Visualizer.data; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.ArrayList; + +public class Klasse { + public String name; + public String path; + + public int qloc; + public static int qlocMin = Integer.MAX_VALUE; + public static int qlocMax; + public int loc; + public static int locMin= Integer.MAX_VALUE; + public static int locMax; + public int commits; + public static int commitsMin= Integer.MAX_VALUE; + public static int commitsMax; + public int depth; + public static int depthMax; + public int complexity; + public static int complexityMax; + public static int complexityMin= Integer.MAX_VALUE; + + public final int id; + + public int functions; + public static int functionsMin= Integer.MAX_VALUE; + public static int functionsMax; + public int variables; + public static int variablesMin= Integer.MAX_VALUE; + public static int variablesMax; + + public Duration bearbeiteteZeit; + public static Duration bearbeiteteZeitMin; + public static Duration bearbeiteteZeitMax; + public Duration zeitSeitLetzterBearbeitung; + public static Duration zeitSeitLetzterBearbeitungMin; + public static Duration zeitSeitLetzterBearbeitungMax; + public Duration zeitSeitErstemCommit; + public static Duration zeitSeitErstemCommitMin; + public static Duration zeitSeitErstemCommitMax; + ArrayList commitTimes; + + public Klasse(int id, String name, String path, int qloc, int loc, int commits, int functions, int variables,int complexity, ArrayList commitTimes){ + this.id = id; + this.commits = commits; + commitsMax = Math.max(commitsMax,commits); + commitsMin = Math.min(commitsMin,commits); + this.depth = getDepthOfPath(path); + depthMax = Math.max(depthMax,depth); + this.loc = loc; + locMax = Math.max(locMax,loc); + locMin = Math.min(locMin,loc); + this.qloc = qloc; + qlocMax = Math.max(qlocMax,qloc); + qlocMin = Math.min(qlocMin,qloc); + this.functions = functions; + functionsMax = Math.max(functionsMax,functions); + functionsMin = Math.min(functionsMin,functions); + this.variables = variables; + variablesMax = Math.max(variablesMax,variables); + variablesMin = Math.min(variablesMin,variables); + this.complexity = complexity; + complexityMax = Math.max(complexityMax,complexity); + complexityMin = Math.min(complexityMin,complexity); + this.name = name; + this.path = path; + this.commitTimes = commitTimes; + this.bearbeiteteZeit = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(commitTimes.size()-1), commitTimes.get(0)); + if (bearbeiteteZeit != null) { + if(bearbeiteteZeitMax == null)bearbeiteteZeitMax = Duration.ofMillis(Long.MIN_VALUE); + if(bearbeiteteZeitMin == null)bearbeiteteZeitMin = Duration.ofMillis((Long.MAX_VALUE)); + bearbeiteteZeitMax = (bearbeiteteZeitMax.toMillis() >= bearbeiteteZeit.toMillis()) ? bearbeiteteZeitMax:bearbeiteteZeit; + bearbeiteteZeitMin = (bearbeiteteZeitMin.toMillis() <= bearbeiteteZeit.toMillis()) ? bearbeiteteZeitMin:bearbeiteteZeit; + } + this.zeitSeitLetzterBearbeitung = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(0),LocalDateTime.now()); + if (zeitSeitLetzterBearbeitung != null) { + if(zeitSeitLetzterBearbeitungMax == null)zeitSeitLetzterBearbeitungMax = Duration.ofMillis(Long.MIN_VALUE); + if(zeitSeitLetzterBearbeitungMin == null)zeitSeitLetzterBearbeitungMin = Duration.ofMillis(Long.MAX_VALUE); + zeitSeitLetzterBearbeitungMax = (zeitSeitLetzterBearbeitungMax.toMillis() >= zeitSeitLetzterBearbeitung.toMillis()) ? zeitSeitLetzterBearbeitungMax:zeitSeitLetzterBearbeitung; + zeitSeitLetzterBearbeitungMin = (zeitSeitLetzterBearbeitungMin.toMillis() <= zeitSeitLetzterBearbeitung.toMillis()) ? zeitSeitLetzterBearbeitungMin:zeitSeitLetzterBearbeitung; + } + this.zeitSeitErstemCommit = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(commitTimes.size()-1),LocalDateTime.now()); + if (zeitSeitErstemCommit != null) { + if(zeitSeitErstemCommitMax == null)zeitSeitErstemCommitMax = Duration.ofMillis(Long.MIN_VALUE); + if(zeitSeitErstemCommitMin == null)zeitSeitErstemCommitMin = Duration.ofMillis(Long.MAX_VALUE); + zeitSeitErstemCommitMax = (zeitSeitErstemCommitMax.toMillis() >= zeitSeitErstemCommit.toMillis()) ? zeitSeitErstemCommitMax:zeitSeitErstemCommit; + zeitSeitErstemCommitMin = (zeitSeitErstemCommitMin.toMillis() <= zeitSeitErstemCommit.toMillis()) ? zeitSeitErstemCommitMin:zeitSeitErstemCommit; + } + } + + private int getDepthOfPath(String path){ + int result = -1; + if(path.contains("tmp")){ + result = path.split("/").length-2; + } + return result; + } + +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java deleted file mode 100644 index a1cdf5d8d733cbc3680b1f340674dba2226e6f70..0000000000000000000000000000000000000000 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java +++ /dev/null @@ -1,58 +0,0 @@ -package de._82grfl1bif.KPI_Visualizer.data; - -import org.apache.commons.beanutils.BeanUtils; - -import javax.persistence.Column; -import javax.swing.text.html.parser.Entity; -import java.lang.reflect.Field; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.util.ArrayList; -import java.util.List; - -public class ResultSetMapper { - - public List mapResultSetToObject(ResultSet rs, Class outputClass) { - List outputList = null; - try { - // make sure resultSet is not null - if (rs != null) { - // check if outputClass has 'Entity' annotation - if (outputClass.isAnnotationPresent(Entity.class)) { - // get the resultSet metadata - ResultSetMetaData rsMetaData = rs.getMetaData(); - // get all the attributes of outputClass - Field[] fields = outputClass.getDeclaredFields(); - while (rs.next()) { - T bean = (T) outputClass.newInstance(); - for (int _iterator = 0; _iterator < rsMetaData.getColumnCount(); _iterator++) { - // getting the SQL column name - String columnName = rsMetaData.getColumnName(_iterator + 1); - // reading the value of the SQL column - Object columnValue = rs.getObject(_iterator + 1); - // iterating over outputClass attributes to check if any attribute has 'Column' annotation with matching 'name' value - for (Field field : fields) { - if (field.isAnnotationPresent(Column.class)) { - Column column = field.getAnnotation(Column.class); - if (column.name().equalsIgnoreCase(columnName) && columnValue != null) { - BeanUtils.setProperty(bean, field.getName(), columnValue); - break; - } - } - } - } - if (outputList == null) { - outputList = new ArrayList<>(); - } - outputList.add(bean); - } - } - } else { - return null; - } - } catch (Exception e) { - e.printStackTrace(); - } - return outputList; - } -} \ No newline at end of file diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java new file mode 100644 index 0000000000000000000000000000000000000000..9c40cfb21b34e7d220121e8d038b4bee497b299e --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java @@ -0,0 +1,28 @@ +package de._82grfl1bif.KPI_Visualizer.helpers; + +import de._82grfl1bif.KPI_Visualizer.data.JsonParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class FileInputTabCompleter implements TabCompleter { + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + if (args.length == 1) { + return new JsonParser().getFileHistory(); + } + if (args.length == 2) { + List result = new ArrayList<>(); + result.add("SquarifiedTreemap"); + result.add("SimpleCornerOptimizer"); + return result; + } + return null; + } +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java similarity index 67% rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java index 5c904aa7d65a57d328eb4ed8f34fedf639cb8c63..98bb782b14d742827ef6b04dfe290299f6fd7fb0 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java @@ -1,13 +1,11 @@ -package de._82grfl1bif.KPI_Visualizer.helpers; +package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare; import de._82grfl1bif.KPI_Visualizer.structures.Structure; import java.awt.*; import java.util.ArrayList; -public class Quadrat extends Shape{ - - +public class Quadrat extends Shape { private Boolean belegt; @@ -32,7 +30,7 @@ public class Quadrat extends Shape{ this.bottomLeftCorner = bottomLeftCorner; this.topRightCorner = new Point(bottomLeftCorner.x+xEdgeLength,bottomLeftCorner.y+xEdgeLength); this.belegt = false; - if(xEdgeLength < 3){ + if(xEdgeLength < 3 || topRightCorner.x-bottomLeftCorner.x <3){ throw new IllegalArgumentException("keine Quadrate < 3 erlaubt " + xEdgeLength); } } @@ -41,16 +39,16 @@ public class Quadrat extends Shape{ this.belegt = true; this.structure = structure; ArrayList result = new ArrayList<>(); - if(this.xEdgeLength > structure.getWidth()+3){//if you can splitt rest into more quads - int scrapLength = this.xEdgeLength-structure.getWidth(); - result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y),scrapLength)); - result.add(new Quadrat(new Point(this.bottomLeftCorner.x,this.bottomLeftCorner.y+structure.getWidth()),scrapLength)); - result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y+structure.getWidth()),scrapLength)); + if(this.xEdgeLength > structure.getWidth().x+3){//if you can split rest into more quads + int scrapLength = this.xEdgeLength-structure.getWidth().x; + result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y),scrapLength)); + result.add(new Quadrat(new Point(this.bottomLeftCorner.x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength)); + result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength)); if(this.xEdgeLength%scrapLength != 0){ - Rectangle temp = new Rectangle(scrapLength,this.xEdgeLength-2*scrapLength,new Point(this.bottomLeftCorner.x+scrapLength,this.bottomLeftCorner.y+structure.getWidth())); - result.addAll(temp.splittToQuads(temp)); - temp = new Rectangle(this.xEdgeLength-2*scrapLength,scrapLength,new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y+scrapLength)); - result.addAll(temp.splittToQuads(temp)); + Rectangle temp = new Rectangle(scrapLength,this.xEdgeLength-2*scrapLength,new Point(this.bottomLeftCorner.x+scrapLength,this.bottomLeftCorner.y+structure.getWidth().x)); + result.addAll(temp.splitToQuads(temp)); + temp = new Rectangle(this.xEdgeLength-2*scrapLength,scrapLength,new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+scrapLength)); + result.addAll(temp.splitToQuads(temp)); } } return result; @@ -60,11 +58,11 @@ public class Quadrat extends Shape{ return belegt; } - public int getWidth(){ - return this.xEdgeLength; + public Point getWidth(){ + return new Point(topRightCorner.x-bottomLeftCorner.x,topRightCorner.y-bottomLeftCorner.y); } - public void applyCoordinates(){ - + public void applyCoordinates(Point coordinates){ + this.bottomLeftCorner = coordinates; } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java similarity index 86% rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java index 580e2db5f80939ad7f684097e6a25a0e796c0a0b..0ce01ffa8b10fc721cdd0970e65f021289648742 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java @@ -1,11 +1,11 @@ -package de._82grfl1bif.KPI_Visualizer.helpers; +package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare; import java.awt.*; import java.util.ArrayList; public class Rectangle extends Shape { - private int zEdgeLength; + private final int zEdgeLength; public Rectangle(int zEdgeLength, int xEdgeLength, Point bottomLeftCorner) { this.zEdgeLength = zEdgeLength; @@ -14,7 +14,7 @@ public class Rectangle extends Shape { this.topRightCorner = new Point(bottomLeftCorner.x + xEdgeLength, bottomLeftCorner.y + zEdgeLength); } - public ArrayList splittToQuads(Rectangle r) { + public ArrayList splitToQuads(Rectangle r) { ArrayList result = new ArrayList<>(); if (r.xEdgeLength >= 3 && r.zEdgeLength >= 3) { if ((r.xEdgeLength - r.zEdgeLength) < 0) {//standing Rectangle @@ -32,7 +32,7 @@ public class Rectangle extends Shape { scrapPoint.y = (r.bottomLeftCorner.y + (r.xEdgeLength * (c + 1))); } if (scrapLength >= 3 && r.xEdgeLength >= 3) { - result.addAll(splittToQuads(new Rectangle(scrapLength, r.xEdgeLength, scrapPoint))); + result.addAll(splitToQuads(new Rectangle(scrapLength, r.xEdgeLength, scrapPoint))); } } } else {//laying Rectangles @@ -49,8 +49,8 @@ public class Rectangle extends Shape { scrapPoint.x = (r.bottomLeftCorner.x + (r.zEdgeLength * (c + 1))); scrapPoint.y = r.bottomLeftCorner.y; } - if (r.zEdgeLength >= 3 && scrapLength >= 3) { - result.addAll(splittToQuads(new Rectangle(r.zEdgeLength, scrapLength, scrapPoint))); + if (scrapLength >= 3) { + result.addAll(splitToQuads(new Rectangle(r.zEdgeLength, scrapLength, scrapPoint))); } } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java similarity index 74% rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java index f4a49c37c269c7bc07d2c40bdfddea93947cd17d..fcfb34eb45e9c2c4f1c47a21dbe0cb3d9de0a759 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java @@ -1,4 +1,4 @@ -package de._82grfl1bif.KPI_Visualizer.helpers; +package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare; import java.awt.Point; diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java similarity index 67% rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java index 30afe0ca87c7543e72a52280c0d714c364c8b1fd..b20a8daf2ae727f6bfcae0f74af4b52d59d9835d 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java @@ -1,5 +1,7 @@ -package de._82grfl1bif.KPI_Visualizer.helpers; +package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare; +import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Quadrat; +import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle; import de._82grfl1bif.KPI_Visualizer.structures.Structure; import javax.management.AttributeNotFoundException; @@ -7,8 +9,7 @@ import java.awt.*; import java.util.ArrayList; import java.util.Comparator; -@SuppressWarnings("ALL") -public class Layout { +public class SimpleSquareLayout { private final ArrayList structures; private final ArrayList layout = new ArrayList<>(); @@ -19,7 +20,7 @@ public class Layout { private int size = 0; - public Layout(ArrayList structures){ + public SimpleSquareLayout(ArrayList structures){ this.structures = structures;//ordered biggest first. } @@ -27,7 +28,7 @@ public class Layout { @Override public int compare(Quadrat o1, Quadrat o2) { - return Integer.compare(o1.getWidth(), o2.getWidth()); + return Integer.compare(o1.getWidth().x, o2.getWidth().x); } } private static class CoordinateXComparator implements Comparator{ @@ -48,8 +49,8 @@ public class Layout { for (Structure s:structures) { if(first){ first = false; - this.size = s.getWidth(); - layout.add(new Quadrat(new Point(0,0),s.getWidth())); + this.size = s.getWidth().x; + layout.add(new Quadrat(new Point(0,0),s.getWidth().x)); layout.addAll(layout.get(0).setBelegt(s)); }else{ layout.sort(new CoordinateYComparator()); @@ -57,7 +58,7 @@ public class Layout { layout.sort(new WidthComparator()); boolean noneFoundFlag = true; for (int i = 0;i < layout.size();i++) { - if((s.getWidth() <= layout.get(i).getWidth())&&(!layout.get(i).getBelegt())&&(noneFoundFlag)){ + if((s.getWidth().x <= layout.get(i).getWidth().x)&&(!layout.get(i).getBelegt())&&(noneFoundFlag)){ noneFoundFlag = false; layout.addAll(layout.get(i).setBelegt(s)); } @@ -70,17 +71,17 @@ public class Layout { } private void appendQuad(Structure structure){ - Quadrat q = new Quadrat(new Point(this.size,0),structure.getWidth()); + Quadrat q = new Quadrat(new Point(this.size,0),structure.getWidth().x); q.setBelegt(structure); - this.size += structure.getWidth(); + this.size += structure.getWidth().x; layout.add(q); layout.add(new Quadrat(new Point(q.bottomLeftCorner.y,q.bottomLeftCorner.x),new Point(q.topRightCorner.y,q.topRightCorner.x))); // gespiegeltes Quadrat - layout.add(new Quadrat(new Point(q.bottomLeftCorner.x,q.bottomLeftCorner.x),structure.getWidth())); // Oberes rechtes Quadrat - if((this.size-(2*structure.getWidth())) > 0){ //falls Abstand zwischen den Quadraten ist. - Rectangle rTop = new Rectangle(structure.getWidth(),(this.size-2*structure.getWidth()),new Point(q .topRightCorner.y,q.bottomLeftCorner.x)); - layout.addAll(rTop.splittToQuads(rTop)); - Rectangle rRight = new Rectangle((this.size-2*structure.getWidth()),structure.getWidth(),new Point(q.bottomLeftCorner.x,q.topRightCorner.y)); - layout.addAll(rRight.splittToQuads(rRight)); + layout.add(new Quadrat(new Point(q.bottomLeftCorner.x,q.bottomLeftCorner.x),structure.getWidth().x)); // Oberes rechtes Quadrat + if((this.size-(2*structure.getWidth().x)) > 0){ //falls Abstand zwischen den Quadraten ist. + de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle rTop = new de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle(structure.getWidth().x,(this.size-2*structure.getWidth().x),new Point(q .topRightCorner.y,q.bottomLeftCorner.x)); + layout.addAll(rTop.splitToQuads(rTop)); + de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle rRight = new Rectangle((this.size-2*structure.getWidth().x),structure.getWidth().x,new Point(q.bottomLeftCorner.x,q.topRightCorner.y)); + layout.addAll(rRight.splitToQuads(rRight)); } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java new file mode 100644 index 0000000000000000000000000000000000000000..59aecbcba55ae291d51b921d2924ffdecaf0068f --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java @@ -0,0 +1,61 @@ +package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap; + +import de._82grfl1bif.KPI_Visualizer.structures.Structure; + +import java.awt.*; +import java.util.ArrayList; +import java.util.HashMap; + +public class Rectangle{ + + private double area; + private double width; + private double height; + private Point origin; + + public void setHeight(double height) { + this.height = height; + this.width = area/height; + } + + public void setWidth(double width) { + this.width = width; + this.height = area/width; + } + + public double getArea() { + return area; + } + + public double getWidth() { + return width; + } + + public double getHeight() { + return height; + } + + public Point getOrigin() { + return origin; + } + + public void setOrigin(Point origin) { + this.origin = origin; + } + + public Rectangle(double area,double width,Point origin){ + this.area = area; + this.origin = origin; + setWidth(width); + } + + public double getSideRelation(){ + return Math.max(width/height,height/width); + } + + public boolean checkSideRelation(double side){ + return !(getSideRelation() < Math.max((area/side)/side,side/(area/side)));// false if the Relation gets worse. + } + + +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java new file mode 100644 index 0000000000000000000000000000000000000000..6660426b30b565b4dc9c957fb9e81eee4b05d8a6 --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java @@ -0,0 +1,118 @@ +package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap; + +import de._82grfl1bif.KPI_Visualizer.structures.Structure; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +public class Row { + + double broad; + boolean horizontal; + + public HashMap getRectangles() { + return rectangles; + } + + HashMap rectangles; + Rectangle space; + + public Row(Rectangle space) { + this.space = space; + this.rectangles = new HashMap<>(); + this.broad = 0; + this.horizontal = (space.getWidth() >= space.getHeight()); + } + + private double getSideRelation() { + double currentMax = 0; + for (Map.Entry entry : rectangles.entrySet()) { + Rectangle r = entry.getKey(); + currentMax = Math.max(r.getSideRelation(), currentMax); + } + return currentMax; + } + + public void addRectangle(double area, Structure structure) { + double currentArea = getCurrentArea() + area; + if (horizontal) { + this.broad = currentArea / space.getHeight(); //calculating the new broad + int currentHeight = this.space.getOrigin().y; //new temp for height of origins + for (Map.Entry entry : rectangles.entrySet()) { + Rectangle r = entry.getKey(); + r.setWidth(this.broad);//setting new width&Height for all existing rectangles + r.setOrigin(new Point(this.space.getOrigin().x, currentHeight));//setting new origins for all existing rectangles + currentHeight += (int) Math.round(r.getHeight());//for next origin + } + rectangles.put((new Rectangle(area, this.broad, new Point(this.space.getOrigin().x, currentHeight))), structure);//add new Rectangle + } else { + this.broad = currentArea / space.getWidth(); //calculating the new broad + int currentWidth = this.space.getOrigin().x; //new temp for width of origins + for (Map.Entry entry : rectangles.entrySet()) { + Rectangle r = entry.getKey(); + r.setHeight(this.broad);//setting new width&Height for all existing rectangles + r.setOrigin(new Point(currentWidth, space.getOrigin().y));//setting new origins for all existing rectangles + currentWidth += (int) Math.round(r.getHeight());//for next origin + } + rectangles.put(new Rectangle(area, area / this.broad, new Point(currentWidth, space.getOrigin().y)), structure); + } + } + + private double getCurrentArea() { + double currentArea = 0; + for (Map.Entry entry : rectangles.entrySet()) { + Rectangle r = entry.getKey(); + currentArea += r.getArea(); + } + return currentArea; + } + + public boolean checkInsert(double area) { + if (!rectangles.isEmpty()) { + double currentArea = getCurrentArea() + area; + double broadTemp = horizontal ? currentArea / space.getHeight() : currentArea / space.getWidth(); + for (Map.Entry entry : rectangles.entrySet()) { + Rectangle r = entry.getKey(); + if (!r.checkSideRelation(broadTemp)) + return false;//returns false if one of the existing rectangles gets worse + } + return !(new Rectangle(area, broad, new Point(0, 0)).getSideRelation() > getSideRelation()); //returns false if the inserted rectangle is worse, than any other before + }else { + return true; + } + } + + public Rectangle getLeftover() { + Point origin; + double width; + if (horizontal) { + origin = new Point(space.getOrigin().x + (int)(broad), space.getOrigin().y); + width = space.getWidth() - getWidth(); + } else { + origin = new Point(space.getOrigin().x, space.getOrigin().y + (int)(broad)); + width = getWidth(); + } + return new Rectangle(this.space.getArea() - getCurrentArea(), width, origin); + } + + public double getWidth() { + if (horizontal) { + return this.broad; + } else { + return this.space.getWidth(); + } + } + + public double getHeight() { + if (horizontal) { + return this.space.getHeight(); + } else { + return this.broad; + } + } + + public boolean isFull(){ + return (Math.round(this.space.getArea()) <= Math.round(this.getCurrentArea())); + } +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java new file mode 100644 index 0000000000000000000000000000000000000000..19338e118f69e6b0aa430e0301de1dd221d0d712 --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java @@ -0,0 +1,58 @@ +package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap; + +import de._82grfl1bif.KPI_Visualizer.structures.Foundation; +import de._82grfl1bif.KPI_Visualizer.structures.Structure; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class SquarifiedTreemapLayout { + + private ArrayList rows = new ArrayList<>(); + + public ArrayList getRows() { + return rows; + } + + public SquarifiedTreemapLayout() { + this.rows = new ArrayList<>(); + } + + public void generateLayout(Foundation foundation, Rectangle bounds) { + rows.addAll(generateSubLayout(foundation, bounds)); + ArrayList foundations = new ArrayList<>(); + foundations.add(foundation); + do { + ArrayList tempRows = new ArrayList<>(); + rows.stream().filter(r -> r.rectangles.containsValue(foundations.get(foundations.size()-1))).forEach(row -> + tempRows.addAll(generateSubLayout(foundations.get(foundations.size()-1), new Rectangle(foundations.get(foundations.size()-1).getArea(), row.getWidth(), row.space.getOrigin())))); + rows.addAll(tempRows);//letztes element bearbeitet und ein subLayout dafür angelegt. + + ArrayList tempFoundations = new ArrayList<>(); + for (Structure s : foundations.get(foundations.size() - 1).getChildren()) { + if (s.getClass() == Foundation.class) { + tempFoundations.add((Foundation) s); + } + } + foundations.remove(foundations.size()-1); + foundations.addAll(tempFoundations);//alle Kinder(nur Foundations) des letzten Elements in die Liste geschrieben und das Element entfernt. + + } while (!foundations.isEmpty()); + } + + private ArrayList generateSubLayout(Foundation foundation, Rectangle rectangle) { + ArrayList result = new ArrayList<>(); + result.add(new Row(rectangle)); + for (Structure s : foundation.getChildren()) { + if (!result.get(result.size() - 1).checkInsert(s.getArea())) {//wenn einfügen in die bestehende Reihe das Seitenverhältnis verschlechtern würde. + Row tempRow = new Row(result.get(result.size() - 1).getLeftover());//erzeige neue Reihe mit dem Rest des alten spaces als space. + result.add(tempRow);//füge die neue Reihe ans Ende der Sammlung ein. + } + result.get(result.size() - 1).addRectangle(s.getArea(), s);//füge das Kind in die letzte Reihe ein, die in der Liste ist. + } + return result; + } +} + diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java index 1ce0ec5dae37ed7306aa35fe7e370e905cff097f..722936b872ec3fe90ec0ca378e9cb44bbd04afbb 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java @@ -2,6 +2,7 @@ package de._82grfl1bif.KPI_Visualizer; import de._82grfl1bif.KPI_Visualizer.commands.SetPreset; import de._82grfl1bif.KPI_Visualizer.commands.generateLayout; +import de._82grfl1bif.KPI_Visualizer.helpers.FileInputTabCompleter; import org.bukkit.plugin.java.JavaPlugin; public final class main extends JavaPlugin { @@ -11,6 +12,7 @@ public final class main extends JavaPlugin { // Plugin startup logic getCommand("setPreset").setExecutor(new SetPreset()); getCommand("generateLayout").setExecutor(new generateLayout()); + getCommand("generateLayout").setTabCompleter(new FileInputTabCompleter()); } @Override diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java new file mode 100644 index 0000000000000000000000000000000000000000..717a2edcbd8238e38c3c695bf47bd3cd7e8fe729 --- /dev/null +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java @@ -0,0 +1,357 @@ +package de._82grfl1bif.KPI_Visualizer.structures; + +import de._82grfl1bif.KPI_Visualizer.data.Klasse; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Sign; + +import java.util.Random; +import java.util.logging.Level; + +public class Builder { + + Server server; + + public Builder(Server server) { + this.server = server; + } + + public void setFoundation(Location startLocation, int x, int z, Material material) { + for (int cx = 0; cx < x; cx++) { + for (int cz = 0; cz < z; cz++) { + Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx, 0, cz)); + block.setType(material); + } + } + } + + public void fillQube(Location startLocation, int x, int y, int z, Material material) { + for (int cy = 0; cy < y; cy++) { + setFoundation(startLocation.clone().add(0, cy, 0), x, z, material); + } + } + + private void setWalls(Location startLocation, int x, int y, int z, Material innerMaterial, Material glassMaterial) { + Location temp = startLocation.clone().add(0, 0, 1); + for (int cz = 0; cz < z - 2; cz++) {//00-0Z + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(1, cy, cz)).setType(innerMaterial); + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(glassMaterial); + } + } + temp = startLocation.clone().add(1, 0, 0); + for (int cx = 0; cx < x - 2; cx++) {//00-0X + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 1)).setType(innerMaterial); + server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(glassMaterial); + } + } + temp = startLocation.clone().add(1, 0, z - 1); + for (int cx = 0; cx < x - 2; cx++) {//0Z-ZX + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, -1)).setType(innerMaterial); + server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(glassMaterial); + + } + } + temp = startLocation.clone().add(x - 1, 0, 1); + for (int cz = 0; cz < z - 2; cz++) {//0X-XZ + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(-1, cy, cz)).setType(innerMaterial); + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(glassMaterial); + + } + } + } + + private void setCorners(Location startLocation, int x, int y, int z, Material facade) { + Location temp = startLocation.clone(); + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade); + } + temp = startLocation.clone().add(x - 1, 0, 0); + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade); + } + temp = startLocation.clone().add(0, 0, z - 1); + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade); + } + temp = startLocation.clone().add(x - 1, 0, z - 1); + for (int cy = 0; cy < y; cy++) { + server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade); + } + } + + public void buildBuilding(Location startLocation, int x, int y,int craneHeight,int antennaHeight, int z, Material facadeMaterial, Material glassMaterial, Material innerMaterial) { + setWalls(startLocation, x, y, z, innerMaterial, glassMaterial); + setCorners(startLocation, x, y, z, facadeMaterial); + setFoundation(startLocation.clone().add(0, y, 0), x, z, facadeMaterial);//roof + fillQube(startLocation.clone().add(Math.round(x/2),y+1,Math.round(x/2)),1,antennaHeight,1,Material.COBBLESTONE_WALL); + Random rm = new Random(); + switch (rm.nextInt(3)+1){ + case 1: setCrane(startLocation,x,y,z,craneHeight,BlockFace.NORTH); + break; + case 2: setCrane(startLocation,x,y,z,craneHeight,BlockFace.WEST); + break; + case 3: setCrane(startLocation,x,y,z,craneHeight,BlockFace.EAST); + break; + case 4: setCrane(startLocation,x,y,z,craneHeight,BlockFace.SOUTH); + break; + } + } + + public void setAllChildren(Foundation foundation) { + for (Structure s : foundation.getChildren()) { + if (s.getClass() == Foundation.class) {//TODO must be revisited to draw rectangular Foundations + this.setFoundation(s.getLocation().clone().add(0, s.getDepth(), 0), s.getWidth().x, s.getWidth().x, s.getMaterial()); + addDescription(s.getLocation().clone().add(0, s.getDepth(), 0), s); + setAllChildren((Foundation) s); + } else {//TODO must be revisited to draw rectangular Buildings + this.buildBuilding(s.getLocation().clone().add(1, s.getDepth() + 1,1), + s.getWidth().x - 2, + ((Building) s).getHeight(), + ((Building)s).klasse.commits, + Math.round(((Building)s).klasse.complexity/10000), + s.getWidth().x - 2, + ((((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays())) > 0.25)? Material.WAXED_OXIDIZED_COPPER: + ((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) > 0.50)?Material.WAXED_WEATHERED_COPPER: + ((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) > 0.75)?Material.WAXED_EXPOSED_COPPER:Material.WAXED_COPPER_BLOCK), + (((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.25)?Material.IRON_BARS: + ((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.50)?Material.BLUE_STAINED_GLASS: + ((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.75)?Material.GLASS:Material.WHITE_STAINED_GLASS) + ,s.getMaterial()); + addDescription(s.getLocation().clone().add(1, s.getDepth() + 1, 1), s); + } + } + } + + public void setCrane(Location startLocation ,int x ,int y ,int z ,int height ,BlockFace orientation){ + switch (orientation) { + case NORTH: + for(int cy = y+1; cy < (height+y+2); cy++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,cy,z-2)).setType(Material.YELLOW_CONCRETE); + } + for(int cz = 0; cz < z; cz++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,y+height,cz)).setType(Material.YELLOW_CONCRETE); + } + break; + case WEST: + for(int cy = y+1; cy < (height+y+2); cy++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-2,cy,0)).setType(Material.YELLOW_CONCRETE); + } + for(int cx = 0; cx < z; cx++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,y+height,0)).setType(Material.YELLOW_CONCRETE); + } + break; + case EAST: + for(int cy = y+1; cy < (height+y+2); cy++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(2,cy,z-1)).setType(Material.YELLOW_CONCRETE); + } + for(int cx = 0; cx < z; cx++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,y+height,z-1)).setType(Material.YELLOW_CONCRETE); + } + break; + case SOUTH: + for(int cy = y+1; cy < (height+y+2); cy++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-1,cy,2)).setType(Material.YELLOW_CONCRETE); + } + for(int cz = 0; cz < z; cz++){ + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-1,y+height,cz)).setType(Material.YELLOW_CONCRETE); + } + break; + default: + Bukkit.getLogger().log(Level.SEVERE, "fehlerhafte Orientierung"); + break; + } + } + + private void addDescription(Location startLocation, Structure structure) { + if (structure.getClass() == Foundation.class) { + //if (!((Foundation) structure).getChildren().stream().anyMatch(s -> s.getClass() == Foundation.class)) {//no foundation in Children + setFoundationSing(startLocation,(Foundation) structure); + //} + } else { + setWallSing(startLocation, (Building) structure, BlockFace.NORTH); + setWallSing(startLocation, (Building) structure, BlockFace.EAST); + setWallSing(startLocation, (Building) structure, BlockFace.WEST); + setWallSing(startLocation, (Building) structure, BlockFace.SOUTH); + } + } + + private void setWallSing(Location startLocation, Building building, BlockFace orientation) { + org.bukkit.block.Sign sign1 = null; + org.bukkit.block.Sign sign2 = null; + org.bukkit.block.Sign sign1o = null; + org.bukkit.block.Sign sign2o = null; + org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN); + switch (orientation) { + case NORTH: + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, -1)).setType(Material.OAK_WALL_SIGN); + sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, -1)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, -1)).setType(Material.OAK_WALL_SIGN); + sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, -1)).getState(); + matSign.setFacingDirection(BlockFace.NORTH); + if (building.name.length() > 60) { + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, -1)).setType(Material.OAK_WALL_SIGN); + sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, -1)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, -1)).setType(Material.OAK_WALL_SIGN); + sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, -1)).getState(); + } + break; + case EAST: + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, 0)).setType(Material.OAK_WALL_SIGN); + sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, building.width.y - 3)).setType(Material.OAK_WALL_SIGN); + sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, building.width.y - 3)).getState(); + matSign.setFacingDirection(BlockFace.WEST_NORTH_WEST);//Don't have a clue why this works but getting it made me go mad + if (building.name.length() > 60) { + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, 0)).setType(Material.OAK_WALL_SIGN); + sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, building.width.y - 3)).setType(Material.OAK_WALL_SIGN); + sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, building.width.y - 3)).getState(); + } + break; + case SOUTH: + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, building.width.y - 2)).setType(Material.OAK_WALL_SIGN); + sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, building.width.y - 2)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, building.width.y - 2)).setType(Material.OAK_WALL_SIGN); + sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, building.width.y - 2)).getState(); + matSign.setFacingDirection(BlockFace.WEST_SOUTH_WEST);//Same here ;( + if (building.name.length() > 60) { + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, building.width.y - 2)).setType(Material.OAK_WALL_SIGN); + sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, building.width.y - 2)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, building.width.y - 2)).setType(Material.OAK_WALL_SIGN); + sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, building.width.y - 2)).getState(); + } + break; + case WEST: + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, 0)).setType(Material.OAK_WALL_SIGN); + sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, building.width.y - 3)).setType(Material.OAK_WALL_SIGN); + sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, building.width.y - 3)).getState(); + matSign.setFacingDirection(BlockFace.WEST); + if (building.name.length() > 60) { + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, 0)).setType(Material.OAK_WALL_SIGN); + sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, building.width.y - 3)).setType(Material.OAK_WALL_SIGN); + sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, building.width.y - 3)).getState(); + } + break; + default: + Bukkit.getLogger().log(Level.SEVERE, "falsche Orientierung übergeben!"); + } + sign1.setData(matSign); + sign2.setData(matSign); + sign1o.setData(matSign); + sign2o.setData(matSign); + sign1.setGlowingText(true); + sign2.setGlowingText(true); + sign1o.setGlowingText(true); + sign2o.setGlowingText(true); + if (building.name.length() > 60) { + setTextToSign(sign1, sign1o, building.name); + setTextToSign(sign2, sign2o, building.name); + }else{ + setTextToSign(sign1, building.name); + setTextToSign(sign2, building.name); + } + } + + private void setTextToSign(Sign sign, String text) { + int i = (text.length() > 15) ? text.length() - 15 : 0; + sign.setLine(3, text.substring(i)); + int i1 = (text.length() > 30) ? text.length() - 30 : 0; + sign.setLine(2, text.substring(i1, i)); + int i2 = (text.length() > 45) ? text.length() - 45 : 0; + sign.setLine(1, text.substring(i2, i1)); + sign.setLine(0, text.substring(Math.max(text.length() - 60 , 0), i2)); + sign.update(); + } + + private void setTextToSign(Sign sign, Sign oSign, String text) { + setTextToSign(sign, text); + int i = Math.max(text.length() - 75 , 0); + oSign.setLine(3, text.substring(i, Math.max(text.length() - 60 , 0))); + int i1 = Math.max(text.length() - 90 , 0); + oSign.setLine(2, text.substring(i1, i)); + int i2 = Math.max(text.length() - 105 , 0); + oSign.setLine(1, text.substring(i2, i1)); + oSign.setLine(0, text.substring(Math.max(text.length() - 120 , 0), i2)); + oSign.update(); + + } + + private void setFoundationSing(Location startLocation, Foundation foundation) { + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, 0)).setType(Material.OAK_SIGN); + org.bukkit.block.Sign sign = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.width.x-1, 0, 0)).setType(Material.OAK_SIGN); + org.bukkit.block.Sign sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.width.x-1, 0, 0)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).setType(Material.OAK_SIGN); + org.bukkit.block.Sign sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).getState(); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.getWidth().x-1, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).setType(Material.OAK_SIGN); + org.bukkit.block.Sign sign3 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.getWidth().x-1, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).getState(); + org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_SIGN); + matSign.setFacingDirection(BlockFace.NORTH_WEST); + sign.setData(matSign); + matSign.setFacingDirection(BlockFace.NORTH_EAST); + sign1.setData(matSign); + matSign.setFacingDirection(BlockFace.SOUTH_WEST); + sign2.setData(matSign); + matSign.setFacingDirection(BlockFace.SOUTH_EAST); + sign3.setData(matSign); + sign.setGlowingText(true); + sign1.setGlowingText(true); + sign2.setGlowingText(true); + sign3.setGlowingText(true); + setTextToSign(sign,foundation.name.split("/")[foundation.name.split("/").length-1]); + setTextToSign(sign1,foundation.name.split("/")[foundation.name.split("/").length-1]); + setTextToSign(sign2,foundation.name.split("/")[foundation.name.split("/").length-1]); + setTextToSign(sign3,foundation.name.split("/")[foundation.name.split("/").length-1]); + } + + public void setLegend(Location startLocation){ + org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,0,-6)).setType(Material.WAXED_COPPER_BLOCK); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,1,-6)).setType(Material.WAXED_EXPOSED_COPPER); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,2,-6)).setType(Material.WAXED_WEATHERED_COPPER); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,3,-6)).setType(Material.WAXED_OXIDIZED_COPPER); + setLegendBlock(startLocation.clone().add(-1,0,-6),"1. Quartal","Zeit seit dem","Erstem Commit"); + setLegendBlock(startLocation.clone().add(-1,1,-6),"2. Quartal","Zeit seit dem","Erstem Commit"); + setLegendBlock(startLocation.clone().add(-1,2,-6),"3. Quartal","Zeit seit dem","Erstem Commit"); + setLegendBlock(startLocation.clone().add(-1,3,-6),"4. Quartal","Zeit seit dem","Erstem Commit"); + + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,0,-5)).setType(Material.WHITE_STAINED_GLASS); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,1,-5)).setType(Material.GLASS); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,2,-5)).setType(Material.BLUE_STAINED_GLASS); + server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,3,-5)).setType(Material.IRON_BARS); + setLegendBlock(startLocation.clone().add(-1,0,-5),"1. Quartal","Zeit seit dem","Letzten Commit"); + setLegendBlock(startLocation.clone().add(-1,1,-5),"2. Quartal","Zeit seit dem","Letzten Commit"); + setLegendBlock(startLocation.clone().add(-1,2,-5),"3. Quartal","Zeit seit dem","Letzten Commit"); + setLegendBlock(startLocation.clone().add(-1,3,-5),"4. Quartal","Zeit seit dem","Letzten Commit"); + + setLegendBlock(startLocation.clone().add(-1,0,-4),"Breite der","Gebäude = ","#Variablen-3"); + setLegendBlock(startLocation.clone().add(-1,1,-4),"Höhe der ","Gebäude =","#Methoden"); + setLegendBlock(startLocation.clone().add(-1,2,-4),"Höhe der ","Antenne ≈","Komplexität"); + setLegendBlock(startLocation.clone().add(-1,3,-4),"Höhe der ","Kräne =","#Commits"); + } + + private void setLegendBlock(Location startLocation,String s1,String s2,String s3){ + org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN); + org.bukkit.block.Sign sign = null; + server.getWorlds().get(0).getBlockAt(startLocation).setType(Material.OAK_WALL_SIGN); + sign = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation).getState(); + sign.setGlowingText(true); + sign.setGlowingText(true); + sign.setLine(1,s1); + sign.setLine(2,s2); + sign.setLine(3,s3); + matSign.setFacingDirection(BlockFace.WEST); + sign.setData(matSign); + sign.update(); + } +} diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java index eb9c81be2413d71bd03eedcb9b88e0b10b1dffae..15999c672814a10d25bfeac691ffb9a28e82ff19 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java @@ -1,23 +1,53 @@ package de._82grfl1bif.KPI_Visualizer.structures; +import de._82grfl1bif.KPI_Visualizer.data.Klasse; import org.bukkit.Material; -import javax.persistence.Column; +import java.awt.Point; public class Building extends Structure{ - @Column(name = "height") private final int height; + public Klasse klasse = null; + @Deprecated public Building(int width, int height, Material material){ //Buildings are Square -> no depth + this.width.x = width; + this.width.y = width; + this.height = height; + this.material = material; + if(this.width.x < 5){ + throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg"); + } + } + + public Building(Point width/*and depth for complex algorithms*/, int height, Material material){ this.width = width; this.height = height; this.material = material; - if(this.width < 3){ - throw new IllegalArgumentException("keine Gebäude kleiner 3 wegen 2 gehweg"); + if(this.width.x < 5 || this.width.y < 5){ + throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg"); + } + } + + public Building(Material material, Klasse klasse, String name){ //Buildings are Square -> no depth + this.klasse = klasse; + this.material = material; + this.width = new Point((int)Math.round((klasse.variables+5)),(int)Math.round((klasse.variables+5))); //TODO: make this work with treemap and square + this.area = klasse.variables*25; + this.name = name; + this.height = klasse.functions; + if(this.width.x < 5 || this.width.y < 5){ + throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg"); } } public int getHeight() { return this.height; } + + @Override + public Structure getFromTree(String checkName) { + if(this.name.equals(checkName))return this; + return null; + } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java index a5114379a4db083dcc0f626a9e775cb67381b010..582d2a1d03bec86d1cd9da09d815eb29b8c8cbd1 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java @@ -1,23 +1,32 @@ package de._82grfl1bif.KPI_Visualizer.structures; -import de._82grfl1bif.KPI_Visualizer.helpers.Layout; +import de._82grfl1bif.KPI_Visualizer.data.Klasse; +import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.SimpleSquareLayout; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.util.Vector; import javax.management.AttributeNotFoundException; -import java.awt.Point; +import java.awt.*; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Random; -public class Foundation extends Structure{ +public class Foundation extends Structure { private ArrayList children = new ArrayList<>(); - private Layout layout; + private SimpleSquareLayout simpleSquareLayout; - public Foundation(int depth, Material material){ //Foundations are uniform Height - this.width = 0; + public Foundation(int depth, Material material) { //Foundations are uniform Height + this.width.x = 0; + this.depth = depth; + this.material = material; + } + + public Foundation(int depth, Material material, String name) { //Foundations are uniform Height + this.width.x = 0; + this.name = name; this.depth = depth; this.material = material; } @@ -27,70 +36,210 @@ public class Foundation extends Structure{ } public void addChildren(ArrayList children) { - for (Structure s:children) { + for (Structure s : children) { s.setDepth(this.depth); } this.children.addAll(children); } - public void removeChildren(){ + public Structure generateChild(boolean isFoundation, Klasse klasse, String name) { + Structure result; + if (isFoundation) { + result = new Foundation(this.depth + 1, nextSediment(), name); + } else { + result = new Building(nextColorConcrete(), klasse, name); + } + this.children.add(result); + return result; + } + + public Material nextColorConcrete() { + Material result = null; + Random rand = new Random(); + while ((result == this.material) || (result == null)) { + int r = rand.nextInt(15); //there are 16 kins of concrete + switch (r) { + case 0: + result = Material.BLACK_CONCRETE; + break; + case 1: + result = Material.BROWN_CONCRETE; + break; + case 2: + result = Material.GRAY_CONCRETE; + break; + case 3: + result = Material.LIME_CONCRETE; + break; + case 4: + result = Material.YELLOW_CONCRETE; + break; + case 5: + result = Material.LIGHT_GRAY_CONCRETE; + break; + case 6: + result = Material.RED_CONCRETE; + break; + case 7: + result = Material.BLUE_CONCRETE; + break; + case 8: + result = Material.CYAN_CONCRETE; + break; + case 9: + result = Material.GREEN_CONCRETE; + break; + case 10: + result = Material.LIGHT_BLUE_CONCRETE; + break; + case 11: + result = Material.MAGENTA_CONCRETE; + break; + case 12: + result = Material.ORANGE_CONCRETE; + break; + case 13: + result = Material.PINK_CONCRETE; + break; + case 14: + result = Material.PURPLE_CONCRETE; + break; + case 15: + result = Material.WHITE_CONCRETE; + break; + } + } + return result; + } + + public Material nextSediment(){ + Material result = null; + Random rand = new Random(); + while ((result == this.material) || (result == null)) { + int r = rand.nextInt(12); //there are 16 kins of concrete + switch (r) { + case 0: + result = Material.STONE; + break; + case 1: + result = Material.GRASS_BLOCK; + break; + case 2: + result = Material.ROOTED_DIRT; + break; + case 3: + result = Material.GRANITE; + break; + case 4: + result = Material.DIORITE; + break; + case 5: + result = Material.ANDESITE; + break; + case 6: + result = Material.DEEPSLATE; + break; + case 7: + result = Material.TUFF; + break; + case 8: + result = Material.GRAVEL; + break; + case 9: + result = Material.SAND; + break; + case 10: + result = Material.SANDSTONE; + break; + case 11: + result = Material.COARSE_DIRT; + break; + } + } + return result; + } + + public void removeChildren() { this.children = new ArrayList<>(); } - public void optimizeLayout(){ - //TODO: find cool Algorithms to do this scientifically and optimal. + public void optimizeLayout() { int cWith = 0; for (Structure s : children) { - s.setLocation(location.clone().add(new Vector(1,depth,((cWith)+1)))); - cWith += (s.getWidth() + 2); + s.setLocation(location.clone().add(new Vector(1, depth, ((cWith) + 1)))); + cWith += (s.getWidth().x + 2); } - this.width = cWith; + this.width.x = cWith; } - private static class DepthComparator implements Comparator{ + @Override + public Structure getFromTree(String checkName) { + if (this.name != null) { + if (this.name.equals(checkName)) { + return this; + } else { + for (Structure s : this.children) { + if (s.getFromTree(checkName) != null) return s.getFromTree(checkName); + } + } + } else { + for (Structure s : this.children) { + if (s.getFromTree(checkName) != null) return s.getFromTree(checkName); + } + } + return null; + } + + @Override + public double getArea(){ + if(area == 0)setAllAreas(); + return area; + } + + private static class DepthComparator implements Comparator { @Override public int compare(Foundation o1, Foundation o2) { return Integer.compare(o1.getDepth(), o2.getDepth()); } } - private static class WidthComparator implements Comparator{ + private static class WidthComparator implements Comparator { @Override public int compare(Structure o1, Structure o2) { - return Integer.compare(o1.getWidth(), o2.getWidth()); + return Integer.compare(o1.getWidth().x, o2.getWidth().x); } } private boolean baseFoundation = true; - public void organizeFoundation(){ - if(this.depth == 0 && baseFoundation){ //rootElement prepwork and recursion call + public void organizeFoundation() { + if (this.depth == 0 && baseFoundation) { //rootElement prepwork and recursion call ArrayList allFoundations = collectAllFoundations(); baseFoundation = false; allFoundations.sort(new DepthComparator()); Collections.reverse(allFoundations); //higher Depths first - for (Foundation f:allFoundations) { + for (Foundation f : allFoundations) { //if(!this.equals(f)) f.organizeFoundation(); } - }else{ //normal Call and recursion + } else { //normal Call and recursion this.children.sort(new WidthComparator()); Collections.reverse(this.children); //Widest Building or Foundation first - this.layout = new Layout(this.children); - this.layout.createLayout(); - this.width = layout.getSize(); + this.simpleSquareLayout = new SimpleSquareLayout(this.children); + this.simpleSquareLayout.createLayout(); + this.width.x = simpleSquareLayout.getSize(); } } - private ArrayList collectAllFoundations(){ //called on the base Foundation + public ArrayList collectAllFoundations() { //called on the base Foundation ArrayList fCollection = new ArrayList<>(); fCollection.add(this); int currentDepth = this.depth; int lastDepthAdded = -1; - while (lastDepthAdded != 0){ //while there are new nextDepths in this Depth. - for (int i = 0; i < fCollection.size();i++) { - if (!(fCollection.get(i).getDepth() < currentDepth)){ //if f is not part of a historical depth + while (lastDepthAdded != 0) { //while there are new nextDepths in this Depth. + for (int i = 0; i < fCollection.size(); i++) { + if (!(fCollection.get(i).getDepth() < currentDepth)) { //if f is not part of a historical depth fCollection.addAll(fCollection.get(i).getNextDepth()); lastDepthAdded = fCollection.get(i).getNextDepth().size(); } @@ -100,28 +249,40 @@ public class Foundation extends Structure{ return fCollection; } - private ArrayList getNextDepth(){ - ArrayList result = new ArrayList<>(); - for (Structure s:this.children) { + public ArrayList collectAllBuildings() { //called on the base Foundation + ArrayList buildings = new ArrayList<>(); + for (Structure s: children) { if (s.getClass() == Foundation.class){ + buildings.addAll(((Foundation) s).collectAllBuildings()); + }else{ + buildings.add((Building) s); + } + } + return buildings; + } + + private ArrayList getNextDepth() { + ArrayList result = new ArrayList<>(); + for (Structure s : this.children) { + if (s.getClass() == Foundation.class) { result.add((Foundation) s); - }else { + } else { s.setDepth(this.depth); } } - for (Foundation f:result) { - f.setDepth((this.depth)+1); + for (Foundation f : result) { + f.setDepth((this.depth) + 1); } return result; } - public void correctAllLocations(Location location){ - for (Structure s:this.children) { + public void correctAllLocations(Location location) { + for (Structure s : this.children) { try { - Point temp = this.layout.getCoordinateOf(s); - s.setLocation(location.clone().add(temp.x,0,temp.y)); - if (s.getClass() == Foundation.class){ - Foundation f = (Foundation)s; + Point temp = this.simpleSquareLayout.getCoordinateOf(s); + s.setLocation(location.clone().add(temp.x, 0, temp.y)); + if (s.getClass() == Foundation.class) { + Foundation f = (Foundation) s; f.correctAllLocations(f.getLocation()); } } catch (AttributeNotFoundException e) { @@ -129,4 +290,17 @@ public class Foundation extends Structure{ } } } + + private double setAllAreas(){ + double myArea = 0; + for (Structure s: children) { + if(s.getClass() == Foundation.class){ + myArea += ((Foundation) s).setAllAreas(); + }else{ + myArea += s.getArea(); + } + } + this.area = myArea; + return myArea; + } } diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java index 6b63b86b4ccd002d8ccf81712a9e81d2a90c2e37..5efa1abb86780304feda90f4010d2ff1ff924f99 100644 --- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java +++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java @@ -6,16 +6,20 @@ import org.bukkit.util.Vector; import javax.persistence.Column; import javax.persistence.Entity; +import java.awt.*; -@Entity -public class Structure{ +public abstract class Structure{ - @Column(name ="width") - protected int width; - @Column(name ="material") + protected Point width = new Point(0,0); protected Material material; protected Location location; protected int depth; + protected String name; + protected double area; + + public double getArea() { + return area; + } public Material getMaterial() { return material; @@ -33,7 +37,7 @@ public class Structure{ this.location.add(vector); } - public int getWidth() { + public Point getWidth() { return width; } @@ -44,4 +48,6 @@ public class Structure{ public int getDepth() { return depth; } + + public abstract Structure getFromTree(String checkName); } diff --git a/src/server/banned-ips.json b/src/server/banned-ips.json new file mode 100644 index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc --- /dev/null +++ b/src/server/banned-ips.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/server/banned-players.json b/src/server/banned-players.json new file mode 100644 index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc --- /dev/null +++ b/src/server/banned-players.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/server/bukkit.yml b/src/server/bukkit.yml new file mode 100644 index 0000000000000000000000000000000000000000..ddf2b3b3908972e35db44f336982b93180147ea4 --- /dev/null +++ b/src/server/bukkit.yml @@ -0,0 +1,43 @@ +# This is the main configuration file for Bukkit. +# As you can see, there's actually not that much to configure without any plugins. +# For a reference for any variable inside this file, check out the Bukkit Wiki at +# https://www.spigotmc.org/go/bukkit-yml +# +# If you need help on this file, feel free to join us on irc or leave a message +# on the forums asking for advice. +# +# IRC: #spigot @ irc.spi.gt +# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc ) +# Forums: https://www.spigotmc.org/ +# Bug tracker: https://www.spigotmc.org/go/bugs + + +settings: + allow-end: true + warn-on-overload: true + permissions-file: permissions.yml + update-folder: update + plugin-profiling: false + connection-throttle: 4000 + query-plugins: true + deprecated-verbose: default + shutdown-message: Server closed + minimum-api: none +spawn-limits: + water-underground-creature: 5 + monsters: 70 + animals: 10 + water-animals: 5 + water-ambient: 20 + ambient: 15 +chunk-gc: + period-in-ticks: 600 +ticks-per: + water-underground-creature-spawns: 1 + animal-spawns: 400 + monster-spawns: 1 + water-spawns: 1 + water-ambient-spawns: 1 + ambient-spawns: 1 + autosave: 6000 +aliases: now-in-commands.yml diff --git a/src/server/cache/mojang_1.17.1.jar b/src/server/cache/mojang_1.17.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..8ca35bb7944d8664750b0a71b06647f3a958336c Binary files /dev/null and b/src/server/cache/mojang_1.17.1.jar differ diff --git a/src/server/cache/patched_1.17.1.jar b/src/server/cache/patched_1.17.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..0b2c697de221711ef972d59db56f11d7e499b906 Binary files /dev/null and b/src/server/cache/patched_1.17.1.jar differ diff --git a/src/server/commands.yml b/src/server/commands.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b065deef20a9625a681afad60ac0d47fa7ff9c6 --- /dev/null +++ b/src/server/commands.yml @@ -0,0 +1,17 @@ +# This is the commands configuration file for Bukkit. +# For documentation on how to make use of this file, check out the Bukkit Wiki at +# https://www.spigotmc.org/go/commands-yml +# +# If you need help on this file, feel free to join us on irc or leave a message +# on the forums asking for advice. +# +# IRC: #spigot @ irc.spi.gt +# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc ) +# Forums: https://www.spigotmc.org/ +# Bug tracker: https://www.spigotmc.org/go/bugs + +command-block-overrides: [] +ignore-vanilla-permissions: false +aliases: + icanhasbukkit: + - version $1- diff --git a/src/server/cwa-verify_2021-11-09_16-08-07.json b/src/server/cwa-verify_2021-11-09_16-08-07.json new file mode 100644 index 0000000000000000000000000000000000000000..dadf7912d57f22a5a53df4c152975341f1aa3f23 --- /dev/null +++ b/src/server/cwa-verify_2021-11-09_16-08-07.json @@ -0,0 +1 @@ +{"py/object": "extractor.extractor.ProjectExtractionResult", "name": "cwa-verification-server", "entities": [{"py/object": "extractor.model.DataEntity", "entity_id": 4625, "name": "VerificationApplicationExternalTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationExternalTest.java", "base_class": null, "variables": ["TOKEN_PADDING", "mockMvc", "testResultServerService", "tanService", "appSessionrepository", "verificationApplicationConfig", "cachedRequestSize"], "functions": ["setUp", "tearDown", "callGenerateTanWithFake", "callGenerateTan", "callGenerateTanForQuickTest", "callGenerateTanByUnknownToken", "callGenerateTanByInvalidToken", "callGenerateTanWithNegativeCovidResultFaked", "callGenerateTanWithNegativeCovidResultWithoutFakeHeader", "callGenerateTanWithNegativeCovidResult", "callGenerateTanWithTanCounterMaximum", "callGenerateTanWithTeleTanAppSession", "callGenerateTanWithUnknownSourceOfTrust", "callGetRegistrationTokenByGuid", "callGetRegistrationTokenByGuidAndDobHash", "callGetRegistrationTokenByGuidAndDobHashAndWithoutDobHashAfterwards", "callGetRegistrationTokenByGuidAndDobHashAndWithAnotherDobHashAfterwards", "callGetRegistrationTokenByGuidAndDobHashAndUseDobHashAgainAfterwards", "callGetRegistrationTokenByDobHash", "callGetRegistrationTokenByGuidWithFake", "callGetRegistrationTokenWithNullKeyType", "callGetRegistrationTokenWithNullKey", "callGetRegistrationTokenByTeleTan", "callGetRegistrationTokenByUnknownTeleTan", "callGetRegistrationTokenByInvalidHashedGUID", "callGetRegistrationTokenByAlreadyExistForGUID", "callGetRegistrationTokenByAlreadyExistForTeleTan", "callGetTestState", "callGetTestStateWithDobRegistrationToken", "callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults", "callGetTestStateWithFake", "callGetTestStateByAppSessionIsEmpty", "testVerifyEndpointShouldNotBeReachable", "testTeleTanEndpointShouldNotBeReachable", "callGetRegistrationTokenByLargeRequest"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["VerificationApplicationExternalTest", "Store", "max", "request", "size", "config", "property", "to", "allow", "tests", "to", "modify", "it", "Reset", "max", "request", "size", "to", "cached", "value", "clean", "the", "repo", "Set", "the", "maxSizeLimit", "to", "10", "for", "testing", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "Test", "generateTAN", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTANForQuickTest", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "unknown", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "invalid", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "fake", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "negative", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "negative", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "registration", "token", "where", "the", "tancounter", "maximum", "is", "reached", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "registration", "token", "connected", "to", "an", "appsession", "based", "on", "tele", "Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "unknown", "source", "of", "trust", "in", "the", "appsession", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "with", "fake", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "keytype", "which", "is", "null", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "key", "which", "is", "null", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "tele", "tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "unknown", "Tele-Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "invalid", "Guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "for", "guid", "but", "the", "guid", "already", "has", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "for", "teletan", "but", "the", "teletan", "already", "has", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "fake", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "with", "empty", "Entity", "of", "VerificationAppSession", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "verifying", "tans", "is", "not", "reachable", "when", "external", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "creating", "new", "TeleTans", "is", "not", "reachable", "when", "external", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "with", "size", "larger", "than", "the", "maxSizeLimit", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "setup", "teardown", "callgeneratetanwithfake", "callgeneratetan", "callgeneratetanforquicktest", "callgeneratetanbyunknowntoken", "callgeneratetanbyinvalidtoken", "callgeneratetanwithnegativecovidresultfaked", "callgeneratetanwithnegativecovidresultwithoutfakeheader", "callgeneratetanwithnegativecovidresult", "callgeneratetanwithtancountermaximum", "callgeneratetanwithteletanappsession", "callgeneratetanwithunknownsourceoftrust", "callgetregistrationtokenbyguid", "callgetregistrationtokenbyguidanddobhash", "callgetregistrationtokenbyguidanddobhashandwithoutdobhashafterwards", "callgetregistrationtokenbyguidanddobhashandwithanotherdobhashafterwards", "callgetregistrationtokenbyguidanddobhashandusedobhashagainafterwards", "callgetregistrationtokenbydobhash", "callgetregistrationtokenbyguidwithfake", "callgetregistrationtokenwithnullkeytype", "callgetregistrationtokenwithnullkey", "callgetregistrationtokenbyteletan", "callgetregistrationtokenbyunknownteletan", "callgetregistrationtokenbyinvalidhashedguid", "callgetregistrationtokenbyalreadyexistforguid", "callgetregistrationtokenbyalreadyexistforteletan", "callgetteststate", "callgetteststatewithdobregistrationtoken", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults", "callgetteststatewithfake", "callgetteststatebyappsessionisempty", "testverifyendpointshouldnotbereachable", "testteletanendpointshouldnotbereachable", "callgetregistrationtokenbylargerequest"], "complexity": 108922.0, "loc": 828, "qloc": 565, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4626, "name": "TestResultServerService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TestResultServerService.java", "base_class": null, "variables": ["testResultServerClient"], "functions": ["result"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerService", "This", "class", "represents", "the", "lab", "server", "service", "This", "method", "gives", "an", "TestResult", "for", "guid", "param", "guid", "hashed", "GUID", "return", "Testresult", "for", "GUID", "result"], "complexity": 1865.0, "loc": 52, "qloc": 17, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4627, "name": "TanService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TanService.java", "base_class": null, "variables": ["verificationApplicationConfig", "tanRepository", "hashingService", "teleTanPattern", "teleTanLength"], "functions": ["saveTan", "deleteTan", "syntaxTeleTanVerification", "verifyTeleTan", "generateValidTan", "persistTan", "createTeleTan", "isTeleTanValid", "createTanFromUuid", "checkTanNotExist", "generateVerificationTeleTan", "generateVerificationTan", "generateVerificationTan", "getEntityByTan", "isTeleTanRateLimitNotExceeded"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "71f3b3a4dc80034e4a5479e764d9f8078679698e", "date": "2021-01-26 14:53:46 +0100", "committer": "GitHub", "comment": "Improve generations of tele-tans (#128)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "e002f056482113d0a839a6eaaac05392c00d042e", "date": "2020-05-27 11:04:46 +0200", "committer": "GitHub", "comment": "fix: documentation (#73)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}], "semantic_data": ["TanService", "UUID", "is", "128", "bit", "value", "This", "class", "represents", "the", "TanService", "service", "The", "link", "VerificationTanRepository", "The", "link", "HashingService", "Constructor", "for", "the", "TanService", "that", "also", "builds", "the", "pattern", "for", "tele", "tan", "verification", "param", "verificationApplicationConfig", "the", "link", "VerificationApplicationConfig", "with", "needed", "tan", "configurations", "param", "tanRepository", "the", "link", "VerificationTanRepository", "where", "tans", "are", "queried", "and", "inserted", "param", "hashingService", "the", "link", "HashingService", "implementation", "Saves", "link", "VerificationTan", "into", "the", "database", "param", "tan", "link", "VerificationTan", "return", "link", "VerificationTan", "Deletes", "link", "VerificationTan", "from", "the", "database", "param", "tan", "the", "tan", "which", "will", "be", "deleted", "Check", "teleTAN", "syntax", "constraints", "param", "teleTan", "the", "teleTAN", "return", "teleTAN", "verification", "flag", "Verifies", "the", "tele", "transaction", "number", "teleTAN", "param", "teleTan", "the", "teleTAN", "to", "verify", "return", "is", "teleTAN", "verified", "Generates", "new", "valid", "TAN", "String", "TAN", "is", "considered", "as", "valid", "if", "it", "is", "not", "yet", "stored", "in", "the", "database", "param", "tanCreator", "supplier", "which", "creates", "new", "TAN", "return", "Valid", "TAN", "String", "This", "method", "generates", "link", "VerificationTan", "entity", "and", "saves", "it", "param", "tan", "the", "TAN", "param", "tanType", "the", "TAN", "type", "param", "teleTanType", "type", "of", "the", "teleTan", "return", "the", "persisted", "TAN", "Creates", "new", "TeleTan", "String", "return", "new", "teleTAN", "Returns", "the", "if", "teleTAN", "matches", "the", "Pattern", "requirements", "param", "teleTan", "the", "teleTAN", "to", "check", "return", "The", "validity", "of", "the", "teleTAN", "Created", "new", "TAN", "String", "return", "new", "TAN", "Check", "for", "existing", "TAN", "in", "the", "link", "VerificationTanRepository", "param", "tan", "the", "TAN", "return", "flag", "for", "existing", "TAN", "Returns", "generated", "valid", "teleTAN", "and", "persists", "it", "return", "valid", "teleTAN", "This", "Method", "generates", "valid", "TAN", "and", "persists", "it", "Returns", "the", "generated", "TAN", "param", "sourceOfTrust", "sets", "the", "source", "of", "Trust", "for", "the", "Tan", "param", "teleTanType", "type", "of", "the", "teleTan", "return", "valid", "tan", "with", "given", "source", "of", "Trust", "This", "method", "generates", "valid", "TAN", "Object", "but", "doesn", "persist", "it", "param", "tan", "alphanumeric", "tan", "param", "tanType", "type", "of", "the", "tan", "param", "sourceOfTrust", "source", "of", "trust", "of", "the", "tan", "return", "Tan", "object", "Get", "existing", "VerificationTan", "by", "TAN", "from", "link", "VerificationTanRepository", "param", "tan", "the", "TAN", "return", "Optional", "VerificationTan", "Checks", "whether", "the", "rate", "limit", "for", "new", "TeleTans", "is", "not", "exceeded", "return", "true", "if", "new", "TeleTans", "can", "be", "created", "false", "if", "not", "savetan", "deletetan", "syntaxteletanverification", "verifyteletan", "generatevalidtan", "persisttan", "createteletan", "isteletanvalid", "createtanfromuuid", "checktannotexist", "generateverificationteletan", "generateverificationtan", "generateverificationtan", "getentitybytan", "isteletanratelimitnotexceeded"], "complexity": 14546.5, "loc": 330, "qloc": 165, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4628, "name": "HashedGuid", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/HashedGuid.java", "base_class": null, "variables": ["id"], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["HashedGuid", "This", "class", "represents", "the", "hashed", "Guid", "Hash", "SHA256", "aka", "QR-Code", "GUID", "encoded", "as", "hex", "string", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 1157.0, "loc": 44, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4629, "name": "RegistrationToken", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationToken.java", "base_class": null, "variables": ["registrationToken", "responsePadding"], "functions": [], "commits": [{"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["RegistrationToken", "This", "class", "represents", "the", "registration", "Token"], "complexity": 2650.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4630, "name": "VerificationAppSession", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationAppSession.java", "base_class": null, "variables": ["serialVersionUID", "id", "version", "createdAt", "updatedAt", "hashedGuid", "hashedGuidDob", "registrationTokenHash", "teleTanHash", "tanCounter", "sourceOfTrust", "teleTanType"], "functions": ["incrementTanCounter"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": ["VerificationAppSession", "This", "class", "represents", "the", "AppSession-entity", "This", "method", "increments", "the", "tan", "counter", "incrementtancounter"], "complexity": 8225.0, "loc": 103, "qloc": 59, "package": "app.coronawarn.verification.domain"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4631, "name": "MvcResult", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4632, "name": "MockMvc", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4633, "name": "VerificationAppSessionRepository", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/repository/VerificationAppSessionRepository.java", "base_class": null, "variables": [], "functions": ["findByRegistrationTokenHash", "findByHashedGuidOrHashedGuidDob", "findByTeleTanHash", "deleteByCreatedAtBefore"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "66b2fab6dbc688d7a6114f6e746f1a4b6130b6f5", "date": "2020-06-07 09:18:06 +0200", "committer": "GitHub", "comment": "fix: find the expected entity (#145)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationAppSessionRepository", "This", "class", "represents", "the", "AppSession", "repository", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "registrationTokenHash", "param", "registrationTokenHash", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "hashedGuid", "param", "hashedGuid", "hash", "to", "search", "for", "param", "hashedGuidDob", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "teleTanHash", "param", "teleTanHash", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "Appsessions", "that", "are", "older", "than", "the", "before", "value", "and", "deletes", "them", "param", "before", "the", "Date", "to", "delete", "by", "findbyregistrationtokenhash", "findbyhashedguidorhashedguiddob", "findbyteletanhash", "deletebycreatedatbefore"], "complexity": 2474.0, "loc": 66, "qloc": 11, "package": "app.coronawarn.verification.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4634, "name": "RegistrationTokenRequest", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationTokenRequest.java", "base_class": null, "variables": ["key", "keyDob", "keyType"], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "ec85348ce5492445d701ea1b14658250de6b7eaa", "date": "2020-05-29 14:58:29 +0200", "committer": "GitHub", "comment": "Fixed a comment that incorrectly lists available enum values. (#98)"}, {"hash": "e0f62bbb5562d9dac08e1d7ccd2ea27cda730df9", "date": "2020-05-27 07:54:23 +0200", "committer": "GitHub", "comment": "fix: gitattributes (#81)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": ["RegistrationTokenRequest", "This", "class", "represents", "registration", "token", "request", "parameter", "with", "hashed", "guid", "or", "teleTAN", "The", "key", "which", "can", "be", "teletan", "or", "hashed", "guid", "The", "hashed", "GUID", "built", "with", "date", "of", "birth", "The", "type", "of", "key", "which", "can", "be", "GUID", "or", "TELETAN"], "complexity": 2399.0, "loc": 62, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4635, "name": "VerificationApplicationConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["initialFakeDelayMilliseconds", "fakeDelayMovingAverageSamples", "tan", "appsession", "entities", "jwt", "request", "disableDobHashCheckForExternalTestResult"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["VerificationApplicationConfig", "This", "class", "and", "its", "nested", "subclasses", "are", "used", "to", "read", "in", "values", "from", "configuration", "file", "application", "yml", "which", "is", "loaded", "via", "the", "EnableConfigurationProperties", "annotation", "from", "SpringBootApplication", "main", "class", "Configure", "the", "Tan", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Tele", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans", "Configure", "the", "Valid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "AppSession", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Entities", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Cleanup", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Jwt", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "requests", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4636, "name": "TestUtils", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/TestUtils.java", "base_class": null, "variables": ["TEST_GUI_HASH", "TEST_GUI_HASH2", "TEST_GUI_HASH_DOB", "TEST_GUI_HASH_DOB2", "RESULT_PADDING", "LAB_ID", "TEST_INVALID_GUI_HASH", "TEST_TELE_TAN", "TEST_TELE_TAN_HASH", "TEST_INVALID_REG_TOK", "TEST_REG_TOK", "TEST_REG_TOK_HASH", "TEST_LAB_POSITIVE_RESULT", "QUICK_TEST_POSITIVE_RESULT", "TEST_LAB_NEGATIVE_RESULT", "TEST_TAN", "TEST_INVALID_TAN", "TEST_SOT", "TEST_HASHED_TAN", "TEST_TAN_TYPE", "TAN_VALID_UNTIL_IN_DAYS", "PREFIX_API_VERSION", "REGISTRATION_TOKEN_URI", "TAN_VERIFICATION_URI", "objectMapper"], "functions": ["prepareAppSessionTestData", "prepareAppSessionTestDataDob", "prepareAppSessionTestDataSotTeleTan", "getAppSessionTestData", "getAppSessionTestData", "getTeleTanTestData", "getVerificationTANTestData", "getAsJsonFormat", "getJwtTestData"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["TestUtils", "prepareappsessiontestdata", "prepareappsessiontestdatadob", "prepareappsessiontestdatasotteletan", "getappsessiontestdata", "getappsessiontestdata", "getteletantestdata", "getverificationtantestdata", "getasjsonformat", "getjwttestdata"], "complexity": 28388.0, "loc": 159, "qloc": 141, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4637, "name": "Matchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.hamcrest"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4638, "name": "Assertions", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4639, "name": "ArgumentMatchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4640, "name": "BDDMockito", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4641, "name": "Mockito", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4642, "name": "MockMvcRequestBuilders", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet.request"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4643, "name": "MockMvcResultMatchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet.result"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4644, "name": "AppSessionSourceOfTrust", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AppSessionSourceOfTrust.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["AppSessionSourceOfTrust", "This", "class", "represents", "the", "possible", "sources", "of", "trust", "for", "an", "appsession", "entity", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-appsession", "Entity", "AppSession", "sourceOfTrust"], "complexity": 281.0, "loc": 33, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4645, "name": "RegistrationTokenKeyType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationTokenKeyType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["RegistrationTokenKeyType", "This", "class", "represent", "the", "different", "key", "types", "with", "whom", "you", "can", "generate", "registration", "token", "The", "key", "type", "GUID", "Hash", "The", "key", "type", "TeleTaN", "which", "can", "be", "generated", "by", "the", "hotline", "or", "health", "authority"], "complexity": 275.0, "loc": 39, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4646, "name": "TeleTanType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TeleTanType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}], "semantic_data": ["TeleTanType"], "complexity": 959.0, "loc": 37, "qloc": 11, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4647, "name": "Slf4j", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok.extern.slf4j"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4648, "name": "AfterEach", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4649, "name": "BeforeEach", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4650, "name": "Test", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4651, "name": "ExtendWith", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api.extension"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4652, "name": "Autowired", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.beans.factory.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4653, "name": "AutoConfigureMockMvc", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.autoconfigure.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4654, "name": "SpringBootTest", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4655, "name": "MockBean", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.mock.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4656, "name": "MediaType", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4657, "name": "ActiveProfiles", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4658, "name": "ContextConfiguration", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4659, "name": "SpringExtension", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context.junit.jupiter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4660, "name": "VerificationApplicationExternalTestWorkaround", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationExternalTestWorkaround.java", "base_class": null, "variables": ["TOKEN_PADDING", "mockMvc", "testResultServerService", "appSessionrepository"], "functions": ["callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}], "semantic_data": ["VerificationApplicationExternalTestWorkaround", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults"], "complexity": 7303.0, "loc": 78, "qloc": 45, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4661, "name": "ObjectMapper", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.databind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4662, "name": "VerificationTan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationTan.java", "base_class": null, "variables": ["SERIAL_VERSION_UID", "id", "version", "createdAt", "updatedAt", "tanHash", "validFrom", "validUntil", "sourceOfTrust", "redeemed", "type", "teleTanType"], "functions": ["canBeRedeemed"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["VerificationTan", "This", "class", "represents", "the", "TAN", "entity", "Check", "if", "the", "tan", "can", "be", "redeemed", "by", "date", "param", "reference", "the", "date", "to", "check", "if", "it", "is", "in", "between", "from", "and", "until", "range", "return", "true", "or", "false", "if", "it", "can", "be", "redeemed", "canberedeemed"], "complexity": 8778.0, "loc": 110, "qloc": 63, "package": "app.coronawarn.verification.domain"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4663, "name": "AuthorizationRole", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AuthorizationRole.java", "base_class": null, "variables": ["roleName"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["AuthorizationRole", "The", "different", "possible", "roles", "which", "are", "authorizated", "to", "create", "tele", "tan", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "use-case-create-teletan", "Use", "Case", "Create", "TeleTan"], "complexity": 1390.0, "loc": 45, "qloc": 12, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4664, "name": "TestResult", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TestResult.java", "base_class": null, "variables": ["testResult", "sc", "labId", "responsePadding"], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["TestResult", "This", "class", "represents", "the", "TestResult", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 2510.0, "loc": 58, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4665, "name": "TanSourceOfTrust", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TanSourceOfTrust.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["TanSourceOfTrust", "This", "class", "represents", "the", "possible", "sources", "of", "trust", "for", "TAN", "entity", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-tan", "Entity", "TAN", "sourceOfTrust"], "complexity": 276.0, "loc": 33, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4666, "name": "TanType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TanType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["TanType", "This", "class", "represents", "the", "different", "types", "of", "tans", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-tan", "Entity", "TAN", "Type", "The", "general", "tan", "The", "TeleTAN", "which", "was", "created", "by", "the", "hotline"], "complexity": 422.0, "loc": 43, "qloc": 7, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4667, "name": "JsonProcessingException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.core"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4668, "name": "Jwts", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4669, "name": "SignatureAlgorithm", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4670, "name": "Component", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.stereotype"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4671, "name": "VerificationApplicationInternalTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationInternalTest.java", "base_class": null, "variables": ["TAN_PADDING", "mockMvc", "tanService", "jwtService", "appSessionRepository", "testResultServerServiceMock"], "functions": ["callGenerateTeleTAN", "callGenerateTeleTanUnauthorized", "callVerifyTAN", "callVerifyTANByVerificationTANIsEmpty", "callVerifyTANByTanWithInvalidSyntax", "callVerifyTANByExpiredTimeFrom", "callVerifyTANByExpiredTimeUntil", "callVerifyTANByIsRedeemed", "callGenerateTan", "callGetRegistrationTokenByGuid", "shouldReturn429StatusCodeIfRateLimitIsExceeded", "callGetTestState", "callGetTestStateOfTeleTanTokenShouldFail", "callGetTestStateOfInvalidTokenShouldFail", "callGetTestStateWithDobRegistrationToken", "callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "99d5c0cec343e7007def4f9c7e93ee8a0117f407", "date": "2021-05-31 12:03:56 +0200", "committer": "GitHub", "comment": "fix/Missing testId in InternalTestResult (#235)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["VerificationApplicationInternalTest", "without", "mock", "tanService", "getEntityByTan", "so", "this", "method", "will", "return", "empty", "entity", "setValidFrom", "later", "days", "then", "now", "setValidUntil", "earlier", "days", "then", "now", "tan", "is", "redeemed", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "Test", "the", "generation", "of", "tele", "Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "the", "generation", "of", "tele", "Tan", "when", "the", "jwt", "is", "not", "authorized", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "with", "empty", "Entity", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "with", "syntax", "problems", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "expired", "from", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "expired", "until", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "is", "redeemed", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "generating", "tans", "is", "not", "reachable", "when", "internal", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "registration", "tokens", "is", "not", "reachable", "when", "internal", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "callgenerateteletan", "callgenerateteletanunauthorized", "callverifytan", "callverifytanbyverificationtanisempty", "callverifytanbytanwithinvalidsyntax", "callverifytanbyexpiredtimefrom", "callverifytanbyexpiredtimeuntil", "callverifytanbyisredeemed", "callgeneratetan", "callgetregistrationtokenbyguid", "shouldreturn429statuscodeifratelimitisexceeded", "callgetteststate", "callgetteststateofteletantokenshouldfail", "callgetteststateofinvalidtokenshouldfail", "callgetteststatewithdobregistrationtoken", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults"], "complexity": 45002.0, "loc": 358, "qloc": 221, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4672, "name": "JwtService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/JwtService.java", "base_class": null, "variables": ["TOKEN_PREFIX", "BEGIN_CERT", "END_CERT", "HEADER_NAME_AUTHORIZATION", "ROLES", "REALM_ACCESS", "iamClient", "verificationApplicationConfig"], "functions": ["isAuthorized", "validateToken", "getSubject", "getRoles", "getRealmFromToken", "getClaimFromToken", "getAllClaimsFromToken", "getPublicKey"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["JwtService", "check", "if", "the", "JWT", "is", "enabled", "Return", "false", "if", "one", "of", "the", "mandatory", "roles", "are", "not", "present", "Return", "true", "if", "at", "least", "one", "of", "the", "authorization", "roles", "are", "present", "This", "class", "represents", "the", "JWT", "service", "for", "token", "authorization", "and", "validation", "The", "bearer", "prefix", "for", "the", "json", "web", "token", "The", "certificate", "begin", "prefix", "The", "certificate", "end", "suffix", "The", "http", "request", "header", "name", "for", "JWT", "Authorization", "Validates", "the", "given", "token", "is", "given", "the", "token", "starts", "with", "the", "needed", "prefix", "the", "signing", "key", "is", "not", "null", "and", "the", "token", "is", "valid", "param", "authorizationToken", "The", "authorization", "token", "to", "validate", "param", "mandatoryRoles", "list", "of", "roles", "which", "are", "required", "to", "pass", "return", "code", "true", "code", "if", "the", "token", "is", "valid", "otherwise", "code", "false", "code", "Validates", "the", "given", "token", "If", "one", "of", "the", "given", "roles", "link", "AuthorizationRole", "exists", "and", "verified", "by", "public", "key", "param", "token", "The", "authorization", "token", "to", "validate", "param", "publicKey", "the", "key", "from", "the", "IAM", "server", "param", "mandatoryRoles", "List", "of", "roles", "which", "are", "required", "to", "pass", "return", "code", "true", "code", "if", "the", "token", "is", "valid", "otherwise", "code", "false", "code", "Get", "the", "certificate", "from", "IAM", "client", "As", "long", "as", "Keycloak", "can", "rotate", "it\u2019s", "keys", "we", "decided", "to", "reload", "the", "key", "on", "every", "validateToken", "call", "especially", "the", "method", "call", "is", "fortunately", "limited", "in", "time", "and", "number", "too", "return", "the", "calculated", "Public", "key", "from", "the", "certificate", "isauthorized", "validatetoken", "getsubject", "getroles", "getrealmfromtoken", "getclaimfromtoken", "getallclaimsfromtoken", "getpublickey"], "complexity": 20955.0, "loc": 194, "qloc": 114, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4673, "name": "Tan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Tan.java", "base_class": null, "variables": ["tan", "responsePadding"], "functions": [], "commits": [{"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["Tan", "This", "class", "represents", "the", "transaction", "number"], "complexity": 2622.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4674, "name": "InternalTanController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/InternalTanController.java", "base_class": null, "variables": ["TAN_VERIFY_ROUTE", "TELE_TAN_ROUTE", "TELE_TAN_TYPE_HEADER", "tanService", "jwtService"], "functions": ["verifyTan", "createTeleTan"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["InternalTanController", "This", "class", "represents", "the", "rest", "controller", "for", "internally", "needed", "tan", "operations", "The", "route", "to", "the", "tan", "verification", "endpoint", "The", "route", "to", "the", "teleTAN", "generation", "endpoint", "This", "provided", "REST", "method", "verifies", "the", "transaction", "number", "TAN", "param", "tan", "the", "transaction", "number", "which", "needs", "to", "be", "verified", "link", "Tan", "return", "HTTP", "200", "if", "the", "verification", "was", "successful", "Otherwise", "HTTP", "404", "This", "method", "generates", "valid", "teleTAN", "param", "authorization", "auth", "return", "created", "teletan", "verifytan", "createteletan"], "complexity": 15765.0, "loc": 167, "qloc": 110, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4675, "name": "JwtServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/JwtServiceTest.java", "base_class": null, "variables": ["TOKEN_PREFIX", "BEGIN_PEM", "END_PEM", "RSA", "publicKey", "privateKey", "cert", "config", "jwtService"], "functions": ["setUp", "validateToken", "validateTokenByPublicKeyIsNull", "tokenIsAuthorized", "validateExpiredToken", "getJwtTestData", "generateTestCertificate", "createIamClientMock"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["JwtServiceTest", "KeyPairGenerator", "kpGen", "KeyPairGenerator", "getInstance", "RSA", "BC", "KeyPair", "pair", "kpGen", "generateKeyPair", "Test", "to", "validate", "an", "valid", "Token", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "the", "negative", "case", "by", "not", "given", "public", "key", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "is", "Token", "authorized", "with", "the", "link", "JwtService", "isAuthorized", "String", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "to", "validate", "an", "expired", "Token", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "setup", "validatetoken", "validatetokenbypublickeyisnull", "tokenisauthorized", "validateexpiredtoken", "getjwttestdata", "generatetestcertificate", "createiamclientmock"], "complexity": 15430.5, "loc": 236, "qloc": 166, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4676, "name": "IamClientMock", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/JwtServiceTest.java", "base_class": null, "variables": ["pem"], "functions": ["certs"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["IamClientMock", "certs"], "complexity": 15430.5, "loc": 236, "qloc": 166, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4677, "name": "X509CertificateHolder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.cert"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4678, "name": "X500Name", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.asn1.x500"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4679, "name": "PemWriter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.util.io.pem"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4680, "name": "X509v3CertificateBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.cert"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4681, "name": "JcaContentSignerBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.operator.jcajce"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4682, "name": "PemObject", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.util.io.pem"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4683, "name": "ContentSigner", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.operator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4684, "name": "IamClient", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/IamClient.java", "base_class": null, "variables": [], "functions": ["certs"], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["IamClient", "This", "class", "represents", "the", "IAM", "feign", "client", "This", "method", "gets", "the", "cert", "information", "from", "the", "IAM", "Server", "return", "Testresult", "from", "server", "certs"], "complexity": 1416.0, "loc": 43, "qloc": 12, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4685, "name": "Key", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Key.java", "base_class": null, "variables": ["SIG", "RS256", "kid", "kty", "alg", "use", "nn", "ee", "x5c", "x5t", "x5tS256", "additionalProperties"], "functions": ["isCertValid"], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["Key", "Check", "if", "the", "cert", "is", "valid", "for", "use", "return", "code", "true", "code", "if", "the", "cert", "has", "the", "right", "use", "and", "alg", "keys", "otherwise", "code", "false", "code", "iscertvalid"], "complexity": 4762.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4686, "name": "Certs", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Certs.java", "base_class": null, "variables": ["keys", "additionalProperties"], "functions": [], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["Certs"], "complexity": 1684.0, "loc": 39, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4687, "name": "Setter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4688, "name": "SubjectPublicKeyInfo", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.asn1.x509"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4689, "name": "TestResultServerServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TestResultServerServiceTest.java", "base_class": null, "variables": ["TEST_GUI_HASH_1", "TEST_GUI_HASH_2", "TEST_RESULT_PADDING", "TEST_LAB_POSITIVE_RESULT", "TEST_LAB_REDEEMED_RESULT", "testResultServerService"], "functions": ["setUp", "resultPositive", "resultRedeemed"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerServiceTest", "Test", "result", "method", "by", "positive", "status", "Test", "result", "method", "by", "redeemed", "status", "setup", "resultpositive", "resultredeemed"], "complexity": 3955.5, "loc": 76, "qloc": 40, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4690, "name": "TestResultServerClientMock", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TestResultServerServiceTest.java", "base_class": null, "variables": [], "functions": ["result"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerClientMock", "result"], "complexity": 3955.5, "loc": 76, "qloc": 40, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4691, "name": "TestResultServerClient", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/TestResultServerClient.java", "base_class": null, "variables": [], "functions": ["result"], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "36440ccb4d7a6f277d76eb697958272049761d45", "date": "2020-06-06 17:04:20 +0200", "committer": "Torsten Egenolf", "comment": "fix: feign"}, {"hash": "dd1b1816d37f5033bee4bd466b05a533aa064726", "date": "2020-06-05 20:24:27 +0200", "committer": "GitHub", "comment": "Fix/mtls feature flag (#141)"}, {"hash": "ab98366ea1b23c64d8749fb1295ebb81a29d385e", "date": "2020-06-05 18:10:24 +0200", "committer": "Julien", "comment": "fix: ssl server config client"}, {"hash": "37fdb6e19d4cb4d3d7bcb8efc81457009667dfb9", "date": "2020-06-05 18:02:21 +0200", "committer": "Julien", "comment": "fix: ssl server config"}, {"hash": "b1c1e847131fdb43c0cb605cf5f99077f4568ce5", "date": "2020-06-05 13:09:17 +0200", "committer": "GitHub", "comment": "feature: add mTLS configuration for verification-server to testresult-server connection (#136)"}], "semantic_data": ["TestResultServerClient", "This", "class", "represents", "the", "Labor", "Server", "service", "feign", "client", "This", "method", "gets", "testResult", "from", "the", "LabServer", "param", "guid", "for", "TestResult", "return", "TestResult", "from", "server", "result"], "complexity": 1933.0, "loc": 51, "qloc": 17, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4692, "name": "Assertions", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.assertj.core.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4693, "name": "TanServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TanServiceTest.java", "base_class": null, "variables": ["TEST_TAN", "TEST_TAN_HASH", "TEST_GUI_HASH", "TEST_TAN_TYPE", "TEST_TELE_TAN", "TEST_TELE_TAN_HASH", "TELE_TAN_REGEX", "TAN_REGEX", "TEST_TELE_TAN_SOURCE_OF_TRUST", "TEST_TAN_SOURCE_OF_TRUST", "TELE_TAN_PATTERN", "TAN_PATTERN", "FORMATTER", "TAN_VALID_UNTIL_IN_DAYS", "TELE_TAN_VALID_UNTIL_IN_HOURS", "TELE_TAN_RATE_LIMIT_COUNT", "TELE_TAN_RATE_LIMIT_SECONDS", "TELE_TAN_RATE_LIMIT_THRESHOLD", "tanService", "tanRepository", "config"], "functions": ["setUp", "deleteTan", "saveTan", "getEntityByTan", "checkTanAlreadyExist", "generateVerificationTan", "generateValidTan", "createTeleTan", "verifyTeletan", "verifyAlreadyRedeemedTeleTan", "verifyUnknownTeleTan", "verifyExpiredTeleTan", "verifyExpiredEventTeleTan", "testTeleTANFormat", "testRateLimitCheckForTeleTan", "testRateLimitShouldNotCountNonTeleTan", "testRateLimitShouldNotCountTeleTansOlderThanDefinedTimeWindow", "syntaxTanVerification"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}, {"hash": "8b97d904a88e9e856572bc1002c6db68dc442a14", "date": "2020-05-23 15:39:24 +0200", "committer": "GitHub", "comment": "fix: bugfix ExampleMatcher (#36)"}], "semantic_data": ["TanServiceTest", "note", "the", "length", "of", "teleTAN", "is", "made", "up", "of", "the", "teletan", "length", "and", "the", "check", "digit", "Test", "delete", "Tan", "Test", "saveTan", "Check", "Tele-TAN", "syntax", "constraints", "param", "teleTan", "the", "Tele", "TAN", "return", "Tele", "TAN", "verification", "flag", "setup", "deletetan", "savetan", "getentitybytan", "checktanalreadyexist", "generateverificationtan", "generatevalidtan", "createteletan", "verifyteletan", "verifyalreadyredeemedteletan", "verifyunknownteletan", "verifyexpiredteletan", "verifyexpiredeventteletan", "testteletanformat", "testratelimitcheckforteletan", "testratelimitshouldnotcountnonteletan", "testratelimitshouldnotcountteletansolderthandefinedtimewindow", "syntaxtanverification"], "complexity": 50289.0, "loc": 325, "qloc": 244, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4694, "name": "VerificationTanRepository", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/repository/VerificationTanRepository.java", "base_class": null, "variables": [], "functions": ["existsByTanHash", "findByTanHash", "deleteByCreatedAtBefore", "countByCreatedAtIsAfterAndTypeIs"], "commits": [{"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationTanRepository", "This", "class", "represents", "the", "Tan", "repository", "This", "method", "looks", "in", "the", "Database", "for", "an", "if", "VerificationTan", "exists", "for", "the", "tan", "hash", "param", "tanHash", "hash", "to", "search", "for", "return", "Boolean", "if", "there", "is", "an", "Entity", "for", "the", "tanHash", "This", "method", "looks", "in", "the", "Database", "for", "an", "if", "VerificationTan", "exists", "for", "the", "tan", "hash", "param", "tanHash", "hash", "to", "search", "for", "return", "Optional", "VerificationTan", "This", "method", "purges", "Entities", "from", "the", "database", "that", "are", "older", "than", "before", "value", "param", "before", "LocalDateTime", "to", "delete", "older", "entities", "This", "method", "counts", "entities", "which", "are", "newer", "then", "after", "value", "param", "after", "LocalDateTime", "to", "count", "entities", "param", "tanType", "TanType", "of", "the", "tans", "that", "should", "be", "counted", "return", "number", "of", "relevant", "entities", "existsbytanhash", "findbytanhash", "deletebycreatedatbefore", "countbycreatedatisafterandtypeis"], "complexity": 2301.0, "loc": 68, "qloc": 12, "package": "app.coronawarn.verification.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4695, "name": "VerificationApplication", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/VerificationApplication.java", "base_class": null, "variables": [], "functions": ["main"], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationApplication", "The", "Application", "class", "The", "main", "Method", "param", "args", "the", "args", "for", "the", "main", "method", "main"], "complexity": 2215.0, "loc": 51, "qloc": 18, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4696, "name": "EntitiesCleanupServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/EntitiesCleanupServiceTest.java", "base_class": null, "variables": ["TEST_GUI_HASH", "TEST_REG_TOK_HASH", "TEST_HASHED_TAN", "appSessionRepository", "tanRepository"], "functions": ["before", "cleanupDatabase", "getAppSessionTestData", "getVerificationTANTestData"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}], "semantic_data": ["EntitiesCleanupServiceTest", "create", "repo", "create", "repo", "find", "in", "repos", "wait", "find", "and", "check", "both", "repos", "clean", "up", "before", "cleanupdatabase", "getappsessiontestdata", "getverificationtantestdata"], "complexity": 16443.0, "loc": 129, "qloc": 91, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4697, "name": "SpringRunner", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context.junit4"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4698, "name": "Single", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "rx"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4699, "name": "HashingServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/HashingServiceTest.java", "base_class": null, "variables": ["hashingService"], "functions": ["validSha256Hash", "invalidSha256Hash", "getCheckDigit"], "commits": [{"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6ade86d3b47f3b0428fda1b475d61a76597aecfd", "date": "2020-06-24 10:50:09 +0200", "committer": "GitHub", "comment": "fix: change find() to matches() in key validation (#163)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "fa7747b2b090951be6a62cfcc13a75fdddcd4f40", "date": "2020-05-25 05:20:47 +0200", "committer": "GitHub", "comment": "fix: hash regex missing start and end metacharacter (#50)"}], "semantic_data": ["HashingServiceTest", "special", "cases", "validsha256hash", "invalidsha256hash", "getcheckdigit"], "complexity": 7654.0, "loc": 65, "qloc": 35, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4700, "name": "SpringApplication", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4701, "name": "SpringBootApplication", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.autoconfigure"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4702, "name": "EnableConfigurationProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.context.properties"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4703, "name": "EnableFeignClients", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.cloud.openfeign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4704, "name": "EnableScheduling", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.scheduling.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4705, "name": "EnableWebSecurity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.configuration"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4706, "name": "JpaRepository", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.data.jpa.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4707, "name": "RegistrationTokenKeyConstraint", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/validator/RegistrationTokenKeyConstraint.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}], "semantic_data": ["RegistrationTokenKeyConstraint", "The", "validation-annotation", "for", "registration", "token", "request", "The", "default", "key", "for", "creating", "error", "messages", "in", "case", "the", "constraint", "is", "violated", "Allows", "the", "specification", "of", "validation", "groups", "to", "which", "this", "constraint", "belongs", "Assigns", "custom", "payload", "objects", "to", "constraint"], "complexity": 2371.0, "loc": 58, "qloc": 17, "package": "app.coronawarn.verification.validator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4708, "name": "RegistrationTokenRequestValidator", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/validator/RegistrationTokenRequestValidator.java", "base_class": null, "variables": ["hashingService", "tanService"], "functions": ["isValid"], "commits": [{"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}], "semantic_data": ["RegistrationTokenRequestValidator", "The", "registration", "token", "request", "validator", "The", "link", "HashingService", "The", "link", "TanService", "isvalid"], "complexity": 4436.0, "loc": 73, "qloc": 37, "package": "app.coronawarn.verification.validator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4709, "name": "HashingService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/HashingService.java", "base_class": null, "variables": ["GUID_HASH_PATTERN", "PATTERN"], "functions": ["hash", "getCheckDigit", "isHashValid"], "commits": [{"hash": "281759cbc6394361e75e798a9a077f1009f5a9f6", "date": "2020-07-02 08:06:46 +0200", "committer": "GitHub", "comment": "fix: improve logs for cdc and increase spring version (#178)"}, {"hash": "6ade86d3b47f3b0428fda1b475d61a76597aecfd", "date": "2020-06-24 10:50:09 +0200", "committer": "GitHub", "comment": "fix: change find() to matches() in key validation (#163)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "fa7747b2b090951be6a62cfcc13a75fdddcd4f40", "date": "2020-05-25 05:20:47 +0200", "committer": "GitHub", "comment": "fix: hash regex missing start and end metacharacter (#50)"}], "semantic_data": ["HashingService", "This", "class", "represents", "the", "hashing", "service", "for", "providing", "and", "check", "hash", "string", "Calculates", "the", "SHA-256", "digest", "and", "returns", "the", "value", "as", "hex", "string", "param", "toHash", "that", "will", "be", "Hashed", "return", "the", "hash", "of", "the", "supplied", "string", "Calculates", "the", "SHA-256", "digest", "and", "returns", "an", "check", "digit", "param", "toHash", "that", "will", "be", "Hashed", "return", "the", "check", "digit", "Returns", "true", "if", "the", "String", "is", "resembles", "SHA256", "Pattern", "param", "toValidate", "String", "that", "will", "be", "checked", "to", "match", "the", "pattern", "of", "SHA256", "Hash", "return", "Boolean", "if", "the", "String", "Matches", "the", "Pattern", "hash", "getcheckdigit", "ishashvalid"], "complexity": 4741.0, "loc": 77, "qloc": 28, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4710, "name": "NonNull", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4711, "name": "RequiredArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4712, "name": "SecurityConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/SecurityConfig.java", "base_class": null, "variables": [], "functions": ["strictFirewall", "configure"], "commits": [{"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "abf290d3756140a3f265a1cb6a395ccd73536dc1", "date": "2020-06-05 14:20:19 +0200", "committer": "GitHub", "comment": "fix: spring head (#137)"}, {"hash": "c0244362a30947c6ed2347b095d888b4b2b1162e", "date": "2020-06-03 10:16:41 +0200", "committer": "GitHub", "comment": "feat: monitoring security (#125)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}], "semantic_data": ["SecurityConfig", "strictfirewall", "configure"], "complexity": 4128.0, "loc": 63, "qloc": 35, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4713, "name": "WebSecurityConfigurerAdapter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.configuration"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4714, "name": "HttpFirewall", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.web.firewall"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4715, "name": "StrictHttpFirewall", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.web.firewall"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4716, "name": "HttpSecurity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.builders"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4717, "name": "Bean", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4718, "name": "Configuration", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4719, "name": "HttpMethod", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4720, "name": "OpenApiConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/OpenApiConfig.java", "base_class": null, "variables": ["buildProperties"], "functions": ["openApi"], "commits": [{"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "163ad80e8b7b93ce5adde9ff98ecd0f830d31dae", "date": "2020-05-22 14:54:57 +0200", "committer": "telekom", "comment": "pre: 0.3.2-SNAPSHOT"}, {"hash": "151503a7d16dae5a4b79bec3d5e97f92a177a524", "date": "2020-05-22 14:50:18 +0200", "committer": "telekom", "comment": "release: 0.3.1-alpha"}], "semantic_data": ["OpenApiConfig", "This", "class", "represents", "the", "open", "api", "config", "Configure", "the", "open", "api", "bean", "with", "build", "property", "values", "return", "the", "configured", "open", "api", "config", "openapi"], "complexity": 2516.0, "loc": 57, "qloc": 23, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4721, "name": "Info", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4722, "name": "License", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4723, "name": "OpenAPI", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4724, "name": "BuildProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4725, "name": "Tan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["tele", "valid"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Tan", "Configure", "the", "Tele", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans", "Configure", "the", "Valid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4726, "name": "Tele", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["valid", "rateLimiting"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Tele", "Number", "of", "hours", "that", "teleTAN", "remains", "valid", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4727, "name": "Valid", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["chars", "length", "hours", "eventDays", "days"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Valid", "Valid", "Number", "of", "days", "that", "TAN", "remains", "valid"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4728, "name": "RateLimiting", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["seconds", "count", "thresholdInPercent"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["RateLimiting", "Number", "of", "seconds", "for", "the", "rate", "limiting", "time", "window", "Number", "of", "teletans", "that", "are", "allowed", "to", "create", "within", "time", "window", "Threshold", "in", "percent", "for", "warning", "in", "log", "stream"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4729, "name": "AppSession", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["tancountermax"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["AppSession", "Maximum", "number", "of", "tans", "in", "session", "at", "one", "time"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4730, "name": "Entities", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["cleanup"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Entities", "Configure", "the", "Cleanup", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4731, "name": "Cleanup", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["days"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Cleanup"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4732, "name": "Jwt", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["server", "enabled"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Jwt"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4733, "name": "Request", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["sizelimit"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Request"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4734, "name": "Getter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4735, "name": "ConfigurationProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.context.properties"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4736, "name": "RequestSizeLimitFilter", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/RequestSizeLimitFilter.java", "base_class": null, "variables": ["verificationApplicationConfig"], "functions": ["doFilterInternal", "isChunkedRequest"], "commits": [{"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}], "semantic_data": ["RequestSizeLimitFilter", "filter", "to", "avoid", "requests", "with", "large", "content", "and", "chunked", "requests", "dofilterinternal", "ischunkedrequest"], "complexity": 4979.0, "loc": 69, "qloc": 37, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4737, "name": "OncePerRequestFilter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.filter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4738, "name": "StringUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "liquibase.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4739, "name": "HttpHeaders", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4740, "name": "HttpStatus", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4741, "name": "VerificationExceptionHandler", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/VerificationExceptionHandler.java", "base_class": null, "variables": [], "functions": ["unknownException", "bindingExceptions", "handleValidationExceptions", "handleVerificationServerExceptions", "methodNotAllowedException", "contentTypeNotAllowedException"], "commits": [{"hash": "79d3e337b7e9e13175d00212d3bae0c44730bd2f", "date": "2021-01-26 15:19:36 +0100", "committer": "GitHub", "comment": "fix: handle unsupported content type and HTTP method (#164)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}], "semantic_data": ["VerificationExceptionHandler", "This", "class", "represents", "the", "Exception", "Handler", "This", "method", "handles", "unknown", "Exceptions", "and", "Server", "Errors", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "Bad", "Requests", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "Validation", "Exceptions", "return", "ResponseEntity", "returns", "Bad", "Request", "This", "method", "handles", "Validation", "Exceptions", "param", "exception", "the", "thrown", "exception", "return", "ResponseEntity", "returns", "HTTP", "Status", "This", "method", "handles", "invalid", "HTTP", "methods", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "unsupported", "content", "types", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "unknownexception", "bindingexceptions", "handlevalidationexceptions", "handleverificationserverexceptions", "methodnotallowedexception", "contenttypenotallowedexception"], "complexity": 8567.0, "loc": 122, "qloc": 54, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4742, "name": "WebRequest", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.context.request"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4743, "name": "ResponseEntity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4744, "name": "HttpMediaTypeNotSupportedException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4745, "name": "HttpRequestMethodNotSupportedException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4746, "name": "ServletRequestBindingException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4747, "name": "HttpMessageNotReadableException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http.converter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4748, "name": "MethodArgumentNotValidException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4749, "name": "VerificationServerException", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/exception/VerificationServerException.java", "base_class": null, "variables": ["httpStatus"], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}], "semantic_data": ["VerificationServerException", "This", "class", "represents", "the", "Verification", "Server", "Exception", "The", "Constructor", "for", "the", "Exception", "class", "param", "httpStatus", "the", "state", "of", "the", "server", "param", "message", "the", "message"], "complexity": 1419.0, "loc": 47, "qloc": 11, "package": "app.coronawarn.verification.exception"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4750, "name": "ExceptionHandler", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4751, "name": "ResponseStatus", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4752, "name": "RestControllerAdvice", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4753, "name": "AuthorizationToken", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AuthorizationToken.java", "base_class": null, "variables": ["token"], "functions": [], "commits": [{"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["AuthorizationToken", "This", "class", "represents", "the", "authorization", "bearer", "token", "JWT", "which", "is", "used", "for", "the", "creation", "of", "teleTan"], "complexity": 1337.0, "loc": 45, "qloc": 16, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4754, "name": "TeleTan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TeleTan.java", "base_class": null, "variables": ["value"], "functions": [], "commits": [{"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "b478d42b931861d2debaffa188e2f2f4a0629e2c", "date": "2020-05-31 16:01:52 +0200", "committer": "GitHub", "comment": "fix: revert api change (#114)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["TeleTan", "This", "class", "represents", "the", "tele", "transaction", "number", "teleTAN"], "complexity": 1145.0, "loc": 41, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4755, "name": "Operation", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4756, "name": "Header", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.headers"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4757, "name": "ApiResponse", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.responses"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4758, "name": "ApiResponses", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.responses"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4759, "name": "Profile", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4760, "name": "Validated", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.validation.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4761, "name": "PostMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4762, "name": "RequestBody", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4763, "name": "RequestHeader", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4764, "name": "RequestMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4765, "name": "RestController", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4766, "name": "InternalTestStateController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/InternalTestStateController.java", "base_class": null, "variables": ["TESTRESULT_ROUTE", "appSessionService", "testResultServerService"], "functions": ["getTestState"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}], "semantic_data": ["InternalTestStateController", "Check", "DOB", "Hash", "if", "present", "TRS", "will", "always", "respond", "with", "TestResult", "so", "we", "have", "to", "check", "if", "both", "results", "are", "equal", "given", "DOB", "Hash", "is", "invalid", "This", "class", "represents", "the", "rest", "controller", "for", "requests", "regarding", "test", "states", "The", "route", "to", "the", "test", "status", "of", "the", "COVID-19", "test", "endpoint", "Returns", "the", "test", "status", "of", "the", "COVID-19", "test", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "return", "result", "of", "the", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "FAILED", "quick-test-POSITIVE", "quick-test-NEGATIVE", "quick-test-INVALID", "quick-test-PENDING", "or", "quick-test-FAILED", "will", "be", "POSITIVE", "for", "TeleTan", "getteststate"], "complexity": 12946.0, "loc": 123, "qloc": 91, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4767, "name": "AppSessionService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/AppSessionService.java", "base_class": null, "variables": ["TOKEN_PADDING_LENGTH", "appSessionRepository", "hashingService"], "functions": ["generateAppSession", "generateRegistrationToken", "generateRegistrationTokenByGuid", "generateRegistrationTokenByTeleTan", "saveAppSession", "getAppSessionByToken", "checkRegistrationTokenAlreadyExistsForGuid", "checkRegistrationTokenAlreadyExistForTeleTan", "getBackwardCompatibleRegistrationToken"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "29145c5554ac9d834c8a59f4d7e9ff90b204158c", "date": "2020-08-13 07:59:54 +0200", "committer": "m.schulte", "comment": "removed debug log"}, {"hash": "7e9ee9fab39d6c2a8829700c1bd933e08dcdd1ea", "date": "2020-08-11 17:33:50 +0200", "committer": "GitHub", "comment": "fix: wrong logging information (#208)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "da3284dbf5f1f438967673059bfac4ced7c1dd5a", "date": "2020-07-01 16:24:39 +0200", "committer": "GitHub", "comment": "feat: improvement-logs-cdc"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}, {"hash": "66b2fab6dbc688d7a6114f6e746f1a4b6130b6f5", "date": "2020-06-07 09:18:06 +0200", "committer": "GitHub", "comment": "fix: find the expected entity (#145)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}, {"hash": "8b97d904a88e9e856572bc1002c6db68dc442a14", "date": "2020-05-23 15:39:24 +0200", "committer": "GitHub", "comment": "fix: bugfix ExampleMatcher (#36)"}], "semantic_data": ["AppSessionService", "This", "class", "represents", "the", "VerificationAppSession", "service", "The", "link", "VerificationAppSessionRepository", "The", "link", "HashingService", "Creates", "an", "AppSession-Entity", "param", "registrationToken", "Token", "for", "registration", "return", "appSession", "for", "registrationToken", "This", "method", "generates", "registration", "Token", "by", "guid", "param", "hashedGuid", "the", "hashed", "guid", "return", "an", "link", "ResponseEntity", "This", "method", "generates", "registration", "Token", "by", "TeleTAN", "param", "teleTan", "the", "TeleTan", "return", "an", "link", "ResponseEntity", "Persists", "the", "specified", "entity", "of", "link", "VerificationAppSession", "instances", "param", "appSession", "the", "verification", "app", "session", "entity", "Get", "existing", "VerificationAppSession", "for", "Reg", "Token", "from", "link", "VerificationAppSessionRepository", "param", "registrationToken", "the", "registrationToken", "return", "Optional", "VerificationAppSession", "Check", "for", "existing", "hashed", "GUID", "Token", "in", "the", "link", "VerificationAppSessionRepository", "param", "hashedGuid", "the", "hashed", "guid", "return", "flag", "for", "existing", "guid", "Check", "for", "existing", "hashed", "TeleTAN", "in", "the", "link", "VerificationAppSessionRepository", "param", "teleTan", "the", "teleTAN", "return", "flag", "for", "existing", "teleTAN", "generateappsession", "generateregistrationtoken", "generateregistrationtokenbyguid", "generateregistrationtokenbyteletan", "saveappsession", "getappsessionbytoken", "checkregistrationtokenalreadyexistsforguid", "checkregistrationtokenalreadyexistforteletan", "getbackwardcompatibleregistrationtoken"], "complexity": 16677.0, "loc": 189, "qloc": 98, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4768, "name": "InternalTestResult", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/InternalTestResult.java", "base_class": null, "variables": ["testId"], "functions": [], "commits": [{"hash": "99d5c0cec343e7007def4f9c7e93ee8a0117f407", "date": "2021-05-31 12:03:56 +0200", "committer": "GitHub", "comment": "fix/Missing testId in InternalTestResult (#235)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}], "semantic_data": ["InternalTestResult", "This", "class", "represents", "the", "TestResult", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 2227.0, "loc": 50, "qloc": 18, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4769, "name": "RandomStringUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.lang3"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4770, "name": "DeferredResult", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.context.request.async"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4771, "name": "ExternalTokenController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTokenController.java", "base_class": null, "variables": ["REGISTRATION_TOKEN_ROUTE", "scheduledExecutor", "fakeRequestController", "appSessionService", "tanService", "fakeDelayService"], "functions": ["generateRegistrationToken"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "7e9ee9fab39d6c2a8829700c1bd933e08dcdd1ea", "date": "2020-08-11 17:33:50 +0200", "committer": "GitHub", "comment": "fix: wrong logging information (#208)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTokenController", "This", "class", "represents", "the", "rest", "controller", "for", "externally", "reachable", "TAN", "interactions", "The", "route", "to", "the", "token", "registration", "endpoint", "This", "method", "generates", "registrationToken", "by", "hashed", "guid", "or", "teleTAN", "param", "request", "link", "RegistrationTokenRequest", "param", "fake", "flag", "for", "fake", "request", "return", "RegistrationToken", "the", "created", "registration", "token", "link", "RegistrationToken", "generateregistrationtoken"], "complexity": 15788.0, "loc": 128, "qloc": 101, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4772, "name": "FakeRequestService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/FakeRequestService.java", "base_class": null, "variables": ["fakeDelayService", "scheduledExecutor", "TEST_RESPONSE_PADDING_LENGTH", "TESTRESULT_RESULT_PADDING", "TAN_RESPONSE_PADDING_LENGTH"], "functions": ["generateTan", "generateRegistrationToken", "getTestState"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "d9cd408dc90bd3b2181b7683288f0c3b6b0c038e", "date": "2021-05-27 13:32:18 +0200", "committer": "GitHub", "comment": "fix/fixed fake to return seconds (#231)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "45fc20792c90ae0bf59f9ea49d3681d9afc653b1", "date": "2020-08-05 10:24:49 +0200", "committer": "GitHub", "comment": "fix: use corret fake delay (#200)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}], "semantic_data": ["FakeRequestService", "This", "Service", "generates", "the", "fake", "responses", "for", "the", "Endpoints", "This", "method", "generates", "fake", "transaction", "number", "by", "Registration", "Token", "if", "the", "state", "of", "the", "COVID-19", "lab-test", "is", "positive", "param", "registrationToken", "generated", "by", "hashed", "guid", "or", "teleTAN", "link", "RegistrationToken", "return", "generated", "transaction", "number", "link", "Tan", "This", "method", "generates", "fake", "registrationToken", "by", "hashed", "guid", "or", "teleTAN", "param", "request", "link", "RegistrationTokenRequest", "return", "RegistrationToken", "the", "created", "registration", "token", "link", "RegistrationToken", "Returns", "the", "fake", "test", "status", "of", "the", "COVID-19", "test", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "return", "the", "test", "result", "status", "of", "the", "COVID-19", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "or", "FAILED", "and", "will", "always", "be", "POSITIVE", "for", "TeleTan", "generatetan", "generateregistrationtoken", "getteststate"], "complexity": 11992.0, "loc": 119, "qloc": 60, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4773, "name": "FakeDelayService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/FakeDelayService.java", "base_class": null, "variables": ["movingAverageSampleSize", "fakeDelayTest", "fakeDelayTan", "fakeDelayToken"], "functions": ["getJitteredFakeTanDelay", "getJitteredFakeTestDelay", "getJitteredFakeTokenDelay", "updateFakeTanRequestDelay", "updateFakeTestRequestDelay", "updateFakeTokenRequestDelay", "getFakeTanDelayInSeconds", "getFakeTestDelayInSeconds", "getFakeTokenDelayInSeconds", "getLongestJitter", "realDelayTan", "realDelayToken", "realDelayTest"], "commits": [{"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}], "semantic_data": ["FakeDelayService", "link", "FakeDelayService", "instances", "manage", "the", "response", "delay", "in", "the", "processing", "of", "fake", "or", "dummy", "requests", "Constructor", "for", "the", "FakeDelayService", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "longest", "fake", "delay", "jittered", "in", "milliseconds", "return", "longest", "jittered", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "Tan", "in", "milliseconds", "return", "delay", "for", "TAN", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "RegistrationToken", "in", "milliseconds", "return", "delay", "for", "RegistrationToken", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "TestResult", "in", "milliseconds", "return", "delay", "for", "TestResult", "getjitteredfaketandelay", "getjitteredfaketestdelay", "getjitteredfaketokendelay", "updatefaketanrequestdelay", "updatefaketestrequestdelay", "updatefaketokenrequestdelay", "getfaketandelayinseconds", "getfaketestdelayinseconds", "getfaketokendelayinseconds", "getlongestjitter", "realdelaytan", "realdelaytoken", "realdelaytest"], "complexity": 10237.0, "loc": 155, "qloc": 65, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4774, "name": "StopWatch", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4775, "name": "ExternalTanController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTanController.java", "base_class": null, "variables": ["TAN_ROUTE", "RESPONSE_PADDING_LENGTH", "scheduledExecutor", "appSessionService", "fakeDelayService", "verificationApplicationConfig", "testResultServerService", "tanService", "fakeRequestService"], "functions": ["generateTan", "generateReturnTan"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "3f7e537521a3db67220501690e792e87e000db60", "date": "2021-01-26 10:39:33 +0100", "committer": "GitHub", "comment": "Fix naming in ExternalTanController (#216)"}, {"hash": "7ebf88d11bef07e1e6c75c4c5fcaeae159b159eb", "date": "2020-09-30 17:37:45 +0200", "committer": "GitHub", "comment": "feat: update database updated_at when a Tan is generated for a Registration Token (#214)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTanController", "This", "class", "represents", "the", "rest", "controller", "for", "external", "tan", "interactions", "The", "route", "to", "the", "tan", "generation", "endpoint", "This", "method", "generates", "transaction", "number", "by", "Registration", "Token", "if", "the", "state", "of", "the", "COVID-19", "lab-test", "is", "positive", "param", "registrationToken", "generated", "by", "hashed", "guid", "or", "teleTAN", "link", "RegistrationToken", "param", "fake", "flag", "for", "fake", "request", "return", "generated", "transaction", "number", "link", "Tan", "generatetan", "generatereturntan"], "complexity": 20735.0, "loc": 166, "qloc": 136, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4776, "name": "LabTestResult", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/LabTestResult.java", "base_class": null, "variables": ["testResult"], "functions": [], "commits": [{"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}], "semantic_data": ["LabTestResult", "The", "possible", "result", "results", "of", "the", "COVID-19", "lab-test", "Pending", "The", "test", "result", "does", "not", "exist", "yet", "Negative", "No", "indication", "for", "COVID-19", "Positive", "The", "test", "result", "indicates", "infection", "with", "COVID-19", "Invalid", "The", "test", "result", "is", "invalid", "due", "to", "unknown", "reason", "Redeemed", "The", "test", "result", "is", "redeemed", "by", "time", "The", "identifier", "for", "the", "test", "result", "from", "the", "lab-server", "The", "constructor", "param", "stateValue", "the", "lab", "test", "state"], "complexity": 2446.0, "loc": 67, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4777, "name": "ExternalTestStateController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTestStateController.java", "base_class": null, "variables": ["TESTRESULT_ROUTE", "RESPONSE_PADDING_LENGTH", "scheduledExecutor", "fakeRequestService", "appSessionService", "testResultServerService", "fakeDelayService", "config"], "functions": ["getTestState", "generateReturnTestResult"], "commits": [{"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6c704c09ec82986081544e3f89e4877636da2e3", "date": "2021-05-27 15:14:03 +0200", "committer": "GitHub", "comment": "fix/Update ExternalTestStateController.java (#232)"}, {"hash": "d9cd408dc90bd3b2181b7683288f0c3b6b0c038e", "date": "2021-05-27 13:32:18 +0200", "committer": "GitHub", "comment": "fix/fixed fake to return seconds (#231)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "1ddebcb0933e46a0aef7a2429793b7be378bb545", "date": "2021-01-26 11:17:47 +0100", "committer": "Michael Schulte", "comment": "rename variable to reflect it's type"}, {"hash": "3fd40256067831192fc62a30ec087fe1a937f490", "date": "2021-01-26 10:47:29 +0100", "committer": "GitHub", "comment": "Fix a typo in log message (#219)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTestStateController", "Check", "DOB", "Hash", "if", "present", "TRS", "will", "always", "respond", "with", "TestResult", "so", "we", "have", "to", "check", "if", "both", "results", "are", "equal", "given", "DOB", "Hash", "is", "invalid", "This", "class", "represents", "the", "rest", "controller", "for", "requests", "regarding", "test", "states", "The", "route", "to", "the", "test", "status", "of", "the", "COVID-19", "test", "endpoint", "Returns", "the", "test", "status", "of", "the", "COVID-19", "test", "with", "cwa-fake", "header", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "param", "fake", "flag", "for", "fake", "request", "return", "result", "of", "the", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "FAILED", "quick-test-POSITIVE", "quick-test-NEGATIVE", "quick-test-INVALID", "quick-test-PENDING", "or", "quick-test-FAILED", "will", "be", "POSITIVE", "for", "TeleTan", "getteststate", "generatereturntestresult"], "complexity": 19953.0, "loc": 158, "qloc": 121, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4778, "name": "Schema", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.media"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4779, "name": "AllArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4780, "name": "Data", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4781, "name": "NoArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4782, "name": "JsonInclude", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4783, "name": "Claims", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4784, "name": "JwtException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4785, "name": "Holder", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TanService.java", "base_class": null, "variables": ["NUMBER_GENERATOR"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "71f3b3a4dc80034e4a5479e764d9f8078679698e", "date": "2021-01-26 14:53:46 +0100", "committer": "GitHub", "comment": "Improve generations of tele-tans (#128)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "e002f056482113d0a839a6eaaac05392c00d042e", "date": "2020-05-27 11:04:46 +0200", "committer": "GitHub", "comment": "fix: documentation (#73)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}], "semantic_data": ["Holder"], "complexity": 14546.5, "loc": 330, "qloc": 165, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4786, "name": "PoissonDistribution", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.math3.distribution"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4787, "name": "EntitiesCleanupService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/EntitiesCleanupService.java", "base_class": null, "variables": ["applicationConfig", "appSessionRepository", "tanRepository"], "functions": ["cleanup"], "commits": [{"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}], "semantic_data": ["EntitiesCleanupService", "Service", "to", "delete", "entities", "that", "are", "older", "than", "configured", "days", "All", "entities", "that", "are", "older", "than", "configured", "days", "get", "deleted", "cleanup"], "complexity": 3982.0, "loc": 62, "qloc": 30, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4788, "name": "Scheduled", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.scheduling.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4789, "name": "Service", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.stereotype"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4790, "name": "DigestUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.codec.digest"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4791, "name": "tan", "type": "table", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationTan.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0}, {"py/object": "extractor.model.DataEntity", "entity_id": 4792, "name": "EqualsAndHashCode", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4793, "name": "app_session", "type": "table", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationAppSession.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0}, {"py/object": "extractor.model.DataEntity", "entity_id": 4794, "name": "TestResultServerClientConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/TestResultServerClientConfig.java", "base_class": null, "variables": ["enabled", "oneWay", "twoWay", "hostnameVerify", "keyStorePath", "keyStorePassword", "trustStorePath", "trustStorePassword"], "functions": ["client", "getSslContext", "getSslHostnameVerifier"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "32a362f1020303868c943b5d5977f7adb6b7389d", "date": "2020-06-09 15:46:05 +0200", "committer": "Julien", "comment": "feat: hostname verify no mtls"}, {"hash": "cdf35fb8e25726fecb28b831b9eda89885f3f52a", "date": "2020-06-09 11:58:29 +0200", "committer": "GitHub", "comment": "feat: simplify ssl (#151)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerClientConfig", "Configure", "the", "client", "dependent", "on", "the", "ssl", "properties", "return", "an", "Apache", "Http", "Client", "with", "or", "without", "SSL", "features", "client", "getsslcontext", "getsslhostnameverifier"], "complexity": 8866.0, "loc": 109, "qloc": 74, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4795, "name": "NoopHostnameVerifier", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.conn.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4796, "name": "SSLContextBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4797, "name": "DefaultHostnameVerifier", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.conn.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4798, "name": "ApacheHttpClient", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "feign.httpclient"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4799, "name": "Client", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "feign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4800, "name": "HttpClientBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.impl.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4801, "name": "Value", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.beans.factory.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4802, "name": "ResourceUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4803, "name": "FeignClient", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.cloud.openfeign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4804, "name": "GetMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}], "appid": "cwa-verify", "customer": "OpenSource", "mode": "java", "last_scanned": "11.09.2021", "dependencies": [{"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4631}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4636}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4637}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4639}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4641}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4648}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4661}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4661}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4667}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4636}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4637}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4639}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4641}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4674}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4677}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4676}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4678}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4679}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4680}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4681}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4682}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4683}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "implement", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4688}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4688}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "aggregate", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4690}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "implement", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4697}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4698}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "use", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4700}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4701}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4702}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4703}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4704}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4705}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "extend", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "use", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "extend", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4707}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4713}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4714}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "extend", "target": 4713}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4715}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4716}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4719}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4705}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4721}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4722}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4723}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "aggregate", "target": 4724}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4732}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4730}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4729}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4733}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4725}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4729}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4733}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4725}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4732}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4730}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "aggregate", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "use", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "aggregate", "target": 4726}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "use", "target": 4726}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "aggregate", "target": 4728}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "aggregate", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "use", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "use", "target": 4728}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "aggregate", "target": 4731}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "use", "target": 4731}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "use", "target": 4737}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "extend", "target": 4737}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4738}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4739}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4742}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4744}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4745}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4746}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4747}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4748}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4750}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4751}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4752}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4753}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4754}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4756}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4768}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4666, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4663, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "aggregate", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4707}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "extend", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4646, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "aggregate", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4776, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4776, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "aggregate", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4783}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4784}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "use", "target": 4786}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "aggregate", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4788}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4789}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4790}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "use", "target": 4791}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4792}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "use", "target": 4793}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "aggregate", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "aggregate", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4792}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "use", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "aggregate", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4795}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4796}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4797}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4798}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4799}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4800}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4801}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4802}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4803}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4803}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4804}], "analyze_props": {"py/object": "extractor.model.AnalyzeProperties", "atoms": ["interface", "class", "annotated_interface", "enum", "library", "table"], "relations": ["USE", "AGGREGATE", "IMPLEMENT", "EXTEND", "IMPORT"], "clustering": "package", "similarity": false}, "clusters": ["package"], "total_qloc": 4556, "scanned_files": 56} \ No newline at end of file diff --git a/src/server/eula.txt b/src/server/eula.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca8f585697a184c959a1e944f7d0474d6513829f --- /dev/null +++ b/src/server/eula.txt @@ -0,0 +1,4 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). +#You also agree that tacos are tasty, and the best food in the world. +#Thu Nov 04 15:45:20 CET 2021 +eula=true diff --git a/src/server/help.yml b/src/server/help.yml new file mode 100644 index 0000000000000000000000000000000000000000..c0ac9281a452ae91629586a2839781acfbb2703c --- /dev/null +++ b/src/server/help.yml @@ -0,0 +1,56 @@ +# This is the help configuration file for Bukkit. +# +# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by +# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to +# your server or override the help pages of existing plugin commands. +# +# This file is divided up into the following parts: +# -- general-topics: lists admin defined help topics +# -- index-topics: lists admin defined index topics +# -- amend-topics: lists topic amendments to apply to existing help topics +# -- ignore-plugins: lists any plugins that should be excluded from help +# +# Examples are given below. When amending command topic, the string will be replaced with the existing value +# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F. +# ================================================================ +# +# Set this to true to list the individual command help topics in the master help. +# command-topics-in-master-index: true +# +# Each general topic will show up as a separate topic in the help index along with all the plugin command topics. +# general-topics: +# Rules: +# shortText: Rules of the server +# fullText: | +# &61. Be kind to your fellow players. +# &B2. No griefing. +# &D3. No swearing. +# permission: topics.rules +# +# Each index topic will show up as a separate sub-index in the help index along with all the plugin command topics. +# To override the default help index (displayed when the user executes /help), name the index topic "Default". +# index-topics: +# Ban Commands: +# shortText: Player banning commands +# preamble: Moderator - do not abuse these commands +# permission: op +# commands: +# - /ban +# - /ban-ip +# - /banlist +# +# Topic amendments are used to change the content of automatically generated plugin command topics. +# amended-topics: +# /stop: +# shortText: Stops the server cold....in its tracks! +# fullText: - This kills the server. +# permission: you.dont.have +# +# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by +# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index. Ignore "All" +# to completely disable automatic help topic generation. +# ignore-plugins: +# - PluginNameOne +# - PluginNameTwo +# - PluginNameThree + diff --git a/src/server/ops.json b/src/server/ops.json new file mode 100644 index 0000000000000000000000000000000000000000..183d602fce94170eb799a1ebe3899295f4003970 --- /dev/null +++ b/src/server/ops.json @@ -0,0 +1,8 @@ +[ + { + "uuid": "edb76f3f-e782-426a-ba9e-6a895dea431a", + "name": "MC_FLOri", + "level": 4, + "bypassesPlayerLimit": false + } +] \ No newline at end of file diff --git a/src/server/paper-1.17.1-363.jar b/src/server/paper-1.17.1-363.jar new file mode 100644 index 0000000000000000000000000000000000000000..0261356103c78e474df8837eb4b83d43838d3138 Binary files /dev/null and b/src/server/paper-1.17.1-363.jar differ diff --git a/src/server/paper.yml b/src/server/paper.yml new file mode 100644 index 0000000000000000000000000000000000000000..fa14d68f2606b02d7bcc62f0d9c94d1194699b7b --- /dev/null +++ b/src/server/paper.yml @@ -0,0 +1,324 @@ +# This is the main configuration file for Paper. +# As you can see, there's tons to configure. Some options may impact gameplay, so use +# with caution, and make sure you know what each option does before configuring. +# +# If you need help with the configuration or have any questions related to Paper, +# join us in our Discord or IRC channel. +# +# Discord: https://discord.gg/papermc +# IRC: #paper @ irc.esper.net ( https://webchat.esper.net/?channels=paper ) +# Website: https://papermc.io/ +# Docs: https://paper.readthedocs.org/ + +verbose: false +config-version: 23 +settings: + log-player-ip-addresses: true + use-display-name-in-quit-message: false + load-permissions-yml-before-plugins: true + region-file-cache-size: 256 + enable-player-collisions: true + save-empty-scoreboard-teams: false + bungee-online-mode: true + incoming-packet-spam-threshold: 300 + use-alternative-luck-formula: false + console-has-all-permissions: false + player-auto-save-rate: -1 + max-player-auto-save-per-tick: -1 + max-joins-per-tick: 3 + track-plugin-scoreboards: false + fix-entity-position-desync: true + lag-compensate-block-breaking: true + send-full-pos-for-hard-colliding-entities: true + suggest-player-names-when-null-tab-completions: true + velocity-support: + enabled: false + online-mode: false + secret: '' + async-chunks: + threads: -1 + unsupported-settings: + allow-permanent-block-break-exploits: false + allow-piston-duplication: false + allow-headless-pistons: false + allow-permanent-block-break-exploits-readme: This setting controls if players + should be able to break bedrock, end portals and other intended to be permanent + blocks. + allow-piston-duplication-readme: This setting controls if player should be able + to use TNT duplication, but this also allows duplicating carpet, rails and potentially + other items + allow-headless-pistons-readme: This setting controls if players should be able + to create headless pistons. + watchdog: + early-warning-every: 5000 + early-warning-delay: 10000 + spam-limiter: + tab-spam-increment: 1 + tab-spam-limit: 500 + recipe-spam-increment: 1 + recipe-spam-limit: 20 + book-size: + page-max: 2560 + total-multiplier: 0.98 + loggers: + deobfuscate-stacktraces: true + console: + enable-brigadier-highlighting: true + enable-brigadier-completions: true + item-validation: + display-name: 8192 + loc-name: 8192 + lore-line: 8192 + book: + title: 8192 + author: 8192 + page: 16384 + chunk-loading: + min-load-radius: 2 + max-concurrent-sends: 2 + autoconfig-send-distance: true + target-player-chunk-send-rate: 100.0 + global-max-chunk-send-rate: -1.0 + enable-frustum-priority: false + global-max-chunk-load-rate: -1.0 + player-max-concurrent-loads: 4.0 + global-max-concurrent-loads: 500.0 + packet-limiter: + kick-message: '&cSent too many packets' + limits: + all: + interval: 7.0 + max-packet-rate: 500.0 + PacketPlayInAutoRecipe: + interval: 4.0 + max-packet-rate: 5.0 + action: DROP +messages: + no-permission: '&cI''m sorry, but you do not have permission to perform this command. + Please contact the server administrators if you believe that this is in error.' + kick: + authentication-servers-down: '' + connection-throttle: Connection throttled! Please wait before reconnecting. + flying-player: Flying is not enabled on this server + flying-vehicle: Flying is not enabled on this server +timings: + enabled: true + verbose: true + url: https://timings.aikar.co/ + server-name-privacy: false + hidden-config-entries: + - database + - settings.bungeecord-addresses + - settings.velocity-support.secret + history-interval: 300 + history-length: 3600 + server-name: Unknown Server +world-settings: + default: + update-pathfinding-on-block-update: true + fix-wither-targeting-bug: false + map-item-frame-cursor-update-interval: 10 + count-all-mobs-for-spawning: false + max-entity-collisions: 8 + disable-creeper-lingering-effect: false + prevent-moving-into-unloaded-chunks: false + duplicate-uuid-resolver: saferegen + duplicate-uuid-saferegen-delete-range: 32 + remove-corrupt-tile-entities: false + experience-merge-max-value: -1 + max-auto-save-chunks-per-tick: 24 + baby-zombie-movement-modifier: 0.5 + optimize-explosions: false + fixed-chunk-inhabited-time: -1 + use-vanilla-world-scoreboard-name-coloring: false + ender-dragons-death-always-places-dragon-egg: false + allow-using-signs-inside-spawn-protection: false + filter-nbt-data-from-spawn-eggs-and-related: true + falling-block-height-nerf: 0 + tnt-entity-height-nerf: 0 + piglins-guard-chests: true + should-remove-dragon: false + phantoms-do-not-spawn-on-creative-players: true + phantoms-only-attack-insomniacs: true + allow-player-cramming-damage: false + disable-teleportation-suffocation-check: false + prevent-tnt-from-moving-in-water: false + delay-chunk-unloads-by: 10s + show-sign-click-command-failure-msgs-to-player: false + max-leash-distance: 10.0 + iron-golems-can-spawn-in-air: false + enable-treasure-maps: true + treasure-maps-return-already-discovered: false + split-overstacked-loot: true + seed-based-feature-search: true + seed-based-feature-search-loads-chunks: true + grass-spread-tick-rate: 1 + water-over-lava-flow-speed: 5 + use-faster-eigencraft-redstone: false + nether-ceiling-void-damage-height: 0 + only-players-collide: false + allow-vehicle-collisions: true + allow-non-player-entities-on-scoreboards: false + portal-search-radius: 128 + portal-create-radius: 16 + portal-search-vanilla-dimension-scaling: true + parrots-are-unaffected-by-player-movement: false + disable-explosion-knockback: false + fix-climbing-bypassing-cramming-rule: false + fix-items-merging-through-walls: false + keep-spawn-loaded: true + armor-stands-do-collision-entity-lookups: true + disable-thunder: false + skeleton-horse-thunder-spawn-chance: 0.01 + disable-ice-and-snow: false + keep-spawn-loaded-range: 10 + container-update-tick-rate: 1 + map-item-frame-cursor-limit: 128 + per-player-mob-spawns: true + zombies-target-turtle-eggs: true + zombie-villager-infection-chance: -1.0 + all-chunks-are-slime-chunks: false + mob-spawner-tick-rate: 1 + light-queue-size: 20 + auto-save-interval: -1 + armor-stands-tick: true + non-player-arrow-despawn-rate: -1 + creative-arrow-despawn-rate: -1 + spawner-nerfed-mobs-should-jump: false + entities-target-with-follow-range: false + max-growth-height: + cactus: 3 + reeds: 3 + bamboo: + max: 16 + min: 11 + hopper: + cooldown-when-full: true + disable-move-event: false + game-mechanics: + fix-curing-zombie-villager-discount-exploit: true + disable-pillager-patrols: false + scan-for-legacy-ender-dragon: true + disable-unloaded-chunk-enderpearl-exploit: true + disable-relative-projectile-velocity: false + disable-chest-cat-detection: false + nerf-pigmen-from-nether-portals: false + disable-player-crits: false + disable-sprint-interruption-on-attack: false + shield-blocking-delay: 5 + disable-end-credits: false + disable-mob-spawner-spawn-egg-transformation: false + pillager-patrols: + spawn-chance: 0.2 + spawn-delay: + per-player: false + ticks: 12000 + start: + per-player: false + day: 5 + mobs-can-always-pick-up-loot: + zombies: false + skeletons: false + frosted-ice: + enabled: true + delay: + min: 20 + max: 40 + wandering-trader: + spawn-minute-length: 1200 + spawn-day-length: 24000 + spawn-chance-failure-increment: 25 + spawn-chance-min: 25 + spawn-chance-max: 75 + entity-per-chunk-save-limit: + experience_orb: -1 + snowball: -1 + ender_pearl: -1 + arrow: -1 + fireball: -1 + small_fireball: -1 + despawn-ranges: + soft: 32 + hard: 128 + fishing-time-range: + MinimumTicks: 100 + MaximumTicks: 600 + lootables: + auto-replenish: false + restrict-player-reloot: true + reset-seed-on-fill: true + max-refills: -1 + refresh-min: 12h + refresh-max: 2d + spawn-limits: + monsters: -1 + animals: -1 + water-animals: -1 + water-ambient: -1 + ambient: -1 + alt-item-despawn-rate: + enabled: false + items: + COBBLESTONE: 300 + mob-effects: + undead-immune-to-certain-effects: true + spiders-immune-to-poison-effect: true + immune-to-wither-effect: + wither: true + wither-skeleton: true + tick-rates: + sensor: + villager: + secondarypoisensor: 40 + behavior: + villager: + validatenearbypoi: -1 + door-breaking-difficulty: + zombie: + - HARD + vindicator: + - NORMAL + - HARD + feature-seeds: + generate-random-seeds-for-all: false + anti-xray: + enabled: false + engine-mode: 1 + max-block-height: 64 + update-radius: 2 + lava-obscures: false + use-permission: false + hidden-blocks: + - copper_ore + - deepslate_copper_ore + - gold_ore + - deepslate_gold_ore + - iron_ore + - deepslate_iron_ore + - coal_ore + - deepslate_coal_ore + - lapis_ore + - deepslate_lapis_ore + - mossy_cobblestone + - obsidian + - chest + - diamond_ore + - deepslate_diamond_ore + - redstone_ore + - deepslate_redstone_ore + - clay + - emerald_ore + - deepslate_emerald_ore + - ender_chest + replacement-blocks: + - stone + - oak_planks + - deepslate + viewdistances: + no-tick-view-distance: 128 + generator-settings: + flat-bedrock: false + unsupported-settings: + fix-invulnerable-end-crystal-exploit: true + squid-spawn-height: + maximum: 0.0 diff --git a/src/server/permissions.yml b/src/server/permissions.yml new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/server/plugins/JsonFileHistory b/src/server/plugins/JsonFileHistory new file mode 100644 index 0000000000000000000000000000000000000000..8654dfbebf655110273f3e94153f4e5d6d428575 --- /dev/null +++ b/src/server/plugins/JsonFileHistory @@ -0,0 +1 @@ +/Users/flgr/Desktop/PaperServer/cwa-verify_2021-11-09_16-08-07.json diff --git a/src/server/plugins/KPI_Visualizer.jar b/src/server/plugins/KPI_Visualizer.jar new file mode 100644 index 0000000000000000000000000000000000000000..f1289ed10ce6030af82e745bee00a9aaebaaa620 Binary files /dev/null and b/src/server/plugins/KPI_Visualizer.jar differ diff --git a/src/server/plugins/bStats/config.yml b/src/server/plugins/bStats/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..df42956347e6ca1cd631d5649fb321e175da75b4 --- /dev/null +++ b/src/server/plugins/bStats/config.yml @@ -0,0 +1,7 @@ +# bStats collects some data for plugin authors like how many servers are using their plugins. +# To honor their work, you should not disable it. +# This has nearly no effect on the server performance! +# Check out https://bStats.org/ to learn more :) +enabled: true +serverUuid: be3ff7d2-18f7-482a-b5b6-479486e105fe +logFailedRequests: false diff --git a/src/server/server.properties b/src/server/server.properties new file mode 100644 index 0000000000000000000000000000000000000000..3af530627669b22915c2c471e04b6260afb3e72d --- /dev/null +++ b/src/server/server.properties @@ -0,0 +1,53 @@ +#Minecraft server properties +#Wed Jan 19 10:00:05 CET 2022 +enable-jmx-monitoring=false +rcon.port=25575 +gamemode=survival +enable-command-block=false +enable-query=false +level-name=world +motd=A Minecraft Server +query.port=25565 +pvp=true +generate-structures=false +difficulty=easy +network-compression-threshold=256 +max-tick-time=60000 +require-resource-pack=false +max-players=20 +use-native-transport=true +online-mode=true +enable-status=true +allow-flight=false +broadcast-rcon-to-ops=true +view-distance=128 +max-build-height=8000 +server-ip= +resource-pack-prompt= +allow-nether=true +server-port=25565 +enable-rcon=false +sync-chunk-writes=true +op-permission-level=4 +prevent-proxy-connections=false +resource-pack= +entity-broadcast-range-percentage=100 +rcon.password= +player-idle-timeout=0 +debug=false +force-gamemode=false +rate-limit=0 +hardcore=false +white-list=false +broadcast-console-to-ops=true +spawn-npcs=false +spawn-animals=false +snooper-enabled=true +function-permission-level=2 +level-type=FLAT +text-filtering-config= +spawn-monsters=false +enforce-whitelist=false +resource-pack-sha1= +spawn-protection=1 +max-world-size=29999984 diff --git a/src/server/spigot.yml b/src/server/spigot.yml new file mode 100644 index 0000000000000000000000000000000000000000..d11b5d1f996340c8405b3d4496f8b5568b1803f0 --- /dev/null +++ b/src/server/spigot.yml @@ -0,0 +1,167 @@ +# This is the main configuration file for Spigot. +# As you can see, there's tons to configure. Some options may impact gameplay, so use +# with caution, and make sure you know what each option does before configuring. +# For a reference for any variable inside this file, check out the Spigot wiki at +# http://www.spigotmc.org/wiki/spigot-configuration/ +# +# If you need help with the configuration or have any questions related to Spigot, +# join us at the IRC or drop by our forums and leave a post. +# +# IRC: #spigot @ irc.spi.gt ( http://www.spigotmc.org/pages/irc/ ) +# Forums: http://www.spigotmc.org/ + +config-version: 12 +settings: + debug: false + sample-count: 12 + player-shuffle: 0 + user-cache-size: 1000 + save-user-cache-on-stop-only: false + moved-wrongly-threshold: 0.0625 + moved-too-quickly-multiplier: 10.0 + timeout-time: 60 + restart-on-crash: true + restart-script: ./start.sh + netty-threads: 4 + log-villager-deaths: true + log-named-deaths: true + bungeecord: false + attribute: + maxHealth: + max: 2048.0 + movementSpeed: + max: 2048.0 + attackDamage: + max: 2048.0 +messages: + whitelist: You are not whitelisted on this server! + unknown-command: Unknown command. Type "/help" for help. + server-full: The server is full! + outdated-client: Outdated client! Please use {0} + outdated-server: Outdated server! I'm still on {0} + restart: Server is restarting +commands: + log: true + tab-complete: 0 + send-namespaced: true + spam-exclusions: + - /skill + silent-commandblock-console: false + replace-commands: + - setblock + - summon + - testforblock + - tellraw +stats: + disable-saving: false + forced-stats: {} +advancements: + disable-saving: false + disabled: + - minecraft:story/disabled +players: + disable-saving: false +world-settings: + default: + thunder-chance: 100000 + verbose: false + enable-zombie-pigmen-portal-spawns: true + item-despawn-rate: 6000 + view-distance: 128 + mob-spawn-range: 8 + hopper-amount: 1 + dragon-death-sound-radius: 0 + seed-village: 10387312 + seed-desert: 14357617 + seed-igloo: 14357618 + seed-jungle: 14357619 + seed-swamp: 14357620 + seed-monument: 10387313 + seed-shipwreck: 165745295 + seed-ocean: 14357621 + seed-outpost: 165745296 + seed-endcity: 10387313 + seed-slime: 987234911 + seed-bastion: 30084232 + seed-fortress: 30084232 + seed-mansion: 10387319 + seed-fossil: 14357921 + seed-portal: 34222645 + max-tnt-per-tick: 100 + zombie-aggressive-towards-villager: true + nerf-spawner-mobs: false + arrow-despawn-rate: 1200 + trident-despawn-rate: 1200 + hanging-tick-frequency: 100 + end-portal-sound-radius: 0 + wither-spawn-sound-radius: 0 + max-entity-collisions: 8 + entity-tracking-range: + players: 48 + animals: 48 + monsters: 48 + misc: 32 + other: 64 + merge-radius: + item: 2.5 + exp: 3.0 + growth: + cactus-modifier: 100 + cane-modifier: 100 + melon-modifier: 100 + mushroom-modifier: 100 + pumpkin-modifier: 100 + sapling-modifier: 100 + beetroot-modifier: 100 + carrot-modifier: 100 + potato-modifier: 100 + wheat-modifier: 100 + netherwart-modifier: 100 + vine-modifier: 100 + cocoa-modifier: 100 + bamboo-modifier: 100 + sweetberry-modifier: 100 + kelp-modifier: 100 + entity-activation-range: + animals: 32 + monsters: 32 + raiders: 48 + misc: 16 + water: 16 + villagers: 32 + flying-monsters: 32 + villagers-work-immunity-after: 100 + villagers-work-immunity-for: 20 + villagers-active-for-panic: true + tick-inactive-villagers: true + wake-up-inactive: + animals-max-per-tick: 4 + animals-every: 1200 + animals-for: 100 + monsters-max-per-tick: 8 + monsters-every: 400 + monsters-for: 100 + villagers-max-per-tick: 4 + villagers-every: 600 + villagers-for: 100 + flying-monsters-max-per-tick: 8 + flying-monsters-every: 200 + flying-monsters-for: 100 + ticks-per: + hopper-transfer: 8 + hopper-check: 1 + hunger: + jump-walk-exhaustion: 0.05 + jump-sprint-exhaustion: 0.2 + combat-exhaustion: 0.1 + regen-exhaustion: 6.0 + swim-multiplier: 0.01 + sprint-multiplier: 0.1 + other-multiplier: 0.0 + max-tick-time: + tile: 50 + entity: 50 + squid-spawn-range: + min: 45.0 + worldeditregentempworld: + verbose: false diff --git a/src/server/usercache.json b/src/server/usercache.json new file mode 100644 index 0000000000000000000000000000000000000000..38d8fc9c8d966d88dd56d3bba9cbacb5ce9315f1 --- /dev/null +++ b/src/server/usercache.json @@ -0,0 +1 @@ +[{"name":"MC_FLOri","uuid":"edb76f3f-e782-426a-ba9e-6a895dea431a","expiresOn":"2022-02-19 10:04:30 +0100"}] \ No newline at end of file diff --git a/src/server/version_history.json b/src/server/version_history.json new file mode 100644 index 0000000000000000000000000000000000000000..22020b598e3e91fb88320238b0c395abfe9cb5f4 --- /dev/null +++ b/src/server/version_history.json @@ -0,0 +1 @@ +{"oldVersion":"git-Paper-304 (MC: 1.17.1)","currentVersion":"git-Paper-363 (MC: 1.17.1)"} \ No newline at end of file diff --git a/src/server/wepif.yml b/src/server/wepif.yml new file mode 100644 index 0000000000000000000000000000000000000000..43b2ebc8f07773b8670f74f02efbcb2c588d9c01 --- /dev/null +++ b/src/server/wepif.yml @@ -0,0 +1,46 @@ +# +# WEPIF Configuration File +# +# This file handles permissions configuration for every plugin using WEPIF +# +# About editing this file: +# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If +# you use an editor like Notepad++ (recommended for Windows users), you +# must configure it to "replace tabs with spaces." In Notepad++, this can +# be changed in Settings > Preferences > Language Menu. +# - Don't get rid of the indents. They are indented so some entries are +# in categories (like "enforce-single-session" is in the "protection" +# category. +# - If you want to check the format of this file before putting it +# into WEPIF, paste it into https://yaml-online-parser.appspot.com/ +# and see if it gives "ERROR:". +# - Lines starting with # are comments and so they are ignored. + + +ignore-nijiperms-bridges: true +resolvers: + enabled: + - PluginPermissionsResolver + - PermissionsExResolver + - bPermissionsResolver + - GroupManagerResolver + - NijiPermissionsResolver + - VaultResolver + - DinnerPermsResolver + - FlatFilePermissionsResolver +permissions: + groups: + default: + permissions: + - worldedit.reload + - worldedit.selection + - worlds.creative.worldedit.region + admins: + permissions: + - '*' + users: + sk89q: + permissions: + - worldedit + groups: + - admins diff --git a/src/server/whitelist.json b/src/server/whitelist.json new file mode 100644 index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc --- /dev/null +++ b/src/server/whitelist.json @@ -0,0 +1 @@ +[] \ No newline at end of file