7 changed files with 150 additions and 1 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2012-2025 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.ldap; |
||||
|
||||
import org.springframework.boot.autoconfigure.ldap.LdapConnectionDetails; |
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; |
||||
import org.springframework.boot.testsupport.container.TestImage; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Integration tests for {@link LLdapDockerComposeConnectionDetailsFactory}. |
||||
* |
||||
* @author Eddú Meléndez |
||||
*/ |
||||
class LLdapDockerComposeConnectionDetailsFactoryIntegrationTests { |
||||
|
||||
@DockerComposeTest(composeFile = "lldap-compose.yaml", image = TestImage.LLDAP) |
||||
void runCreatesConnectionDetails(LdapConnectionDetails connectionDetails) { |
||||
assertThat(connectionDetails.getUsername()).isEqualTo("cn=admin,ou=people,dc=springframework,dc=org"); |
||||
assertThat(connectionDetails.getPassword()).isEqualTo("somepassword"); |
||||
assertThat(connectionDetails.getBase()).isEqualTo("dc=springframework,dc=org"); |
||||
assertThat(connectionDetails.getUrls()).hasSize(1); |
||||
assertThat(connectionDetails.getUrls()[0]).startsWith("ldap://"); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
services: |
||||
ldap: |
||||
image: '{imageName}' |
||||
environment: |
||||
- 'LLDAP_LDAP_BASE_DN=dc=springframework,dc=org' |
||||
- 'LLDAP_LDAP_USER_PASS=somepassword' |
||||
ports: |
||||
- "3890" |
||||
@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
|
||||
/* |
||||
* Copyright 2012-2025 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.ldap; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.springframework.boot.autoconfigure.ldap.LdapConnectionDetails; |
||||
import org.springframework.boot.docker.compose.core.RunningService; |
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory; |
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource; |
||||
|
||||
/** |
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link LdapConnectionDetails} |
||||
* for an {@code ldap} service. |
||||
* |
||||
* @author Eddú Meléndez |
||||
*/ |
||||
class LLdapDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<LdapConnectionDetails> { |
||||
|
||||
protected LLdapDockerComposeConnectionDetailsFactory() { |
||||
super("lldap/lldap"); |
||||
} |
||||
|
||||
@Override |
||||
protected LdapConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) { |
||||
return new LLdapDockerComposeConnectionDetails(source.getRunningService()); |
||||
} |
||||
|
||||
/** |
||||
* {@link LdapConnectionDetails} backed by an {@code lldap} {@link RunningService}. |
||||
*/ |
||||
static class LLdapDockerComposeConnectionDetails extends DockerComposeConnectionDetails |
||||
implements LdapConnectionDetails { |
||||
|
||||
private final String[] urls; |
||||
|
||||
private final String base; |
||||
|
||||
private final String username; |
||||
|
||||
private final String password; |
||||
|
||||
LLdapDockerComposeConnectionDetails(RunningService service) { |
||||
super(service); |
||||
Map<String, String> env = service.env(); |
||||
boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LLDAP_LDAPS_OPTIONS__ENABLED", "false")); |
||||
String ldapPort = usesTls ? env.getOrDefault("LLDAP_LDAPS_OPTIONS__PORT", "6360") |
||||
: env.getOrDefault("LLDAP_LDAP_PORT", "3890"); |
||||
this.urls = new String[] { "%s://%s:%d".formatted(usesTls ? "ldaps" : "ldap", service.host(), |
||||
service.ports().get(Integer.parseInt(ldapPort))) }; |
||||
this.base = env.getOrDefault("LLDAP_LDAP_BASE_DN", "dc=example,dc=com"); |
||||
this.password = env.getOrDefault("LLDAP_LDAP_USER_PASS", "password"); |
||||
this.username = "cn=admin,ou=people,%s".formatted(this.base); |
||||
} |
||||
|
||||
@Override |
||||
public String[] getUrls() { |
||||
return this.urls; |
||||
} |
||||
|
||||
@Override |
||||
public String getBase() { |
||||
return this.base; |
||||
} |
||||
|
||||
@Override |
||||
public String getUsername() { |
||||
return this.username; |
||||
} |
||||
|
||||
@Override |
||||
public String getPassword() { |
||||
return this.password; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue