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

Commit 574fc18

Browse files
committed
#366 No longer undeploying default ML users
1 parent ad61e5c commit 574fc18

File tree

4 files changed

+89
-0
lines changed

4 files changed

+89
-0
lines changed

src/main/java/com/marklogic/appdeployer/command/security/DeployUsersCommand.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,51 @@
55
import com.marklogic.appdeployer.command.CommandContext;
66
import com.marklogic.appdeployer.command.SortOrderConstants;
77
import com.marklogic.appdeployer.command.SupportsCmaCommand;
8+
import com.marklogic.mgmt.PayloadParser;
89
import com.marklogic.mgmt.api.configuration.Configuration;
910
import com.marklogic.mgmt.api.security.User;
1011
import com.marklogic.mgmt.resource.ResourceManager;
1112
import com.marklogic.mgmt.resource.security.UserManager;
1213

1314
import java.io.File;
15+
import java.util.HashSet;
16+
import java.util.Set;
1417

1518
public class DeployUsersCommand extends AbstractResourceCommand implements SupportsCmaCommand {
1619

20+
// Defines users that, by default, this command will never undeploy
21+
private Set<String> defaultUsersToNotUndeploy = new HashSet<>();
22+
1723
public DeployUsersCommand() {
1824
setExecuteSortOrder(SortOrderConstants.DEPLOY_USERS);
1925
setUndoSortOrder(SortOrderConstants.DELETE_USERS);
2026

2127
setSupportsResourceMerging(true);
2228
setResourceClassType(User.class);
2329
setResourceIdPropertyName("user-name");
30+
31+
initializeDefaultUsersToNotUndeploy();
32+
}
33+
34+
protected void initializeDefaultUsersToNotUndeploy() {
35+
defaultUsersToNotUndeploy = new HashSet<>();
36+
defaultUsersToNotUndeploy.add("admin");
37+
defaultUsersToNotUndeploy.add("healthcheck");
38+
defaultUsersToNotUndeploy.add("infostudio-admin");
39+
defaultUsersToNotUndeploy.add("nobody");
40+
}
41+
42+
@Override
43+
protected String adjustPayloadBeforeDeletingResource(ResourceManager mgr, CommandContext context, File f, String payload) {
44+
if (defaultUsersToNotUndeploy != null && !defaultUsersToNotUndeploy.isEmpty()) {
45+
final String username = new PayloadParser().getPayloadFieldValue(payload, "user-name", false);
46+
if (username != null && defaultUsersToNotUndeploy.contains(username)) {
47+
logger.info(format("Not undeploying user '%s', as it's included in the list of users to not undeploy", username));
48+
return null;
49+
}
50+
}
51+
52+
return super.adjustPayloadBeforeDeletingResource(mgr, context, f, payload);
2453
}
2554

2655
protected File[] getResourceDirs(CommandContext context) {
@@ -51,4 +80,12 @@ protected void deployConfiguration(CommandContext context, Configuration config)
5180
super.deployConfiguration(context, config);
5281
}
5382
}
83+
84+
public Set<String> getDefaultUsersToNotUndeploy() {
85+
return defaultUsersToNotUndeploy;
86+
}
87+
88+
public void setDefaultUsersToNotUndeploy(Set<String> defaultUsersToNotUndeploy) {
89+
this.defaultUsersToNotUndeploy = defaultUsersToNotUndeploy;
90+
}
5491
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.marklogic.appdeployer.command.security;
2+
3+
import com.marklogic.appdeployer.AbstractAppDeployerTest;
4+
import com.marklogic.mgmt.resource.security.UserManager;
5+
import org.junit.Test;
6+
7+
import java.io.File;
8+
import java.util.Set;
9+
10+
public class DontUndeployDefaultUsersTest extends AbstractAppDeployerTest {
11+
12+
@Test
13+
public void test() {
14+
appConfig.getFirstConfigDir().setBaseDir(new File("src/test/resources/sample-app/users-to-not-undeploy"));
15+
initializeAppDeployer(new DeployUsersCommand());
16+
17+
UserManager mgr = new UserManager(manageClient);
18+
assertFalse(mgr.exists("ml-app-deployer-test-user"));
19+
assertTrue(mgr.exists("nobody"));
20+
21+
deploySampleApp();
22+
23+
try {
24+
assertTrue(mgr.exists("ml-app-deployer-test-user"));
25+
assertTrue(mgr.exists("nobody"));
26+
} finally {
27+
undeploySampleApp();
28+
29+
assertFalse(mgr.exists("ml-app-deployer-test-user"));
30+
assertTrue("The 'nobody' user should not have been deleted since it's in the list of " +
31+
"users to not undeploy", mgr.exists("nobody"));
32+
}
33+
}
34+
35+
@Test
36+
public void verifySetOfDefaultUsers() {
37+
// Current as of ML 9.0-9.1
38+
Set<String> users = new DeployUsersCommand().getDefaultUsersToNotUndeploy();
39+
assertEquals(4, users.size());
40+
assertTrue(users.contains("admin"));
41+
assertTrue(users.contains("healthcheck"));
42+
assertTrue(users.contains("infostudio-admin"));
43+
assertTrue(users.contains("nobody"));
44+
}
45+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"user-name": "ml-app-deployer-test-user",
3+
"password": "changeme"
4+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"user-name": "nobody"
3+
}

0 commit comments

Comments
 (0)