mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-14 17:06:16 +00:00
Finished serialization of file types
This commit is contained in:
parent
f333c66d01
commit
c0f15976ca
@ -255,8 +255,13 @@ final class UserDefinedFileTypesManager {
|
|||||||
try {
|
try {
|
||||||
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE);
|
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE);
|
||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
|
File serialized = new File(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE));
|
||||||
if (file.exists() && file.canRead()) {
|
if (file.exists() && file.canRead()) {
|
||||||
for (FileType fileType : XmlReader.readFileTypes(filePath)) {
|
for (FileType fileType : DefinitionsReader.readFileTypes(filePath)) {
|
||||||
|
addUserDefinedFileType(fileType);
|
||||||
|
}
|
||||||
|
} else if (serialized.exists()) {
|
||||||
|
for (FileType fileType : DefinitionsReader.readFileTypesSerialized(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE))) {
|
||||||
addUserDefinedFileType(fileType);
|
addUserDefinedFileType(fileType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,7 +296,7 @@ final class UserDefinedFileTypesManager {
|
|||||||
synchronized void setUserDefinedFileTypes(List<FileType> newFileTypes) throws UserDefinedFileTypesException {
|
synchronized void setUserDefinedFileTypes(List<FileType> newFileTypes) throws UserDefinedFileTypesException {
|
||||||
try {
|
try {
|
||||||
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE);
|
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE);
|
||||||
XmlWriter.writeFileTypes(newFileTypes, filePath);
|
DefinitionsWriter.writeFileTypes(newFileTypes, filePath);
|
||||||
} catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) {
|
} catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) {
|
||||||
throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage");
|
throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage");
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
@ -315,7 +320,7 @@ final class UserDefinedFileTypesManager {
|
|||||||
* Provides a mechanism for writing a set of file type definitions to an XML
|
* Provides a mechanism for writing a set of file type definitions to an XML
|
||||||
* file.
|
* file.
|
||||||
*/
|
*/
|
||||||
private static class XmlWriter {
|
private static class DefinitionsWriter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes a set of file type definitions to an XML file.
|
* Writes a set of file type definitions to an XML file.
|
||||||
@ -343,89 +348,10 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an XML representation of a file type.
|
* Private constructor suppresses creation of instances of this utility
|
||||||
*
|
|
||||||
* @param fileType The file type object.
|
|
||||||
* @param doc The WC3 DOM object to use to create the XML.
|
|
||||||
*
|
|
||||||
* @return An XML element.
|
|
||||||
*/
|
|
||||||
private static Element createFileTypeElement(FileType fileType, Document doc) {
|
|
||||||
Element fileTypeElem = doc.createElement(FILE_TYPE_TAG_NAME);
|
|
||||||
XmlWriter.addMimeTypeElement(fileType, fileTypeElem, doc);
|
|
||||||
XmlWriter.addSignatureElement(fileType, fileTypeElem, doc);
|
|
||||||
XmlWriter.addInterestingFilesSetElement(fileType, fileTypeElem, doc);
|
|
||||||
XmlWriter.addAlertAttribute(fileType, fileTypeElem);
|
|
||||||
return fileTypeElem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a MIME type child element to a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileType The file type to use as a content source.
|
|
||||||
* @param fileTypeElem The parent file type element.
|
|
||||||
* @param doc The WC3 DOM object to use to create the XML.
|
|
||||||
*/
|
|
||||||
private static void addMimeTypeElement(FileType fileType, Element fileTypeElem, Document doc) {
|
|
||||||
Element typeNameElem = doc.createElement(MIME_TYPE_TAG_NAME);
|
|
||||||
typeNameElem.setTextContent(fileType.getMimeType());
|
|
||||||
fileTypeElem.appendChild(typeNameElem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a signature child element to a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileType The file type to use as a content source.
|
|
||||||
* @param fileTypeElem The parent file type element.
|
|
||||||
* @param doc The WC3 DOM object to use to create the XML.
|
|
||||||
*/
|
|
||||||
private static void addSignatureElement(FileType fileType, Element fileTypeElem, Document doc) {
|
|
||||||
Signature signature = fileType.getSignature();
|
|
||||||
Element signatureElem = doc.createElement(SIGNATURE_TAG_NAME);
|
|
||||||
|
|
||||||
Element bytesElem = doc.createElement(BYTES_TAG_NAME);
|
|
||||||
bytesElem.setTextContent(DatatypeConverter.printHexBinary(signature.getSignatureBytes()));
|
|
||||||
signatureElem.appendChild(bytesElem);
|
|
||||||
|
|
||||||
Element offsetElem = doc.createElement(OFFSET_TAG_NAME);
|
|
||||||
offsetElem.setTextContent(DatatypeConverter.printLong(signature.getOffset()));
|
|
||||||
offsetElem.setAttribute(RELATIVE_ATTRIBUTE, String.valueOf(signature.isRelativeToStart()));
|
|
||||||
signatureElem.appendChild(offsetElem);
|
|
||||||
|
|
||||||
signatureElem.setAttribute(SIGNATURE_TYPE_ATTRIBUTE, signature.getType().toString());
|
|
||||||
fileTypeElem.appendChild(signatureElem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an interesting files set element to a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileType The file type to use as a content source.
|
|
||||||
* @param fileTypeElem The parent file type element.
|
|
||||||
* @param doc The WC3 DOM object to use to create the XML.
|
|
||||||
*/
|
|
||||||
private static void addInterestingFilesSetElement(FileType fileType, Element fileTypeElem, Document doc) {
|
|
||||||
if (!fileType.getFilesSetName().isEmpty()) {
|
|
||||||
Element filesSetElem = doc.createElement(INTERESTING_FILES_SET_TAG_NAME);
|
|
||||||
filesSetElem.setTextContent(fileType.getFilesSetName());
|
|
||||||
fileTypeElem.appendChild(filesSetElem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an alert attribute to a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileType The file type to use as a content source.
|
|
||||||
* @param fileTypeElem The parent file type element.
|
|
||||||
*/
|
|
||||||
private static void addAlertAttribute(FileType fileType, Element fileTypeElem) {
|
|
||||||
fileTypeElem.setAttribute(ALERT_ATTRIBUTE, Boolean.toString(fileType.alertOnMatch()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private constructor suppresses creation of instanmces of this utility
|
|
||||||
* class.
|
* class.
|
||||||
*/
|
*/
|
||||||
private XmlWriter() {
|
private DefinitionsWriter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -434,7 +360,7 @@ final class UserDefinedFileTypesManager {
|
|||||||
* Provides a mechanism for reading a set of file type definitions from an
|
* Provides a mechanism for reading a set of file type definitions from an
|
||||||
* XML file.
|
* XML file.
|
||||||
*/
|
*/
|
||||||
private static class XmlReader {
|
private static class DefinitionsReader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a set of file type definitions from an XML file.
|
* Reads a set of file type definitions from an XML file.
|
||||||
@ -462,21 +388,25 @@ final class UserDefinedFileTypesManager {
|
|||||||
NodeList fileTypeElems = fileTypesElem.getElementsByTagName(FILE_TYPE_TAG_NAME);
|
NodeList fileTypeElems = fileTypesElem.getElementsByTagName(FILE_TYPE_TAG_NAME);
|
||||||
for (int i = 0; i < fileTypeElems.getLength(); ++i) {
|
for (int i = 0; i < fileTypeElems.getLength(); ++i) {
|
||||||
Element fileTypeElem = (Element) fileTypeElems.item(i);
|
Element fileTypeElem = (Element) fileTypeElems.item(i);
|
||||||
FileType fileType = XmlReader.parseFileType(fileTypeElem);
|
FileType fileType = DefinitionsReader.parseFileType(fileTypeElem);
|
||||||
fileTypes.add(fileType);
|
fileTypes.add(fileType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
File serializedDefs = new File(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE));
|
return fileTypes;
|
||||||
if (serializedDefs.exists()) {
|
}
|
||||||
try {
|
|
||||||
try (NbObjectInputStream in = new NbObjectInputStream(new FileInputStream(serializedDefs))) {
|
private static List<FileType> readFileTypesSerialized(String filePath) throws IOException, ParserConfigurationException, SAXException {
|
||||||
UserDefinedFileTypesSettings filesSetsSettings = (UserDefinedFileTypesSettings) in.readObject();
|
List<FileType> fileTypes = new ArrayList<>();
|
||||||
return filesSetsSettings.getUserDefinedFileTypes();
|
File serializedDefs = new File(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE));
|
||||||
}
|
if (serializedDefs.exists()) {
|
||||||
} catch (IOException | ClassNotFoundException ex) {
|
try {
|
||||||
throw new PersistenceException(String.format("Failed to read settings from %s", getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE)), ex);
|
try (NbObjectInputStream in = new NbObjectInputStream(new FileInputStream(serializedDefs))) {
|
||||||
|
UserDefinedFileTypesSettings filesSetsSettings = (UserDefinedFileTypesSettings) in.readObject();
|
||||||
|
return filesSetsSettings.getUserDefinedFileTypes();
|
||||||
}
|
}
|
||||||
|
} catch (IOException | ClassNotFoundException ex) {
|
||||||
|
throw new PersistenceException(String.format("Failed to read settings from %s", getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_SERIALIZATION_FILE)), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fileTypes;
|
return fileTypes;
|
||||||
@ -493,10 +423,10 @@ final class UserDefinedFileTypesManager {
|
|||||||
* @throws NumberFormatException
|
* @throws NumberFormatException
|
||||||
*/
|
*/
|
||||||
private static FileType parseFileType(Element fileTypeElem) throws IllegalArgumentException, NumberFormatException {
|
private static FileType parseFileType(Element fileTypeElem) throws IllegalArgumentException, NumberFormatException {
|
||||||
String mimeType = XmlReader.parseMimeType(fileTypeElem);
|
String mimeType = DefinitionsReader.parseMimeType(fileTypeElem);
|
||||||
Signature signature = XmlReader.parseSignature(fileTypeElem);
|
Signature signature = DefinitionsReader.parseSignature(fileTypeElem);
|
||||||
String filesSetName = XmlReader.parseInterestingFilesSet(fileTypeElem);
|
String filesSetName = DefinitionsReader.parseInterestingFilesSet(fileTypeElem);
|
||||||
boolean alert = XmlReader.parseAlert(fileTypeElem);
|
boolean alert = DefinitionsReader.parseAlert(fileTypeElem);
|
||||||
return new FileType(mimeType, signature, filesSetName, alert);
|
return new FileType(mimeType, signature, filesSetName, alert);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -594,7 +524,7 @@ final class UserDefinedFileTypesManager {
|
|||||||
* Private constructor suppresses creation of instanmces of this utility
|
* Private constructor suppresses creation of instanmces of this utility
|
||||||
* class.
|
* class.
|
||||||
*/
|
*/
|
||||||
private XmlReader() {
|
private DefinitionsReader() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user