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

Commit 03f9360

Browse files
authored
Merge pull request #465 from marklogic-community/feature/184-cloud-no-ports
DEVEXP-184: Forcing https/443 when using cloud auth
2 parents f22a2f8 + 6f01ab8 commit 03f9360

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)