diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt index 0db2d0ed6f9343596216423d14c64f380f662583..651c5721e2244a230dd33447a5f6f0896b014279 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt @@ -3,7 +3,6 @@ package de.rki.coronawarnapp.coronatest.qrcode import android.os.Parcelable import de.rki.coronawarnapp.coronatest.TestRegistrationRequest import de.rki.coronawarnapp.coronatest.type.CoronaTest -import de.rki.coronawarnapp.util.HashExtensions.toSHA256 import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import org.joda.time.Instant @@ -49,7 +48,8 @@ sealed class CoronaTestQRCode : Parcelable, TestRegistrationRequest { @IgnoredOnParcel override val registrationIdentifier: String - get() = hash.toSHA256() + // We hash in the VerificationServer.retrieveRegistrationToken which was needed anyway for PCR + get() = hash } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt index 155f7c318ef9c79cc23ebee375b77792b0bfa56a..82dfa27637e6d3e7cf99272366987f3e5fb93554 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt @@ -48,7 +48,7 @@ class SubmissionRepository @Inject constructor( scope.launch { val test = coronaTestRepository.coronaTests.first().singleOrNull { it.type == type } ?: throw IllegalStateException("No test of type $type available") - + Timber.tag(TAG).v("giveConsentToSubmission(type=$type): %s", test) coronaTestRepository.updateConsent(identifier = test.identifier, consented = true) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt index 18b06cf6fb6758a5cf76164c7ad981ab36942cd4..eae290615228d629cf126a1affe9e62b1d78796a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt @@ -39,13 +39,16 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor( val scanStatusValue = SingleLiveEvent<ScanStatus>() fun validateTestGUID(rawResult: String) = launch { + Timber.d("validateTestGUID(rawResult=$rawResult)") try { val coronaTestQRCode = qrCodeValidator.validate(rawResult) + Timber.d("validateTestGUID() coronaTestQRCode=%s", coronaTestQRCode) // TODO this needs to be adapted to work for different types QRCodeCensor.lastGUID = coronaTestQRCode.registrationIdentifier scanStatusValue.postValue(ScanStatus.SUCCESS) val coronaTest = submissionRepository.testForType(coronaTestQRCode.type).first() + Timber.d("validateTestGUID() existingTest=%s", coronaTest) if (coronaTest != null) { routeToScreen.postValue( @@ -75,12 +78,14 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor( @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal suspend fun doDeviceRegistration(coronaTestQRCode: CoronaTestQRCode) { try { + Timber.d("doDeviceRegistration(coronaTestQRCode=%s)", coronaTestQRCode) registrationState.postValue(RegistrationState(ApiRequestState.STARTED)) val coronaTest = submissionRepository.registerTest(coronaTestQRCode) + Timber.d("doDeviceRegistration() coronaTest=$coronaTest") if (isConsentGiven) { submissionRepository.giveConsentToSubmission(type = coronaTestQRCode.type) } - checkTestResult(coronaTest.testResult) + checkTestResult(coronaTestQRCode, coronaTest) registrationState.postValue( RegistrationState( ApiRequestState.SUCCESS, @@ -108,16 +113,15 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor( } } - private fun checkTestResult(testResult: CoronaTestResult) { - if (testResult == CoronaTestResult.PCR_REDEEMED) { - throw InvalidQRCodeException() + private fun checkTestResult(request: CoronaTestQRCode, test: CoronaTest) { + if (test.testResult == CoronaTestResult.PCR_REDEEMED) { + throw InvalidQRCodeException("CoronaTestResult already redeemed ${request.registrationIdentifier}") } } private fun deregisterTestFromDevice(coronaTest: CoronaTestQRCode) { launch { - Timber.d("deregisterTestFromDevice()") - + Timber.d("deregisterTestFromDevice(coronaTest=%s)", coronaTest) submissionRepository.removeTestFromDevice(type = coronaTest.type) routeToScreen.postValue(SubmissionNavigationEvents.NavigateToMainActivity) }