diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt new file mode 100644 index 0000000000000000000000000000000000000000..aca52b82f6c0376a642e563079d22db741905ba9 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt @@ -0,0 +1,4 @@ +package de.rki.coronawarnapp.exception.http + +class ServiceFactoryException(cause: Throwable) : + Exception("error inside the service factory", cause) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt index 90c2fd6fcfcdccf1e1859481c1e7d7bb1e5d1a1b..42604a156a5c48bfd544680758a34cee93df6cef 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/ServiceFactory.kt @@ -1,7 +1,9 @@ package de.rki.coronawarnapp.http +import android.webkit.URLUtil import de.rki.coronawarnapp.BuildConfig import de.rki.coronawarnapp.CoronaWarnApplication +import de.rki.coronawarnapp.exception.http.ServiceFactoryException import de.rki.coronawarnapp.http.service.DistributionService import de.rki.coronawarnapp.http.service.SubmissionService import de.rki.coronawarnapp.http.service.VerificationService @@ -90,34 +92,50 @@ class ServiceFactory { clientBuilder.build() } + private val downloadCdnUrl + get() = getValidUrl(DynamicURLs.DOWNLOAD_CDN_URL) + fun distributionService(): DistributionService = distributionService private val distributionService by lazy { Retrofit.Builder() .client(okHttpClient) - .baseUrl(DynamicURLs.DOWNLOAD_CDN_URL) + .baseUrl(downloadCdnUrl) .addConverterFactory(gsonConverterFactory) .build() .create(DistributionService::class.java) } + private val verificationCdnUrl + get() = getValidUrl(DynamicURLs.VERIFICATION_CDN_URL) + fun verificationService(): VerificationService = verificationService private val verificationService by lazy { Retrofit.Builder() .client(okHttpClient) - .baseUrl(DynamicURLs.VERIFICATION_CDN_URL) + .baseUrl(verificationCdnUrl) .addConverterFactory(gsonConverterFactory) .build() .create(VerificationService::class.java) } + private val submissionCdnUrl + get() = getValidUrl(DynamicURLs.SUBMISSION_CDN_URL) + fun submissionService(): SubmissionService = submissionService private val submissionService by lazy { Retrofit.Builder() .client(okHttpClient) - .baseUrl(DynamicURLs.SUBMISSION_CDN_URL) + .baseUrl(submissionCdnUrl) .addConverterFactory(protoConverterFactory) .addConverterFactory(gsonConverterFactory) .build() .create(SubmissionService::class.java) } + + private fun getValidUrl(url: String): String { + if (!URLUtil.isHttpsUrl(url)) { + throw ServiceFactoryException(IllegalArgumentException("the url is invalid")) + } + return url + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt index 408169d263c6ed8a2d521cdfc74e7915c6acecdb..5e8369c7145e338fe5993880baf05d788b03f8b6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt @@ -48,9 +48,9 @@ object WebRequestBuilder { private val serviceFactory = ServiceFactory() - private val distributionService = serviceFactory.distributionService() - private val verificationService = serviceFactory.verificationService() - private val submissionService = serviceFactory.submissionService() + private val distributionService by lazy { serviceFactory.distributionService() } + private val verificationService by lazy { serviceFactory.verificationService() } + private val submissionService by lazy { serviceFactory.submissionService() } suspend fun asyncGetDateIndex(): List<String> = withContext(Dispatchers.IO) { return@withContext distributionService diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt index 07bf9cc0ede200968366a53ff982de42d4e04618..2644430f991c08a461a511c33622c0f3eee647c6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/update/UpdateChecker.kt @@ -31,12 +31,13 @@ class UpdateChecker(private val activity: LauncherActivity) { suspend fun checkForUpdate() { // check if an update is needed based on server config + // TODO replace with signature exception val updateNeededFromServer: Boolean = try { checkIfUpdatesNeededFromServer() - } - // TODO replace with signature exception - catch (exception: Exception) { - true + } catch (exception: Exception) { + Log.e(TAG, exception.localizedMessage ?: "unknown error") + exception.printStackTrace() + false } // get AppUpdateManager