Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd74d53f authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Add support for Telecom logging to obfuscate string phone numbers.

Test: Manual
Bug: 117472746
Change-Id: I48e29fd9a6ab1d41fdefb55393c7c326ec72a87f
parent cefdee85
Loading
Loading
Loading
Loading
+29 −13
Original line number Original line Diff line number Diff line
@@ -18,7 +18,6 @@ package android.telecom;


import android.content.Context;
import android.content.Context;
import android.net.Uri;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Build;
import android.telecom.Logging.EventManager;
import android.telecom.Logging.EventManager;
import android.telecom.Logging.Session;
import android.telecom.Logging.Session;
@@ -29,8 +28,6 @@ import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.IndentingPrintWriter;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.IllegalFormatException;
import java.util.IllegalFormatException;
import java.util.Locale;
import java.util.Locale;


@@ -373,6 +370,12 @@ public class Log {
        return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
        return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
    }
    }


    /**
     * Generates an obfuscated string for a calling handle in {@link Uri} format, or a raw phone
     * phone number in {@link String} format.
     * @param pii The information to obfuscate.
     * @return The obfuscated string.
     */
    public static String piiHandle(Object pii) {
    public static String piiHandle(Object pii) {
        if (pii == null || VERBOSE) {
        if (pii == null || VERBOSE) {
            return String.valueOf(pii);
            return String.valueOf(pii);
@@ -389,16 +392,7 @@ public class Log {


            String textToObfuscate = uri.getSchemeSpecificPart();
            String textToObfuscate = uri.getSchemeSpecificPart();
            if (PhoneAccount.SCHEME_TEL.equals(scheme)) {
            if (PhoneAccount.SCHEME_TEL.equals(scheme)) {
                int numDigitsToObfuscate = getDialableCount(textToObfuscate)
                obfuscatePhoneNumber(sb, textToObfuscate);
                        - NUM_DIALABLE_DIGITS_TO_LOG;
                for (int i = 0; i < textToObfuscate.length(); i++) {
                    char c = textToObfuscate.charAt(i);
                    boolean isDialable = PhoneNumberUtils.isDialable(c);
                    if (isDialable) {
                        numDigitsToObfuscate--;
                    }
                    sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c);
                }
            } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) {
            } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) {
                for (int i = 0; i < textToObfuscate.length(); i++) {
                for (int i = 0; i < textToObfuscate.length(); i++) {
                    char c = textToObfuscate.charAt(i);
                    char c = textToObfuscate.charAt(i);
@@ -410,11 +404,33 @@ public class Log {
            } else {
            } else {
                sb.append(pii(pii));
                sb.append(pii(pii));
            }
            }
        } else if (pii instanceof String) {
            String number = (String) pii;
            obfuscatePhoneNumber(sb, number);
        }
        }


        return sb.toString();
        return sb.toString();
    }
    }


    /**
     * Obfuscates a phone number, allowing NUM_DIALABLE_DIGITS_TO_LOG digits to be exposed for the
     * phone number.
     * @param sb String buffer to write obfuscated number to.
     * @param phoneNumber The number to obfuscate.
     */
    private static void obfuscatePhoneNumber(StringBuilder sb, String phoneNumber) {
        int numDigitsToObfuscate = getDialableCount(phoneNumber)
                - NUM_DIALABLE_DIGITS_TO_LOG;
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c = phoneNumber.charAt(i);
            boolean isDialable = PhoneNumberUtils.isDialable(c);
            if (isDialable) {
                numDigitsToObfuscate--;
            }
            sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c);
        }
    }

    /**
    /**
     * Determines the number of dialable characters in a string.
     * Determines the number of dialable characters in a string.
     * @param toCount The string to count dialable characters in.
     * @param toCount The string to count dialable characters in.