diff options
author | Michał Górny <mgorny@gentoo.org> | 2013-07-12 11:39:25 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2013-07-12 11:39:25 +0200 |
commit | 36c78b5ff06058540849702197a749c9c0a4168d (patch) | |
tree | 41fcd1be9f1b3628084bda8e13c151388dbc1442 | |
parent | Merge branch 'master' into openid-week4 (diff) | |
download | identity.gentoo.org-36c78b5ff06058540849702197a749c9c0a4168d.tar.gz identity.gentoo.org-36c78b5ff06058540849702197a749c9c0a4168d.tar.bz2 identity.gentoo.org-36c78b5ff06058540849702197a749c9c0a4168d.zip |
Return LDAP data for SReg requests.
-rw-r--r-- | okupy/accounts/views.py | 24 | ||||
-rw-r--r-- | okupy/templates/openid-auth-site.html | 26 |
2 files changed, 38 insertions, 12 deletions
diff --git a/okupy/accounts/views.py b/okupy/accounts/views.py index 06294b9..cf162f9 100644 --- a/okupy/accounts/views.py +++ b/okupy/accounts/views.py @@ -13,14 +13,14 @@ from django.shortcuts import redirect, render from django.views.decorators.csrf import csrf_exempt from edpwd import random_string -from openid.extensions.sreg import SRegRequest +from openid.extensions.sreg import SRegRequest, SRegResponse from openid.server.server import (Server, ProtocolError, EncodingError, CheckIDRequest, ENCODE_URL, ENCODE_KVFORM, ENCODE_HTML_FORM) from passlib.hash import ldap_md5_crypt from .forms import LoginForm, SignupForm, SiteAuthForm -from .models import Queue +from .models import LDAPUser, Queue from .openid_store import DjangoDBOpenIDStore from ..common.exceptions import OkupyError from ..common.log import log_extra_data @@ -372,6 +372,15 @@ def openid_auth_site(request): }, status=400) sreg = SRegRequest.fromOpenIDRequest(oreq) + if sreg.wereFieldsRequested(): + ldap_user = LDAPUser.objects.get(username = request.user.username) + sreg_data = { + 'nickname': ldap_user.username, + 'email': ldap_user.email[0], + 'fullname': ldap_user.full_name, + } + else: + sreg_data = None if request.POST: form = SiteAuthForm(request.POST) @@ -385,11 +394,17 @@ def openid_auth_site(request): if hasattr(attrs, fn) and fn not in sreg: setattr(attrs, fn, None) - # TODO: actually send the data - if 'accept' in request.POST: + # prepare sreg response + for fn, send in form.cleaned_data.items(): + if not send and fn in sreg_data: + del sreg_data[fn] + oresp = oreq.answer(True, identity=request.build_absolute_uri( reverse(user_page, args=(request.user.username,)))) + + sreg_resp = SRegResponse.extractResponse(sreg, sreg_data) + oresp.addExtension(sreg_resp) elif 'reject' in request.POST: oresp = oreq.answer(False) else: @@ -417,4 +432,5 @@ def openid_auth_site(request): 'return_to_valid': tr_valid, 'form': form, 'sreg': sreg, + 'sreg_data': sreg_data, }) diff --git a/okupy/templates/openid-auth-site.html b/okupy/templates/openid-auth-site.html index 64a30a8..8db68e8 100644 --- a/okupy/templates/openid-auth-site.html +++ b/okupy/templates/openid-auth-site.html @@ -37,14 +37,24 @@ <fieldset> <legend>User information</legend> - {% for w in form %} - {% if w.name in sreg %} - <div> - {{ w }} {{ w.label }} - </div> - {% endif %} - {% endfor %} - + <table> + {% for w in form %} + <tr> + {% if w.name in sreg %} + <td>{{ w }} {{ w.label }}</td> + {% for k, v in sreg_data.items %} + {% if k == w.name %} + <td> + <input type='text' + readonly='readonly' + value='{{ v }}' /> + </td> + {% endif %} + {% endfor %} + {% endif %} + </tr> + {% endfor %} + </table> </fieldset> <input type='submit' name='accept' value='Yes' /> |