Autopsy  4.11.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
LogicalImagerConfigDeserializer.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2019 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.logicalimager.configuration;
20 
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;
30 import java.util.Map;
31 import java.util.Set;
32 import org.openide.util.NbBundle;
33 
37 @NbBundle.Messages({
38  "LogicalImagerConfigDeserializer.missingRuleSetException=Missing rule-set",
39  "# {0} - key",
40  "LogicalImagerConfigDeserializer.unsupportedKeyException=Unsupported key: {0}",
41  "LogicalImagerConfigDeserializer.fullPathsException=A rule with full-paths cannot have other rule definitions",
42 })
43 class LogicalImagerConfigDeserializer implements JsonDeserializer<LogicalImagerConfig> {
44 
45  @Override
46  public LogicalImagerConfig deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException {
47  boolean finalizeImageWriter = false;
48 
49  final JsonObject jsonObject = je.getAsJsonObject();
50  final JsonElement jsonFinalizeImageWriter = jsonObject.get("finalize-image-writer"); // NON-NLS
51  if (jsonFinalizeImageWriter != null) {
52  finalizeImageWriter = jsonFinalizeImageWriter.getAsBoolean();
53  }
54 
55  JsonArray asJsonArray = jsonObject.get("rule-sets").getAsJsonArray(); // NON-NLS
56  if (asJsonArray == null) {
57  throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_missingRuleSetException());
58  }
59 
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);
71  }
72  return new LogicalImagerConfig(finalizeImageWriter, ruleSets);
73  }
74 
75  private List<LogicalImagerRule> parseRules(JsonArray asJsonArray) {
76  List<LogicalImagerRule> rules = new ArrayList<>();
77 
78  for (JsonElement element: asJsonArray) {
79  String key1;
80  Boolean shouldSave = false;
81  Boolean shouldAlert = true;
82  String name = null;
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;
93 
94  Set<Map.Entry<String, JsonElement>> entrySet = element.getAsJsonObject().entrySet();
95 
96  for (Map.Entry<String, JsonElement> entry1 : entrySet) {
97  key1 = entry1.getKey();
98  switch (key1) {
99  case "shouldAlert": // NON-NLS
100  shouldAlert = entry1.getValue().getAsBoolean();
101  break;
102  case "shouldSave": // NON-NLS
103  shouldSave = entry1.getValue().getAsBoolean();
104  break;
105  case "name": // NON-NLS
106  name = entry1.getValue().getAsString();
107  break;
108  case "description": // NON-NLS
109  description = entry1.getValue().getAsString();
110  break;
111  case "extensions": // NON-NLS
112  JsonArray extensionsArray = entry1.getValue().getAsJsonArray();
113  extensions = new ArrayList<>();
114  for (JsonElement e : extensionsArray) {
115  extensions.add(e.getAsString());
116  }
117  break;
118  case "folder-names": // NON-NLS
119  JsonArray pathsArray = entry1.getValue().getAsJsonArray();
120  paths = new ArrayList<>();
121  for (JsonElement e : pathsArray) {
122  paths.add(e.getAsString());
123  }
124  break;
125  case "file-names": // NON-NLS
126  JsonArray filenamesArray = entry1.getValue().getAsJsonArray();
127  filenames = new ArrayList<>();
128  for (JsonElement e : filenamesArray) {
129  filenames.add(e.getAsString());
130  }
131  break;
132  case "full-paths": // NON-NLS
133  JsonArray fullPathsArray = entry1.getValue().getAsJsonArray();
134  fullPaths = new ArrayList<>();
135  for (JsonElement e : fullPathsArray) {
136  fullPaths.add(e.getAsString());
137  }
138  break;
139  case "size-range": // NON-NLS
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();
144  switch (sizeKey) {
145  case "min": // NON-NLS
146  minFileSize = entry2.getValue().getAsInt();
147  break;
148  case "max": // NON-NLS
149  maxFileSize = entry2.getValue().getAsInt();
150  break;
151  default:
152  throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(sizeKey));
153  }
154  }
155  break;
156  case "date-range": // NON-NLS
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();
161  switch (dateKey) {
162  case "min": // NON-NLS
163  minDate = entry2.getValue().getAsInt();
164  break;
165  case "max": // NON-NLS
166  maxDate = entry2.getValue().getAsInt();
167  break;
168  case "min-days": // NON-NLS
169  minDays = entry2.getValue().getAsInt();
170  break;
171  default:
172  throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(dateKey));
173  }
174  }
175  break;
176  default:
177  throw new JsonParseException(Bundle.LogicalImagerConfigDeserializer_unsupportedKeyException(key1));
178  }
179  }
180 
181  // A rule with full-paths cannot have other rule definitions
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());
186  }
187 
188  LogicalImagerRule rule = new LogicalImagerRule.Builder()
189  .getShouldAlert(shouldAlert)
190  .getShouldSave(shouldSave)
191  .getName(name)
192  .getDescription(description)
193  .getExtensions(extensions)
194  .getPaths(paths)
195  .getFullPaths(fullPaths)
196  .getFilenames(filenames)
197  .getMinFileSize(minFileSize)
198  .getMaxFileSize(maxFileSize)
199  .getMinDays(minDays)
200  .getMinDate(minDate)
201  .getMaxDate(maxDate)
202  .build();
203  rules.add(rule);
204  } // for
205 
206  return rules;
207  }
208 }
209 
210 
211 
212 

Copyright © 2012-2018 Basis Technology. Generated on: Fri Jun 21 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.