Skip to content

Commit afc4b9c

Browse files
authored
Merge pull request #4 from mapbender/feature/upgrade-to-mapbender4
Refactored LdapBundle to work with Mapbender v4.0
2 parents 854d3ce + f484fea commit afc4b9c

20 files changed

+614
-493
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## v2.0.0
2+
* Refactored LdapBundle to work with Mapbender v4.0
3+
14
## v1.1.4
25
* Add toString() function for LdapUser: Fixes storage of LDAP username in database
36

Component/LdapClient.php

Lines changed: 0 additions & 85 deletions
This file was deleted.

DependencyInjection/Factory/MapbenderLDAPLoginFactory.php

Lines changed: 0 additions & 45 deletions
This file was deleted.

Exceptions/MissconfiguredLDAPClientException.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

MapbenderLDAPBundle.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
88
use Symfony\Component\HttpKernel\Bundle\Bundle;
99
use Symfony\Component\DependencyInjection\ContainerBuilder;
10-
use Mapbender\LDAPBundle\DependencyInjection\Factory\MapbenderLDAPLoginFactory;
11-
12-
1310

1411
class MapbenderLDAPBundle extends Bundle
1512
{
@@ -20,13 +17,5 @@ public function build(ContainerBuilder $container)
2017
$loader = new YamlFileLoader($container, $configLocator);
2118
$loader->load('services.yml');
2219
$container->addResource(new FileResource($configLocator->locate('services.yml')));
23-
24-
$extension = $container->getExtension('security');
25-
$extension->addSecurityListenerFactory(new MapbenderLDAPLoginFactory());
26-
}
27-
28-
public function getContainerExtension()
29-
{
30-
return null;
3120
}
3221
}

README.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,99 @@ Install Mapbender LDAP via Composer:
99
```sh
1010
composer require mapbender/ldapbundle
1111
```
12+
Register the bundle in bundles.php:
13+
14+
```php
15+
Mapbender\LDAPBundle\MapbenderLDAPBundle::class => ['all' => true],
16+
```
17+
18+
Enable the LDAP extension for php.
19+
20+
### 2. Configuration
21+
22+
In the `security.yml` add the ldap- and chain-provider, some firewall configuration and a password hasher for the LdapUser:
23+
24+
```yml
25+
...
26+
27+
providers:
28+
main:
29+
entity:
30+
class: FOM\UserBundle\Entity\User
31+
property: username
32+
ldap_provider:
33+
id: 'mapbender.ldap.user_provider'
34+
all_users:
35+
chain:
36+
providers: ['main', 'ldap_provider']
37+
...
38+
39+
firewalls:
40+
41+
...
42+
43+
secured_area:
44+
pattern: ^/
45+
entry_point: form_login
46+
provider: all_users
47+
custom_authenticators:
48+
- 'mapbender.ldap.authenticator'
49+
form_login:
50+
check_path: /user/login/check
51+
login_path: /user/login
52+
enable_csrf: true
53+
form_login_ldap:
54+
check_path: /user/login/check
55+
login_path: /user/login
56+
enable_csrf: true
57+
logout:
58+
path: /user/logout
59+
target: /
60+
61+
...
62+
63+
password_hashers:
64+
FOM\UserBundle\Entity\User: sha512
65+
Mapbender\LDAPBundle\Security\LdapUser: auto
66+
67+
...
68+
```
69+
70+
Add your LDAP server settings at the bottom of the `parameters.yml`:
71+
72+
```yml
73+
ldap.host: ldap.example.com
74+
ldap.port: 389
75+
ldap.version: 3
76+
ldap.encryption: none # <ssl|tls|none>
77+
ldap.bind.dn: [email protected]
78+
ldap.bind.pwd: passwort
79+
80+
ldap.user.baseDn: cn=users,dc=example,dc=com
81+
ldap.user.query: (&(sAMAccountName={username})(objectClass=user))
82+
ldap.user.adminQuery: (objectClass=user)
83+
ldap.user.id: sAMAccountName
84+
ldap.user.commonName: cn
85+
ldap.user.groupKey: memberOf
86+
87+
ldap.group.baseDn: ou=groups,dc=example,dc=com
88+
ldap.group.query: (&(distinguishedName={groupname})(objectClass=group))
89+
ldap.group.adminQuery: (objectClass=group)
90+
ldap.group.id: sAMAccountName
91+
ldap.group.commonName: cn
92+
ldap.group.defaultRoles: [ROLE_USER] # this should be ROLE_USER in most cases
93+
```
94+
95+
---
96+
### Follow these instructions if you use Mapbender v3.3.5 or older:
97+
98+
### 1. Installation
99+
100+
Install Mapbender LDAP via Composer:
101+
102+
```sh
103+
composer require mapbender/ldapbundle:v1.1.4
104+
```
12105
Register the bundle in AppKernel.php:
13106

