From 1ab550206e275798ff7edfa9104b7e1e7f31f7b1 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 14 Feb 2023 08:05:09 +0100 Subject: [PATCH] Refactoring --- .../java/eu/faircode/email/MessageHelper.java | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index b72c50a80f..525af2c23c 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2044,70 +2044,71 @@ public class MessageHelper { Log.i("DKIM headers=" + hs); boolean from = false; - List _h = new ArrayList<>(); + List keys = new ArrayList<>(); if (hs != null) for (String key : hs.split(":")) { - _h.add(key.trim()); + keys.add(key.trim()); from = (from || "from".equalsIgnoreCase(key.trim())); } if (!from) throw new IllegalArgumentException("from missing: " + hs); - _h.add("DKIM-Signature"); + keys.add("DKIM-Signature"); Map index = new Hashtable<>(); - for (String n : _h) { + for (String key : keys) { // https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4.2 - String _n = n.toLowerCase(Locale.ROOT); - Integer idx = index.get(_n); + String _key = key.toLowerCase(Locale.ROOT); + Integer idx = index.get(_key); idx = (idx == null ? 1 : idx + 1); - index.put(_n, idx); + index.put(_key, idx); - String[] h = ("DKIM-Signature".equals(n) + String[] values = ("DKIM-Signature".equals(key) ? new String[]{header} - : amessage.getHeader(n)); - if (h == null || idx > h.length) { + : amessage.getHeader(key)); + if (values == null || idx > values.length) { // https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4 - Log.i("DKIM missing header=" + n + "[" + idx + "/" + (h == null ? null : h.length) + "]"); + Log.i("DKIM missing header=" + + key + "[" + idx + "/" + (values == null ? null : values.length) + "]"); continue; } - String v = h[h.length - idx]; - if ("DKIM-Signature".equals(n)) { - int b = v.lastIndexOf("b="); - int s = v.indexOf(";", b + 2); - v = v.substring(0, b + 2) + (s < 0 ? "" : v.substring(s)); + String value = values[values.length - idx]; + if ("DKIM-Signature".equals(key)) { + int b = value.lastIndexOf("b="); + int s = value.indexOf(";", b + 2); + value = value.substring(0, b + 2) + (s < 0 ? "" : value.substring(s)); } else - Log.i("DKIM " + n + "=" + v.replaceAll("\\r?\\n", "|")); + Log.i("DKIM " + key + "=" + value.replaceAll("\\r?\\n", "|")); if ("simple".equals(c[0])) { - if ("DKIM-Signature".equals(n)) - head.append(n).append(": ").append(v); + if ("DKIM-Signature".equals(key)) + head.append(key).append(": ").append(value); else { // Find original header/name Enumeration
oheaders = amessage.getAllHeaders(); while (oheaders.hasMoreElements()) { Header oheader = oheaders.nextElement(); - if (n.equalsIgnoreCase(oheader.getName())) + if (key.equalsIgnoreCase(oheader.getName())) head.append(oheader.getName()).append(": ") .append(oheader.getValue()); } } } else if ("relaxed".equals(c[0])) { - v = MimeUtility.unfold(v); - head.append(_n).append(':') - .append(v.replaceAll("\\s+", " ").trim()); + value = MimeUtility.unfold(value); + head.append(_key).append(':') + .append(value.replaceAll("\\s+", " ").trim()); } else throw new IllegalArgumentException(c[0]); - if (!"DKIM-Signature".equals(n)) + if (!"DKIM-Signature".equals(key)) head.append("\r\n"); } Log.i("DKIM head=" + head.toString().replace("\r\n", "|")); ByteArrayOutputStream bos = new ByteArrayOutputStream(); Helper.copy(amessage.getRawInputStream(), bos); - String body = bos.toString(); // TODO: charset + String body = bos.toString(); // TODO: charset? if ("simple".equals(c[c.length > 1 ? 1 : 0])) { if (TextUtils.isEmpty(body)) body = "\r\n"; @@ -2133,7 +2134,7 @@ public class MessageHelper { Log.i("DKIM body=" + body.replace("\r\n", "|")); - byte[] bh = MessageDigest.getInstance(halgo).digest(body.getBytes()); // TODO: charset + byte[] bh = MessageDigest.getInstance(halgo).digest(body.getBytes()); // TODO: charset? Log.i("DKIM bh=" + Base64.encodeToString(bh, Base64.NO_WRAP) + "/" + kv.get("bh")); String pubkey = dk.get("p");