19package org.sleuthkit.autopsy.datasourceprocessors.xry;
21import java.util.ArrayList;
22import java.util.Collection;
24import java.util.logging.Level;
25import org.sleuthkit.autopsy.coreutils.Logger;
26import static org.sleuthkit.autopsy.datasourceprocessors.xry.AbstractSingleEntityParser.PARSER_NAME;
27import org.sleuthkit.datamodel.Account;
28import org.sleuthkit.datamodel.Blackboard;
29import org.sleuthkit.datamodel.BlackboardArtifact;
30import org.sleuthkit.datamodel.BlackboardAttribute;
31import org.sleuthkit.datamodel.Content;
32import org.sleuthkit.datamodel.SleuthkitCase;
33import org.sleuthkit.datamodel.TskCoreException;
34import org.sleuthkit.datamodel.blackboardutils.CommunicationArtifactsHelper;
39final class XRYContactsFileParser
extends AbstractSingleEntityParser {
41 private static final Logger logger = Logger.getLogger(XRYContactsFileParser.class.getName());
44 boolean canProcess(XRYKeyValuePair pair) {
49 boolean isNamespace(String nameSpace) {
55 void makeArtifact(List<XRYKeyValuePair> keyValuePairs, Content parent, SleuthkitCase currentCase)
throws TskCoreException, Blackboard.BlackboardException {
58 String contactName =
null;
59 String phoneNumber =
null;
60 String homePhoneNumber =
null;
61 String mobilePhoneNumber =
null;
62 String emailAddr =
null;
63 boolean hasAnEmail =
false;
64 final Collection<BlackboardAttribute> additionalAttributes =
new ArrayList<>();
66 for (XRYKeyValuePair pair : keyValuePairs) {
70 if (contactName !=
null) {
71 additionalAttributes.add(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME, PARSER_NAME, pair.getValue()));
73 contactName = pair.getValue();
77 if (!XRYUtils.isPhoneValid(pair.getValue())) {
81 if (phoneNumber !=
null) {
82 additionalAttributes.add(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER, PARSER_NAME, pair.getValue()));
84 phoneNumber = pair.getValue();
88 if (!XRYUtils.isPhoneValid(pair.getValue())) {
92 if (mobilePhoneNumber !=
null) {
93 additionalAttributes.add(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_MOBILE, PARSER_NAME, pair.getValue()));
95 mobilePhoneNumber = pair.getValue();
99 if (!XRYUtils.isPhoneValid(pair.getValue())) {
103 if (homePhoneNumber !=
null) {
104 additionalAttributes.add(
new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_HOME, PARSER_NAME, pair.getValue()));
106 homePhoneNumber = pair.getValue();
110 if (!XRYUtils.isEmailValid(pair.getValue())) {
115 additionalAttributes.add(
new BlackboardAttribute(
116 BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_HOME,
117 PARSER_NAME, pair.getValue()));
122 if (xryKey.getType() !=
null) {
123 additionalAttributes.add(
new BlackboardAttribute(xryKey.getType(),
124 PARSER_NAME, pair.getValue()));
127 logger.log(Level.INFO, String.format(
"[XRY DSP] Key value pair "
128 +
"(in brackets) [ %s ] was recognized but "
129 +
"more data or time is needed to finish implementation. Discarding... ",
136 if (phoneNumber !=
null || homePhoneNumber !=
null || mobilePhoneNumber !=
null || hasAnEmail) {
137 CommunicationArtifactsHelper helper =
new CommunicationArtifactsHelper(
138 currentCase, PARSER_NAME, parent, Account.Type.DEVICE,
null);
140 helper.addContact(contactName, phoneNumber, homePhoneNumber,
141 mobilePhoneNumber, emailAddr, additionalAttributes);
144 if (!additionalAttributes.isEmpty()) {
145 BlackboardArtifact artifact = parent.newDataArtifact(
new BlackboardArtifact.Type(BlackboardArtifact.ARTIFACT_TYPE.TSK_CONTACT), additionalAttributes);
147 currentCase.getBlackboard().postArtifact(artifact, PARSER_NAME,
null);
164 ADDRESS_HOME(
"address home", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_LOCATION),
166 DELETED(
"deleted", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ISDELETED),
175 private final BlackboardAttribute.ATTRIBUTE_TYPE
type;
182 BlackboardAttribute.ATTRIBUTE_TYPE
getType() {
191 XryKey.fromDisplayName(key);
193 }
catch (IllegalArgumentException ex) {
206 String normalizedKey = key.trim().toLowerCase();
208 if (normalizedKey.equals(keyChoice.name)) {
213 throw new IllegalArgumentException(String.format(
"Key [%s] was not found."
214 +
" All keys should be tested with contains.", key));