14107
```php

Resources/config/services.yml

Lines changed: 57 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,66 @@
1-
parameters:
2-
# Alias to values Mapbender ACL assignment machinery evaluates
3-
## for fom.ldap_user_identities_provider
4-
ldap_user_base_dn: '%ldap.user.baseDN%'
5-
ldap_user_name_attribute: '%ldap.user.nameAttribute%'
6-
ldap_user_filter: '%ldap.user.adminFilter%'
7-
## for fom.ldap_client
8-
ldap_host: '%ldap.host%'
9-
ldap_port: '%ldap.port%'
10-
ldap_version: '%ldap.version%'
11-
ldap_bind_dn: '%ldap.bind.dn%'
12-
ldap_bind_pwd: '%ldap.bind.pwd%'
1+
services:
2+
Symfony\Component\Ldap\Ldap:
3+
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
4+
tags:
5+
- ldap
136

14-
# Fix bad parameter case baseDN (expected) vs baseDn (from bad example config in README.md)
15-
# parameter names are now case sensitive
16-
ldap.user.baseDN: '%ldap.user.baseDn%'
17-
ldap.group.baseDN: '%ldap.group.baseDn%'
18-
ldap.group.id: cn
19-
ldap.group.role_prefix: ROLE_GROUP_
7+
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
8+
arguments:
9+
- host: '%ldap.host%'
10+
- port: '%ldap.port%'
11+
- encryption: '%ldap.encryption'
12+
- options:
13+
protocol_version: '%ldap.version'
14+
referrals: false
2015

21-
services:
22-
ldapClient:
23-
class: Mapbender\LDAPBundle\Component\LdapClient
16+
mapbender.ldap.client:
17+
class: Mapbender\LDAPBundle\Security\LdapClient
2418
arguments:
25-
- '%ldap.host%' #Address to LDAPServer
26-
- '%ldap.port%' #Port where LDAPServer is listening
27-
- '%ldap.version%' #LDAP Protocol version
28-
- '%ldap.useSSL%' # SSL #Use SSL
29-
- '%ldap.useTLS%' # TLS 'Use TLS
19+
- '%ldap.host%'
20+
- '%ldap.port%'
21+
- '%ldap.version%'
22+
- '%ldap.encryption%'
3023
- '%ldap.bind.dn%'
3124
- '%ldap.bind.pwd%'
32-
LDAPUserProvider:
33-
class: Mapbender\LDAPBundle\Security\Provider\LDAPUserProvider
25+
26+
mapbender.ldap.user_provider:
27+
class: Mapbender\LDAPBundle\Security\LdapUserProvider
3428
arguments:
35-
- '@ldapClient'
36-
- '@mbldap.group_identities_provider'
37-
- '%ldap.user.baseDN%'
29+
- '@mapbender.ldap.client'
30+
- '%ldap.user.baseDn%'
3831
- '%ldap.user.query%'
39-
- [ROLE_USER]
40-
mbldap.group_identities_provider:
41-
class: Mapbender\LDAPBundle\Security\Provider\LDAPGroupProvider
42-
arguments:
43-
- '@fom.ldap_client'
44-
- '%ldap.group.baseDN%'
45-
- '%ldap.group.id%'
46-
- '%ldap.group.adminFilter%'
32+
- '%ldap.user.groupKey%'
33+
- '%ldap.group.baseDn%'
4734
- '%ldap.group.query%'
48-
- '%ldap.group.role_prefix%'
49-
fom.ldap_client:
50-
alias: ldapClient
51-
fom.identities.provider:
52-
class: Mapbender\LDAPBundle\Security\Provider\LDAPIdentitiesProvider
35+
- '%ldap.group.id%'
36+
- '%ldap.group.defaultRoles%'
37+
38+
mapbender.ldap.authenticator:
39+
class: Mapbender\LDAPBundle\Security\MapbenderLdapAuthenticator
40+
arguments:
41+
- '@security.authenticator.form_login.secured_area'
42+
- '@mapbender.ldap.client'
43+
- '%ldap.user.baseDn%'
44+
- '%ldap.user.query%'
45+
46+
ldap.security.subject_domain.user:
47+
class: Mapbender\LDAPBundle\Security\Permission\SubjectDomainLdapUser
48+
tags:
49+
- fom.security.subject_domain
50+
arguments:
51+
- '@mapbender.ldap.client'
52+
- '%ldap.user.baseDn%'
53+
- '%ldap.user.adminQuery%'
54+
- '%ldap.user.id%'
55+
- '%ldap.user.commonName%'
56+
57+
ldap.security.subject_domain.group:
58+
class: Mapbender\LDAPBundle\Security\Permission\SubjectDomainLdapGroup
59+
tags:
60+
- fom.security.subject_domain
5361
arguments:
54-
- '@doctrine'
55-
- '@fom.ldap_user_identities_provider'
56-
- '@mbldap.group_identities_provider'
57-
- '%fom.user_entity%'
62+
- '@mapbender.ldap.client'
63+
- '%ldap.group.baseDn%'
64+
- '%ldap.group.adminQuery%'
65+
- '%ldap.group.id%'
66+
- '%ldap.group.commonName%'

0 commit comments

Comments
 (0)