From 791164609f11fdf04d3f2564575ef8a916a2feeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Berenguel?= Date: Wed, 9 Oct 2024 09:06:37 -0300 Subject: [PATCH] #2286: WhatsApp issues in internal parser --- .../java/iped/parsers/util/ConversationUtils.java | 13 ++++++++++--- .../java/iped/parsers/whatsapp/WAContact.java | 14 +++----------- .../iped/parsers/whatsapp/WhatsAppParser.java | 15 ++++++++------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/util/ConversationUtils.java b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/util/ConversationUtils.java index 0271f38842..f1abf004a5 100644 --- a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/util/ConversationUtils.java +++ b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/util/ConversationUtils.java @@ -19,6 +19,11 @@ private ConversationUtils() { public static String buidPartyString(String name, String id, String phone, String username, String source) { StringBuilder sb = new StringBuilder(); + + if (StringUtils.equals(name, phone)) { + name = null; + } + if (name != null) { sb.append(name); } @@ -30,9 +35,11 @@ public static String buidPartyString(String name, String id, String phone, Strin } sb.append("("); boolean needToSeparate = false; - if ("WhatsApp".equalsIgnoreCase(source)) { - String phoneFromId = StringUtils.substringBeforeLast(id, "@"); - sb.append("+").append(StringUtils.firstNonBlank(phone, phoneFromId)); + if (StringUtils.startsWithIgnoreCase(source, "WhatsApp")) { + if ("unknownAccount".equalsIgnoreCase(id)) { + return id; + } + sb.append(StringUtils.firstNonBlank(id, phone)); } else { if (id != null) { sb.append("ID:").append(id); diff --git a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WAContact.java b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WAContact.java index a12e62645a..82b5fa6d9f 100644 --- a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WAContact.java +++ b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WAContact.java @@ -1,5 +1,7 @@ package iped.parsers.whatsapp; +import org.apache.commons.lang3.StringUtils; + public class WAContact { protected static final String waSuffix = "@s.whatsapp.net"; @@ -89,17 +91,7 @@ public void setNickName(String nickName) { } public String getName() { - if (displayName != null && !displayName.isBlank()) - return displayName; - else if (waName != null && !waName.isBlank()) - return waName; - else if (givenName != null && !givenName.isBlank()) - return givenName; - else if (nickName != null && !nickName.isBlank()) - return nickName; - else - return id; - + return StringUtils.firstNonBlank(displayName, waName, givenName, nickName, id); } public String getTitle() { diff --git a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WhatsAppParser.java b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WhatsAppParser.java index 8db6710113..e6f3e69e5a 100644 --- a/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WhatsAppParser.java +++ b/iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/whatsapp/WhatsAppParser.java @@ -48,6 +48,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.tika.config.Field; import org.apache.tika.exception.TikaException; @@ -331,18 +332,18 @@ private void createReport(List chatList, IItemSearcher searcher, WAContact if (c.isGroupOrChannelChat()) { for (WAContact member : c.getGroupMembers()) { - addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, member, cache); + addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, member); } for (WAContact admin : c.getGroupAdmins()) { - addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_ADMINS, admin, cache); + addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_ADMINS, admin); } chatMetadata.set(ExtraProperties.CONVERSATION_TYPE, c.isGroupChat() ? ConversationUtils.TYPE_GROUP : ConversationUtils.TYPE_BROADCAST); } else { if (c.getRemote() != null) { - addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, c.getRemote(), cache); + addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, c.getRemote()); } if (account != null) { - addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, account, cache); + addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_PARTICIPANTS, account); } chatMetadata.set(ExtraProperties.CONVERSATION_TYPE, ConversationUtils.TYPE_PRIVATE); } @@ -351,7 +352,7 @@ private void createReport(List chatList, IItemSearcher searcher, WAContact chatMetadata.set(ExtraProperties.CONVERSATION_ID, c.getRemote() != null ? c.getRemote().getFullId() : c.getPrintId()); chatMetadata.set(ExtraProperties.CONVERSATION_NAME, c.getRemote() != null ? c.getRemote().getName() : ""); if (account != null) { - chatMetadata.set(ExtraProperties.CONVERSATION_ACCOUNT, account.getFullId()); + addParticipantFields(chatMetadata, ExtraProperties.CONVERSATION_ACCOUNT, account); } chatMetadata.set(ExtraProperties.CONVERSATION_MESSAGES_COUNT, messagesCount); @@ -374,8 +375,8 @@ private void createReport(List chatList, IItemSearcher searcher, WAContact } - private void addParticipantFields(Metadata chatMetadata, String field, WAContact member, HashMap cache) { - chatMetadata.add(field, formatContact(member, cache)); + private void addParticipantFields(Metadata chatMetadata, String field, WAContact member) { + chatMetadata.add(field, ConversationUtils.buidPartyString(member.getName(), member.getFullId(), member.getId(), null, "WhatsApp")); chatMetadata.add(field + ExtraProperties.CONVERSATION_SUFFIX_ID, member.getFullId()); chatMetadata.add(field + ExtraProperties.CONVERSATION_SUFFIX_PHONE, member.getId()); }