From: Tobias Brunner Date: Tue, 5 Mar 2019 16:53:57 +0000 (+0100) Subject: android: Make DNS servers configurable in the GUI X-Git-Tag: 5.8.0dr2~12^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8e7ad9ace8f20663862a44da58c9fdf41396e37b;p=thirdparty%2Fstrongswan.git android: Make DNS servers configurable in the GUI --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java index 75618b5648..ce7877e5a1 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Tobias Brunner + * Copyright (C) 2012-2019 Tobias Brunner * Copyright (C) 2012 Giuliano Grassi * Copyright (C) 2012 Ralf Sager * HSR Hochschule fuer Technik Rapperswil @@ -72,6 +72,8 @@ import org.strongswan.android.utils.Constants; import org.strongswan.android.utils.IPRangeSet; import org.strongswan.android.utils.Utils; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.SortedSet; @@ -138,6 +140,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity private EditText mEspProposal; private TextView mProfileIdLabel; private TextView mProfileId; + private MultiAutoCompleteTextView mDnsServers; + private TextInputLayoutHelper mDnsServersWrap; @Override public void onCreate(Bundle savedInstanceState) @@ -176,6 +180,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity mRemoteId = (MultiAutoCompleteTextView)findViewById(R.id.remote_id); mRemoteIdWrap = (TextInputLayoutHelper) findViewById(R.id.remote_id_wrap); + mDnsServers = (MultiAutoCompleteTextView)findViewById(R.id.dns_servers); + mDnsServersWrap = (TextInputLayoutHelper) findViewById(R.id.dns_servers_wrap); mMTU = (EditText)findViewById(R.id.mtu); mMTUWrap = (TextInputLayoutHelper) findViewById(R.id.mtu_wrap); mPort = (EditText)findViewById(R.id.port); @@ -573,7 +579,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity (flags != null && flags != 0) || (st != null && st != 0) || mProfile.getIncludedSubnets() != null || mProfile.getExcludedSubnets() != null || mProfile.getSelectedAppsHandling() != SelectedAppsHandling.SELECTED_APPS_DISABLE || - mProfile.getIkeProposal() != null || mProfile.getEspProposal() != null; + mProfile.getIkeProposal() != null || mProfile.getEspProposal() != null || + mProfile.getDnsServers() != null; } mShowAdvanced.setVisibility(!show ? View.VISIBLE : View.GONE); mAdvancedSettings.setVisibility(show ? View.VISIBLE : View.GONE); @@ -683,6 +690,11 @@ public class VpnProfileDetailActivity extends AppCompatActivity mEspProposalWrap.setError(getString(R.string.alert_text_no_proposal)); valid = false; } + if (!validateAddresses(mDnsServers)) + { + mDnsServersWrap.setError(getString(R.string.alert_text_no_ips)); + valid = false; + } return valid; } @@ -737,6 +749,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity mProfile.setIkeProposal(ike.isEmpty() ? null : ike); String esp = mEspProposal.getText().toString().trim(); mProfile.setEspProposal(esp.isEmpty() ? null : esp); + String dns = mDnsServers.getText().toString().trim(); + mProfile.setDnsServers(dns.isEmpty() ? null : dns); } /** @@ -772,6 +786,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity mSelectedApps = mProfile.getSelectedAppsSet(); mIkeProposal.setText(mProfile.getIkeProposal()); mEspProposal.setText(mProfile.getEspProposal()); + mDnsServers.setText(mProfile.getDnsServers()); mProfileId.setText(mProfile.getUUID().toString()); flags = mProfile.getFlags(); useralias = mProfile.getUserCertificateAlias(); @@ -884,6 +899,32 @@ public class VpnProfileDetailActivity extends AppCompatActivity return value.isEmpty() || IPRangeSet.fromString(value) != null; } + /** + * Check that the value in the given text box is a valid list of IP addresses + * + * @param view text box + */ + private boolean validateAddresses(EditText view) + { + String value = view.getText().toString().trim(); + if (value.isEmpty()) + { + return true; + } + for (String addr : value.split("\\s+")) + { + try + { + InetAddress.getByName(addr); + } + catch (UnknownHostException e) + { + return false; + } + } + return true; + } + /** * Check that the value in the given text box is a valid proposal * diff --git a/src/frontends/android/app/src/main/res/layout/profile_detail_view.xml b/src/frontends/android/app/src/main/res/layout/profile_detail_view.xml index 3cf0b552d4..671c58d67d 100644 --- a/src/frontends/android/app/src/main/res/layout/profile_detail_view.xml +++ b/src/frontends/android/app/src/main/res/layout/profile_detail_view.xml @@ -1,6 +1,6 @@