Skip to content
Snippets Groups Projects
Unverified Commit 38d5fffe authored by Fabian-K's avatar Fabian-K Committed by GitHub
Browse files

- change qr code verification according to agreed method (#122)

- remove InvalidQRCodeExcpetion.kt and replace with simple if/else
parent 83a6c77b
No related branches found
No related tags found
No related merge requests found
package de.rki.coronawarnapp.exception
class InvalidQRCodeExcpetion : Exception("the supplied QR code does not match the patter")
...@@ -19,7 +19,4 @@ object SubmissionConstants { ...@@ -19,7 +19,4 @@ object SubmissionConstants {
val REGISTRATION_TOKEN_URL = "$VERSIONED_VERIFICATION_CDN_URL/$REGISTRATION_TOKEN" val REGISTRATION_TOKEN_URL = "$VERSIONED_VERIFICATION_CDN_URL/$REGISTRATION_TOKEN"
val TEST_RESULT_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TEST_RESULT" val TEST_RESULT_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TEST_RESULT"
val TAN_REQUEST_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TAN" val TAN_REQUEST_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TAN"
val QR_CODE_VALIDATION_REGEX =
"[0-9A-Fa-f]{6}-[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}".toRegex()
} }
package de.rki.coronawarnapp.service.submission package de.rki.coronawarnapp.service.submission
import de.rki.coronawarnapp.exception.InvalidQRCodeExcpetion
import de.rki.coronawarnapp.exception.NoGUIDOrTANSetException import de.rki.coronawarnapp.exception.NoGUIDOrTANSetException
import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException
import de.rki.coronawarnapp.http.WebRequestBuilder import de.rki.coronawarnapp.http.WebRequestBuilder
import de.rki.coronawarnapp.service.submission.SubmissionConstants.QR_CODE_KEY_TYPE import de.rki.coronawarnapp.service.submission.SubmissionConstants.QR_CODE_KEY_TYPE
import de.rki.coronawarnapp.service.submission.SubmissionConstants.QR_CODE_VALIDATION_REGEX
import de.rki.coronawarnapp.service.submission.SubmissionConstants.REGISTRATION_TOKEN_URL import de.rki.coronawarnapp.service.submission.SubmissionConstants.REGISTRATION_TOKEN_URL
import de.rki.coronawarnapp.service.submission.SubmissionConstants.TAN_REQUEST_URL import de.rki.coronawarnapp.service.submission.SubmissionConstants.TAN_REQUEST_URL
import de.rki.coronawarnapp.service.submission.SubmissionConstants.TELE_TAN_KEY_TYPE import de.rki.coronawarnapp.service.submission.SubmissionConstants.TELE_TAN_KEY_TYPE
...@@ -63,11 +61,19 @@ object SubmissionService { ...@@ -63,11 +61,19 @@ object SubmissionService {
SubmitDiagnosisKeysTransaction.start(registrationToken) SubmitDiagnosisKeysTransaction.start(registrationToken)
} }
fun validateAndStoreTestGUID(testGUID: String) { /**
val regexMatch = QR_CODE_VALIDATION_REGEX.find(testGUID) ?: throw InvalidQRCodeExcpetion() * extracts the GUID from [scanResult]. Returns null if it does not match the required pattern
LocalData.testGUID(regexMatch.value) */
fun extractGUID(scanResult: String): String? {
val potentialGUID = scanResult.substringAfterLast("?", "")
return if (potentialGUID.isEmpty())
null
else
potentialGUID
} }
fun storeTestGUID(guid: String) = LocalData.testGUID(guid)
fun deleteTestGUID() { fun deleteTestGUID() {
LocalData.testGUID(null) LocalData.testGUID(null)
} }
......
...@@ -5,7 +5,6 @@ import androidx.lifecycle.MutableLiveData ...@@ -5,7 +5,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.InvalidQRCodeExcpetion
import de.rki.coronawarnapp.exception.report import de.rki.coronawarnapp.exception.report
import de.rki.coronawarnapp.service.submission.SubmissionService import de.rki.coronawarnapp.service.submission.SubmissionService
import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.LocalData
...@@ -44,11 +43,12 @@ class SubmissionViewModel : ViewModel() { ...@@ -44,11 +43,12 @@ class SubmissionViewModel : ViewModel() {
fun refreshTestResult() = fun refreshTestResult() =
executeRequestWithState(SubmissionRepository::refreshTestResult, _testResultState) executeRequestWithState(SubmissionRepository::refreshTestResult, _testResultState)
fun validateAndStoreTestGUID(testGUID: String) { fun validateAndStoreTestGUID(scanResult: String) {
try { val guid = SubmissionService.extractGUID(scanResult)
SubmissionService.validateAndStoreTestGUID(testGUID) if (guid != null) {
SubmissionService.storeTestGUID(guid)
_scanStatus.value = ScanStatus.SUCCESS _scanStatus.value = ScanStatus.SUCCESS
} catch (ex: InvalidQRCodeExcpetion) { } else {
_scanStatus.value = ScanStatus.INVALID _scanStatus.value = ScanStatus.INVALID
} }
} }
......
package de.rki.coronawarnapp.service.submission
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.nullValue
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
class SubmissionServiceTest {
@Test
fun extractGUID() {
// valid
val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
assertThat(
SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"),
equalTo(guid)
)
// invalid
assertThat(
SubmissionService.extractGUID("https://no-guid-here"),
nullValue()
)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment