From 3f61dbf0560554156523205569365aa5fec18085 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Sat, 6 Aug 2016 15:28:41 +0200 Subject: [PATCH] add ldap auth reqs, minor --- infoskjerm2/settings.py | 22 +++++++++------------- requirements.txt | 1 + slides/admin.py | 4 ++-- slides/auth.py | 30 ++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 slides/auth.py diff --git a/infoskjerm2/settings.py b/infoskjerm2/settings.py index 41196e5..fe45676 100644 --- a/infoskjerm2/settings.py +++ b/infoskjerm2/settings.py @@ -88,18 +88,10 @@ DATABASES = { # Password validation # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, + {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, + {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, + {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, + {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] @@ -115,9 +107,13 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.10/howto/static-files/ STATIC_URL = '/static/' - STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') +# Auth +AUTHENTICATION_BACKENDS = [ + 'django.contrib.auth.backends.ModelBackend', +] + # Local settings try: from .local_settings import * diff --git a/requirements.txt b/requirements.txt index 25a4c83..0cc03c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ Django==1.10 django-admin-sortable2==0.6.4 +django-auth-ldap==1.2.8 django-extensions==1.6.7 djangorestframework==3.4.1 gunicorn==19.6.0 diff --git a/slides/admin.py b/slides/admin.py index 97e4cfa..f03e4a9 100644 --- a/slides/admin.py +++ b/slides/admin.py @@ -5,7 +5,7 @@ from slides.models import Slide class SlideAdmin(SortableAdminMixin, admin.ModelAdmin): - list_display = ('url', 'title', 'status', 'activate_date', 'deactivate_date') - ordering = ('order', 'status', '-activate_date') + list_display = ['title', 'url', 'status', 'activate_date', 'deactivate_date'] + ordering = ['order', 'status', '-activate_date'] admin.site.register(Slide, SlideAdmin) diff --git a/slides/auth.py b/slides/auth.py new file mode 100644 index 0000000..8613481 --- /dev/null +++ b/slides/auth.py @@ -0,0 +1,30 @@ +from django_auth_ldap.backend import LDAPBackend + + +class LDAPUsernameBackend(LDAPBackend): + settings_prefix = "AUTH_LDAP_U_" + + +class LDAPEmailBackend(LDAPBackend): + settings_prefix = "AUTH_LDAP_E_" + + def get_or_create_user(self, email, ldap_user): + """ + Use the PosixUser uid field as username instead of email. + + This must return a (User, created) 2-tuple for the given LDAP user. + username is the Django-friendly username of the user. ldap_user.dn is + the user's DN and ldap_user.attrs contains all of their LDAP attributes. + """ + model = self.get_user_model() + username_field = getattr(model, 'USERNAME_FIELD', 'username') + + kwargs = { + username_field + '__iexact': ldap_user.attrs['uid'][0], + 'defaults': { + username_field: ldap_user.attrs['uid'][0].lower(), + 'email': email + } + } + + return model.objects.get_or_create(**kwargs)