package com.buddycloud.http;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.KeyEvent;
import com.buddycloud.R;
import com.buddycloud.model.ModelCallback;
import com.buddycloud.preferences.Preferences;
public class SSLUtils {
public static void checkSSL(final Context context, final String apiAddress,
final ModelCallback<Void> callback) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean sSLDisabled = preferences.getBoolean("pref_key_disable_ssl_check", false);
if (sSLDisabled) {
callback.success(null);
return;
}
String skipSSLForDomain = Preferences.getPreference(context, Preferences.TRUST_SSL_PREFIX + apiAddress);
if (skipSSLForDomain != null && Boolean.parseBoolean(skipSSLForDomain)) {
callback.success(null);
return;
}
BuddycloudHTTPHelper.checkSSL(apiAddress, context, new ModelCallback<Integer>() {
@Override
public void success(Integer response) {
callback.success(null);
}
@Override
public void error(Throwable throwable) {
confirmTrustSSL(context, apiAddress, callback);
}
});
}
private static void confirmTrustSSL(final Context context, final String apiAddress,
final ModelCallback<Void> callback) {
String sslErrorTitle = context.getString(R.string.ssl_error_title);
String sslErrorMessage = context.getString(R.string.ssl_error_message, apiAddress);
Builder dialogBuilder = new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(sslErrorTitle)
.setMessage(sslErrorMessage)
.setPositiveButton(R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
callback.success(null);
}
})
.setNeutralButton(R.string.yes_and_remember,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Preferences.setPreference(context,
Preferences.TRUST_SSL_PREFIX + apiAddress,
Boolean.TRUE.toString());
callback.success(null);
}
})
.setNegativeButton(R.string.no,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
callback.error(null);
}
});
AlertDialog dialog = dialogBuilder.create();
dialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
callback.error(null);
dialog.dismiss();
}
return true;
}
});
dialog.show();
}
}