diff --git a/app/build.gradle b/app/build.gradle index 0c47cbf..4c25b00 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "tech.bogomolov.incomingsmsgateway" minSdkVersion 14 targetSdkVersion 33 - versionCode 10 - versionName "2.2.2" + versionCode 11 + versionName "2.2.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/androidTest/java/tech/bogomolov/incomingsmsgateway/WebhookCallerTest.java b/app/src/androidTest/java/tech/bogomolov/incomingsmsgateway/WebhookCallerTest.java index 60aa717..dbf0bb8 100644 --- a/app/src/androidTest/java/tech/bogomolov/incomingsmsgateway/WebhookCallerTest.java +++ b/app/src/androidTest/java/tech/bogomolov/incomingsmsgateway/WebhookCallerTest.java @@ -43,11 +43,17 @@ public void testHttpsSuccess() throws Exception { } @Test - public void testTlsV1Disables() throws Exception { + public void testTlsV1Disabled() throws Exception { WorkInfo workInfo = this.getWorkInfo("https://wordpress.com", "test", "{}", false); assertThat(workInfo.getState(), is(WorkInfo.State.SUCCEEDED)); } + @Test + public void testTlsV1DisabledSslIgnore() throws Exception { + WorkInfo workInfo = this.getWorkInfo("https://wordpress.com", "test", "{}", true); + assertThat(workInfo.getState(), is(WorkInfo.State.SUCCEEDED)); + } + @Test public void testHttpSuccess() throws Exception { WorkInfo workInfo = this.getWorkInfo("http://example.com", "test", "{}", false); diff --git a/app/src/main/java/tech/bogomolov/incomingsmsgateway/MainActivity.java b/app/src/main/java/tech/bogomolov/incomingsmsgateway/MainActivity.java index 0da3de3..9f817a7 100644 --- a/app/src/main/java/tech/bogomolov/incomingsmsgateway/MainActivity.java +++ b/app/src/main/java/tech/bogomolov/incomingsmsgateway/MainActivity.java @@ -1,6 +1,7 @@ package tech.bogomolov.incomingsmsgateway; import android.Manifest; +import android.app.ActivityManager; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; @@ -76,6 +77,28 @@ private void showList() { ArrayList configs = ForwardingConfig.getAll(context); + listAdapter = new ListAdapter(configs, context); + listview.setAdapter(listAdapter); + + FloatingActionButton fab = findViewById(R.id.btn_add); + fab.setOnClickListener(this.showAddDialog()); + + if (!this.isServiceRunning()) { + this.startService(); + } + } + + private boolean isServiceRunning() { + ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){ + if(tech.bogomolov.incomingsmsgateway.SmsReceiverService.class.getName().equals(service.service.getClassName())) { + return true; + } + } + return false; + } + + private void startService() { Context appContext = getApplicationContext(); Intent intent = new Intent(this, SmsReceiverService.class); @@ -84,13 +107,6 @@ private void showList() { } else { appContext.startService(intent); } - - listAdapter = new ListAdapter(configs, context); - - listview.setAdapter(listAdapter); - - FloatingActionButton fab = findViewById(R.id.btn_add); - fab.setOnClickListener(this.showAddDialog()); } private void showInfo(String text) { diff --git a/app/src/main/java/tech/bogomolov/incomingsmsgateway/TLSSocketFactoryKitKat.java b/app/src/main/java/tech/bogomolov/incomingsmsgateway/SSLSocketFactory/TLSSocketFactory.java similarity index 68% rename from app/src/main/java/tech/bogomolov/incomingsmsgateway/TLSSocketFactoryKitKat.java rename to app/src/main/java/tech/bogomolov/incomingsmsgateway/SSLSocketFactory/TLSSocketFactory.java index 0b0cf7f..47e0474 100644 --- a/app/src/main/java/tech/bogomolov/incomingsmsgateway/TLSSocketFactoryKitKat.java +++ b/app/src/main/java/tech/bogomolov/incomingsmsgateway/SSLSocketFactory/TLSSocketFactory.java @@ -1,4 +1,8 @@ -package tech.bogomolov.incomingsmsgateway; +package tech.bogomolov.incomingsmsgateway.SSLSocketFactory; + +import android.annotation.SuppressLint; +import android.net.SSLCertificateSocketFactory; +import android.util.Log; import java.io.IOException; import java.net.InetAddress; @@ -10,14 +14,19 @@ import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; -public class TLSSocketFactoryKitKat extends SSLSocketFactory { +public class TLSSocketFactory extends SSLSocketFactory { private final SSLSocketFactory factory; - public TLSSocketFactoryKitKat() throws KeyManagementException, NoSuchAlgorithmException { - SSLContext context = SSLContext.getInstance("TLS"); - context.init(null, null, null); - factory = context.getSocketFactory(); + @SuppressLint("SSLCertificateSocketFactoryGetInsecure") + public TLSSocketFactory(boolean ignoreSsl) throws KeyManagementException, NoSuchAlgorithmException { + if (ignoreSsl) { + factory = SSLCertificateSocketFactory.getInsecure(0, null); + } else { + SSLContext context = SSLContext.getInstance("TLS"); + context.init(null, null, null); + factory = context.getSocketFactory(); + } } @Override @@ -62,7 +71,8 @@ public Socket createSocket(InetAddress address, int port, InetAddress localAddre private Socket enableTLSOnSocket(Socket socket) { if((socket instanceof SSLSocket)) { - ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"}); + String[] supportedProtocols = ((SSLSocket)socket).getSupportedProtocols(); + ((SSLSocket)socket).setEnabledProtocols(supportedProtocols); } return socket; } diff --git a/app/src/main/java/tech/bogomolov/incomingsmsgateway/WebHookWorkRequest.java b/app/src/main/java/tech/bogomolov/incomingsmsgateway/WebHookWorkRequest.java index 77f6e42..a150b81 100644 --- a/app/src/main/java/tech/bogomolov/incomingsmsgateway/WebHookWorkRequest.java +++ b/app/src/main/java/tech/bogomolov/incomingsmsgateway/WebHookWorkRequest.java @@ -24,8 +24,11 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Iterator; + import javax.net.ssl.HttpsURLConnection; +import tech.bogomolov.incomingsmsgateway.SSLSocketFactory.TLSSocketFactory; + public class WebHookWorkRequest extends Worker { public final static String DATA_URL = "URL"; @@ -69,10 +72,12 @@ public Result doWork() { return Result.success(); } - @SuppressLint({"SSLCertificateSocketFactoryGetInsecure", "AllowAllHostnameVerifier"}) + @SuppressLint({"AllowAllHostnameVerifier"}) private String makeRequest(String urlString, String text, String headers, boolean ignoreSsl) { String result = RESULT_SUCCESS; + Log.i("SmsGateway", "request " + urlString); + HttpURLConnection urlConnection = null; try { @@ -80,15 +85,12 @@ private String makeRequest(String urlString, String text, String headers, boolea urlConnection = (HttpURLConnection) url.openConnection(); if (urlConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) urlConnection).setSSLSocketFactory( + new TLSSocketFactory(ignoreSsl) + ); + if (ignoreSsl) { - ((HttpsURLConnection) urlConnection).setSSLSocketFactory( - SSLCertificateSocketFactory.getInsecure(0, null)); ((HttpsURLConnection) urlConnection).setHostnameVerifier(new AllowAllHostnameVerifier()); - } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH - && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - ((HttpsURLConnection) urlConnection).setSSLSocketFactory( - new TLSSocketFactoryKitKat() - ); } }