From f52f0b665c84d5d007b76d6772994314b722b29e Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 3 Oct 2022 11:19:59 +0200 Subject: [PATCH] Decode Mandrill tracking links --- .../main/java/eu/faircode/email/UriHelper.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/UriHelper.java b/app/src/main/java/eu/faircode/email/UriHelper.java index 90f6fbf760..dad8a37cef 100644 --- a/app/src/main/java/eu/faircode/email/UriHelper.java +++ b/app/src/main/java/eu/faircode/email/UriHelper.java @@ -29,6 +29,8 @@ import androidx.annotation.NonNull; import androidx.core.net.MailTo; import androidx.core.util.PatternsCompat; +import org.json.JSONObject; + import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; @@ -306,6 +308,21 @@ public class UriHelper { Uri result = Uri.parse(uri.getQueryParameter("url")); changed = (result != null); url = (result == null ? uri : result); + } else if (uri.getPath() != null && + uri.getPath().startsWith("/track/click") && + uri.getQueryParameter("p") != null) { + try { + // Mandrill + String p = new String(Base64.decode(uri.getQueryParameter("p"), Base64.DEFAULT)); + JSONObject json = new JSONObject(p); + json = new JSONObject(json.getString("p")); + Uri result = Uri.parse(json.getString("url")); + changed = (result != null); + url = (result == null ? uri : result); + } catch (Throwable ex) { + Log.i(ex); + url = uri; + } } else if (uri.getQueryParameterNames().size() == 1) { // Sophos Email Appliance Uri result = null;