DKIM: highlight found signer

master
M66B 2 months ago
parent 6abb6dd47d
commit 3e9fa1a7f5

@ -2630,20 +2630,30 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibAddContact.setVisibility(show_addresses && contacts && froms > 0 ? View.VISIBLE : View.GONE); ibAddContact.setVisibility(show_addresses && contacts && froms > 0 ? View.VISIBLE : View.GONE);
boolean known_signer = false; boolean known_signer = false;
if (native_dkim && SpannableStringBuilder signers = new SpannableStringBuilderEx();
message.signedby != null && if (native_dkim && message.signedby != null) {
message.from != null &&
message.from.length == 1) {
// https://dmarcly.com/blog/what-is-dmarc-identifier-alignment-domain-alignment // https://dmarcly.com/blog/what-is-dmarc-identifier-alignment-domain-alignment
String domain = UriHelper.getEmailDomain(((InternetAddress) message.from[0]).getAddress()); List<Address> envelop = new ArrayList<>();
if (domain != null) if (message.return_path != null)
for (String signer : message.signedby.split(",")) envelop.addAll(Arrays.asList(message.return_path));
if (Objects.equals( if (message.from != null)
envelop.addAll(Arrays.asList(message.from));
for (String signer : message.signedby.split(",")) {
if (signers.length() > 0)
signers.append(", ");
int start = signers.length();
signers.append(signer);
for (Address a : envelop) {
String domain = UriHelper.getEmailDomain(((InternetAddress) a).getAddress());
if (domain != null && Objects.equals(
UriHelper.getRootDomain(context, signer), UriHelper.getRootDomain(context, signer),
UriHelper.getRootDomain(context, domain))) { UriHelper.getRootDomain(context, domain))) {
signers.setSpan(new ForegroundColorSpan(textColorLink), start, signers.length(), 0);
known_signer = true; known_signer = true;
break; break;
} }
}
}
} }
boolean show_signers = (native_dkim && boolean show_signers = (native_dkim &&
message.signedby != null && message.signedby != null &&
@ -2651,8 +2661,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvSignedByTitle.setVisibility(show_signers ? View.VISIBLE : View.GONE); tvSignedByTitle.setVisibility(show_signers ? View.VISIBLE : View.GONE);
tvSignedBy.setVisibility(show_signers ? View.VISIBLE : View.GONE); tvSignedBy.setVisibility(show_signers ? View.VISIBLE : View.GONE);
tvSignedBy.setTextColor(known_signer ? textColorTertiary : colorAccent); tvSignedBy.setText(signers);
tvSignedBy.setText(message.signedby == null ? null : message.signedby.replace(",", ", "));
tvSubmitterTitle.setVisibility(!TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE); tvSubmitterTitle.setVisibility(!TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE);
tvSubmitter.setVisibility(!TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE); tvSubmitter.setVisibility(!TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE);

@ -2386,7 +2386,9 @@ public class MessageHelper {
} }
try { try {
// https://serverfault.com/questions/591655/what-domain-name-should-appear-in-a-dkim-signature
String signer = kv.get("d"); String signer = kv.get("d");
String dns = kv.get("s") + "._domainkey." + signer; String dns = kv.get("s") + "._domainkey." + signer;
Log.i("DKIM lookup " + dns); Log.i("DKIM lookup " + dns);
DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, dns, "txt"); DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, dns, "txt");

Loading…
Cancel
Save