From 355dc5ec4ed5780131a2adbd8565461d8a6f8dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20M=C3=B6ller?= <jakob.moeller@sap.com> Date: Sun, 7 Jun 2020 10:47:30 +0200 Subject: [PATCH] Fix/no urls (#242) * fixes #273 * lint fix Co-authored-by: Philipp Woessner <philipp.woessner@sap.com> Co-authored-by: Philipp Woessner <64482866+pwoessner@users.noreply.github.com> --- .../exception/http/ServiceFactoryException.kt | 4 ++++ .../rki/coronawarnapp/http/ServiceFactory.kt | 24 ++++++++++++++++--- .../coronawarnapp/http/WebRequestBuilder.kt | 6 ++--- .../rki/coronawarnapp/update/UpdateChecker.kt | 9 +++---- 4 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/ServiceFactoryException.kt 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 000000000..aca52b82f --- /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 90c2fd6fc..42604a156 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 408169d26..5e8369c71 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 07bf9cc0e..2644430f9 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 -- GitLab