瀏覽代碼

catch ldap configuration and packaging errors and make them non fatal

Nick Sweeting 2 年之前
父節點
當前提交
85f8583d62
共有 1 個文件被更改,包括 35 次插入29 次删除
  1. 35 29
      archivebox/core/settings.py

+ 35 - 29
archivebox/core/settings.py

@@ -6,9 +6,6 @@ import re
 import logging
 import logging
 import tempfile
 import tempfile
 
 
-import ldap
-from django_auth_ldap.config import LDAPSearch
-
 from pathlib import Path
 from pathlib import Path
 from django.utils.crypto import get_random_string
 from django.utils.crypto import get_random_string
 
 
@@ -97,33 +94,42 @@ AUTHENTICATION_BACKENDS = [
 ]
 ]
 
 
 if LDAP:
 if LDAP:
-    global AUTH_LDAP_SERVER_URI
-    AUTH_LDAP_SERVER_URI = LDAP_SERVER_URI
-
-    global AUTH_LDAP_BIND_DN
-    AUTH_LDAP_BIND_DN = LDAP_BIND_DN
-
-    global AUTH_LDAP_BIND_PASSWORD
-    AUTH_LDAP_BIND_PASSWORD = LDAP_BIND_PASSWORD
-
-    global AUTH_LDAP_USER_SEARCH
-    AUTH_LDAP_USER_SEARCH = LDAPSearch(
-        LDAP_USER_BASE,
-        ldap.SCOPE_SUBTREE,
-        '(&(' + LDAP_USERNAME_ATTR + '=%(user)s)' + LDAP_USER_FILTER + ')',
-    )
-
-    global AUTH_LDAP_USER_ATTR_MAP
-    AUTH_LDAP_USER_ATTR_MAP = {
-        'username': LDAP_USERNAME_ATTR,
-        'first_name': LDAP_FIRSTNAME_ATTR,
-        'last_name': LDAP_LASTNAME_ATTR,
-        'email': LDAP_EMAIL_ATTR,
-    }
+    try:
+        import ldap
+        from django_auth_ldap.config import LDAPSearch
+
+        global AUTH_LDAP_SERVER_URI
+        AUTH_LDAP_SERVER_URI = LDAP_SERVER_URI
+
+        global AUTH_LDAP_BIND_DN
+        AUTH_LDAP_BIND_DN = LDAP_BIND_DN
+
+        global AUTH_LDAP_BIND_PASSWORD
+        AUTH_LDAP_BIND_PASSWORD = LDAP_BIND_PASSWORD
+
+        global AUTH_LDAP_USER_SEARCH
+        AUTH_LDAP_USER_SEARCH = LDAPSearch(
+            LDAP_USER_BASE,
+            ldap.SCOPE_SUBTREE,
+            '(&(' + LDAP_USERNAME_ATTR + '=%(user)s)' + LDAP_USER_FILTER + ')',
+        )
+
+        global AUTH_LDAP_USER_ATTR_MAP
+        AUTH_LDAP_USER_ATTR_MAP = {
+            'username': LDAP_USERNAME_ATTR,
+            'first_name': LDAP_FIRSTNAME_ATTR,
+            'last_name': LDAP_LASTNAME_ATTR,
+            'email': LDAP_EMAIL_ATTR,
+        }
+
+        AUTHENTICATION_BACKENDS = [
+            'django_auth_ldap.backend.LDAPBackend',
+        ]
+    except ModuleNotFoundError:
+        sys.stderr.write('[X] Error: Found LDAP=True config but LDAP packages not installed. You may need to run: pip install archivebox[ldap]\n\n')
+        # dont hard exit here. in case the user is just running "archivebox version" or "archivebox help", we still want those to work despite broken ldap
+        # sys.exit(1)
 
 
-    AUTHENTICATION_BACKENDS = [
-        'django_auth_ldap.backend.LDAPBackend',
-    ]
 
 
 ################################################################################
 ################################################################################
 ### Debug Settings
 ### Debug Settings