Skip to content
This repository was archived by the owner on Sep 15, 2023. It is now read-only.

Commit 43c010e

Browse files
authored
Merge pull request #2 from admin-ch/feature/sdk-version-up
covidcert sdk kotlin version up (1.0.1 -> 1.1.0)
2 parents 88f73aa + 54059fb commit 43c010e

File tree

14 files changed

+103
-401
lines changed

14 files changed

+103
-401
lines changed

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
<dependency>
7171
<groupId>ch.admin.bag.covidcertificate</groupId>
7272
<artifactId>CovidCertificate-SDK-Kotlin</artifactId>
73-
<version>1.0.1</version>
73+
<version>1.1.0</version>
7474
</dependency>
7575
<dependency>
7676
<groupId>org.jetbrains.kotlin</groupId>
@@ -133,9 +133,9 @@
133133
<configuration>
134134
<groupId>ch.admin.bag.covidcertificate</groupId>
135135
<artifactId>CovidCertificate-SDK-Kotlin</artifactId>
136-
<version>1.0.1</version>
136+
<version>1.1.0</version>
137137
<packaging>jar</packaging>
138-
<file>${basedir}/../lib/CovidCertificate-SDK-Kotlin-1.0.1.jar</file>
138+
<file>${basedir}/../lib/CovidCertificate-SDK-Kotlin-1.1.0.jar</file>
139139
</configuration>
140140
<executions>
141141
<execution>

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/main/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/config/WsBaseConfig.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
package ch.admin.bag.covidcertificate.backend.verification.check.ws.config;
1212

13-
import ch.admin.bag.covidcertificate.backend.verification.check.ws.verification.VerificationService;
1413
import ch.admin.bag.covidcertificate.backend.verification.check.ws.controller.VerificationController;
14+
import ch.admin.bag.covidcertificate.backend.verification.check.ws.jackson.CustomInstantSerializer;
15+
import ch.admin.bag.covidcertificate.backend.verification.check.ws.verification.VerificationService;
1516
import com.fasterxml.jackson.databind.DeserializationFeature;
1617
import com.fasterxml.jackson.databind.ObjectMapper;
1718
import com.fasterxml.jackson.databind.SerializationFeature;
19+
import com.fasterxml.jackson.databind.module.SimpleModule;
1820
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
1921
import com.fasterxml.jackson.module.kotlin.KotlinModule;
22+
import java.time.Instant;
2023
import java.util.List;
2124
import org.springframework.beans.factory.annotation.Value;
2225
import org.springframework.context.annotation.Bean;
@@ -49,14 +52,9 @@ public VerificationController verificationController(VerificationService verific
4952
}
5053

5154
@Bean
52-
public VerificationService verificationService(ObjectMapper objectMapper) {
55+
public VerificationService verificationService() {
5356
return new VerificationService(
54-
verifierBaseUrl,
55-
dscEndpoint,
56-
revocationEndpoint,
57-
rulesEndpoint,
58-
apiKey,
59-
objectMapper);
57+
verifierBaseUrl, dscEndpoint, revocationEndpoint, rulesEndpoint, apiKey);
6058
}
6159

