Skip to content

Commit c6637c8

Browse files
Feature/certlogic engine dependency (#28)
1 parent daf0340 commit c6637c8

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

decoder/src/main/java/dgca/verifier/app/decoder/cbor/CborService.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,24 @@ package dgca.verifier.app.decoder.cbor
2424

2525
import dgca.verifier.app.decoder.model.GreenCertificate
2626
import dgca.verifier.app.decoder.model.VerificationResult
27+
import java.time.ZonedDateTime
28+
29+
data class GreenCertificateData(
30+
val hcertJson: String,
31+
val greenCertificate: GreenCertificate,
32+
val issuedAt: ZonedDateTime,
33+
val expirationTime: ZonedDateTime
34+
)
2735

2836
/**
2937
* Decodes input as a CBOR structure
3038
*/
3139
interface CborService {
3240

3341
fun decode(input: ByteArray, verificationResult: VerificationResult): GreenCertificate?
42+
43+
fun decodeData(
44+
input: ByteArray,
45+
verificationResult: VerificationResult
46+
): GreenCertificateData?
3447
}

decoder/src/main/java/dgca/verifier/app/decoder/cbor/DefaultCborService.kt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,24 @@ import dgca.verifier.app.decoder.cwt.CwtHeaderKeys
2828
import dgca.verifier.app.decoder.model.GreenCertificate
2929
import dgca.verifier.app.decoder.model.VerificationResult
3030
import java.time.Instant
31+
import java.time.ZoneOffset
3132

3233
/**
3334
* Decodes input as a CBOR structure
3435
*/
3536
class DefaultCborService : CborService {
3637

37-
override fun decode(input: ByteArray, verificationResult: VerificationResult): GreenCertificate? {
38+
override fun decode(
39+
input: ByteArray,
40+
verificationResult: VerificationResult
41+
): GreenCertificate? = decodeData(input, verificationResult)?.greenCertificate
42+
43+
override fun decodeData(
44+
input: ByteArray,
45+
verificationResult: VerificationResult
46+
): GreenCertificateData? {
3847
verificationResult.cborDecoded = false
39-
try {
48+
return try {
4049
val map = CBORObject.DecodeFromBytes(input)
4150

4251
val issuedAt = Instant.ofEpochSecond(map[CwtHeaderKeys.ISSUED_AT.asCBOR()].AsInt64())
@@ -46,14 +55,16 @@ class DefaultCborService : CborService {
4655
verificationResult.isNotExpired = expirationTime.isAfter(Instant.now())
4756

4857
val hcert = map[CwtHeaderKeys.HCERT.asCBOR()]
49-
val hcertv1 = hcert[CBORObject.FromObject(1)].EncodeToBytes()
5058

51-
return CBORMapper()
59+
val cborObject = hcert[CBORObject.FromObject(1)]
60+
val hcertv1 = cborObject.EncodeToBytes()
61+
62+
val greenCertificate: GreenCertificate = CBORMapper()
5263
.readValue(hcertv1, GreenCertificate::class.java)
5364
.also { verificationResult.cborDecoded = true }
54-
65+
GreenCertificateData(cborObject.toString(), greenCertificate, issuedAt.atZone(ZoneOffset.UTC), expirationTime.atZone(ZoneOffset.UTC))
5566
} catch (e: Throwable) {
56-
return null
67+
null
5768
}
5869
}
5970
}

decoder/src/main/java/dgca/verifier/app/decoder/model/GreenCertificate.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ package dgca.verifier.app.decoder.model
2424

2525
import com.fasterxml.jackson.annotation.JsonProperty
2626
import java.io.Serializable
27+
import java.util.*
2728

2829
/**
2930
* CBOR structure of the certificate
@@ -62,4 +63,15 @@ data class GreenCertificate(
6263
""
6364
}
6465
}
66+
67+
fun getIssuingCountry(): String = try {
68+
when {
69+
vaccinations?.isNotEmpty() == true -> vaccinations.last().countryOfVaccination
70+
tests?.isNotEmpty() == true -> tests.last().countryOfVaccination
71+
recoveryStatements?.isNotEmpty() == true -> recoveryStatements.last().countryOfVaccination
72+
else -> ""
73+
}
74+
} catch (ex: Exception) {
75+
""
76+
}.toLowerCase(Locale.ROOT)
6577
}

decoder/src/main/java/dgca/verifier/app/decoder/model/VerificationResult.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@ data class VerificationResult(
3131
var isSchemaValid: Boolean = false,
3232
var isIssuedTimeCorrect: Boolean = false,
3333
var isNotExpired: Boolean = false,
34+
var rulesValidationFailed: Boolean = false,
3435
var testVerification: TestVerificationResult? = null
3536
) {
3637

3738
fun isValid(): Boolean {
3839
val isTestValid = testVerification?.isTestValid() ?: true
3940
return base45Decoded && zlibDecoded && coseVerified && cborDecoded && isSchemaValid && isTestValid &&
40-
isIssuedTimeCorrect && isNotExpired
41+
isIssuedTimeCorrect && isNotExpired && !rulesValidationFailed
4142
}
4243

4344
/**

0 commit comments

Comments
 (0)