Skip to content

Commit 5d26958

Browse files
committed
Ref #25533: validate parameter id format
1 parent e6ce0ba commit 5d26958

3 files changed

Lines changed: 42 additions & 2 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/service/ParametersService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.List;
4040
import java.util.Map;
4141
import java.util.Set;
42+
import java.util.regex.Pattern;
4243
import java.util.stream.Collectors;
4344

4445
@Service
@@ -47,6 +48,8 @@ public class ParametersService {
4748
@Inject
4849
private IProxySpecProvider baseSpecProvider;
4950

51+
private static final Pattern PARAMETER_ID_PATTERN = Pattern.compile("[a-zA-Z\\d_-]*");
52+
5053
@PostConstruct
5154
public void init() {
5255
for (ProxySpec spec : baseSpecProvider.getSpecs()) {
@@ -59,8 +62,6 @@ private void validateSpec(ProxySpec spec) {
5962
return;
6063
}
6164

62-
// TODO validate parameter id
63-
6465
// Validate Parameter Definitions
6566
HashSet<String> parameterIds = new HashSet<>();
6667
for (ParameterDefinition definition : spec.getParameters().getDefinitions()) {
@@ -70,6 +71,9 @@ private void validateSpec(ProxySpec spec) {
7071
if (parameterIds.contains(definition.getId())) {
7172
throw new IllegalStateException(String.format("Configuration error: error in parameters of spec '%s', error: duplicate parameter id '%s'", spec.getId(), definition.getId()));
7273
}
74+
if (!PARAMETER_ID_PATTERN.matcher(definition.getId()).matches()) {
75+
throw new IllegalStateException(String.format("Configuration error: error in parameters of spec '%s', error: parameter id '%s' is invalid, id may only exists out of Latin letters, numbers, dash and underscore", spec.getId(), definition.getId()));
76+
}
7377
parameterIds.add(definition.getId());
7478
if (definition.getDisplayName() != null && StringUtils.isBlank(definition.getDisplayName())) {
7579
throw new IllegalStateException(String.format("Configuration error: error in parameters of spec '%s', error: displayName may not be blank of parameter with id '%s'", spec.getId(), definition.getId()));

src/test/java/eu/openanalytics/containerproxy/test/unit/TestParameterValidationService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public void testParameterDefinitionErrors() {
6060
test("classpath:application-parameters-validation-2.yaml", "Configuration error: error in parameters of spec 'big-parameters', error: duplicate parameter id 'parameter1'");
6161
test("classpath:application-parameters-validation-3.yaml", "Configuration error: error in parameters of spec 'big-parameters', error: displayName may not be blank of parameter with id 'parameter1'");
6262
test("classpath:application-parameters-validation-4.yaml", "Configuration error: error in parameters of spec 'big-parameters', error: description may not be blank of parameter with id 'parameter1'");
63+
test("classpath:application-parameters-validation-8.yaml", "Configuration error: error in parameters of spec 'big-parameters', error: parameter id 'parameter1$#>>>.;;' is invalid, id may only exists out of Latin letters, numbers, dash and underscore");
6364
}
6465

6566
@Test
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
spring:
2+
session:
3+
store-type: none
4+
data:
5+
redis:
6+
repositories:
7+
enabled: false
8+
proxy:
9+
authentication: simple
10+
container-backend: docker
11+
12+
13+
users:
14+
- name: demo
15+
password: demo
16+
- name: demo2
17+
password: demo2
18+
19+
docker:
20+
url: http://localhost:2375
21+
22+
specs:
23+
- id: big-parameters
24+
container-specs:
25+
- image: "openanalytics/shinyproxy-demo"
26+
cmd: [ "R", "-e", "shinyproxy::run_01_hello()" ]
27+
port-mapping:
28+
default: 3838
29+
parameters:
30+
definitions:
31+
- id: "parameter1$#>>>.;;"
32+
values:
33+
- parameter1:
34+
- a
35+
parameterblub: a

0 commit comments

Comments
 (0)