From: Tobias Brunner Date: Fri, 1 Sep 2017 17:26:52 +0000 (+0200) Subject: android: Add option to clear cached CRLs X-Git-Tag: 5.6.1dr2~10^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e39240a3e72b22093165f530134a8b1cbdccd71;p=thirdparty%2Fstrongswan.git android: Add option to clear cached CRLs --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java index a7006cd491..f2a9eaaf8d 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java @@ -36,6 +36,7 @@ import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatDialogFragment; +import android.text.format.Formatter; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -54,12 +55,17 @@ import org.strongswan.android.logic.VpnStateService; import org.strongswan.android.logic.VpnStateService.State; import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedListener; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + public class MainActivity extends AppCompatActivity implements OnVpnProfileSelectedListener { public static final String CONTACT_EMAIL = "android@strongswan.org"; public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE"; public static final String DISCONNECT = "org.strongswan.android.action.DISCONNECT"; public static final String EXTRA_VPN_PROFILE_ID = "org.strongswan.android.VPN_PROFILE_ID"; + public static final String EXTRA_CRL_LIST = "org.strongswan.android.CRL_LIST"; /** * Use "bring your own device" (BYOD) features */ @@ -190,6 +196,9 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec Intent certIntent = new Intent(this, TrustedCertificatesActivity.class); startActivity(certIntent); return true; + case R.id.menu_crl_cache: + clearCRLs(); + return true; case R.id.menu_show_log: Intent logIntent = new Intent(this, LogActivity.class); startActivity(logIntent); @@ -367,6 +376,36 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec } } + /** + * Ask the user whether to clear the CRL cache. + */ + private void clearCRLs() + { + final String FILE_PREFIX = "crl-"; + ArrayList list = new ArrayList<>(); + + for (String file : fileList()) + { + if (file.startsWith(FILE_PREFIX)) + { + list.add(file); + } + } + if (list.size() == 0) + { + Toast.makeText(this, R.string.clear_crl_cache_msg_none, Toast.LENGTH_SHORT).show(); + return; + } + removeFragmentByTag(DIALOG_TAG); + + Bundle args = new Bundle(); + args.putStringArrayList(EXTRA_CRL_LIST, list); + + CRLCacheDialog dialog = new CRLCacheDialog(); + dialog.setArguments(args); + dialog.show(this.getSupportFragmentManager(), DIALOG_TAG); + } + /** * Class that loads the cached CA certificates. */ @@ -551,4 +590,49 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec }).create(); } } + + /** + * Confirmation dialog to clear CRL cache + */ + public static class CRLCacheDialog extends AppCompatDialogFragment + { + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + final List list = getArguments().getStringArrayList(EXTRA_CRL_LIST); + String size; + long s = 0; + + for (String file : list) + { + File crl = getActivity().getFileStreamPath(file); + s += crl.length(); + } + size = Formatter.formatFileSize(getActivity(), s); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.clear_crl_cache_title) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int which) + { + dismiss(); + } + }) + .setPositiveButton(R.string.clear, new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int whichButton) + { + for (String file : list) + { + getActivity().deleteFile(file); + } + } + }); + builder.setMessage(getActivity().getResources().getQuantityString(R.plurals.clear_crl_cache_msg, list.size(), list.size(), size)); + return builder.create(); + } + } } diff --git a/src/frontends/android/app/src/main/res/menu/main.xml b/src/frontends/android/app/src/main/res/menu/main.xml index 3c8da084bc..48a541b3d5 100644 --- a/src/frontends/android/app/src/main/res/menu/main.xml +++ b/src/frontends/android/app/src/main/res/menu/main.xml @@ -1,7 +1,7 @@ Status: diff --git a/src/frontends/android/app/src/main/res/values-pl/strings.xml b/src/frontends/android/app/src/main/res/values-pl/strings.xml index 424837adff..c6a8b53f33 100644 --- a/src/frontends/android/app/src/main/res/values-pl/strings.xml +++ b/src/frontends/android/app/src/main/res/values-pl/strings.xml @@ -129,6 +129,14 @@ Import certificate Certificate successfully imported Failed to import certificate + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear Status: diff --git a/src/frontends/android/app/src/main/res/values-ru/strings.xml b/src/frontends/android/app/src/main/res/values-ru/strings.xml index a537720149..b47c4993a0 100644 --- a/src/frontends/android/app/src/main/res/values-ru/strings.xml +++ b/src/frontends/android/app/src/main/res/values-ru/strings.xml @@ -126,6 +126,14 @@ Import certificate Certificate successfully imported Failed to import certificate + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear Статус: diff --git a/src/frontends/android/app/src/main/res/values-ua/strings.xml b/src/frontends/android/app/src/main/res/values-ua/strings.xml index 4d3600952e..69258b0480 100644 --- a/src/frontends/android/app/src/main/res/values-ua/strings.xml +++ b/src/frontends/android/app/src/main/res/values-ua/strings.xml @@ -127,6 +127,14 @@ Import certificate Certificate successfully imported Failed to import certificate + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear Статус: diff --git a/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml b/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml index 606bd27837..a88e7aa9e5 100644 --- a/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml @@ -126,6 +126,14 @@ 导入证书 证书已成功被导入 证书导入失败 + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear 状态: diff --git a/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml b/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml index 52f21f8da1..8ef0feb2ee 100644 --- a/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml @@ -126,6 +126,14 @@ 導入憑證 憑證已經成功匯入 憑證匯入失敗 + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear 狀態: diff --git a/src/frontends/android/app/src/main/res/values/strings.xml b/src/frontends/android/app/src/main/res/values/strings.xml index 4ee6be3900..a02de6b1ce 100644 --- a/src/frontends/android/app/src/main/res/values/strings.xml +++ b/src/frontends/android/app/src/main/res/values/strings.xml @@ -129,6 +129,14 @@ Import certificate Certificate successfully imported Failed to import certificate + CRL cache + Clear CRL cache? + The CRL cache is empty + + The CRL cache contains %1$d file (%2$s). + The CRL cache contains %1$d files (%2$s). + + Clear Status: