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

Commit 995e6a3a authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Remove SIP/TEL URIs in PIDF XML for logging

Fixes: 188434774
Test: ImsCommonTests
Change-Id: I9887abaa10d8020d06cd679f0657b3cea5d731a9
parent 3bb2ba0c
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.ims.rcs.uce.presence.publish;

import android.annotation.NonNull;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -948,7 +949,13 @@ public class PublishControllerImpl implements PublishController {
        pw.println(mPublishStateUpdatedTime);
        pw.println("Last PIDF XML:");
        pw.increaseIndent();
        if (Build.IS_ENG) {
            pw.println(mPidfXml);
        } else if (Build.IS_DEBUGGABLE) {
            pw.println(PublishUtils.removeNumbersFromUris(mPidfXml));
        } else {
            pw.println(mPidfXml != null ? "***" : "null");
        }
        pw.decreaseIndent();

        if (mPublishProcessor != null) {
+13 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import com.android.ims.rcs.uce.util.UceUtils;
/**
 * The util class of publishing device's capabilities.
 */
class PublishUtils {
public class PublishUtils {
    private static final String LOG_TAG = UceUtils.getLogPrefix() + "PublishUtils";

    private static final String SCHEME_SIP = "sip";
@@ -53,6 +53,18 @@ class PublishUtils {
        }
    }

    /**
     * Find all instances of sip/sips/tel URIs containing PII and replace them.
     * <p>
     * This is used for removing PII in logging.
     * @param source The source string to remove the phone numbers from.
     * @return A version of the given string with SIP URIs removed.
     */
    public static String removeNumbersFromUris(String source) {
        // Replace only the number portion in the sip/sips/tel URI
        return source.replaceAll("(?:sips?|tel):(\\+?[\\d\\-]+)", "[removed]");
    }

    private static Uri getContactUriFromIsim(TelephonyManager telephonyManager) {
        // Get the home network domain and the array of the public user identities
        String domain = telephonyManager.getIsimDomain();
+43 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package com.android.ims.rcs.uce.presence.publish;

import static com.android.ims.rcs.uce.presence.publish.PublishController.PUBLISH_TRIGGER_RETRY;
import static com.android.ims.rcs.uce.presence.publish.PublishController.PUBLISH_TRIGGER_VT_SETTING_CHANGE;

import static junit.framework.Assert.assertFalse;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -272,6 +275,46 @@ public class PublishControllerImplTest extends ImsTestBase {
        verify(mPublishProcessor).doPublish(PUBLISH_TRIGGER_VT_SETTING_CHANGE);
    }

    @Test
    @SmallTest
    public void testRemoveNumber() {
        // Contrived example, usually formatting of URIs will be consistent in doc.
        final String testString = "<?xml version='1.0' encoding='utf-8' standalone='yes' "
                + "?><presence entity=\"sip:15555551212@example.com\" "
                + "xmlns=\"urn:ietf:params:xml:ns:pidf\" "
                + "xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\" "
                + "xmlns:caps=\"urn:ietf:params:xml:ns:pidf:caps\"><tuple "
                + "id=\"tid0\"><status><basic>open</basic></status><op:service-description><op"
                + ":service-id>org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcse"
                + ".dp</op:service-id><op:version>1.0</op:version><op:description>Capabilities "
                + "Discovery Service</op:description></op:service-description><contact>sips"
                + ":15555551212@example.com</contact></tuple><tuple "
                + "id=\"tid1\"><status><basic>open</basic></status><op:service-description><op"
                + ":service-id>org.3gpp.urn:urn-7:3gpp-service.ims.icsi"
                + ".mmtel</op:service-id><op:version>1.0</op:version><op:description>Voice and "
                + "Video Service</op:description></op:service-description><caps:servcaps><caps"
                + ":audio>true</caps:audio><caps:video>true</caps:video><caps:duplex><caps"
                + ":supported><caps:full /></caps:supported></caps:duplex></caps:servcaps"
                + "><contact>tel:15555551212@example.com</contact></tuple><tuple "
                + "id=\"tid2\"><status><basic>open</basic></status><op:service-description><op"
                + ":service-id>org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs"
                + ".geopush</op:service-id><op:version>1"
                + ".0</op:version></op:service-description><contact>sip:1-555-555-1212@example.com"
                + "</contact></tuple><tuple "
                + "id=\"tid3\"><status><basic>open</basic></status><op:service-description><op"
                + ":service-id>org.openmobilealliance:File-Transfer-HTTP</op:service-id><op"
                + ":version>1.0</op:version></op:service-description><contact>tel:1-555-555-1212@"
                + "example.com</contact></tuple><tuple "
                + "id=\"tid4\"><status><basic>open</basic></status><op:service-description><op"
                + ":service-id>org.openmobilealliance:ChatSession</op:service-id><op:version>2"
                + ".0</op:version></op:service-description><contact>sip:+15555551212@example.com"
                + "</contact></tuple></presence>";
        String result = PublishUtils.removeNumbersFromUris(testString);
        // only check for substrings of the full number and variations.
        assertFalse("still contained 5555551212: " + testString, result.contains("5555551212"));
        assertFalse("still contained 555-555-1212: " + testString, result.contains("555-555-1212"));
    }

    private PublishControllerImpl createPublishController() {
        PublishControllerImpl publishController = new PublishControllerImpl(mContext, mSubId,
                mUceCtrlCallback, Looper.getMainLooper(), mDeviceCapListenerFactory,