android: Add option to clear cached CRLs

This commit is contained in:
Tobias Brunner
2017-09-04 10:41:29 +02:00
parent 0bebbae9e3
commit 6e39240a3e
9 changed files with 146 additions and 1 deletions
@@ -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 = "[email protected]";
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<String> 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<String> 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();
}
}
}
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2012-2017 Tobias Brunner
Hochschule fuer Technik Rapperswil
HSR Hochschule fuer Technik Rapperswil
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -26,6 +26,11 @@
android:title="@string/trusted_certs_title"
app:showAsAction="withText" />
<item
android:id="@+id/menu_crl_cache"
android:title="@string/crl_cache"
app:showAsAction="withText" />
<item
android:id="@+id/menu_show_log"
android:title="@string/show_log"
@@ -129,6 +129,14 @@
<string name="import_certificate">Zertifikat importieren</string>
<string name="cert_imported_successfully">Zertifikat erfolgreich importiert</string>
<string name="cert_import_failed">Zertifikat-Import fehlgeschlagen</string>
<string name="crl_cache">CRL-Cache</string>
<string name="clear_crl_cache_title">CRL-Cache leeren?</string>
<string name="clear_crl_cache_msg_none">Der CRL-Cache ist leer</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">Der CRL-Cache enthält %1$d Datei (%2$s).</item>
<item quantity="other">Der CRL-Cache enthält %1$d Dateien (%2$s).</item>
</plurals>
<string name="clear">Leeren</string>
<!-- VPN state fragment -->
<string name="state_label">Status:</string>
@@ -129,6 +129,14 @@
<string name="import_certificate">Import certificate</string>
<string name="cert_imported_successfully">Certificate successfully imported</string>
<string name="cert_import_failed">Failed to import certificate</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">Status:</string>
@@ -126,6 +126,14 @@
<string name="import_certificate">Import certificate</string>
<string name="cert_imported_successfully">Certificate successfully imported</string>
<string name="cert_import_failed">Failed to import certificate</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">Статус:</string>
@@ -127,6 +127,14 @@
<string name="import_certificate">Import certificate</string>
<string name="cert_imported_successfully">Certificate successfully imported</string>
<string name="cert_import_failed">Failed to import certificate</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">Статус:</string>
@@ -126,6 +126,14 @@
<string name="import_certificate">导入证书</string>
<string name="cert_imported_successfully">证书已成功被导入</string>
<string name="cert_import_failed">证书导入失败</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">状态:</string>
@@ -126,6 +126,14 @@
<string name="import_certificate">導入憑證</string>
<string name="cert_imported_successfully">憑證已經成功匯入</string>
<string name="cert_import_failed">憑證匯入失敗</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">狀態:</string>
@@ -129,6 +129,14 @@
<string name="import_certificate">Import certificate</string>
<string name="cert_imported_successfully">Certificate successfully imported</string>
<string name="cert_import_failed">Failed to import certificate</string>
<string name="crl_cache">CRL cache</string>
<string name="clear_crl_cache_title">Clear CRL cache?</string>
<string name="clear_crl_cache_msg_none">The CRL cache is empty</string>
<plurals name="clear_crl_cache_msg">
<item quantity="one">The CRL cache contains %1$d file (%2$s).</item>
<item quantity="other">The CRL cache contains %1$d files (%2$s).</item>
</plurals>
<string name="clear">Clear</string>
<!-- VPN state fragment -->
<string name="state_label">Status:</string>