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

Commit fde3c6d7 authored by Robin Lee's avatar Robin Lee Committed by android-build-merger
Browse files

Merge "Clear VPN after Clear credentials if VPN is being established"

am: 4ce19f5c

Change-Id: Ib35450b0c389da1bbba311c05d1d0346eb612b9e
parents a3da6598 4ce19f5c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -5354,6 +5354,8 @@
    <!-- Toast message when there is no network connection to start VPN. [CHAR LIMIT=100] -->
    <!-- Toast message when there is no network connection to start VPN. [CHAR LIMIT=100] -->
    <string name="vpn_no_network">There is no network connection. Please try again later.</string>
    <string name="vpn_no_network">There is no network connection. Please try again later.</string>
    <!-- Toast message when VPN has disconnected automatically due to Clear credentials. [CHAR LIMIT=NONE] -->
    <string name="vpn_disconnected">Disconnected from VPN</string>
    <!-- Toast message when a certificate is missing. [CHAR LIMIT=100] -->
    <!-- Toast message when a certificate is missing. [CHAR LIMIT=100] -->
    <string name="vpn_missing_cert">A certificate is missing. Please edit the profile.</string>
    <string name="vpn_missing_cert">A certificate is missing. Please edit the profile.</string>
+10 −0
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ import android.widget.Toast;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.org.bouncycastle.asn1.ASN1InputStream;
import com.android.org.bouncycastle.asn1.ASN1InputStream;
import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import com.android.settings.vpn2.VpnUtils;


import sun.security.util.ObjectIdentifier;
import sun.security.util.ObjectIdentifier;
import sun.security.x509.AlgorithmId;
import sun.security.x509.AlgorithmId;
@@ -361,6 +362,7 @@ public final class CredentialStorage extends Activity {
            if (success) {
            if (success) {
                Toast.makeText(CredentialStorage.this,
                Toast.makeText(CredentialStorage.this,
                               R.string.credentials_erased, Toast.LENGTH_SHORT).show();
                               R.string.credentials_erased, Toast.LENGTH_SHORT).show();
                clearLegacyVpnIfEstablished();
            } else {
            } else {
                Toast.makeText(CredentialStorage.this,
                Toast.makeText(CredentialStorage.this,
                               R.string.credentials_not_erased, Toast.LENGTH_SHORT).show();
                               R.string.credentials_not_erased, Toast.LENGTH_SHORT).show();
@@ -369,6 +371,14 @@ public final class CredentialStorage extends Activity {
        }
        }
    }
    }


    private void clearLegacyVpnIfEstablished() {
        boolean isDone = VpnUtils.disconnectLegacyVpn(getApplicationContext());
        if (isDone) {
            Toast.makeText(CredentialStorage.this, R.string.vpn_disconnected,
                    Toast.LENGTH_SHORT).show();
        }
    }

    /**
    /**
     * Prompt for key guard configuration confirmation.
     * Prompt for key guard configuration confirmation.
     */
     */
+1 −3
Original line number Original line Diff line number Diff line
@@ -176,9 +176,7 @@ public class ConfigDialogFragment extends DialogFragment implements
        try {
        try {
            LegacyVpnInfo connected = mService.getLegacyVpnInfo(UserHandle.myUserId());
            LegacyVpnInfo connected = mService.getLegacyVpnInfo(UserHandle.myUserId());
            if (connected != null && profile.key.equals(connected.key)) {
            if (connected != null && profile.key.equals(connected.key)) {
                VpnUtils.clearLockdownVpn(getContext());
                VpnUtils.disconnectLegacyVpn(getContext());
                mService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN,
                        UserHandle.myUserId());
            }
            }
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to disconnect", e);
            Log.e(TAG, "Failed to disconnect", e);
+26 −0
Original line number Original line Diff line number Diff line
@@ -17,8 +17,15 @@ package com.android.settings.vpn2;


import android.content.Context;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.security.Credentials;
import android.security.Credentials;
import android.security.KeyStore;
import android.security.KeyStore;
import android.util.Log;

import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;


/**
/**
 * Utility functions for vpn.
 * Utility functions for vpn.
@@ -27,6 +34,8 @@ import android.security.KeyStore;
 */
 */
public class VpnUtils {
public class VpnUtils {


    private static final String TAG = "VpnUtils";

    public static String getLockdownVpn() {
    public static String getLockdownVpn() {
        final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN);
        final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN);
        return value == null ? null : new String(value);
        return value == null ? null : new String(value);
@@ -48,4 +57,21 @@ public class VpnUtils {
    public static boolean isVpnLockdown(String key) {
    public static boolean isVpnLockdown(String key) {
        return key.equals(getLockdownVpn());
        return key.equals(getLockdownVpn());
    }
    }

    public static boolean disconnectLegacyVpn(Context context) {
        try {
            int userId = context.getUserId();
            IConnectivityManager connectivityService = IConnectivityManager.Stub
                    .asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
            LegacyVpnInfo currentLegacyVpn = connectivityService.getLegacyVpnInfo(userId);
            if (currentLegacyVpn != null) {
                clearLockdownVpn(context);
                connectivityService.prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
                return true;
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Legacy VPN could not be disconnected", e);
        }
        return false;
    }
}
}