6260
@Override
@@ -67,12 +65,15 @@ public void configureMessageConverters(final List<HttpMessageConverter<?>> conve
6765

6866
@Bean
6967
public ObjectMapper objectMapper() {
68+
SimpleModule serialization = new SimpleModule();
69+
serialization.addSerializer(Instant.class, new CustomInstantSerializer());
7070
ObjectMapper objectMapper =
7171
new ObjectMapper()
7272
// Needed to ignore `subjectPublicKeyInfo` field in /updates response
7373
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
7474
.registerModule(new KotlinModule())
7575
.registerModule(new JavaTimeModule())
76+
.registerModule(serialization)
7677
.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
7778
return objectMapper;
7879
}

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/main/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/controller/VerificationController.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
package ch.admin.bag.covidcertificate.backend.verification.check.ws.controller;
1212

1313
import ch.admin.bag.covidcertificate.backend.verification.check.model.HCertPayload;
14-
import ch.admin.bag.covidcertificate.backend.verification.check.ws.verification.VerificationService;
1514
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.VerificationResponse;
16-
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder;
15+
import ch.admin.bag.covidcertificate.backend.verification.check.ws.verification.VerificationService;
16+
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.CertificateHolder;
1717
import ch.admin.bag.covidcertificate.sdk.core.models.state.DecodeState;
1818
import ch.admin.bag.covidcertificate.sdk.core.models.state.DecodeState.SUCCESS;
1919
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState;
@@ -57,19 +57,19 @@ public VerificationController(VerificationService verificationService) {
5757
@RequestBody HCertPayload hCertPayload) throws InterruptedException {
5858
// Decode hcert
5959
final var decodeState = verificationService.decodeHCert(hCertPayload);
60-
DccHolder dccHolder;
60+
CertificateHolder certificateHolder;
6161
if (decodeState instanceof DecodeState.SUCCESS) {
62-
dccHolder = ((SUCCESS) decodeState).getDccHolder();
62+
certificateHolder = ((SUCCESS) decodeState).getCertificateHolder();
6363
} else {
6464
return ResponseEntity.badRequest().build();
6565
}
6666

6767
// Verify hcert
68-
final var verificationState = verificationService.verifyDcc(dccHolder);
68+
final var verificationState = verificationService.verifyDcc(certificateHolder);
6969

7070
// Build response
7171
final var verificationResponse = new VerificationResponse();
72-
verificationResponse.setHcertDecoded(dccHolder);
72+
verificationResponse.setHcertDecoded(certificateHolder);
7373
if (verificationState instanceof VerificationState.SUCCESS) {
7474
verificationResponse.setSuccessState((VerificationState.SUCCESS) verificationState);
7575
} else if (verificationState instanceof ERROR) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ch.admin.bag.covidcertificate.backend.verification.check.ws.jackson;
2+
3+
import com.fasterxml.jackson.core.JsonGenerator;
4+
import com.fasterxml.jackson.databind.SerializerProvider;
5+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
6+
import java.io.IOException;
7+
import java.time.Instant;
8+
9+
public class CustomInstantSerializer extends StdSerializer<Instant> {
10+
11+
public CustomInstantSerializer() {
12+
this(null);
13+
}
14+
15+
public CustomInstantSerializer(Class<Instant> t) {
16+
super(t);
17+
}
18+
19+
@Override
20+
public void serialize(
21+
Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
22+
throws IOException {
23+
jsonGenerator.writeNumber(instant.getEpochSecond());
24+
}
25+
}

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/main/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/model/VerificationResponse.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ch.admin.bag.covidcertificate.backend.verification.check.ws.model;
22

3-
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder;
3+
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.CertificateHolder;
44
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState;
55
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.ERROR;
66
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.INVALID;
@@ -11,7 +11,7 @@ public class VerificationResponse {
1111
private SUCCESS successState;
1212
private ERROR errorState;
1313
private INVALID invalidState;
14-
private DccHolder hcertDecoded;
14+
private CertificateHolder hcertDecoded;
1515

1616
public VerificationState getSuccessState() {
1717
return successState;
@@ -21,11 +21,11 @@ public void setSuccessState(SUCCESS successState) {
2121
this.successState = successState;
2222
}
2323

24-
public DccHolder getHcertDecoded() {
24+
public CertificateHolder getHcertDecoded() {
2525
return hcertDecoded;
2626
}
2727

28-
public void setHcertDecoded(DccHolder hcertDecoded) {
28+
public void setHcertDecoded(CertificateHolder hcertDecoded) {
2929
this.hcertDecoded = hcertDecoded;
3030
}
3131

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/main/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/verification/TestData.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,20 @@ object TestData {
5353
val e = "AQAB"
5454

5555
return listOf(
56-
Jwk.fromNE("", n, e, use = "")
56+
Jwk.fromNE("", n, e, use = "sig")
5757
)
5858
}
5959

6060
@JvmStatic
6161
fun getCertificateLightTestKey() =
62-
Jwk.fromXY(LIGHT_TEST_KID, LIGHT_TEST_X, LIGHT_TEST_Y, use = "")
62+
Jwk.fromXY(LIGHT_TEST_KID, LIGHT_TEST_X, LIGHT_TEST_Y, use = "l")
6363

6464
@JvmStatic
6565
fun getHardcodedSigningKeys(flavor: String): List<Jwk> {
6666
val jwks = mutableListOf<Jwk>()
6767
when (flavor) {
6868
"dev" -> {
69-
jwks.add(Jwk.fromNE(CH_DEV_KID, CH_DEV_N, CH_DEV_E, use = ""))
69+
jwks.add(Jwk.fromNE(CH_DEV_KID, CH_DEV_N, CH_DEV_E, use = "sig"))
7070

7171
jwks.add(
7272
Jwk.fromXY(
@@ -94,7 +94,7 @@ object TestData {
9494
)
9595
}
9696
"abn" -> {
97-
jwks.add(Jwk.fromNE(CH_ABN_KID, CH_ABN_N, CH_ABN_E, use = ""))
97+
jwks.add(Jwk.fromNE(CH_ABN_KID, CH_ABN_N, CH_ABN_E, use = "sig"))
9898

9999
jwks.add(
100100
Jwk.fromXY(
@@ -122,7 +122,7 @@ object TestData {
122122
)
123123
}
124124
else -> {
125-
jwks.add(Jwk.fromNE(CH_PROD_KID, CH_PROD_N, CH_PROD_E, use = ""))
125+
jwks.add(Jwk.fromNE(CH_PROD_KID, CH_PROD_N, CH_PROD_E, use = "sig"))
126126
}
127127
}
128128
return jwks

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/main/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/verification/VerificationService.java

Lines changed: 6 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@
44
import ch.admin.bag.covidcertificate.backend.verification.check.model.cert.CertFormat;
55
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.IntermediateRuleSet;
66
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.TrustListConfig;
7-
import ch.admin.bag.covidcertificate.sdk.core.data.AcceptedVaccineProvider;
87
import ch.admin.bag.covidcertificate.sdk.core.decoder.CertificateDecoder;
9-
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder;
10-
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.eu.VaccinationEntry;
11-
import ch.admin.bag.covidcertificate.sdk.core.models.products.AcceptedVaccine;
12-
import ch.admin.bag.covidcertificate.sdk.core.models.products.Vaccine;
8+
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.CertificateHolder;
139
import ch.admin.bag.covidcertificate.sdk.core.models.state.DecodeState;
1410
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState;
1511
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.Jwk;
@@ -19,21 +15,15 @@
1915
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.RuleSet;
2016
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.TrustList;
2117
import ch.admin.bag.covidcertificate.sdk.core.verifier.CertificateVerifier;
22-
import ch.admin.bag.covidcertificate.sdk.core.verifier.nationalrules.NationalRulesVerifier;
23-
import com.fasterxml.jackson.databind.ObjectMapper;
24-
import java.io.IOException;
2518
import java.net.URI;
2619
import java.net.URISyntaxException;
2720
import java.util.ArrayList;
2821
import java.util.HashMap;
2922
import java.util.List;
3023
import java.util.Map;
3124
import java.util.stream.Collectors;
32-
import org.jetbrains.annotations.NotNull;
33-
import org.jetbrains.annotations.Nullable;
3425
import org.slf4j.Logger;
3526
import org.slf4j.LoggerFactory;
36-
import org.springframework.core.io.ClassPathResource;
3727
import org.springframework.http.HttpHeaders;
3828
import org.springframework.http.MediaType;
3929
import org.springframework.http.RequestEntity;
@@ -56,103 +46,22 @@ public class VerificationService {
5646
private final String apiKey;
5747
private final RestTemplate rt = new RestTemplate();
5848
private final TrustListConfig trustListConfig = new TrustListConfig();
59-
private final ObjectMapper objectMapper;
60-
private CertificateVerifier certificateVerifier;
49+
private CertificateVerifier certificateVerifier = new CertificateVerifier();
6150

6251
public VerificationService(
6352
String verifierBaseUrl,
6453
String dscEndpoint,
6554
String revocationEndpoint,
6655
String rulesEndpoint,
67-
String apiKey,
68-
ObjectMapper objectMapper) {
56+
String apiKey) {
6957
this.verifierBaseUrl = verifierBaseUrl;
7058
this.dscEndpoint = dscEndpoint;
7159
this.revocationEndpoint = revocationEndpoint;
7260
this.rulesEndpoint = rulesEndpoint;
7361
this.apiKey = apiKey;
74-
this.objectMapper = objectMapper;
75-
initCertificateVerifier();
7662
updateTrustListConfig();
7763
}
7864

79-
public void initCertificateVerifier() {
80-
try {
81-
final var acceptedVaccines =
82-
this.objectMapper.readValue(
83-
new ClassPathResource("acceptedCHVaccine.json").getFile(),
84-
AcceptedVaccine.class);
85-
final var acceptedVaccineProvider =
86-
new AcceptedVaccineProvider() {
87-
88-
@NotNull
89-
@Override
90-
public String getVaccineName(@NotNull VaccinationEntry vaccinationEntry) {
91-
final var matchingVaccine =
92-
acceptedVaccines.getEntries().stream()
93-
.filter(
94-
vaccine ->
95-
vaccine.getCode()
96-
.equals(
97-
vaccinationEntry
98-
.getMedicinialProduct()))
99-
.findFirst();
100-
return matchingVaccine.map(Vaccine::getName).orElse("");
101-
}
102-
103-
@NotNull
104-
@Override
105-
public String getProphylaxis(@NotNull VaccinationEntry vaccinationEntry) {
106-
final var matchingVaccine =
107-
acceptedVaccines.getEntries().stream()
108-
.filter(
109-
vaccine ->
110-
vaccine.getCode()
111-
.equals(
112-
vaccinationEntry
113-
.getMedicinialProduct()))
114-
.findFirst();
115-
return matchingVaccine.map(Vaccine::getProphylaxis).orElse("");
116-
}
117-
118-
@NotNull
119-
@Override
120-
public String getAuthHolder(@NotNull VaccinationEntry vaccinationEntry) {
121-
final var matchingVaccine =
122-
acceptedVaccines.getEntries().stream()
123-
.filter(
124-
vaccine ->
125-
vaccine.getCode()
126-
.equals(
127-
vaccinationEntry
128-
.getMedicinialProduct()))
129-
.findFirst();
130-
return matchingVaccine.map(Vaccine::getAuth_holder).orElse("");
131-
}
132-
133-
@Nullable
134-
@Override
135-
public Vaccine getVaccineDataFromList(
136-
@NotNull VaccinationEntry vaccinationEntry) {
137-
final var matchingVaccine =
138-
acceptedVaccines.getEntries().stream()
139-
.filter(
140-
vaccine ->
141-
vaccine.getCode()
142-
.equals(
143-
vaccinationEntry
144-
.getMedicinialProduct()))
145-
.findFirst();
146-
return matchingVaccine.orElse(null);
147-
}
148-
};
149-
final var nationalRulesVerifier = new NationalRulesVerifier(acceptedVaccineProvider);
150-
certificateVerifier = new CertificateVerifier(nationalRulesVerifier);
151-
} catch (IOException e) {
152-
logger.error("Couldn't load accepted vaccine data from json: {}", e.getMessage());
153-
}
154-
}
155-
15665
public void updateTrustListConfig() {
15766
try {
15867
logger.info("updating trust list config");
@@ -266,7 +175,8 @@ public DecodeState decodeHCert(HCertPayload hCertPayload) {
266175
return CertificateDecoder.decode(hCertPayload.getHcert());
267176
}
268177

269-
public VerificationState verifyDcc(DccHolder dccHolder) {
270-
return VerifyWrapper.verify(certificateVerifier, dccHolder, trustListConfig.getTrustList());
178+
public VerificationState verifyDcc(CertificateHolder certificateHolder) {
179+
return VerifyWrapper.verify(
180+
certificateVerifier, certificateHolder, trustListConfig.getTrustList());
271181
}
272182
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
package ch.admin.bag.covidcertificate.backend.verification.check.ws.verification
22

3-
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder
3+
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.CertificateHolder
44
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState
55
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.TrustList
66
import ch.admin.bag.covidcertificate.sdk.core.verifier.CertificateVerifier
7-
8-
import kotlinx.coroutines.runBlocking;
7+
import kotlinx.coroutines.runBlocking
98

109
object VerifyWrapper {
1110

1211
@JvmStatic
1312
fun verify(
14-
certificateVerifier: CertificateVerifier,
15-
dccHolder: DccHolder,
16-
trustList: TrustList
13+
certificateVerifier: CertificateVerifier,
14+
certificateHolder: CertificateHolder,
15+
trustList: TrustList
1716
): VerificationState = runBlocking {
18-
certificateVerifier.verify(dccHolder, trustList);
17+
certificateVerifier.verify(certificateHolder, trustList);
1918
}
2019
}

0 commit comments

Comments
 (0)