aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2013-07-12 11:39:25 +0200
committerMichał Górny <mgorny@gentoo.org>2013-07-12 11:39:25 +0200
commit36c78b5ff06058540849702197a749c9c0a4168d (patch)
tree41fcd1be9f1b3628084bda8e13c151388dbc1442
parentMerge branch 'master' into openid-week4 (diff)
downloadidentity.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.py24
-rw-r--r--okupy/templates/openid-auth-site.html26
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' />