Refactoring

This commit is contained in:
M66B 2023-02-14 08:05:09 +01:00
parent cc9c04641e
commit 1ab550206e
1 changed files with 27 additions and 26 deletions

View File

@ -2044,70 +2044,71 @@ public class MessageHelper {
Log.i("DKIM headers=" + hs); Log.i("DKIM headers=" + hs);
boolean from = false; boolean from = false;
List<String> _h = new ArrayList<>(); List<String> keys = new ArrayList<>();
if (hs != null) if (hs != null)
for (String key : hs.split(":")) { for (String key : hs.split(":")) {
_h.add(key.trim()); keys.add(key.trim());
from = (from || "from".equalsIgnoreCase(key.trim())); from = (from || "from".equalsIgnoreCase(key.trim()));
} }
if (!from) if (!from)
throw new IllegalArgumentException("from missing: " + hs); throw new IllegalArgumentException("from missing: " + hs);
_h.add("DKIM-Signature"); keys.add("DKIM-Signature");
Map<String, Integer> index = new Hashtable<>(); Map<String, Integer> index = new Hashtable<>();
for (String n : _h) { for (String key : keys) {
// https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4.2 // https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4.2
String _n = n.toLowerCase(Locale.ROOT); String _key = key.toLowerCase(Locale.ROOT);
Integer idx = index.get(_n); Integer idx = index.get(_key);
idx = (idx == null ? 1 : idx + 1); 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} ? new String[]{header}
: amessage.getHeader(n)); : amessage.getHeader(key));
if (h == null || idx > h.length) { if (values == null || idx > values.length) {
// https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4 // 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; continue;
} }
String v = h[h.length - idx]; String value = values[values.length - idx];
if ("DKIM-Signature".equals(n)) { if ("DKIM-Signature".equals(key)) {
int b = v.lastIndexOf("b="); int b = value.lastIndexOf("b=");
int s = v.indexOf(";", b + 2); int s = value.indexOf(";", b + 2);
v = v.substring(0, b + 2) + (s < 0 ? "" : v.substring(s)); value = value.substring(0, b + 2) + (s < 0 ? "" : value.substring(s));
} else } else
Log.i("DKIM " + n + "=" + v.replaceAll("\\r?\\n", "|")); Log.i("DKIM " + key + "=" + value.replaceAll("\\r?\\n", "|"));
if ("simple".equals(c[0])) { if ("simple".equals(c[0])) {
if ("DKIM-Signature".equals(n)) if ("DKIM-Signature".equals(key))
head.append(n).append(": ").append(v); head.append(key).append(": ").append(value);
else { else {
// Find original header/name // Find original header/name
Enumeration<Header> oheaders = amessage.getAllHeaders(); Enumeration<Header> oheaders = amessage.getAllHeaders();
while (oheaders.hasMoreElements()) { while (oheaders.hasMoreElements()) {
Header oheader = oheaders.nextElement(); Header oheader = oheaders.nextElement();
if (n.equalsIgnoreCase(oheader.getName())) if (key.equalsIgnoreCase(oheader.getName()))
head.append(oheader.getName()).append(": ") head.append(oheader.getName()).append(": ")
.append(oheader.getValue()); .append(oheader.getValue());
} }
} }
} else if ("relaxed".equals(c[0])) { } else if ("relaxed".equals(c[0])) {
v = MimeUtility.unfold(v); value = MimeUtility.unfold(value);
head.append(_n).append(':') head.append(_key).append(':')
.append(v.replaceAll("\\s+", " ").trim()); .append(value.replaceAll("\\s+", " ").trim());
} else } else
throw new IllegalArgumentException(c[0]); throw new IllegalArgumentException(c[0]);
if (!"DKIM-Signature".equals(n)) if (!"DKIM-Signature".equals(key))
head.append("\r\n"); head.append("\r\n");
} }
Log.i("DKIM head=" + head.toString().replace("\r\n", "|")); Log.i("DKIM head=" + head.toString().replace("\r\n", "|"));
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
Helper.copy(amessage.getRawInputStream(), bos); 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 ("simple".equals(c[c.length > 1 ? 1 : 0])) {
if (TextUtils.isEmpty(body)) if (TextUtils.isEmpty(body))
body = "\r\n"; body = "\r\n";
@ -2133,7 +2134,7 @@ public class MessageHelper {
Log.i("DKIM body=" + body.replace("\r\n", "|")); 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")); Log.i("DKIM bh=" + Base64.encodeToString(bh, Base64.NO_WRAP) + "/" + kv.get("bh"));
String pubkey = dk.get("p"); String pubkey = dk.get("p");