From b38d02061d6b1f3576d6c4a9be1018c41bb1f0e9 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 4 Dec 2019 23:55:17 -0500 Subject: [PATCH] Improve logging in RetrieveProfileJob. --- .../securesms/jobmanager/JobLogger.java | 2 +- .../persistence/ConstraintSpec.java | 2 +- .../persistence/DependencySpec.java | 2 +- .../jobmanager/persistence/JobSpec.java | 2 +- .../securesms/jobs/RetrieveProfileJob.java | 7 +++++- .../securesms/logsubmit/util/Scrubber.java | 24 +++++++++++++++++++ .../logsubmit/util/ScrubberTest.java | 13 ++++++++-- 7 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobLogger.java b/src/org/thoughtcrime/securesms/jobmanager/JobLogger.java index 9e664d1f53..5ccf1b6fd8 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/JobLogger.java +++ b/src/org/thoughtcrime/securesms/jobmanager/JobLogger.java @@ -22,6 +22,6 @@ public class JobLogger { : String.valueOf(job.getParameters().getLifespan()) + " ms"; return String.format(Locale.US, "[%s][%s]%s %s (Time Since Submission: %d ms, Lifespan: %s, Run Attempt: %d/%s)", - id, job.getClass().getSimpleName(), tag, event, timeSinceSubmission, lifespan, runAttempt, maxAttempts); + "JOB::" + id, job.getClass().getSimpleName(), tag, event, timeSinceSubmission, lifespan, runAttempt, maxAttempts); } } diff --git a/src/org/thoughtcrime/securesms/jobmanager/persistence/ConstraintSpec.java b/src/org/thoughtcrime/securesms/jobmanager/persistence/ConstraintSpec.java index 1dab10ae56..90d11cdc52 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/persistence/ConstraintSpec.java +++ b/src/org/thoughtcrime/securesms/jobmanager/persistence/ConstraintSpec.java @@ -38,6 +38,6 @@ public final class ConstraintSpec { @Override public @NonNull String toString() { - return String.format("jobSpecId: %s | factoryKey: %s", jobSpecId, factoryKey); + return String.format("jobSpecId: JOB::%s | factoryKey: %s", jobSpecId, factoryKey); } } diff --git a/src/org/thoughtcrime/securesms/jobmanager/persistence/DependencySpec.java b/src/org/thoughtcrime/securesms/jobmanager/persistence/DependencySpec.java index 2faea0485b..38d7e56d1d 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/persistence/DependencySpec.java +++ b/src/org/thoughtcrime/securesms/jobmanager/persistence/DependencySpec.java @@ -38,6 +38,6 @@ public final class DependencySpec { @Override public @NonNull String toString() { - return String.format("jobSpecId: %s | dependsOnJobSpecId: %s", jobId, dependsOnJobId); + return String.format("jobSpecId: JOB::%s | dependsOnJobSpecId: JOB::%s", jobId, dependsOnJobId); } } diff --git a/src/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java b/src/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java index d5f5cd5b3e..8e5c1637d0 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java +++ b/src/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java @@ -123,7 +123,7 @@ public final class JobSpec { @SuppressLint("DefaultLocale") @Override public @NonNull String toString() { - return String.format("id: %s | factoryKey: %s | queueKey: %s | createTime: %d | nextRunAttemptTime: %d | runAttempt: %d | maxAttempts: %d | maxBackoff: %d | maxInstances: %d | lifespan: %d | isRunning: %b | data: %s", + return String.format("id: JOB::%s | factoryKey: %s | queueKey: %s | createTime: %d | nextRunAttemptTime: %d | runAttempt: %d | maxAttempts: %d | maxBackoff: %d | maxInstances: %d | lifespan: %d | isRunning: %b | data: %s", id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, maxBackoff, maxInstances, lifespan, isRunning, serializedData); } } diff --git a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 588fe8650c..6ab3e8a80f 100644 --- a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -106,7 +106,7 @@ public class RetrieveProfileJob extends BaseJob { SignalServiceProfile profile = ProfileUtil.retrieveProfile(context, recipient); if (recipient.getProfileKey() == null) { - Log.i(TAG, "No profile key for available for " + recipient.getId()); + Log.i(TAG, "No profile key available for " + recipient.getId()); } else { Log.i(TAG, "Profile key available for " + recipient.getId()); } @@ -192,8 +192,13 @@ public class RetrieveProfileJob extends BaseJob { String plaintextProfileName = ProfileUtil.decryptName(profileKey, profileName); if (!Util.equals(plaintextProfileName, recipient.getProfileName())) { + Log.i(TAG, "Profile name updated. Writing new value."); DatabaseFactory.getRecipientDatabase(context).setProfileName(recipient.getId(), plaintextProfileName); } + + if (TextUtils.isEmpty(plaintextProfileName)) { + Log.i(TAG, "No profile name set."); + } } catch (InvalidCiphertextException | IOException e) { Log.w(TAG, e); } diff --git a/src/org/thoughtcrime/securesms/logsubmit/util/Scrubber.java b/src/org/thoughtcrime/securesms/logsubmit/util/Scrubber.java index d0daf8848f..33a077c831 100644 --- a/src/org/thoughtcrime/securesms/logsubmit/util/Scrubber.java +++ b/src/org/thoughtcrime/securesms/logsubmit/util/Scrubber.java @@ -17,6 +17,8 @@ package org.thoughtcrime.securesms.logsubmit.util; +import android.text.TextUtils; + import androidx.annotation.NonNull; import java.util.regex.Matcher; @@ -50,11 +52,18 @@ public final class Scrubber { private static final Pattern GROUP_ID_PATTERN = Pattern.compile("(__)(textsecure_group__![^\\s]+)([^\\s]{2})"); private static final String GROUP_ID_CENSOR = "...group..."; + /** + * The middle group will be censored. + */ + private static final Pattern UUID_PATTERN = Pattern.compile("(JOB::)?([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{10})([0-9a-f]{2})", Pattern.CASE_INSENSITIVE); + private static final String UUID_CENSOR = "********-****-****-****-**********"; + public static CharSequence scrub(@NonNull CharSequence in) { in = scrubE164(in); in = scrubEmail(in); in = scrubGroups(in); + in = scrubUuids(in); return in; } @@ -82,6 +91,21 @@ public final class Scrubber { .append(matcher.group(3))); } + private static CharSequence scrubUuids(@NonNull CharSequence in) { + return scrub(in, + UUID_PATTERN, + (matcher, output) -> { + if (matcher.group(1) != null && !matcher.group(1).isEmpty()) { + output.append(matcher.group(1)) + .append(matcher.group(2)) + .append(matcher.group(3)); + } else { + output.append(UUID_CENSOR) + .append(matcher.group(3)); + } + }); + } + private static CharSequence scrub(@NonNull CharSequence in, @NonNull Pattern pattern, @NonNull ProcessMatch processMatch) { final StringBuilder output = new StringBuilder(in.length()); final Matcher matcher = pattern.matcher(in); diff --git a/test/unitTest/java/org/thoughtcrime/securesms/logsubmit/util/ScrubberTest.java b/test/unitTest/java/org/thoughtcrime/securesms/logsubmit/util/ScrubberTest.java index 70eec72203..858156cce0 100644 --- a/test/unitTest/java/org/thoughtcrime/securesms/logsubmit/util/ScrubberTest.java +++ b/test/unitTest/java/org/thoughtcrime/securesms/logsubmit/util/ScrubberTest.java @@ -64,8 +64,17 @@ public final class ScrubberTest { { "A group id __textsecure_group__!abcdefg0987654321 surrounded with text", "A group id __...group...21 surrounded with text" }, - { "All patterns in a row __textsecure_group__!abcdefg1234567890 +1234567890123456 abc@def.com with text after", - "All patterns in a row __...group...90 +*************456 a...@... with text after" + { "a37cb654-c9e0-4c1e-93df-3d11ca3c97f4", + "********-****-****-****-**********f4" }, + + { "A UUID a37cb654-c9e0-4c1e-93df-3d11ca3c97f4 surrounded with text", + "A UUID ********-****-****-****-**********f4 surrounded with text" }, + + { "JOB::a37cb654-c9e0-4c1e-93df-3d11ca3c97f4", + "JOB::a37cb654-c9e0-4c1e-93df-3d11ca3c97f4" }, + + { "All patterns in a row __textsecure_group__!abcdefg1234567890 +1234567890123456 abc@def.com a37cb654-c9e0-4c1e-93df-3d11ca3c97f4 with text after", + "All patterns in a row __...group...90 +*************456 a...@... ********-****-****-****-**********f4 with text after" } });