Added SSL Validation Override and CA Selection

- Added fields to login page to a) disable ssl validation or b) select
  a custom Certificate Authority certificate to use with the server.

- Changed visibility of widgets on login page from INVISIBLE to GONE so
  they don't take up space while hidden (since this was causing weird
  spacing issues with the new fields).

- Added state to settings to store ssl validation choice or certificate
  data.

- Added fields to various HTTP methods to disable ssl validation or set
  valid certificate authority if either setting is enabled.
This commit is contained in:
Galen Abell
2018-11-07 17:28:25 -05:00
parent 97ab5a6871
commit 2d14ef1b6f
10 changed files with 362 additions and 45 deletions

View File

@@ -15,15 +15,9 @@ import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
public class WebSocketConnection {
private OkHttpClient client;
private static final JSON gson = Utils.json();
private final OkHttpClient client =
new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.pingInterval(1, TimeUnit.MINUTES)
.connectTimeout(10, TimeUnit.SECONDS)
.build();
private final Handler handler = new Handler();
private int errorCount = 0;
@@ -38,7 +32,15 @@ public class WebSocketConnection {
private Runnable onReconnected;
private boolean isClosed;
WebSocketConnection(String baseUrl, String token) {
WebSocketConnection(String baseUrl, boolean validateSSL, String cert, String token) {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.pingInterval(1, TimeUnit.MINUTES)
.connectTimeout(10, TimeUnit.SECONDS);
Utils.applySslSettings(builder, new Utils.SSLSettings(validateSSL, cert));
client = builder.build();
this.baseUrl = baseUrl;
this.token = token;
}

View File

@@ -42,7 +42,7 @@ public class WebSocketService extends Service {
super.onCreate();
settings = new Settings(this);
missingMessageUtil =
new MissedMessageUtil(ClientFactory.clientToken(settings.url(), settings.token()));
new MissedMessageUtil(ClientFactory.clientToken(settings.url(), settings.validateSSL(), settings.cert(), settings.token()));
Log.i("Create " + getClass().getSimpleName());
}
@@ -79,7 +79,7 @@ public class WebSocketService extends Service {
}
connection =
new WebSocketConnection(settings.url(), settings.token())
new WebSocketConnection(settings.url(), settings.validateSSL(), settings.cert(), settings.token())
.onOpen(this::onOpen)
.onClose(() -> foreground(getString(R.string.websocket_closed)))
.onBadRequest(this::onBadRequest)