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

Commit 6f01ab8

Browse files
committed
DEVEXP-184: Forcing https/443 when using cloud auth
Prevents the user from having to remember to set the manage port to 443 instead of 8002 and the admin port to 443 instead of 8001.
1 parent f22a2f8 commit 6f01ab8

File tree

9 files changed

+88
-53
lines changed

9 files changed

+88
-53
lines changed

build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ java {
1616
}
1717

1818
repositories {
19-
mavenCentral()
19+
mavenLocal()
2020
maven {
2121
url "https://nexus.marklogic.com/repository/maven-snapshots/"
2222
}
23+
mavenCentral()
2324
}
2425

2526
// Do not cache changing modules
@@ -30,6 +31,9 @@ configurations.all {
3031
}
3132

3233
dependencies {
34+
api('com.marklogic:marklogic-client-api:6.1-SNAPSHOT') {
35+
changing = true
36+
}
3337
api('com.marklogic:ml-javaclient-util:4.5-SNAPSHOT') {
3438
changing = true
3539
}

src/main/java/com/marklogic/mgmt/DefaultManageConfigFactory.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,6 @@ public void initialize() {
7272
}
7373
});
7474

75-
propertyConsumerMap.put("mlCloudApiKey", (config, prop) -> {
76-
logger.info("Setting cloud API key");
77-
config.setCloudApiKey(prop);
78-
});
79-
8075
propertyConsumerMap.put("mlManageBasePath", (config, prop) -> {
8176
logger.info("Manage base path: " + prop);
8277
config.setBasePath(prop);
@@ -130,7 +125,15 @@ public void initialize() {
130125
propertyConsumerMap.put("mlSecurityPassword", (config, prop) -> {
131126
config.setSecurityPassword(prop);
132127
});
133-
}
128+
129+
// Processed last so that it can override scheme/port
130+
propertyConsumerMap.put("mlCloudApiKey", (config, prop) -> {
131+
logger.info("Setting Manage cloud API key and forcing scheme to HTTPS and port to 443");
132+
config.setCloudApiKey(prop);
133+
config.setScheme("https");
134+
config.setPort(443);
135+
});
136+
}
134137

135138
@Override
136139
public ManageConfig newManageConfig() {

src/main/java/com/marklogic/mgmt/admin/DefaultAdminConfigFactory.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ public void initialize() {
6868
}
6969
});
7070

71-
propertyConsumerMap.put("mlCloudApiKey", (config, prop) -> {
72-
logger.info("Setting cloud API key");
73-
config.setCloudApiKey(prop);
74-
});
75-
7671
propertyConsumerMap.put("mlAdminBasePath", (config, prop) -> {
7772
logger.info("Admin base path: " + prop);
7873
config.setBasePath(prop);
@@ -102,7 +97,15 @@ public void initialize() {
10297
logger.info("Using trust management algorithm for SSL for Admin app server: " + prop);
10398
config.setTrustManagementAlgorithm(prop);
10499
});
105-
}
100+
101+
// Processed last so that it can override scheme/port
102+
propertyConsumerMap.put("mlCloudApiKey", (config, prop) -> {
103+
logger.info("Setting Admin cloud API key and forcing scheme to HTTPS and port to 443");
104+
config.setCloudApiKey(prop);
105+
config.setPort(443);
106+
config.setScheme("https");
107+
});
108+
}
106109

