diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/LoginActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/LoginActivity.kt
index f54bce0..5e337f9 100644
--- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/LoginActivity.kt
+++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/LoginActivity.kt
@@ -139,9 +139,12 @@ class LoginActivity : AppCompatActivity(), DIAware {
showProgress(true)
+ appSettingsService.updateSelfSigned(binding.selfSigned.isChecked)
+
repository.refreshLoginInformation(url, login, password)
CoroutineScope(Dispatchers.Main).launch {
+ repository.updateApiInformation()
val result = repository.login()
if (result) {
val (errorFetching, displaySelfossOnly) = repository.shouldBeSelfossInstance()
diff --git a/androidApp/src/main/res/layout/activity_login.xml b/androidApp/src/main/res/layout/activity_login.xml
index 7edc0e4..c09300b 100644
--- a/androidApp/src/main/res/layout/activity_login.xml
+++ b/androidApp/src/main/res/layout/activity_login.xml
@@ -51,6 +51,13 @@
android:maxLines="1"
android:minHeight="48dp" />
+
+
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-de-rDE/strings.xml b/androidApp/src/main/res/values-de-rDE/strings.xml
index 036dcb9..7c18d95 100644
--- a/androidApp/src/main/res/values-de-rDE/strings.xml
+++ b/androidApp/src/main/res/values-de-rDE/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-es-rES/strings.xml b/androidApp/src/main/res/values-es-rES/strings.xml
index 9f9f902..bd58c51 100644
--- a/androidApp/src/main/res/values-es-rES/strings.xml
+++ b/androidApp/src/main/res/values-es-rES/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-fa-rIR/strings.xml b/androidApp/src/main/res/values-fa-rIR/strings.xml
index d4951bb..fb94070 100644
--- a/androidApp/src/main/res/values-fa-rIR/strings.xml
+++ b/androidApp/src/main/res/values-fa-rIR/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-fr-rFR/strings.xml b/androidApp/src/main/res/values-fr-rFR/strings.xml
index d99f94e..4753a53 100644
--- a/androidApp/src/main/res/values-fr-rFR/strings.xml
+++ b/androidApp/src/main/res/values-fr-rFR/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-gl-rES/strings.xml b/androidApp/src/main/res/values-gl-rES/strings.xml
index d32b7d1..a24ab3b 100644
--- a/androidApp/src/main/res/values-gl-rES/strings.xml
+++ b/androidApp/src/main/res/values-gl-rES/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-in-rID/strings.xml b/androidApp/src/main/res/values-in-rID/strings.xml
index 0f48e73..248a2ab 100644
--- a/androidApp/src/main/res/values-in-rID/strings.xml
+++ b/androidApp/src/main/res/values-in-rID/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-it-rIT/strings.xml b/androidApp/src/main/res/values-it-rIT/strings.xml
index 5b28be0..3379b85 100644
--- a/androidApp/src/main/res/values-it-rIT/strings.xml
+++ b/androidApp/src/main/res/values-it-rIT/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-ko-rKR/strings.xml b/androidApp/src/main/res/values-ko-rKR/strings.xml
index e155386..93d133b 100644
--- a/androidApp/src/main/res/values-ko-rKR/strings.xml
+++ b/androidApp/src/main/res/values-ko-rKR/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-night/strings.xml b/androidApp/src/main/res/values-night/strings.xml
deleted file mode 100644
index aa33111..0000000
--- a/androidApp/src/main/res/values-night/strings.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- The app does not share any personal data about you.
-
- A crash occured. Sending the details to the developper.
- "Disable automatic bug reporting. "
- Filters
- This app only works with a Selfoss instance, and no other RSS feed.
- Sources
- Update source
-
\ No newline at end of file
diff --git a/androidApp/src/main/res/values-nl-rNL/strings.xml b/androidApp/src/main/res/values-nl-rNL/strings.xml
index 21b72a2..e16d314 100644
--- a/androidApp/src/main/res/values-nl-rNL/strings.xml
+++ b/androidApp/src/main/res/values-nl-rNL/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-pt-rBR/strings.xml b/androidApp/src/main/res/values-pt-rBR/strings.xml
index a13d2dd..7ae3e67 100644
--- a/androidApp/src/main/res/values-pt-rBR/strings.xml
+++ b/androidApp/src/main/res/values-pt-rBR/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-pt-rPT/strings.xml b/androidApp/src/main/res/values-pt-rPT/strings.xml
index 84bdc30..79c39c4 100644
--- a/androidApp/src/main/res/values-pt-rPT/strings.xml
+++ b/androidApp/src/main/res/values-pt-rPT/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-si-rLK/strings.xml b/androidApp/src/main/res/values-si-rLK/strings.xml
index a6fcab7..2f46a3e 100644
--- a/androidApp/src/main/res/values-si-rLK/strings.xml
+++ b/androidApp/src/main/res/values-si-rLK/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-tr-rTR/strings.xml b/androidApp/src/main/res/values-tr-rTR/strings.xml
index 8cd2816..e6bab9a 100644
--- a/androidApp/src/main/res/values-tr-rTR/strings.xml
+++ b/androidApp/src/main/res/values-tr-rTR/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-zh-rCN/strings.xml b/androidApp/src/main/res/values-zh-rCN/strings.xml
index 9198954..c562215 100644
--- a/androidApp/src/main/res/values-zh-rCN/strings.xml
+++ b/androidApp/src/main/res/values-zh-rCN/strings.xml
@@ -130,4 +130,5 @@
更新源
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values-zh-rTW/strings.xml b/androidApp/src/main/res/values-zh-rTW/strings.xml
index 45c006d..0a44316 100644
--- a/androidApp/src/main/res/values-zh-rTW/strings.xml
+++ b/androidApp/src/main/res/values-zh-rTW/strings.xml
@@ -130,4 +130,5 @@
Update source
Disconnect ?
You will be disconnected from your selfoss instance.
+ Disable SSL
diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml
index fc9504e..6cbc2cd 100644
--- a/androidApp/src/main/res/values/strings.xml
+++ b/androidApp/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
"Password not long enough"
"Field required"
"Url"
+ "Disable SSL"
"Login required ?"
"Oops. You may need to add a \"/\" at the end of the url."
"Username"
diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts
index 144e3c0..63e7a88 100644
--- a/shared/build.gradle.kts
+++ b/shared/build.gradle.kts
@@ -36,6 +36,7 @@ kotlin {
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("io.ktor:ktor-client-logging:$ktorVersion")
implementation("io.ktor:ktor-client-auth:$ktorVersion")
+ implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
implementation("org.jsoup:jsoup:1.15.4")
diff --git a/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/rest/NetworkSSL.kt b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/rest/NetworkSSL.kt
new file mode 100644
index 0000000..c2b6698
--- /dev/null
+++ b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/rest/NetworkSSL.kt
@@ -0,0 +1,17 @@
+package bou.amine.apps.readerforselfossv2.rest
+
+import io.ktor.client.engine.cio.CIOEngineConfig
+import java.security.cert.X509Certificate
+import javax.net.ssl.X509TrustManager
+
+class NaiveTrustManager : X509TrustManager {
+ override fun checkClientTrusted(chain: Array?, authType: String?) {}
+
+ override fun checkServerTrusted(chain: Array?, authType: String?) {}
+
+ override fun getAcceptedIssuers(): Array = arrayOf()
+}
+
+actual fun setupInsecureHTTPEngine(config: CIOEngineConfig) {
+ config.https.trustManager = NaiveTrustManager()
+}
\ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt
index b97bd93..d010080 100644
--- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt
+++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt
@@ -5,31 +5,46 @@ import bou.amine.apps.readerforselfossv2.model.StatusAndData
import bou.amine.apps.readerforselfossv2.model.SuccessResponse
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
import io.github.aakira.napier.Napier
-import io.ktor.client.*
-import io.ktor.client.plugins.*
-import io.ktor.client.plugins.auth.providers.*
-import io.ktor.client.plugins.cache.*
-import io.ktor.client.plugins.contentnegotiation.*
-import io.ktor.client.plugins.cookies.*
-import io.ktor.client.plugins.logging.*
-import io.ktor.client.request.*
-import io.ktor.client.statement.*
-import io.ktor.http.*
-import io.ktor.serialization.kotlinx.json.*
-import io.ktor.util.*
-import io.ktor.utils.io.charsets.*
-import io.ktor.utils.io.core.*
+import io.ktor.client.HttpClient
+import io.ktor.client.engine.cio.CIO
+import io.ktor.client.engine.cio.CIOEngineConfig
+import io.ktor.client.plugins.HttpRequestRetry
+import io.ktor.client.plugins.HttpTimeout
+import io.ktor.client.plugins.auth.providers.BasicAuthCredentials
+import io.ktor.client.plugins.cache.HttpCache
+import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
+import io.ktor.client.plugins.cookies.HttpCookies
+import io.ktor.client.plugins.logging.LogLevel
+import io.ktor.client.plugins.logging.Logger
+import io.ktor.client.plugins.logging.Logging
+import io.ktor.client.request.get
+import io.ktor.client.request.headers
+import io.ktor.client.request.parameter
+import io.ktor.client.statement.HttpResponse
+import io.ktor.http.HttpHeaders
+import io.ktor.http.HttpStatusCode
+import io.ktor.http.Parameters
+import io.ktor.serialization.kotlinx.json.json
+import io.ktor.util.encodeBase64
+import io.ktor.utils.io.charsets.Charsets
+import io.ktor.utils.io.core.toByteArray
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.serialization.json.Json
+expect fun setupInsecureHTTPEngine(config: CIOEngineConfig)
+
class SelfossApi(private val appSettingsService: AppSettingsService) {
var client = createHttpClient()
-
- private fun createHttpClient(): HttpClient {
- val client = HttpClient {
+ fun createHttpClient() =
+ HttpClient(CIO) {
+ if (appSettingsService.getSelfSigned()) {
+ engine {
+ setupInsecureHTTPEngine(this)
+ }
+ }
install(ContentNegotiation) {
install(HttpCache)
json(Json {
@@ -60,7 +75,7 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
Napier.i("Will modify", tag = "HttpSend")
CoroutineScope(Dispatchers.Main).launch {
Napier.i("Will login", tag = "HttpSend")
- this@SelfossApi.login()
+ login()
Napier.i("Did login", tag = "HttpSend")
}
}
@@ -68,10 +83,6 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
expectSuccess = false
}
-
- return client
- }
-
fun url(path: String) =
"${appSettingsService.getBaseUrl()}$path"
diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/service/AppSettingsService.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/service/AppSettingsService.kt
index 22da4fa..4118781 100644
--- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/service/AppSettingsService.kt
+++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/service/AppSettingsService.kt
@@ -8,6 +8,7 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
// Api related
private var _apiVersion: Int = -1
private var _publicAccess: Boolean? = null
+ private var _selfSigned: Boolean? = null
private var _baseUrl: String = ""
private var _userName: String = ""
private var _basicUserName: String = ""
@@ -77,6 +78,22 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
_publicAccess = settings.getBoolean(API_PUBLIC_ACCESS, false)
}
+ fun getSelfSigned(): Boolean {
+ if (_selfSigned == null) {
+ refreshSelfSigned()
+ }
+ return _selfSigned!!
+ }
+
+ fun updateSelfSigned(selfSigned: Boolean) {
+ settings.putBoolean(API_SELF_SIGNED, selfSigned)
+ refreshSelfSigned()
+ }
+
+ private fun refreshSelfSigned() {
+ _selfSigned = settings.getBoolean(API_SELF_SIGNED, false)
+ }
+
fun getBaseUrl(): String {
if (_baseUrl.isEmpty()) {
refreshBaseUrl()
@@ -383,6 +400,7 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
refreshBaseUrl()
refreshApiVersion()
refreshPublicAccess()
+ refreshSelfSigned()
}
fun refreshUserSettings() {
@@ -468,6 +486,8 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
const val API_PUBLIC_ACCESS = "apiPublicAccess"
+ const val API_SELF_SIGNED = "apiSelfSigned"
+
const val API_ITEMS_NUMBER = "prefer_api_items_number"
const val API_TIMEOUT = "api_timeout"