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

Commit 825754c

Browse files
author
lmeinen
committed
Modified VerificationResponse to be more fine-grained
1 parent aeb7656 commit 825754c

File tree

10 files changed

+128
-47
lines changed

10 files changed

+128
-47
lines changed

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: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
import ch.admin.bag.covidcertificate.backend.verification.check.ws.controller.VerificationController;
1414
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.TrustListConfig;
1515
import ch.admin.bag.covidcertificate.backend.verification.check.ws.util.VerifierHelper;
16+
import com.fasterxml.jackson.databind.DeserializationFeature;
17+
import com.fasterxml.jackson.databind.ObjectMapper;
18+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
19+
import com.fasterxml.jackson.module.kotlin.KotlinModule;
1620
import org.springframework.beans.factory.annotation.Value;
1721
import org.springframework.context.annotation.Bean;
1822
import org.springframework.context.annotation.Configuration;
@@ -44,8 +48,23 @@ public TrustListConfig trustListConfig() {
4448
}
4549

4650
@Bean
47-
public VerifierHelper verifierHelper(TrustListConfig trustListConfig) {
51+
public VerifierHelper verifierHelper(
52+
TrustListConfig trustListConfig, ObjectMapper objectMapper) {
4853
return new VerifierHelper(
49-
trustListConfig, verifierBaseUrl, dscEndpoint, revocationEndpoint, rulesEndpoint);
54+
trustListConfig,
55+
verifierBaseUrl,
56+
dscEndpoint,
57+
revocationEndpoint,
58+
rulesEndpoint,
59+
objectMapper);
60+
}
61+
62+
@Bean
63+
public ObjectMapper objectMapper() {
64+
return new ObjectMapper()
65+
// Need this to ignore subjectPublicKeyInfo field in /updates response
66+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
67+
.registerModule(new KotlinModule())
68+
.registerModule(new JavaTimeModule());
5069
}
5170
}

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: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import ch.admin.bag.covidcertificate.sdk.core.models.state.DecodeState;
2020
import ch.admin.bag.covidcertificate.sdk.core.models.state.DecodeState.SUCCESS;
2121
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState;
22+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.ERROR;
23+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.INVALID;
2224
import ch.ubique.openapi.docannotations.Documentation;
2325
import org.slf4j.Logger;
2426
import org.slf4j.LoggerFactory;
@@ -75,7 +77,14 @@ public VerificationController(TrustListConfig trustListConfig, VerifierHelper ve
7577
// Build response
7678
final var verificationResponse = new VerificationResponse();
7779
verificationResponse.setHcertDecoded(dccHolder);
78-
verificationResponse.setValid(verificationState instanceof VerificationState.SUCCESS);
79-
return ResponseEntity.ok(verificationResponse);
80+
if (verificationState instanceof VerificationState.SUCCESS) {
81+
verificationResponse.setSuccessState((VerificationState.SUCCESS) verificationState);
82+
} else if (verificationState instanceof ERROR) {
83+
verificationResponse.setErrorState((ERROR) verificationState);
84+
} else {
85+
verificationResponse.setInvalidState((INVALID) verificationState);
86+
}
87+
final var response = ResponseEntity.status(200).body(verificationResponse);
88+
return response;
8089
}
81-
}
90+
}
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package ch.admin.bag.covidcertificate.backend.verification.check.ws.model;
22

33
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder;
4+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState;
5+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.ERROR;
6+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.INVALID;
7+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.SUCCESS;
48

