Skip to content

Commit

Permalink
Added a toast for known verification failures.
Browse files Browse the repository at this point in the history
  • Loading branch information
kaidotarma committed Aug 9, 2021
1 parent e617ef6 commit 4dd68c2
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ data class InnerVerificationResult(
val certificateExpired: Boolean = false,
val greenCertificateData: GreenCertificateData? = null,
val isApplicableCode: Boolean = false,
val base64EncodedKid: String? = null
val base64EncodedKid: String? = null,
val isNotApplicableCodeReason: Int? = null
) {
fun isValid() =
!noPublicKeysFound && !certificateExpired && greenCertificateData != null && isApplicableCode && base64EncodedKid?.isNotBlank() == true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.isVisible
Expand All @@ -43,10 +44,14 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import dagger.hilt.android.AndroidEntryPoint
import dgca.verifier.app.android.*
import dgca.verifier.app.android.FORMATTED_YEAR_MONTH_DAY
import dgca.verifier.app.android.R
import dgca.verifier.app.android.YEAR_MONTH_DAY
import dgca.verifier.app.android.databinding.DialogFragmentVerificationBinding
import dgca.verifier.app.android.dpToPx
import dgca.verifier.app.android.model.CertificateModel
import dgca.verifier.app.android.model.TestResult
import dgca.verifier.app.android.parseFromTo
import dgca.verifier.app.android.verification.certs.RecoveryViewHolder
import dgca.verifier.app.android.verification.certs.TestViewHolder
import dgca.verifier.app.android.verification.certs.VaccinationViewHolder
Expand Down Expand Up @@ -105,6 +110,9 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
viewModel.verificationError.observe(viewLifecycleOwner, {
setCertStatusError(it)
})
viewModel.verificationFailureToast.observe(viewLifecycleOwner, {
Toast.makeText(context, it, Toast.LENGTH_LONG).show()
})
viewModel.inProgress.observe(viewLifecycleOwner, {
binding.progressBar.isVisible = it
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.util.*
import javax.inject.Inject
import dgca.verifier.app.android.R

enum class GeneralVerificationResult {
SUCCESS, FAILED, RULES_VALIDATION_FAILED
Expand Down Expand Up @@ -99,6 +100,9 @@ class VerificationViewModel @Inject constructor(
private val _verificationError = MutableLiveData<VerificationError>()
val verificationError: LiveData<VerificationError> = _verificationError

private val _verificationFailureToast = MutableLiveData<Int>()
val verificationFailureToast: LiveData<Int> = _verificationFailureToast

private val _validationResults = MutableLiveData<List<ValidationResult>>()
val validationResults: LiveData<List<ValidationResult>> = _validationResults

Expand Down Expand Up @@ -127,12 +131,15 @@ class VerificationViewModel @Inject constructor(
innerVerificationResult.base64EncodedKid!!
)
}

}

verificationResult.fetchError(innerVerificationResult)
?.apply { _verificationError.value = this }

if (innerVerificationResult.isNotApplicableCodeReason != null) {
_verificationFailureToast.value = innerVerificationResult.isNotApplicableCodeReason!!
}

_inProgress.value = false
val certificateModel: CertificateModel? =
innerVerificationResult.greenCertificateData?.greenCertificate?.toCertificateModel()
Expand All @@ -151,6 +158,14 @@ class VerificationViewModel @Inject constructor(
var greenCertificateData: GreenCertificateData? = null
var isApplicableCode = false

if (code.startsWith("https://vg.digilugu.ee/")){
Timber.d("Verification failed: using old format")
return InnerVerificationResult(
isApplicableCode = isApplicableCode,
isNotApplicableCodeReason = R.string.verification_failed_old_format
)
}

val plainInput = prefixValidationService.decode(code, verificationResult)
val compressedCose = base45Service.decode(plainInput, verificationResult)
val cose: ByteArray? = compressorService.decode(compressedCose, verificationResult)
Expand All @@ -159,7 +174,8 @@ class VerificationViewModel @Inject constructor(
Timber.d("Verification failed: Too many bytes read")
return InnerVerificationResult(
greenCertificateData = greenCertificateData,
isApplicableCode = isApplicableCode
isApplicableCode = isApplicableCode,
isNotApplicableCodeReason = R.string.verification_failed_too_many_bytes
)
}

Expand All @@ -168,7 +184,8 @@ class VerificationViewModel @Inject constructor(
Timber.d("Verification failed: COSE not decoded")
return InnerVerificationResult(
greenCertificateData = greenCertificateData,
isApplicableCode = isApplicableCode
isApplicableCode = isApplicableCode,
isNotApplicableCodeReason = R.string.verification_failed_cose_not_decoded
)
}

Expand All @@ -177,7 +194,8 @@ class VerificationViewModel @Inject constructor(
Timber.d("Verification failed: cannot extract kid from COSE")
return InnerVerificationResult(
greenCertificateData = greenCertificateData,
isApplicableCode = isApplicableCode
isApplicableCode = isApplicableCode,
isNotApplicableCodeReason = R.string.verification_failed_cose_not_extracted
)
}

Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/values-et/strings.added.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="verification_failed_old_format">See on vana tüüpi sertifikaat, palun kasutage uut Euroopa tüüpi sertifikaati.</string>
<string name="verification_failed_too_many_bytes">Verifitseerimine ebaõnnestus: Liiga palju andmeid</string>
<string name="verification_failed_cose_not_decoded">Verifitseerimine ebaõnnestus: See QR ei tundu olevat valiidne sertifikaat (COSE decode)</string>
<string name="verification_failed_cose_not_extracted">Verifitseerimine ebaõnnestus: See QR ei tundu olevat valiidne sertifikaat (COSE extract)</string>
</resources>
56 changes: 0 additions & 56 deletions app/src/main/res/values-nl/strings.xml

This file was deleted.

7 changes: 7 additions & 0 deletions app/src/main/res/values/strings.added.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="verification_failed_old_format">This sertificate is in the old EE format, please use the new EU format.</string>
<string name="verification_failed_too_many_bytes">Verification failed: Too many bytes read</string>
<string name="verification_failed_cose_not_decoded">Verification failed: This QR does not seem to be a valid certificate (COSE decode)</string>
<string name="verification_failed_cose_not_extracted">Verification failed: This QR does not seem to be a valid certificate (COSE extract)</string>
</resources>

0 comments on commit 4dd68c2

Please sign in to comment.