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

Commit 1e11d006 authored by Roshan Pius's avatar Roshan Pius
Browse files

WifiEnterpriseConfig: New copy method to ignore masked password

To ignore the masked password sent by apps, add a new copy-constructor
equivalent method which will ignore the masked password.

Bug: 62893342
Test: Unit tests.
Test: Manual tests with the linked CL.
Test: Regression tests.

Change-Id: Ib208dcd94a888e07a9b3dc0442620233ea7791e5
parent 16503a8f
Loading
Loading
Loading
Loading
+36 −2
Original line number Original line Diff line number Diff line
@@ -156,9 +156,20 @@ public class WifiEnterpriseConfig implements Parcelable {


    }
    }


    /** Copy constructor */
    /**
    public WifiEnterpriseConfig(WifiEnterpriseConfig source) {
     * Copy over the contents of the source WifiEnterpriseConfig object over to this object.
     *
     * @param source Source WifiEnterpriseConfig object.
     * @param ignoreMaskedPassword Set to true to ignore masked password field, false otherwise.
     * @param mask if |ignoreMaskedPassword| is set, check if the incoming password field is set
     *             to this value.
     */
    private void copyFrom(WifiEnterpriseConfig source, boolean ignoreMaskedPassword, String mask) {
        for (String key : source.mFields.keySet()) {
        for (String key : source.mFields.keySet()) {
            if (ignoreMaskedPassword && key.equals(PASSWORD_KEY)
                    && TextUtils.equals(source.mFields.get(key), mask)) {
                continue;
            }
            mFields.put(key, source.mFields.get(key));
            mFields.put(key, source.mFields.get(key));
        }
        }
        if (source.mCaCerts != null) {
        if (source.mCaCerts != null) {
@@ -178,6 +189,29 @@ public class WifiEnterpriseConfig implements Parcelable {
        mPhase2Method = source.mPhase2Method;
        mPhase2Method = source.mPhase2Method;
    }
    }


    /**
     * Copy constructor.
     * This copies over all the fields verbatim (does not ignore masked password fields).
     *
     * @param source Source WifiEnterpriseConfig object.
     */
    public WifiEnterpriseConfig(WifiEnterpriseConfig source) {
        copyFrom(source, false, "");
    }

    /**
     * Copy fields from the provided external WifiEnterpriseConfig.
     * This is needed to handle the WifiEnterpriseConfig objects which were sent by apps with the
     * password field masked.
     *
     * @param externalConfig External WifiEnterpriseConfig object.
     * @param mask String mask to compare against.
     * @hide
     */
    public void copyFromExternal(WifiEnterpriseConfig externalConfig, String mask) {
        copyFrom(externalConfig, true, convertToQuotedString(mask));
    }

    @Override
    @Override
    public int describeContents() {
    public int describeContents() {
        return 0;
        return 0;
+24 −1
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;


@@ -316,15 +317,37 @@ public class WifiEnterpriseConfigTest {
        assertEquals("\"auth=AKA'\"", getSupplicantPhase2Method());
        assertEquals("\"auth=AKA'\"", getSupplicantPhase2Method());
    }
    }


    /** Verfies that the copy constructor preseves the inner method information. */
    /**
     * Verifies that the copy constructor preseves both the masked password and inner method
     * information.
     */
    @Test
    @Test
    public void copyConstructor() {
    public void copyConstructor() {
        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
        enterpriseConfig.setPassword("*");
        enterpriseConfig.setEapMethod(Eap.TTLS);
        enterpriseConfig.setEapMethod(Eap.TTLS);
        enterpriseConfig.setPhase2Method(Phase2.GTC);
        enterpriseConfig.setPhase2Method(Phase2.GTC);
        mEnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
        mEnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
        assertEquals("TTLS", getSupplicantEapMethod());
        assertEquals("TTLS", getSupplicantEapMethod());
        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
        assertEquals("*", mEnterpriseConfig.getPassword());
    }

    /**
     * Verifies that the copy from external ignores masked passwords and preserves the
     * inner method information.
     */
    @Test
    public void copyFromExternal() {
        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
        enterpriseConfig.setPassword("*");
        enterpriseConfig.setEapMethod(Eap.TTLS);
        enterpriseConfig.setPhase2Method(Phase2.GTC);
        mEnterpriseConfig = new WifiEnterpriseConfig();
        mEnterpriseConfig.copyFromExternal(enterpriseConfig, "*");
        assertEquals("TTLS", getSupplicantEapMethod());
        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
        assertNotEquals("*", mEnterpriseConfig.getPassword());
    }
    }


    /** Verfies that parceling a WifiEnterpriseConfig preseves method information. */
    /** Verfies that parceling a WifiEnterpriseConfig preseves method information. */