Polish "Add Docker Compose service connection support for OpenLDAP"

See gh-39258
This commit is contained in:
Scott Frederick
2024-01-22 16:33:59 -06:00
parent eb940c3907
commit bee6fe899c
13 changed files with 56 additions and 60 deletions

View File

@@ -31,21 +31,22 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
*
* @author Philipp Kessler
*/
class LdapDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<LdapConnectionDetails> {
class OpenLdapDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<LdapConnectionDetails> {
protected LdapDockerComposeConnectionDetailsFactory() {
protected OpenLdapDockerComposeConnectionDetailsFactory() {
super("osixia/openldap");
}
@Override
protected LdapConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
return new LdapDockerComposeConnectionDetails(source.getRunningService());
return new OpenLdapDockerComposeConnectionDetails(source.getRunningService());
}
/**
* {@link LdapConnectionDetails} backed by an {@code openldap} {@link RunningService}.
*/
static class LdapDockerComposeConnectionDetails extends DockerComposeConnectionDetails
static class OpenLdapDockerComposeConnectionDetails extends DockerComposeConnectionDetails
implements LdapConnectionDetails {
private final String[] urls;
@@ -56,20 +57,21 @@ class LdapDockerComposeConnectionDetailsFactory extends DockerComposeConnectionD
private final String password;
LdapDockerComposeConnectionDetails(RunningService service) {
OpenLdapDockerComposeConnectionDetails(RunningService service) {
super(service);
Map<String, String> env = service.env();
boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LDAP_TLS", "true"));
String ldapPort = usesTls ? env.getOrDefault("LDAPS_PORT", "636") : env.getOrDefault("LDAP_PORT", "389");
this.urls = new String[] { "%s://%s:%d".formatted(usesTls ? "ldaps" : "ldap", service.host(),
service.ports().get(Integer.parseInt(ldapPort))) };
String baseDn = env.getOrDefault("LDAP_BASE_DN", null);
if (baseDn == null) {
baseDn = Arrays.stream(env.getOrDefault("LDAP_DOMAIN", "example.org").split("\\."))
if (env.containsKey("LDAP_BASE_DN")) {
this.base = env.get("LDAP_BASE_DN");
}
else {
this.base = Arrays.stream(env.getOrDefault("LDAP_DOMAIN", "example.org").split("\\."))
.map("dc=%s"::formatted)
.collect(Collectors.joining(","));
}
this.base = baseDn;
this.password = env.getOrDefault("LDAP_ADMIN_PASSWORD", "admin");
this.username = "cn=admin,%s".formatted(this.base);
}

View File

@@ -15,6 +15,6 @@
*/
/**
* Auto-configuration for docker compose Ldap service connections.
* Auto-configuration for Docker Compose LDAP service connections.
*/
package org.springframework.boot.docker.compose.service.connection.ldap;

View File

@@ -9,7 +9,7 @@ org.springframework.boot.docker.compose.service.connection.activemq.ActiveMQDock
org.springframework.boot.docker.compose.service.connection.cassandra.CassandraDockerComposeConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.elasticsearch.ElasticsearchDockerComposeConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.flyway.JdbcAdaptingFlywayConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.ldap.LdapDockerComposeConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.ldap.OpenLdapDockerComposeConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.liquibase.JdbcAdaptingLiquibaseConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.mariadb.MariaDbJdbcDockerComposeConnectionDetailsFactory,\
org.springframework.boot.docker.compose.service.connection.mariadb.MariaDbR2dbcDockerComposeConnectionDetailsFactory,\

View File

@@ -25,14 +25,14 @@ import org.springframework.boot.testsupport.testcontainers.DockerImageNames;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for {@link LdapDockerComposeConnectionDetailsFactory}.
* Integration tests for {@link OpenLdapDockerComposeConnectionDetailsFactory}.
*
* @author Philipp Kessler
*/
class LdapDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests {
class OpenLdapDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests {
LdapDockerComposeConnectionDetailsFactoryIntegrationTests() {
super("ldap-compose.yaml", DockerImageNames.ldap());
OpenLdapDockerComposeConnectionDetailsFactoryIntegrationTests() {
super("ldap-compose.yaml", DockerImageNames.openLdap());
}
@Test