Skip to content

Instantly share code, notes, and snippets.

@malgorath
Created April 29, 2016 15:14
Show Gist options
  • Save malgorath/9fdf2dfffa71d8e1ea29e2cc71b1aec3 to your computer and use it in GitHub Desktop.
Save malgorath/9fdf2dfffa71d8e1ea29e2cc71b1aec3 to your computer and use it in GitHub Desktop.
import ldap
from django.conf import settings
from django.contrib.auth.models import User
from ldapper.ldap_settings import LDAP_SERVER as ldsettings
class LdapAdAuthenticationBackend(object):
def authenticate(self, username=None, password=None):
try:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
user_ldap = ldap.initialize(ldsettings[0])
user_ldap.protocol_version = 3
user_ldap.set_option(ldap.OPT_REFERRALS, 0)
user = '%s@pdc-domain.lan' % username
user_ldap.simple_bind_s(user, password)
except:
return None
user, created = User.objects.get_or_create(username=username)
created.is_staff = True
created.set_password(password)
created.save()
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Environment:
Request Method: POST
Request URL: http://localhost:8000/ldapper/login/
Django Version: 1.9.5
Python Version: 2.7.11
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ldapper',
'links']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/home/username/.local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/home/username/.local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/username/PycharmProjects/internal/src/ldapper/views.py" in login_user
18. user = authenticate(username=username, password=password)
Exception Type: NameError at /ldapper/login/
Exception Value: global name 'authenticate' is not defined
AUTHENTICATION_BACKENDS = (
'internal.authentication.LdapAdAuthenticationBackend',
'django.contrib.auth.backends.ModelBackend',
)
from django.views.generic.edit import FormView
from ldap_settings import LDAP_SERVER as ldsettings
from django.contrib.auth import login, logout
from django.shortcuts import render, redirect, HttpResponse
from ad_ldap.ad_ldap import Domain
from ad_ldap.errors import *
from .forms import ChangePasswordForm
def login_user(request):
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
else:
return render(request, 'ldapper/auth.html', {'state': 'Invalid Login/Password'})
else:
return render(request, 'ldapper/auth.html')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment