mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-03 22:49:16 +02:00
Implement LDAP authentication
This commit is contained in:
parent
6ed5740f6f
commit
4ce46ff2a0
17 changed files with 232 additions and 15 deletions
|
@ -310,6 +310,71 @@ AUTH_USER_MODEL = "users.User"
|
|||
LOGIN_REDIRECT_URL = "users:redirect"
|
||||
LOGIN_URL = "account_login"
|
||||
|
||||
# LDAP AUTHENTICATION CONFIGURATION
|
||||
# ------------------------------------------------------------------------------
|
||||
AUTH_LDAP_ENABLED = env.bool("LDAP_ENABLED", default=False)
|
||||
if AUTH_LDAP_ENABLED:
|
||||
|
||||
# Import the LDAP modules here; this way, we don't need the dependency unless someone
|
||||
# actually enables the LDAP support
|
||||
import ldap
|
||||
from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType
|
||||
|
||||
# Add LDAP to the authentication backends
|
||||
AUTHENTICATION_BACKENDS += ("django_auth_ldap.backend.LDAPBackend",)
|
||||
|
||||
# Basic configuration
|
||||
AUTH_LDAP_SERVER_URI = env("LDAP_SERVER_URI")
|
||||
AUTH_LDAP_BIND_DN = env("LDAP_BIND_DN", default="")
|
||||
AUTH_LDAP_BIND_PASSWORD = env("LDAP_BIND_PASSWORD", default="")
|
||||
AUTH_LDAP_SEARCH_FILTER = env("LDAP_SEARCH_FILTER", default="(uid={0})").format(
|
||||
"%(user)s"
|
||||
)
|
||||
AUTH_LDAP_START_TLS = env.bool("LDAP_START_TLS", default=False)
|
||||
|
||||
DEFAULT_USER_ATTR_MAP = [
|
||||
"first_name:givenName",
|
||||
"last_name:sn",
|
||||
"username:cn",
|
||||
"email:mail",
|
||||
]
|
||||
LDAP_USER_ATTR_MAP = env.list("LDAP_USER_ATTR_MAP", default=DEFAULT_USER_ATTR_MAP)
|
||||
AUTH_LDAP_USER_ATTR_MAP = {}
|
||||
for m in LDAP_USER_ATTR_MAP:
|
||||
funkwhale_field, ldap_field = m.split(":")
|
||||
AUTH_LDAP_USER_ATTR_MAP[funkwhale_field.strip()] = ldap_field.strip()
|
||||
|
||||
# Determine root DN supporting multiple root DNs
|
||||
AUTH_LDAP_ROOT_DN = env("LDAP_ROOT_DN")
|
||||
AUTH_LDAP_ROOT_DN_LIST = []
|
||||
for ROOT_DN in AUTH_LDAP_ROOT_DN.split():
|
||||
AUTH_LDAP_ROOT_DN_LIST.append(
|
||||
LDAPSearch(ROOT_DN, ldap.SCOPE_SUBTREE, AUTH_LDAP_SEARCH_FILTER)
|
||||
)
|
||||
# Search for the user in all the root DNs
|
||||
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(*AUTH_LDAP_ROOT_DN_LIST)
|
||||
|
||||
# Search for group types
|
||||
LDAP_GROUP_DN = env("LDAP_GROUP_DN", default="")
|
||||
if LDAP_GROUP_DN:
|
||||
AUTH_LDAP_GROUP_DN = LDAP_GROUP_DN
|
||||
# Get filter
|
||||
AUTH_LDAP_GROUP_FILTER = env("LDAP_GROUP_FILER", default="")
|
||||
# Search for the group in the specified DN
|
||||
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
|
||||
AUTH_LDAP_GROUP_DN, ldap.SCOPE_SUBTREE, AUTH_LDAP_GROUP_FILTER
|
||||
)
|
||||
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
|
||||
|
||||
# Configure basic group support
|
||||
LDAP_REQUIRE_GROUP = env("LDAP_REQUIRE_GROUP", default="")
|
||||
if LDAP_REQUIRE_GROUP:
|
||||
AUTH_LDAP_REQUIRE_GROUP = LDAP_REQUIRE_GROUP
|
||||
LDAP_DENY_GROUP = env("LDAP_DENY_GROUP", default="")
|
||||
if LDAP_DENY_GROUP:
|
||||
AUTH_LDAP_DENY_GROUP = LDAP_DENY_GROUP
|
||||
|
||||
|
||||
# SLUGLIFIER
|
||||
AUTOSLUG_SLUGIFY_FUNCTION = "slugify.slugify"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue