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;
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
*/
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);
}
}
+ /**
+ * 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.
*/
}).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();
+ }
+ }
}
<?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
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"
<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>
<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>
<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>
<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>
<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>
<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>
<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>