107110
@Override
108111
public AdminConfig newAdminConfig() {

src/main/java/com/marklogic/mgmt/util/SimplePropertySource.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ public class SimplePropertySource implements PropertySource {
99
public SimplePropertySource(String... propNamesAndValues) {
1010
props = new Properties();
1111
for (int i = 0; i < propNamesAndValues.length; i += 2) {
12-
props.setProperty(propNamesAndValues[i], propNamesAndValues[i + 1]);
12+
final String value = propNamesAndValues[i + 1];
13+
if (value != null) {
14+
props.setProperty(propNamesAndValues[i], value);
15+
}
1316
}
1417
}
1518

src/main/java/com/marklogic/rest/util/RestTemplateUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static RestTemplate newRestTemplate(String host, int port, String usernam
6666
public static RestTemplate newRestTemplate(RestConfig config) {
6767
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
6868
OkHttpClient client = OkHttpClientBuilderFactory
69-
.newOkHttpClientBuilder(bean.getHost(), bean.getPort(), bean.getSecurityContext())
69+
.newOkHttpClientBuilder(bean.getHost(), bean.getSecurityContext())
7070
.build();
7171

7272
RestTemplate rt = new RestTemplate(new OkHttp3ClientHttpRequestFactory(client));

src/test/java/com/marklogic/mgmt/DefaultManageConfigFactoryTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.marklogic.mgmt;
22

3-
import com.marklogic.mgmt.admin.AdminConfig;
4-
import com.marklogic.mgmt.admin.DefaultAdminConfigFactory;
53
import com.marklogic.mgmt.util.SimplePropertySource;
6-
import static org.junit.jupiter.api.Assertions.*;
74
import org.junit.jupiter.api.Test;
85

6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
99
public class DefaultManageConfigFactoryTest {
1010

1111
@Test
@@ -103,11 +103,16 @@ public void mlManageHost() {
103103
void cloudApiKeyAndBasePath() {
104104
ManageConfig config = configure(
105105
"mlCloudApiKey", "my-key",
106-
"mlManageBasePath", "/manage/path"
106+
"mlManageBasePath", "/manage/path",
107+
"mlManagePort", "8002",
108+
"mlManageScheme", "http"
107109
);
108110

109111
assertEquals("my-key", config.getCloudApiKey());
110112
assertEquals("/manage/path", config.getBasePath());
113+
assertEquals(443, config.getPort(), "When a cloud API key is provided, the mlManagePort and mlManageScheme " +
114+
"options should be overridden since https/443 are guaranteed to be the correct values");
115+
assertEquals("https", config.getScheme());
111116
}
112117

113118
private ManageConfig configure(String... properties) {
Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.marklogic.mgmt;
22

3+
import com.marklogic.mgmt.admin.DefaultAdminConfigFactory;
4+
import com.marklogic.mgmt.util.SimplePropertySource;
35
import org.springframework.beans.factory.annotation.Value;
46
import org.springframework.context.annotation.Bean;
57
import org.springframework.context.annotation.Configuration;
@@ -16,32 +18,32 @@
1618
@PropertySource(value = { "classpath:test.properties", "classpath:user.properties" }, ignoreResourceNotFound = true)
1719
public class TestConfig {
1820

19-
@Value("${mlManageHost:localhost}")
21+
@Value("${mlHost:localhost}")
2022
private String host;
2123

22-
@Value("${mlManagePort:8002}")
24+
@Value("${mlManagePort:#{NULL}}")
2325
private Integer managePort;
2426

25-
@Value("${mlAdminPort:8001}")
27+
@Value("${mlAdminPort:#{NULL}}")
2628
private Integer adminPort;
2729

28-
@Value("${mlManageUsername:admin}")
30+
@Value("${mlUsername:#{NULL}}")
2931
private String username;
3032

31-
@Value("${mlManagePassword:}")
33+
@Value("${mlPassword:#{NULL}}")
3234
private String password;
3335

34-
@Value("${mlBasePath:}")
36+
@Value("${mlBasePath:#{NULL}}")
3537
private String basePath;
3638

37-
@Value("${mlCloudApiKey:}")
39+
@Value("${mlCloudApiKey:#{NULL}}")
3840
private String cloudApiKey;
3941

40-
@Value("${mlScheme:http}")
42+
@Value("${mlScheme:#{NULL}}")
4143
private String scheme;
4244

43-
@Value("${mlSimpleSsl:false}")
44-
private boolean simpleSsl;
45+
@Value("${mlSimpleSsl:#{NULL}}")
46+
private Boolean simpleSsl;
4547

4648
/**
4749
* Has to be static so that Spring instantiates it first.
@@ -55,13 +57,16 @@ public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
5557

5658
@Bean
5759
public ManageConfig manageConfig() {
58-
ManageConfig config = new ManageConfig(host, managePort, username, password);
59-
config.setBasePath(basePath);
60-
config.setCloudApiKey(cloudApiKey);
61-
config.setScheme(scheme);
62-
if (simpleSsl) {
63-
config.setConfigureSimpleSsl(true);
64-
}
60+
ManageConfig config = new DefaultManageConfigFactory(new SimplePropertySource(
61+
"mlHost", host,
62+
"mlManagePort", managePort != null ? managePort.toString() : null,
63+
"mlUsername", username,
64+
"mlPassword", password,
65+
"mlManageBasePath", basePath,
66+
"mlCloudApiKey", cloudApiKey,
67+
"mlManageScheme", scheme,
68+
"mlManageSimpleSsl", simpleSsl != null ? simpleSsl.toString() : null
69+
)).newManageConfig();
6570
// Clean the JSON by default
6671
config.setCleanJsonPayloads(true);
6772
return config;
@@ -72,13 +77,15 @@ public ManageConfig manageConfig() {
7277
*/
7378
@Bean
7479
public AdminConfig adminConfig() {
75-
AdminConfig config = new AdminConfig(host, adminPort, username, password);
76-
config.setBasePath(basePath);
77-
config.setCloudApiKey(cloudApiKey);
78-
config.setScheme(scheme);
79-
if (simpleSsl) {
80-
config.setConfigureSimpleSsl(true);
81-
}
82-
return config;
80+
return new DefaultAdminConfigFactory(new SimplePropertySource(
81+
"mlHost", host,
82+
"mlAdminPort", adminPort != null ? adminPort.toString() : null,
83+
"mlUsername", username,
84+
"mlPassword", password,
85+
"mlAdminBasePath", basePath,
86+
"mlCloudApiKey", cloudApiKey,
87+
"mlAdminScheme", scheme,
88+
"mlAdminSimpleSsl", simpleSsl != null ? simpleSsl.toString() : null
89+
)).newAdminConfig();
8390
}
8491
}

src/test/java/com/marklogic/mgmt/admin/DefaultAdminConfigFactoryTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.marklogic.mgmt.admin;
22

3-
import com.marklogic.appdeployer.AppConfig;
4-
import com.marklogic.appdeployer.DefaultAppConfigFactory;
53
import com.marklogic.mgmt.util.SimplePropertySource;
6-
import static org.junit.jupiter.api.Assertions.*;
74
import org.junit.jupiter.api.Test;
85

6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
99
public class DefaultAdminConfigFactoryTest {
1010

1111
@Test
@@ -61,11 +61,15 @@ public void sslProperties() {
6161
void cloudApiKeyAndBasePath() {
6262
AdminConfig config = new DefaultAdminConfigFactory(new SimplePropertySource(
6363
"mlCloudApiKey", "my-key",
64-
"mlAdminBasePath", "/admin/path"
64+
"mlAdminBasePath", "/admin/path",
65+
"mlAdminPort", "8001",
66+
"mlAdminScheme", "http"
6567
)).newAdminConfig();
6668

6769
assertEquals("my-key", config.getCloudApiKey());
6870
assertEquals("/admin/path", config.getBasePath());
71+
assertEquals(443, config.getPort(), "When a cloud API key is provided, https and 443 should be assumed");
72+
assertEquals("https", config.getScheme());
6973
}
7074

7175
private AdminConfig configure(String... properties) {

src/test/resources/test.properties

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# Properties for connecting to the Mgmt API; port 8002 is assumed
22
# Can override these files via a gitignored "user.properties" file in this same directory
3-
mlManageHost=localhost
4-
mlManageUsername=admin
5-
mlManagePassword=admin
3+
mlHost=localhost
4+
5+
# When testing MarkLogic Cloud manually, comment these out for a more realistic test (it's fine to leave them
6+
# uncommented, as they'll be ignored, it's just more realistic to comment them out).
7+
mlUsername=admin
8+
mlPassword=admin
69
mlManagePort=8002
710
mlAdminPort=8001
8-
mlScheme=http
9-
mlSimpleSsl=false
11+
12+
# When testing MarkLogic Cloud manually, you'll need to set these in user.properties:
13+
# mlHost=the name of the host
14+
# mlCloudApiKey=the key value
15+
# mlBasePath=the base path for the Manage app server

0 commit comments

Comments
 (0)