59
public class VerificationResponse {
610

7-
private boolean valid;
11+
private SUCCESS successState;
12+
private ERROR errorState;
13+
private INVALID invalidState;
814
private DccHolder hcertDecoded;
915

10-
public boolean isValid() {
11-
return valid;
16+
public VerificationState getSuccessState() {
17+
return successState;
1218
}
1319

14-
public void setValid(boolean valid) {
15-
this.valid = valid;
20+
public void setSuccessState(SUCCESS successState) {
21+
this.successState = successState;
1622
}
1723

1824
public DccHolder getHcertDecoded() {
@@ -22,4 +28,22 @@ public DccHolder getHcertDecoded() {
2228
public void setHcertDecoded(DccHolder hcertDecoded) {
2329
this.hcertDecoded = hcertDecoded;
2430
}
31+
32+
public ERROR getErrorState() {
33+
return errorState;
34+
}
35+
36+
public void setErrorState(
37+
ERROR errorState) {
38+
this.errorState = errorState;
39+
}
40+
41+
public INVALID getInvalidState() {
42+
return invalidState;
43+
}
44+
45+
public void setInvalidState(
46+
INVALID invalidState) {
47+
this.invalidState = invalidState;
48+
}
2549
}

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.Rule;
99
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.RuleSet;
1010
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.TrustList;
11-
import com.fasterxml.jackson.databind.DeserializationFeature;
1211
import com.fasterxml.jackson.databind.ObjectMapper;
13-
import com.fasterxml.jackson.module.kotlin.KotlinModule;
1412
import java.io.IOException;
1513
import java.net.URI;
1614
import java.net.URISyntaxException;
@@ -29,30 +27,26 @@
2927
public class VerifierHelper {
3028

3129
private static final Logger logger = LoggerFactory.getLogger(VerifierHelper.class);
32-
private static final ObjectMapper objectMapper =
33-
new ObjectMapper()
34-
// Need this to ignore subjectPublicKeyInfo field in /updates response
35-
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
36-
.registerModule(new KotlinModule());
3730
private static final HttpClient httpClient = HttpClient.newHttpClient();
38-
3931
private final TrustListConfig trustListConfig;
4032
private final String verifierBaseUrl;
4133
private final String dscEndpoint;
4234
private final String revocationEndpoint;
4335
private final String rulesEndpoint;
36+
private final ObjectMapper objectMapper;
4437

4538
public VerifierHelper(
46-
TrustListConfig trustListConfig,
47-
String verifierBaseUrl,
48-
String dscEndpoint,
49-
String revocationEndpoint,
50-
String rulesEndpoint) {
39+
TrustListConfig trustListConfig,
40+
String verifierBaseUrl,
41+
String dscEndpoint,
42+
String revocationEndpoint,
43+
String rulesEndpoint, ObjectMapper objectMapper) {
5144
this.trustListConfig = trustListConfig;
5245
this.verifierBaseUrl = verifierBaseUrl;
5346
this.dscEndpoint = dscEndpoint;
5447
this.revocationEndpoint = revocationEndpoint;
5548
this.rulesEndpoint = rulesEndpoint;
49+
this.objectMapper = objectMapper;
5650
}
5751

5852
// TODO: How to handle response failures?

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/config/TestConfig.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,14 @@
1313
import ch.admin.bag.covidcertificate.backend.verification.check.ws.controller.VerificationController;
1414
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.TrustListConfig;
1515
import ch.admin.bag.covidcertificate.backend.verification.check.ws.util.VerifierHelper;
16+
import com.fasterxml.jackson.databind.DeserializationFeature;
17+
import com.fasterxml.jackson.databind.ObjectMapper;
18+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
19+
import com.fasterxml.jackson.module.kotlin.KotlinModule;
1620
import org.springframework.beans.factory.annotation.Value;
1721
import org.springframework.context.annotation.Bean;
1822
import org.springframework.context.annotation.Configuration;
23+
import org.springframework.context.annotation.Primary;
1924
import org.springframework.context.annotation.Profile;
2025

2126
@Profile("test")
@@ -46,8 +51,24 @@ public TrustListConfig trustListConfig() {
4651
}
4752

4853
@Bean
49-
public VerifierHelper verifierHelper(TrustListConfig trustListConfig) {
54+
public VerifierHelper verifierHelper(
55+
TrustListConfig trustListConfig, ObjectMapper objectMapper) {
5056
return new VerifierHelper(
51-
trustListConfig, verifierBaseUrl, dscEndpoint, revocationEndpoint, rulesEndpoint);
57+
trustListConfig,
58+
verifierBaseUrl,
59+
dscEndpoint,
60+
revocationEndpoint,
61+
rulesEndpoint,
62+
objectMapper);
63+
}
64+
65+
@Bean
66+
@Primary
67+
public ObjectMapper objectMapper() {
68+
return new ObjectMapper()
69+
// Need this to ignore subjectPublicKeyInfo field in /updates response
70+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
71+
.registerModule(new KotlinModule())
72+
.registerModule(new JavaTimeModule());
5273
}
5374
}

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/controller/BaseControllerTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
2828
public abstract class BaseControllerTest {
2929

30-
@Autowired
31-
protected MockMvc mockMvc;
32-
protected ObjectMapper objectMapper = new ObjectMapper();
30+
@Autowired protected MockMvc mockMvc;
31+
@Autowired protected ObjectMapper objectMapper;
3332
}

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/controller/VerificationControllerTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package ch.admin.bag.covidcertificate.backend.verification.check.ws.controller;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
45
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
57
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
68
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
79
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
810

911
import ch.admin.bag.covidcertificate.backend.verification.check.model.HCertPayload;
12+
import ch.admin.bag.covidcertificate.backend.verification.check.ws.model.VerificationResponse;
13+
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState.SUCCESS;
1014
import org.junit.jupiter.api.Disabled;
1115
import org.junit.jupiter.api.Test;
1216
import org.slf4j.Logger;
@@ -67,5 +71,9 @@ void validCertTest() throws Exception {
6771
.andExpect(status().is2xxSuccessful())
6872
.andReturn()
6973
.getResponse();
74+
assertFalse(response.getContentAsString().isEmpty());
75+
final var verificationResponse = objectMapper
76+
.readValue(response.getContentAsString(), VerificationResponse.class);
77+
assertTrue(verificationResponse.getSuccessState() instanceof SUCCESS);
7078
}
7179
}

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/util/LibWrapperTest.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@
2222
import ch.admin.bag.covidcertificate.sdk.core.verifier.CertificateVerifier;
2323
import ch.admin.bag.covidcertificate.sdk.core.verifier.nationalrules.NationalRulesVerifier;
2424
import com.fasterxml.jackson.core.JsonProcessingException;
25-
import com.fasterxml.jackson.databind.DeserializationFeature;
2625
import com.fasterxml.jackson.databind.ObjectMapper;
27-
import com.fasterxml.jackson.module.kotlin.KotlinModule;
2826
import java.time.Clock;
2927
import java.time.Instant;
3028
import java.time.LocalDate;
@@ -33,15 +31,25 @@
3331
import java.util.List;
3432
import org.jetbrains.annotations.NotNull;
3533
import org.jetbrains.annotations.Nullable;
36-
import org.junit.jupiter.api.BeforeAll;
34+
import org.junit.jupiter.api.BeforeEach;
3735
import org.junit.jupiter.api.Disabled;
3836
import org.junit.jupiter.api.Test;
37+
import org.junit.jupiter.api.extension.ExtendWith;
3938
import org.slf4j.Logger;
4039
import org.slf4j.LoggerFactory;
40+
import org.springframework.beans.factory.annotation.Autowired;
41+
import org.springframework.boot.test.context.SpringBootTest;
42+
import org.springframework.test.context.ActiveProfiles;
43+
import org.springframework.test.context.TestPropertySource;
44+
import org.springframework.test.context.junit.jupiter.SpringExtension;
4145

4246
/**
4347
* Unit test to check the functionality of the decoding + verification pipeline using the core-sdk
4448
*/
49+
@ExtendWith(SpringExtension.class)
50+
@ActiveProfiles({"test"})
51+
@TestPropertySource("classpath:application-test.properties")
52+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
4553
class LibWrapperTest {
4654

4755
private static final String HC1_A =
@@ -50,17 +58,12 @@ class LibWrapperTest {
5058
"LT1:6BFY90R10RDWT 9O60GO0000W50JB06H08CK%QC/70YM8N34GB8FN04BC6S5WY01BC9HH597MTKGVC*JC1A6/Q63W5KF6746TPCBEC7ZKW.CU2DNXO VD5$C JC3/DMP8$ILZEDZ CW.C9WE.Y9AY8+S9VIAI3D8WEVM8:S9C+9$PC5$CUZCY$5Y$527BK/CV3VEAFC48$CS/M8WBD543I 2QRK$G6RXQT-T74F$SCMWJ+*VADUJR1T46 /Q+38HH61HVL-U78GRAKUIOIVTWXG5%JL%Q1SPOF9";
5159
private static final String hcert =
5260
"HC1:NCFOXN%TS3DH3ZSUZK+.V0ETD%65NL-AH-R6IOOA+I7CGA5I.I554S5.7AT4V22F/8X*G3M9JUPY0BX/KR96R/S09T./0LWTKD33236J3TA3M*4VV2 73-E3GG396B-43O058YIB73A*G3W19UEBY5:PI0EGSP4*2DN43U*0CEBQ/GXQFY73CIBC:G 7376BXBJBAJ UNFMJCRN0H3PQN*E33H3OA70M3FMJIJN523.K5QZ4A+2XEN QT QTHC31M3+E32R44$28A9H0D3ZCL4JMYAZ+S-A5$XKX6T2YC 35H/ITX8GL2-LH/CJTK96L6SR9MU9RFGJA6Q3QR$P2OIC0JVLA8J3ET3:H3A+2+33U SAAUOT3TPTO4UBZIC0JKQTL*QDKBO.AI9BVYTOCFOPS4IJCOT0$89NT2V457U8+9W2KQ-7LF9-DF07U$B97JJ1D7WKP/HLIJLRKF1MFHJP7NVDEBU1J*Z222E.GJ$874 7XTHLSS+%O SC$ZNV+OI7GXCWI+DZJBTQ8PYOR6WZ.VO1T2COOXM/FJBWJK4T97V5GFEIJ.KG9ULH9BKIGBCOJRQPHHA0D$E6% RU40HHS54";
53-
54-
private static final ObjectMapper objectMapper =
55-
new ObjectMapper()
56-
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
57-
.registerModule(new KotlinModule());
5861
private static final Logger logger = LoggerFactory.getLogger(LibWrapperTest.class);
59-
6062
private static CertificateVerifier certificateVerifier;
63+
@Autowired ObjectMapper objectMapper;
6164

62-
@BeforeAll
63-
static void setup() {
65+
@BeforeEach
66+
void setup() {
6467
try {
6568
final var acceptedVaccines =
6669
objectMapper.readValue(

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/java/ch/admin/bag/covidcertificate/backend/verification/check/ws/util/VerifierHelperTest.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.Jwks;
77
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.Rule;
88
import ch.admin.bag.covidcertificate.sdk.core.models.trustlist.RuleSet;
9-
import com.fasterxml.jackson.databind.DeserializationFeature;
109
import com.fasterxml.jackson.databind.ObjectMapper;
11-
import com.fasterxml.jackson.module.kotlin.KotlinModule;
1210
import java.io.IOException;
1311
import java.net.URI;
1412
import java.net.URISyntaxException;
@@ -22,25 +20,30 @@
2220
import java.util.Map;
2321
import org.junit.jupiter.api.Disabled;
2422
import org.junit.jupiter.api.Test;
23+
import org.junit.jupiter.api.extension.ExtendWith;
2524
import org.slf4j.Logger;
2625
import org.slf4j.LoggerFactory;
26+
import org.springframework.beans.factory.annotation.Autowired;
27+
import org.springframework.boot.test.context.SpringBootTest;
28+
import org.springframework.test.context.ActiveProfiles;
29+
import org.springframework.test.context.TestPropertySource;
30+
import org.springframework.test.context.junit.jupiter.SpringExtension;
2731
import org.springframework.web.util.UriComponentsBuilder;
2832

33+
@ExtendWith(SpringExtension.class)
34+
@ActiveProfiles({"test"})
35+
@TestPropertySource("classpath:application-test.properties")
36+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
2937
class VerifierHelperTest {
3038

3139
private static final Logger logger = LoggerFactory.getLogger(VerifierHelperTest.class);
32-
private static final ObjectMapper objectMapper =
33-
new ObjectMapper()
34-
// Need this to ignore subjectPublicKeyInfo field in /updates response
35-
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
36-
.registerModule(new KotlinModule());
3740
private static final HttpClient httpClient = HttpClient.newHttpClient();
38-
3941
private static final String verifierBaseUrl = "verifier.test.ch";
4042
private static final String dscEndpoint = "/trust/v1/keys/updates";
4143
private static final String rulesEndpoint = "/trust/v1/verificationRules";
4244
private static final String revocationEndpoint = "/trust/v1/revocationList";
4345
private static Map<String, String> etagMap = new HashMap<>();
46+
@Autowired ObjectMapper objectMapper;
4447

4548
@Test
4649
@Disabled("Need to mock Verifier Service endpoint")

ch-covidcertificate-backend-verification-check/ch-covidcertificate-backend-verification-check-ws/src/test/resources/application-test.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
# SPDX-License-Identifier: MPL-2.0
99
#
1010

11+
#verifier.baseurl=verifier.test.ch
1112
verifier.baseurl=verifier.test.ch

0 commit comments

Comments
 (0)