mirror of
https://git.unistra.fr/aius/root/ldap-overleaf-sl.git
synced 2025-05-04 19:55:26 +02:00
Distinguish between ldap bind DN and ldap base dn - to match ldap functionality properly
This commit is contained in:
parent
3cfba2317a
commit
8eed93e3d3
4 changed files with 18 additions and 14 deletions
14
README.md
14
README.md
|
@ -63,23 +63,25 @@ Edit [docker-compose.yml](docker-compose.yml) to fit your local setup.
|
||||||
|
|
||||||
```
|
```
|
||||||
LDAP_SERVER: ldaps://LDAPSERVER:636
|
LDAP_SERVER: ldaps://LDAPSERVER:636
|
||||||
LDAP_BIND_BASE: ou=people,dc=DOMAIN,dc=TLD
|
LDAP_BASE: ou=people,dc=DOMAIN,dc=TLD
|
||||||
|
LDAP_BINDDN: ou=someunit,ou=people,dc=DOMAIN,dc=TLS
|
||||||
# By default tries to bind directly with the ldap user - this user has to be in the LDAP GROUP
|
# By default tries to bind directly with the ldap user - this user has to be in the LDAP GROUP
|
||||||
|
# you have to set a group filter a minimal groupfilter would be: '(objectClass=person)'
|
||||||
LDAP_GROUP_FILTER: '(memberof=GROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
LDAP_GROUP_FILTER: '(memberof=GROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
||||||
# if user is in ADMIN_GROUP on user creation (2 first login) it sets isAdmin to true.
|
# if user is in ADMIN_GROUP on user creation (2 first login) it sets isAdmin to true.
|
||||||
LDAP_ADMIN_GROUP_FILTER: '(memberof=cn=ADMINGROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
LDAP_ADMIN_GROUP_FILTER: '(memberof=cn=ADMINGROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
||||||
LDAP_CONTACTS: 'true'
|
LDAP_CONTACTS: 'true'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Contacts
|
### LDAP Contacts
|
||||||
|
|
||||||
All users in the GROUPNAME are loaded from the ldap server into the contacts. At the moment
|
If you enable this, then all users in GROUPNAME are loaded from the ldap server into the contacts.
|
||||||
this happens every time you click on "Share" within a project.
|
At the moment this happens every time you click on "Share" within a project.
|
||||||
The user search happens without bind - so if your LDAP needs a bind you can adapt this in the
|
The user search happens without bind - so if your LDAP needs a bind you can adapt this in the
|
||||||
function `getLdapContacts()` in ContactsController.js (lines 82 - 107)
|
function `getLdapContacts()` in ContactsController.js (lines 82 - 107)
|
||||||
if you want to disable this function set:
|
if you want to enable this function set:
|
||||||
```
|
```
|
||||||
LDAP_CONTACTS: 'false'
|
LDAP_CONTACTS: 'true'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sharelatex Configuration
|
### Sharelatex Configuration
|
||||||
|
|
|
@ -44,12 +44,13 @@ services:
|
||||||
SHARELATEX_CUSTOM_EMAIL_FOOTER: "This system is run by ${MYDOMAIN} - please contact ${MYMAIL} if you experience any issues."
|
SHARELATEX_CUSTOM_EMAIL_FOOTER: "This system is run by ${MYDOMAIN} - please contact ${MYMAIL} if you experience any issues."
|
||||||
|
|
||||||
LDAP_SERVER: ldaps://LDAPSERVER:636
|
LDAP_SERVER: ldaps://LDAPSERVER:636
|
||||||
LDAP_BIND_BASE: ou=people,dc=DOMAIN,dc=TLD
|
LDAP_BASE: ou=people,dc=DOMAIN,dc=TLD
|
||||||
|
LDAP_BINDDN: ou=someunit,ou=people,dc=DOMAIN,dc=TLS
|
||||||
# By default tries to bind directly with the ldap user - this user has to be in the LDAP GROUP
|
# By default tries to bind directly with the ldap user - this user has to be in the LDAP GROUP
|
||||||
LDAP_GROUP_FILTER: '(memberof=cn=GROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
LDAP_GROUP_FILTER: '(memberof=cn=GROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
||||||
# if user is in ADMIN_GROUP on user creation (first login) isAdmin is set to true.
|
# if user is in ADMIN_GROUP on user creation (first login) isAdmin is set to true.
|
||||||
LDAP_ADMIN_GROUP_FILTER: '(memberof=cn=ADMINGROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
LDAP_ADMIN_GROUP_FILTER: '(memberof=cn=ADMINGROUPNAME,ou=groups,dc=DOMAIN,dc=TLD)'
|
||||||
LDAP_CONTACTS: 'true'
|
LDAP_CONTACTS: 'false'
|
||||||
|
|
||||||
# Same property, unfortunately with different names in
|
# Same property, unfortunately with different names in
|
||||||
# different locations
|
# different locations
|
||||||
|
|
|
@ -269,10 +269,11 @@ const AuthenticationManager = {
|
||||||
});
|
});
|
||||||
//const bindDn = process.env.LDAP_BIND_USER
|
//const bindDn = process.env.LDAP_BIND_USER
|
||||||
//const bindPassword = process.env.LDAP_BIND_PW
|
//const bindPassword = process.env.LDAP_BIND_PW
|
||||||
const ldap_bb = process.env.LDAP_BIND_BASE
|
const ldap_bd = process.env.LDAP_BINDDN
|
||||||
|
const ldap_base = process.env.LDAP_BASE
|
||||||
const uid = query.email.split('@')[0]
|
const uid = query.email.split('@')[0]
|
||||||
const filterstr = '(&' + process.env.LDAP_GROUP_FILTER + '(uid=' + uid + '))'
|
const filterstr = '(&' + process.env.LDAP_GROUP_FILTER + '(uid=' + uid + '))'
|
||||||
const userDn = 'uid=' + uid + ',' + ldap_bb;
|
const userDn = 'uid=' + uid + ',' + ldap_bd;
|
||||||
var mail = ""
|
var mail = ""
|
||||||
var firstname = ""
|
var firstname = ""
|
||||||
var lastname = ""
|
var lastname = ""
|
||||||
|
@ -287,7 +288,7 @@ const AuthenticationManager = {
|
||||||
}
|
}
|
||||||
// get user data
|
// get user data
|
||||||
try {
|
try {
|
||||||
const {searchEntries, searchRef,} = await client.search(ldap_bb, {
|
const {searchEntries, searchRef,} = await client.search(ldap_base, {
|
||||||
scope: 'sub',
|
scope: 'sub',
|
||||||
filter: filterstr ,
|
filter: filterstr ,
|
||||||
});
|
});
|
||||||
|
@ -309,7 +310,7 @@ const AuthenticationManager = {
|
||||||
// if admin filter is set - only set admin for user in ldap group
|
// if admin filter is set - only set admin for user in ldap group
|
||||||
if (process.env.LDAP_ADMIN_GROUP_FILTER) {
|
if (process.env.LDAP_ADMIN_GROUP_FILTER) {
|
||||||
const adminfilter = '(&' + process.env.LDAP_ADMIN_GROUP_FILTER + '(uid=' + uid + '))'
|
const adminfilter = '(&' + process.env.LDAP_ADMIN_GROUP_FILTER + '(uid=' + uid + '))'
|
||||||
adminEntry = await client.search(ldap_bb, {
|
adminEntry = await client.search(ldap_base, {
|
||||||
scope: 'sub',
|
scope: 'sub',
|
||||||
filter: adminfilter,
|
filter: adminfilter,
|
||||||
});
|
});
|
||||||
|
|
|
@ -86,10 +86,10 @@ module.exports = ContactsController = {
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
url: process.env.LDAP_SERVER,
|
url: process.env.LDAP_SERVER,
|
||||||
});
|
});
|
||||||
const ldap_bb = process.env.LDAP_BIND_BASE
|
const ldap_base = process.env.LDAP_BASE
|
||||||
// get user data
|
// get user data
|
||||||
try {
|
try {
|
||||||
const {searchEntries,searchReferences,} = await client.search(ldap_bb, {scope: 'sub',filter: process.env.LDAP_GROUP_FILTER ,});
|
const {searchEntries,searchReferences,} = await client.search(ldap_base, {scope: 'sub',filter: process.env.LDAP_GROUP_FILTER ,});
|
||||||
await searchEntries;
|
await searchEntries;
|
||||||
for (var i = 0; i < searchEntries.length; i++) {
|
for (var i = 0; i < searchEntries.length; i++) {
|
||||||
var entry = new Map()
|
var entry = new Map()
|
||||||
|
|
Loading…
Add table
Reference in a new issue