diff --git a/core/api/src/main/java/ru/stersh/youamp/core/api/SubsonicApi.kt b/core/api/src/main/java/ru/stersh/youamp/core/api/SubsonicApi.kt index 2af430a5..505d2fde 100644 --- a/core/api/src/main/java/ru/stersh/youamp/core/api/SubsonicApi.kt +++ b/core/api/src/main/java/ru/stersh/youamp/core/api/SubsonicApi.kt @@ -2,11 +2,11 @@ package ru.stersh.youamp.core.api import android.net.Uri import com.squareup.moshi.Moshi -import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory + class SubsonicApi( val url: String, val username: String, @@ -28,7 +28,7 @@ class SubsonicApi( useLegacyAuth ) private val errorInterceptor = ErrorInterceptor(moshi) - private val client = OkHttpClient.Builder() + private val client = getUnsafeOkHttpClient() .addInterceptor(loggingInterceptor) .addInterceptor(responseInterceptor) .addInterceptor(errorInterceptor) @@ -109,7 +109,7 @@ class SubsonicApi( position: Long? = null ) = api.savePlayQueue(id, current, position) - suspend fun starSong(vararg songId: String, ) = api.star(id = songId.asList()) + suspend fun starSong(vararg songId: String) = api.star(id = songId.asList()) suspend fun unstarSong(vararg id: String) = api.unstar(id = id.asList()) diff --git a/core/api/src/main/java/ru/stersh/youamp/core/api/UnsafeOkHttpClient.kt b/core/api/src/main/java/ru/stersh/youamp/core/api/UnsafeOkHttpClient.kt new file mode 100644 index 00000000..bce71a47 --- /dev/null +++ b/core/api/src/main/java/ru/stersh/youamp/core/api/UnsafeOkHttpClient.kt @@ -0,0 +1,41 @@ +package ru.stersh.youamp.core.api + +import android.annotation.SuppressLint +import okhttp3.OkHttpClient +import java.security.SecureRandom +import java.security.cert.X509Certificate +import javax.net.ssl.SSLContext +import javax.net.ssl.SSLSocketFactory +import javax.net.ssl.TrustManager +import javax.net.ssl.X509TrustManager + +@SuppressLint("CustomX509TrustManager,TrustAllX509TrustManager") +internal fun getUnsafeOkHttpClient(): OkHttpClient.Builder { + try { + val trustAllCerts = arrayOf( + object : X509TrustManager { + override fun checkClientTrusted(chain: Array, authType: String) { + } + + override fun checkServerTrusted(chain: Array, authType: String) { + } + + override fun getAcceptedIssuers(): Array { + return arrayOf() + } + } + ) + + val sslContext = SSLContext.getInstance("SSL") + sslContext.init(null, trustAllCerts, SecureRandom()) + + val sslSocketFactory: SSLSocketFactory = sslContext.socketFactory + + val builder: OkHttpClient.Builder = OkHttpClient.Builder() + builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager) + builder.hostnameVerifier { _, _ -> true } + return builder + } catch (e: Exception) { + throw RuntimeException(e) + } +} \ No newline at end of file