forked from kafbat/kafka-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathActiveDirectoryContainer.java
79 lines (65 loc) · 2.79 KB
/
ActiveDirectoryContainer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package io.kafbat.ui.container;
import com.github.dockerjava.api.command.InspectContainerResponse;
import java.io.IOException;
import lombok.extern.slf4j.Slf4j;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.utility.DockerImageName;
@Slf4j
public class ActiveDirectoryContainer extends GenericContainer<ActiveDirectoryContainer> {
public static final String DOMAIN = "corp.kafbat.io";
public static final String PASSWORD = "StrongPassword123";
public static final String FIRST_USER_WITH_GROUP = "JohnDoe";
public static final String SECOND_USER_WITH_GROUP = "JohnWick";
public static final String USER_WITHOUT_GROUP = "JackSmith";
public static final String EMPTY_PERMISSIONS_USER = "JohnJames";
private static final String DOMAIN_DC = "dc=corp,dc=kafbat,dc=io";
private static final String GROUP = "group";
private static final String FIRST_GROUP = "firstGroup";
private static final String SECOND_GROUP = "secondGroup";
private static final String DOMAIN_EMAIL = "kafbat.io";
private static final String SAMBA_TOOL = "samba-tool";
private static final int LDAP_PORT = 389;
private static final DockerImageName IMAGE_NAME = DockerImageName.parse("nowsci/samba-domain:latest");
public ActiveDirectoryContainer() {
super(IMAGE_NAME);
withExposedPorts(LDAP_PORT);
withEnv("DOMAIN", DOMAIN);
withEnv("DOMAIN_DC", DOMAIN_DC);
withEnv("DOMAIN_EMAIL", DOMAIN_EMAIL);
withEnv("DOMAINPASS", PASSWORD);
withEnv("NOCOMPLEXITY", "true");
withEnv("INSECURELDAP", "true");
withPrivilegedMode(true);
}
protected void containerIsStarted(InspectContainerResponse containerInfo) {
createUser(EMPTY_PERMISSIONS_USER);
createUser(USER_WITHOUT_GROUP);
createUser(FIRST_USER_WITH_GROUP);
createUser(SECOND_USER_WITH_GROUP);
exec(SAMBA_TOOL, GROUP, "add", FIRST_GROUP);
exec(SAMBA_TOOL, GROUP, "add", SECOND_GROUP);
exec(SAMBA_TOOL, GROUP, "addmembers", FIRST_GROUP, FIRST_USER_WITH_GROUP);
exec(SAMBA_TOOL, GROUP, "addmembers", SECOND_GROUP, SECOND_USER_WITH_GROUP);
}
public String getLdapUrl() {
return String.format("ldap://%s:%s", getHost(), getMappedPort(LDAP_PORT));
}
private void createUser(String name) {
exec(SAMBA_TOOL, "user", "create", name, PASSWORD, "--mail-address", name + '@' + DOMAIN_EMAIL);
exec(SAMBA_TOOL, "user", "setexpiry", name, "--noexpiry");
}
private void exec(String... cmd) {
ExecResult result;
try {
result = execInContainer(cmd);
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
if (result.getStdout() != null && !result.getStdout().isEmpty()) {
log.info("Output: {}", result.getStdout());
}
if (result.getExitCode() != 0) {
throw new IllegalStateException(result.toString());
}
}
}