19 package org.sleuthkit.autopsy.logicalimager.configuration;
21 import com.google.gson.JsonArray;
22 import com.google.gson.JsonDeserializationContext;
23 import com.google.gson.JsonDeserializer;
24 import com.google.gson.JsonElement;
25 import com.google.gson.JsonObject;
26 import com.google.gson.JsonParseException;
27 import java.lang.reflect.Type;
28 import java.util.ArrayList;
29 import java.util.List;
32 import org.openide.util.NbBundle;
38 "LogicalImagerConfigDeserializer.missingRuleSetException=Missing rule-set",
40 "LogicalImagerConfigDeserializer.unsupportedKeyException=Unsupported key: {0}",
41 "LogicalImagerConfigDeserializer.fullPathsException=A rule with full-paths cannot have other rule definitions",
43 class LogicalImagerConfigDeserializer implements JsonDeserializer<LogicalImagerConfig> {
46 public LogicalImagerConfig deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException {
47 boolean finalizeImageWriter =
false;
49 final JsonObject jsonObject = je.getAsJsonObject();
50 final JsonElement jsonFinalizeImageWriter = jsonObject.get(
"finalize-image-writer");
51 if (jsonFinalizeImageWriter != null) {
52 finalizeImageWriter = jsonFinalizeImageWriter.getAsBoolean();
55 JsonArray asJsonArray = jsonObject.get(
"rule-sets").getAsJsonArray();
56 if (asJsonArray == null) {
57 throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_missingRuleSetException());
60 List<LogicalImagerRuleSet> ruleSets =
new ArrayList<>();
61 for (JsonElement element: asJsonArray) {
62 String setName = null;
63 List<LogicalImagerRule> rules = null;
64 JsonObject asJsonObject = element.getAsJsonObject();
65 JsonElement setNameElement = asJsonObject.get(
"set-name");
66 setName = setNameElement.getAsString();
67 JsonElement rulesElement = asJsonObject.get(
"rules");
68 rules = parseRules(rulesElement.getAsJsonArray());
69 LogicalImagerRuleSet ruleSet =
new LogicalImagerRuleSet(setName, rules);
70 ruleSets.add(ruleSet);
72 return new LogicalImagerConfig(finalizeImageWriter, ruleSets);
75 private List<LogicalImagerRule> parseRules(JsonArray asJsonArray) {
76 List<LogicalImagerRule> rules =
new ArrayList<>();
78 for (JsonElement element: asJsonArray) {
80 Boolean shouldSave =
false;
81 Boolean shouldAlert =
true;
83 String description = null;
84 List<String> extensions = null;
85 List<String> paths = null;
86 List<String> fullPaths = null;
87 List<String> filenames = null;
88 Integer minFileSize = null;
89 Integer maxFileSize = null;
90 Integer minDays = null;
91 Integer minDate = null;
92 Integer maxDate = null;
94 Set<Map.Entry<String, JsonElement>> entrySet = element.getAsJsonObject().entrySet();
96 for (Map.Entry<String, JsonElement> entry1 : entrySet) {
97 key1 = entry1.getKey();
100 shouldAlert = entry1.getValue().getAsBoolean();
103 shouldSave = entry1.getValue().getAsBoolean();
106 name = entry1.getValue().getAsString();
109 description = entry1.getValue().getAsString();
112 JsonArray extensionsArray = entry1.getValue().getAsJsonArray();
113 extensions =
new ArrayList<>();
114 for (JsonElement e : extensionsArray) {
115 extensions.add(e.getAsString());
119 JsonArray pathsArray = entry1.getValue().getAsJsonArray();
120 paths =
new ArrayList<>();
121 for (JsonElement e : pathsArray) {
122 paths.add(e.getAsString());
126 JsonArray filenamesArray = entry1.getValue().getAsJsonArray();
127 filenames =
new ArrayList<>();
128 for (JsonElement e : filenamesArray) {
129 filenames.add(e.getAsString());
133 JsonArray fullPathsArray = entry1.getValue().getAsJsonArray();
134 fullPaths =
new ArrayList<>();
135 for (JsonElement e : fullPathsArray) {
136 fullPaths.add(e.getAsString());
140 JsonObject sizeRangeObject = entry1.getValue().getAsJsonObject();
141 Set<Map.Entry<String, JsonElement>> entrySet1 = sizeRangeObject.entrySet();
142 for (Map.Entry<String, JsonElement> entry2 : entrySet1) {
143 String sizeKey = entry2.getKey();
146 minFileSize = entry2.getValue().getAsInt();
149 maxFileSize = entry2.getValue().getAsInt();
152 throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(sizeKey));
157 JsonObject dateRangeObject = entry1.getValue().getAsJsonObject();
158 Set<Map.Entry<String, JsonElement>> entrySet2 = dateRangeObject.entrySet();
159 for (Map.Entry<String, JsonElement> entry2 : entrySet2) {
160 String dateKey = entry2.getKey();
163 minDate = entry2.getValue().getAsInt();
166 maxDate = entry2.getValue().getAsInt();
169 minDays = entry2.getValue().getAsInt();
172 throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(dateKey));
177 throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(key1));
182 if ((fullPaths != null && !fullPaths.isEmpty()) && ((extensions != null && !extensions.isEmpty())
183 || (paths != null && !paths.isEmpty())
184 || (filenames != null && !filenames.isEmpty()))) {
185 throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_fullPathsException());
188 LogicalImagerRule rule =
new LogicalImagerRule.Builder()
189 .getShouldAlert(shouldAlert)
190 .getShouldSave(shouldSave)
192 .getDescription(description)
193 .getExtensions(extensions)
195 .getFullPaths(fullPaths)
196 .getFilenames(filenames)
197 .getMinFileSize(minFileSize)
198 .getMaxFileSize(maxFileSize)