1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.neo4j.server.configuration.validation;
21
22 import java.net.URI;
23 import java.net.URISyntaxException;
24
25 import org.apache.commons.configuration.Configuration;
26 import org.neo4j.server.configuration.Configurator;
27
28 public class WebadminConfigurationRule implements ValidationRule {
29 @Override
30 public void validate(Configuration configuration) throws RuleFailedException {
31 String managementApi = validateConfigurationContainsKey(configuration, Configurator.MANAGEMENT_PATH_PROPERTY_KEY);
32 String restApi = validateConfigurationContainsKey(configuration, Configurator.DATA_API_PATH_PROPERTY_KEY);
33
34
35 URI managementUri = validateAndNormalizeUri(managementApi, Configurator.MANAGEMENT_PATH_PROPERTY_KEY);
36 URI restUri = validateAndNormalizeUri(restApi, Configurator.DATA_API_PATH_PROPERTY_KEY);
37
38
39 configuration.clearProperty(Configurator.MANAGEMENT_PATH_PROPERTY_KEY);
40 configuration.addProperty(Configurator.MANAGEMENT_PATH_PROPERTY_KEY, managementUri.toString());
41
42 configuration.clearProperty(Configurator.DATA_API_PATH_PROPERTY_KEY);
43 configuration.addProperty(Configurator.DATA_API_PATH_PROPERTY_KEY, restUri.toString());
44 }
45
46 private String trimTrailingSlash(String uri) {
47 if(!uri.endsWith("/")) return uri;
48
49 return uri.substring(0, uri.length() -1);
50 }
51
52 private URI validateAndNormalizeUri(String uri, String property) {
53 URI result = null;
54 try {
55 result = new URI(uri).normalize();
56 String resultStr = result.toString();
57 if(resultStr.endsWith("/")) {
58 result = new URI(trimTrailingSlash(resultStr));
59 }
60 } catch (URISyntaxException e) {
61 new RuleFailedException("The specified URI [%s] for the property [%s] is invalid. Please correct the neo4j-server.properties file.", uri ,property);
62 }
63 return result;
64 }
65
66 private String validateConfigurationContainsKey(Configuration configuration, String key) throws RuleFailedException {
67 if(!configuration.containsKey(key)) {
68 throw new RuleFailedException("Webadmin configuration not found. Check that the neo4j-server.properties file contains the [%s] property.", key);
69 }
70
71 return (String)configuration.getProperty(key);
72 }
73 }