am c157aadf: Add error dialog when secrets are missing.

Merge commit 'c157aadf5682e417ace8e4cf3fba498e6953cad3'

* commit 'c157aadf5682e417ace8e4cf3fba498e6953cad3':
  Add error dialog when secrets are missing.
This commit is contained in:
Hung-ying Tyan
2009-07-29 16:45:25 -07:00
committed by Android Git Automerger
2 changed files with 80 additions and 0 deletions

View File

@@ -1861,6 +1861,7 @@ found in the list of installed applications.</string>
<string name="vpn_confirm_edit_profile_cancellation">Are you sure you want to discard the changes made to this profile?</string>
<string name="vpn_confirm_reconnect">Unable to connect to the network. Do you want to try again?</string>
<string name="vpn_unknown_server_dialog_msg">Server name cannot be resolved. Do you want to check your server name setting?</string>
<string name="vpn_secret_not_set_dialog_msg">One or more secrets are missing in this VPN configuration. Do you want to check your secret setting?</string>
<string name="vpn_auth_error_dialog_msg">The username or password you entered is incorrect. Do you want to try again?</string>
<!-- VPN type selection activity title -->

View File

@@ -28,6 +28,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.net.vpn.IVpnService;
import android.net.vpn.L2tpIpsecProfile;
import android.net.vpn.L2tpIpsecPskProfile;
import android.net.vpn.L2tpProfile;
import android.net.vpn.VpnManager;
@@ -46,6 +47,7 @@ import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
import android.security.CertTool;
import android.security.Keystore;
import android.text.TextUtils;
import android.util.Log;
@@ -106,6 +108,7 @@ public class VpnSettings extends PreferenceActivity implements
private static final int DIALOG_RECONNECT = 2;
private static final int DIALOG_AUTH_ERROR = 3;
private static final int DIALOG_UNKNOWN_SERVER = 4;
private static final int DIALOG_SECRET_NOT_SET = 5;
private static final int NO_ERROR = 0;
@@ -204,6 +207,9 @@ public class VpnSettings extends PreferenceActivity implements
case DIALOG_UNKNOWN_SERVER:
return createUnknownServerDialog();
case DIALOG_SECRET_NOT_SET:
return createSecretNotSetDialog();
default:
return super.onCreateDialog(id);
}
@@ -252,6 +258,19 @@ public class VpnSettings extends PreferenceActivity implements
.create();
}
private Dialog createSecretNotSetDialog() {
return createCommonDialogBuilder()
.setMessage(R.string.vpn_secret_not_set_dialog_msg)
.setPositiveButton(R.string.vpn_yes_button,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int w) {
VpnProfile p = mConnectingActor.getProfile();
startVpnEditor(p);
}
})
.create();
}
private AlertDialog.Builder createCommonDialogBuilder() {
return new AlertDialog.Builder(this)
.setTitle(android.R.string.dialog_alert_title)
@@ -639,6 +658,7 @@ public class VpnSettings extends PreferenceActivity implements
mConnectingActor = getActor(p);
mActiveProfile = p;
if (!checkSecrets(p)) return;
if (mConnectingActor.isConnectDialogNeeded()) {
showDialog(DIALOG_CONNECT);
} else {
@@ -858,6 +878,65 @@ public class VpnSettings extends PreferenceActivity implements
return NAMESPACE_VPN + "_" + keyName;
}
private boolean checkSecrets(VpnProfile p) {
Keystore ks = Keystore.getInstance();
HashSet<String> secretSet = new HashSet<String>();
boolean secretMissing = false;
if (p instanceof L2tpIpsecProfile) {
L2tpIpsecProfile certProfile = (L2tpIpsecProfile) p;
CertTool certTool = CertTool.getInstance();
Collections.addAll(secretSet, certTool.getAllCaCertificateKeys());
String cert = certProfile.getCaCertificate();
if (TextUtils.isEmpty(cert) || !secretSet.contains(cert)) {
certProfile.setCaCertificate(null);
secretMissing = true;
}
secretSet.clear();
Collections.addAll(secretSet, certTool.getAllUserCertificateKeys());
cert = certProfile.getUserCertificate();
if (TextUtils.isEmpty(cert) || !secretSet.contains(cert)) {
certProfile.setUserCertificate(null);
secretMissing = true;
}
}
secretSet.clear();
Collections.addAll(secretSet, ks.listKeys(NAMESPACE_VPN));
if (p instanceof L2tpIpsecPskProfile) {
L2tpIpsecPskProfile pskProfile = (L2tpIpsecPskProfile) p;
String presharedKey = pskProfile.getPresharedKey();
String keyName = KEY_PREFIX_IPSEC_PSK + p.getId();
if (TextUtils.isEmpty(presharedKey)
|| !secretSet.contains(keyName)) {
pskProfile.setPresharedKey(null);
secretMissing = true;
}
}
if (p instanceof L2tpProfile) {
L2tpProfile l2tpProfile = (L2tpProfile) p;
if (l2tpProfile.isSecretEnabled()) {
String secret = l2tpProfile.getSecretString();
String keyName = KEY_PREFIX_L2TP_SECRET + p.getId();
if (TextUtils.isEmpty(secret)
|| !secretSet.contains(keyName)) {
l2tpProfile.setSecretString(null);
secretMissing = true;
}
}
}
if (secretMissing) {
showDialog(DIALOG_SECRET_NOT_SET);
return false;
} else {
return true;
}
}
private void processSecrets(VpnProfile p) {
Keystore ks = Keystore.getInstance();
switch (p.getType()) {