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

Commit a66247d

Browse files
Merge pull request #44 from admin-ch/feature/PTAPP-1049-m2m-sperre
fix: miss-spelled datetime value in configuration, added validate and…
2 parents 0afd530 + 499e118 commit a66247d

4 files changed

Lines changed: 126 additions & 4 deletions

File tree

src/main/java/ch/admin/bag/covidcode/authcodegeneration/lockdown/LockdownInterceptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ private boolean isInRange(LocalDateTime now, Endpoint.FromUntil fromUntil) {
5454
LocalDateTime from = (fromUntil.getFrom() == null ? LocalDateTime.MIN : fromUntil.getFrom());
5555
LocalDateTime until = (fromUntil.getUntil() == null ? LocalDateTime.MAX : fromUntil.getUntil());
5656

57-
return Range.between(from, until).contains(now);
57+
boolean isBetween = Range.between(from, until).contains(now);
58+
return isBetween;
5859
}
5960

6061
private boolean sameUri(String requestUri, Endpoint endpoint) {

src/main/java/ch/admin/bag/covidcode/authcodegeneration/lockdown/config/LockdownConfig.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
1111
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
1212

13+
import javax.annotation.PostConstruct;
14+
import javax.naming.ConfigurationException;
1315
import java.util.Collections;
1416
import java.util.List;
1517

@@ -28,4 +30,28 @@ public class LockdownConfig implements WebMvcConfigurer {
2830
public void addInterceptors(InterceptorRegistry registry) {
2931
registry.addInterceptor(new LockdownInterceptor(endpoints));
3032
}
33+
34+
@PostConstruct
35+
public void validate() throws ConfigurationException {
36+
if (endpoints.isEmpty()) {
37+
log.warn("no active lockdowns - please consider deactivating profile 'lockdown'!");
38+
} else {
39+
for (Endpoint endpoint : endpoints) {
40+
if (endpoint.getApplicable().isEmpty()) {
41+
log.warn("no active lockdowns for uri '{}' - please consider removing this endpoint!", endpoint.getUri());
42+
} else {
43+
for (Endpoint.FromUntil fromUntil : endpoint.getApplicable()) {
44+
if (fromUntil.getUntil()==null && fromUntil.getFrom()==null) {
45+
log.warn("endlessly active lockdowns for endpoint '{}' - please consider removing this from/until range!", endpoint.getUri());
46+
} else if (fromUntil.getUntil()!=null && fromUntil.getFrom()!=null) {
47+
if (!fromUntil.getFrom().isBefore(fromUntil.getUntil())) {
48+
log.error("endpoint '{}': invalid active range from '{}' until '{}'", endpoint.getUri(), fromUntil.getFrom(), fromUntil.getUntil());
49+
throw new ConfigurationException("Invalid range from="+fromUntil.getFrom()+" until="+fromUntil.getUntil()+" for Endpoint '"+endpoint.getUri()+"'");
50+
}
51+
}
52+
}
53+
}
54+
}
55+
}
56+
}
3157
}

src/main/resources/application-lockdown.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ lockdown:
55
applicable:
66
-
77
from: 2022-03-22T00:00:00.000Z
8-
until: 2020-03-23T23:59:59.000Z
8+
until: 2022-03-23T23:59:59.000Z
99
-
1010
from: 2022-04-01T00:00:00.000Z
1111
-
1212
uri: v1/onset
1313
applicable:
1414
-
1515
from: 2022-03-22T00:00:00.000Z
16-
until: 2020-03-23T23:59:59.000Z
16+
until: 2022-03-23T23:59:59.000Z
1717
-
1818
from: 2022-04-01T00:00:00.000Z
1919
-
2020
uri: v2/onset
2121
applicable:
2222
-
2323
from: 2022-03-22T00:00:00.000Z
24-
until: 2020-03-23T23:59:59.000Z
24+
until: 2022-03-23T23:59:59.000Z
2525
-
2626
from: 2022-04-01T00:00:00.000Z
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package ch.admin.bag.covidcode.authcodegeneration.lockdown;
2+
3+
import ch.admin.bag.covidcode.authcodegeneration.lockdown.config.Endpoint;
4+
import ch.admin.bag.covidcode.authcodegeneration.lockdown.config.LockdownConfig;
5+
import lombok.Builder;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.extension.ExtendWith;
9+
import org.mockito.InjectMocks;
10+
import org.mockito.junit.jupiter.MockitoExtension;
11+
import org.springframework.test.context.TestPropertySource;
12+
13+
import javax.naming.ConfigurationException;
14+
import java.time.LocalDateTime;
15+
import java.util.*;
16+
17+
import static org.junit.jupiter.api.Assertions.assertFalse;
18+
import static org.junit.jupiter.api.Assertions.assertThrows;
19+
20+
@ExtendWith(MockitoExtension.class)
21+
public class LockdownConfigTest {
22+
23+
private LockdownConfig lockdownConfig;
24+
25+
@BeforeEach
26+
private void init() {
27+
lockdownConfig = new LockdownConfig();
28+
}
29+
30+
@Test
31+
public void endpointWithRangeError() {
32+
List<Endpoint> endpoints = EndpointBuilder.have()
33+
.endpoint("xyz").fromUntil(LocalDateTime.MAX, LocalDateTime.MIN).build();
34+
35+
lockdownConfig.setEndpoints(endpoints);
36+
37+
assertThrows(ConfigurationException.class, () -> {
38+
lockdownConfig.validate();
39+
});
40+
}
41+
42+
43+
static class EndpointBuilder {
44+
private Map<String, List<Endpoint.FromUntil>> endpoints = new TreeMap<>();
45+
private List<Endpoint.FromUntil> fromUntils = new ArrayList<>();
46+
47+
48+
protected static EndpointBuilder have() {
49+
return new EndpointBuilder();
50+
}
51+
52+
protected EndpointBuilder fromUntil(LocalDateTime from, LocalDateTime until) {
53+
54+
Endpoint.FromUntil fromUntil = new Endpoint.FromUntil();
55+
fromUntil.setFrom(from);
56+
fromUntil.setUntil(until);
57+
fromUntils.add(fromUntil);
58+
59+
return this;
60+
}
61+
62+
protected EndpointBuilder endpoint(String uri) {
63+
64+
List<Endpoint.FromUntil> current;
65+
if (endpoints.containsKey(uri)) {
66+
// endpoint followed by ranges
67+
current = endpoints.get(uri);
68+
if (current != fromUntils) {
69+
current.addAll(fromUntils);
70+
}
71+
fromUntils = new ArrayList<>();
72+
} else {
73+
// ranges followed by endpoint
74+
endpoints.put(uri, fromUntils);
75+
}
76+
77+
return this;
78+
}
79+
80+
protected List<Endpoint> build() {
81+
List<Endpoint> result = new ArrayList<>();
82+
for (String uri : endpoints.keySet()) {
83+
Endpoint endpoint = new Endpoint();
84+
endpoint.setUri(uri);
85+
endpoint.setApplicable(endpoints.get(uri));
86+
result.add(endpoint);
87+
}
88+
89+
this.endpoints = new TreeMap<>();
90+
this.fromUntils = new ArrayList<>();
91+
92+
return result;
93+
}
94+
}
95+
}

0 commit comments

Comments
 (0)