- fixed typo with unbinding code
- added the ability to get the user's email from the ldap server upon registration
This commit is contained in:
parent
11782c0061
commit
517eb8b443
@ -33,19 +33,33 @@ class LDAP(object):
|
|||||||
_log.info('Initiating TLS')
|
_log.info('Initiating TLS')
|
||||||
self.conn.start_tls_s()
|
self.conn.start_tls_s()
|
||||||
|
|
||||||
|
def _get_email(self, server, username):
|
||||||
|
results = self.conn.search_s(server['LDAP_SEARCH_BASE'],
|
||||||
|
ldap.SCOPE_SUBTREE, 'uid={0}'
|
||||||
|
.format(username),
|
||||||
|
[server['EMAIL_SEARCH_FIELD']])
|
||||||
|
|
||||||
|
try:
|
||||||
|
email = results[0][1][server['EMAIL_SEARCH_FIELD']][0]
|
||||||
|
except KeyError:
|
||||||
|
email = None
|
||||||
|
|
||||||
|
return email
|
||||||
|
|
||||||
def login(self, username, password):
|
def login(self, username, password):
|
||||||
for k, v in self.ldap_settings.iteritems():
|
for k, v in self.ldap_settings.iteritems():
|
||||||
try:
|
try:
|
||||||
self._connect(v)
|
self._connect(v)
|
||||||
user_dn = v['LDAP_USER_DN_TEMPLATE'].format(username=username)
|
user_dn = v['LDAP_USER_DN_TEMPLATE'].format(username=username)
|
||||||
self.conn.simple_bind_s(user_dn, password.encode('utf8'))
|
self.conn.simple_bind_s(user_dn, password.encode('utf8'))
|
||||||
return username
|
email = self._get_email(v, username)
|
||||||
|
return username, email
|
||||||
|
|
||||||
except ldap.LDAPError, e:
|
except ldap.LDAPError, e:
|
||||||
_log.info(e)
|
_log.info(e)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
_log.info('Unbinding {0}.').format(v['LDAP_SERVER_URI'])
|
_log.info('Unbinding {0}.'.format(v['LDAP_SERVER_URI']))
|
||||||
self.conn.unbind()
|
self.conn.unbind()
|
||||||
|
|
||||||
return False
|
return False, None
|
||||||
|
@ -31,7 +31,8 @@ def login(request):
|
|||||||
|
|
||||||
if request.method == 'POST' and login_form.validate():
|
if request.method == 'POST' and login_form.validate():
|
||||||
l = LDAP()
|
l = LDAP()
|
||||||
username = l.login(login_form.username.data, login_form.password.data)
|
username, email = l.login(login_form.username.data,
|
||||||
|
login_form.password.data)
|
||||||
|
|
||||||
if username:
|
if username:
|
||||||
user = User.query.filter_by(
|
user = User.query.filter_by(
|
||||||
@ -55,8 +56,8 @@ def login(request):
|
|||||||
'instance.'))
|
'instance.'))
|
||||||
return redirect(request, 'index')
|
return redirect(request, 'index')
|
||||||
|
|
||||||
register_form = forms.RegisterForm(request.form,
|
register_form = forms.RegisterForm(username=username,
|
||||||
username=username)
|
email=email)
|
||||||
|
|
||||||
return render_to_response(
|
return render_to_response(
|
||||||
request,
|
request,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user