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

Commit 3c8e873

Browse files
committed
#170 Allow customizing app services username and password
1 parent 4bfa609 commit 3c8e873

File tree

3 files changed

+89
-4
lines changed

3 files changed

+89
-4
lines changed

src/main/java/com/marklogic/appdeployer/AppConfig.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ public class AppConfig {
7373

7474
private Integer restPort = DEFAULT_PORT;
7575
private Integer testRestPort;
76+
77+
// Username/password combo for using the App Services client REST API - e.g. to load non-REST API modules
78+
private String appServicesUsername = DEFAULT_USERNAME;
79+
private String appServicesPassword = DEFAULT_PASSWORD;
7680
private Integer appServicesPort = 8000;
7781

7882
// These can all be set to override the default names that are generated off of the "name" attribute.
@@ -217,13 +221,15 @@ public StaticChecker newStaticChecker() {
217221
}
218222

219223
/**
224+
* In versions 2.8.0 and prior, this used restAdminUsername/Password. instead of appServicesUsername/Password.
225+
*
220226
* @return an XccAssetLoader based on the configuration properties in this class
221227
*/
222228
public XccAssetLoader newXccAssetLoader() {
223229
XccAssetLoader l = new XccAssetLoader();
224230
l.setHost(getHost());
225-
l.setUsername(getRestAdminUsername());
226-
l.setPassword(getRestAdminPassword());
231+
l.setUsername(getAppServicesUsername());
232+
l.setPassword(getAppServicesPassword());
227233
l.setDatabaseName(getModulesDatabaseName());
228234
if (getAppServicesPort() != null) {
229235
l.setPort(getAppServicesPort());
@@ -779,4 +785,20 @@ public Map<String, Object> getAdditionalProperties() {
779785
public void setAdditionalProperties(Map<String, Object> additionalProperties) {
780786
this.additionalProperties = additionalProperties;
781787
}
788+
789+
public String getAppServicesUsername() {
790+
return appServicesUsername;
791+
}
792+
793+
public void setAppServicesUsername(String appServicesUsername) {
794+
this.appServicesUsername = appServicesUsername;
795+
}
796+
797+
public String getAppServicesPassword() {
798+
return appServicesPassword;
799+
}
800+
801+
public void setAppServicesPassword(String appServicesPassword) {
802+
this.appServicesPassword = appServicesPassword;
803+
}
782804
}

src/main/java/com/marklogic/appdeployer/DefaultAppConfigFactory.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public AppConfig newAppConfig() {
121121

122122
/**
123123
* The username and password for a ML user with the rest-admin role. This user is used for operations against the
124-
* Client REST API - namely, loading modules.
124+
* Client REST API - namely, loading REST API modules such as options, services, and transforms.
125125
*/
126126
prop = getProperty("mlRestAdminUsername");
127127
if (prop != null) {
@@ -138,6 +138,33 @@ public AppConfig newAppConfig() {
138138
c.setRestAdminPassword(mlPassword);
139139
}
140140

141+
/**
142+
* The username and password for a ML user with the rest-admin role that is used for e.g. loading
143+
* non-REST API modules via the App Services client REST API, which is defined by the appServicesPort.
144+
*
145+
* Note that this will first default to restAdminUsername and restAdminPassword if those have been set, and if
146+
* not, then username and password.
147+
*/
148+
prop = getProperty("mlAppServicesUsername");
149+
if (prop != null) {
150+
logger.info("App Services username: " + prop);
151+
c.setAppServicesUsername(prop);
152+
} else if (c.getRestAdminUsername() != null) {
153+
logger.info("App Services username: " + c.getRestAdminUsername());
154+
c.setAppServicesUsername(c.getRestAdminUsername());
155+
} else if (mlUsername != null) {
156+
logger.info("App Services username: " + mlUsername);
157+
c.setAppServicesUsername(mlUsername);
158+
}
159+
prop = getProperty("mlAppServicesPassword");
160+
if (prop != null) {
161+
c.setAppServicesPassword(prop);
162+
} else if (c.getRestAdminPassword() != null) {
163+
c.setAppServicesPassword(c.getRestAdminPassword());
164+
} else if (mlPassword != null) {
165+
c.setAppServicesPassword(mlPassword);
166+
}
167+
141168
/**
142169
* When a content database is created, this property can be used to control the number of forests per host for
143170
* that database.

src/test/java/com/marklogic/appdeployer/DefaultAppConfigFactoryTest.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,39 @@ public void unrecognizedProperties() {
3838
assertEquals("Should use default", "admin", config.getRestAdminUsername());
3939
}
4040

41-
/**
41+
@Test
42+
public void appServicesDefaultsToDefaultUsernamePassword() {
43+
sut = new DefaultAppConfigFactory(new SimplePropertySource("mlUsername", "someuser", "mlPassword", "somepassword"));
44+
AppConfig config = sut.newAppConfig();
45+
assertEquals("someuser", config.getRestAdminUsername());
46+
assertEquals("somepassword", config.getRestAdminPassword());
47+
assertEquals("someuser", config.getAppServicesUsername());
48+
assertEquals("somepassword", config.getAppServicesPassword());
49+
}
50+
51+
@Test
52+
public void appServicesDefaultsToRestAdminUsernamePassword() {
53+
sut = new DefaultAppConfigFactory(new SimplePropertySource("mlRestAdminUsername", "someuser", "mlRestAdminPassword", "somepassword"));
54+
AppConfig config = sut.newAppConfig();
55+
assertEquals("someuser", config.getRestAdminUsername());
56+
assertEquals("somepassword", config.getRestAdminPassword());
57+
assertEquals("someuser", config.getAppServicesUsername());
58+
assertEquals("somepassword", config.getAppServicesPassword());
59+
}
60+
61+
@Test
62+
public void appServicesDiffersFromRestAdmin() {
63+
sut = new DefaultAppConfigFactory(new SimplePropertySource(
64+
"mlRestAdminUsername", "someuser", "mlRestAdminPassword", "somepassword",
65+
"mlAppServicesUsername", "appuser", "mlAppServicesPassword", "appword"));
66+
AppConfig config = sut.newAppConfig();
67+
assertEquals("someuser", config.getRestAdminUsername());
68+
assertEquals("somepassword", config.getRestAdminPassword());
69+
assertEquals("appuser", config.getAppServicesUsername());
70+
assertEquals("appword", config.getAppServicesPassword());
71+
}
72+
73+
/**
4274
* As of 2.2.0.
4375
*/
4476
@Test
@@ -64,6 +96,8 @@ public void allProperties() {
6496
p.setProperty("mlDeleteForests", "false");
6597
p.setProperty("mlDeleteReplicas", "false");
6698
p.setProperty("mlGroupName", "other-group");
99+
p.setProperty("mlAppServicesUsername", "appServicesUsername");
100+
p.setProperty("mlAppServicesPassword", "appServicesPassword");
67101
p.setProperty("mlAppServicesPort", "8123");
68102
p.setProperty("mlReplaceTokensInModules", "false");
69103
p.setProperty("mlUseRoxyTokenPrefix", "false");
@@ -108,6 +142,8 @@ public void allProperties() {
108142
assertFalse(config.isDeleteForests());
109143
assertFalse(config.isDeleteReplicas());
110144
assertEquals("other-group", config.getGroupName());
145+
assertEquals("appServicesUsername", config.getAppServicesUsername());
146+
assertEquals("appServicesPassword", config.getAppServicesPassword());
111147
assertEquals((Integer) 8123, config.getAppServicesPort());
112148
assertFalse(config.isReplaceTokensInModules());
113149
assertFalse(config.isUseRoxyTokenPrefix());

0 commit comments

Comments
 (0)