Changeset 10
- Timestamp:
- 01/04/07 10:35:41 (5 years ago)
- Files:
-
- trunk/djangoid/djangoidstore.py (moved) (moved from trunk/djangoid/server/djangoidstore.py)
- trunk/djangoid/fix_headers.sh (modified) (1 diff)
- trunk/djangoid/openidhandlers.py (added)
- trunk/djangoid/server/views.py (modified) (4 diffs)
- trunk/djangoid/users/models.py (modified) (3 diffs)
- trunk/djangoid/users/views.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/djangoid/fix_headers.sh
r8 r10 4 4 5 5 for sf in `find . -iname "*.py" \! -regex "\./openid/.*"`; do 6 if grep ${EOL} ${sf} ; then6 if grep ${EOL} ${sf} > /dev/null; then 7 7 echo "${sf}: got header" 8 8 else trunk/djangoid/server/views.py
r8 r10 17 17 #EOL 18 18 from django.http import HttpResponse, HttpResponseRedirect 19 from openid.server import server20 from djangoid.server.djangoidstore import DjangoidStore21 19 from django.conf import settings 22 20 from django.shortcuts import render_to_response 23 21 from djangoid.users.models import DjangoidUser 22 from djangoid.openidhandlers import checkYadisRequest, convertToOpenIDRequest, convertToHttpResponse, handleOpenIDRequest 24 23 import re 25 24 … … 29 28 #Watch the trailing / 30 29 _identityRe = re.compile(settings.BASE_URL + "(?P<uid>[^/]+)/$") 31 32 #Global OpenID server instance, using a DjangoidStore object as container33 openidserver = server.Server(DjangoidStore())34 35 #Convert an OpenID server response to a Django-compatible HttpResponse:36 #copy HTTP headers, and payload37 def convertOpenidServerResponse(response):38 try:39 webresponse = openidserver.encodeResponse(response)40 except server.EncodingError, why:41 raise42 43 r = HttpResponse(webresponse.body)44 for header, value in webresponse.headers.iteritems():45 r[header] = value46 r.status_code = webresponse.code47 48 return r49 30 50 31 #Get a DjangoidUser object, based on a delegate URI … … 60 41 def endpoint(request): 61 42 #If this is (most likely) a YADIS request, handle it using the YADIS view function 62 if request.META.has_key("HTTP_ACCEPT"): 63 ct = request.META["HTTP_ACCEPT"] 64 if ct.startswith("application/xrds+xml"): 65 return serveryadis(request) 43 if checkYadisRequest(request): 44 return serveryadis(request) 66 45 67 #Copy over all query (GET and POST) key-value pairs, so we can pass them to out OpenID server. 68 #request.REQUEST.copy() seems not to work, as openidserver.decodeRequest seems to use some function 69 #on the passed object that's not implemented in the copied object. 70 query = {} 71 for i in request.REQUEST.items(): 72 query[i[0]] = i[1] 73 try: 74 r = openidserver.decodeRequest(query) 75 except server.ProtocolError, why: 76 raise 46 r = convertToOpenIDRequest(request) 77 47 78 48 #If the request wasnt a valid OpenID server request, render some static page. … … 107 77 #If not, let the OpenID server do everything for us :-) 108 78 else: 109 response = openidserver.handleRequest(r)79 response = handleOpenIDRequest(r) 110 80 111 return convert OpenidServerResponse(response)81 return convertToHttpResponse(response) 112 82 113 83 #A server YADIS document is requested. I don't think this is widely used yet, but well... Let's just return it. trunk/djangoid/users/models.py
r8 r10 17 17 #EOL 18 18 from django.db import models 19 from django.contrib import auth19 from django.contrib.auth.models import User 20 20 21 21 #Represent one trusted root URI. Can be shared between several users. … … 32 32 class DjangoidUser(models.Model): 33 33 #This seems not to work: 34 #djangouser = models.ForeignKey( auth.models.User, primary_key = True)34 #djangouser = models.ForeignKey(User, primary_key = True) 35 35 #So using an ugly hack... TODO: Fixme! 36 36 djangouser = models.CharField('username', maxlength = 30, primary_key = True) … … 56 56 class IdentityAttribute(models.Model): 57 57 name = models.CharField(maxlength = 128) 58 title = models.CharField(maxlength = 128) 58 59 namespace = models.CharField(maxlength = 32) 59 60 description = models.TextField(blank = True) 61 regex = models.CharField(maxlength = 128, blank = True) 60 62 61 63 def __str__(self): trunk/djangoid/users/views.py
r8 r10 21 21 from openid.server import server 22 22 23 from djangoid.server.views import openidserver, convertOpenidServerResponse,getDjangoidUserFromIdentity23 from djangoid.server.views import getDjangoidUserFromIdentity 24 24 from djangoid.users.models import TrustedRoot 25 from djangoid.openidhandlers import convertToOpenIDRequest, checkYadisRequest, convertToHttpResponse 25 26 26 27 def useryadis(request, uid): … … 32 33 def userpage(request, uid): 33 34 #Check whether this is a YADIS request 34 if request.META.has_key("HTTP_ACCEPT"): 35 ct = request.META["HTTP_ACCEPT"] 36 if ct.startswith("application/xrds+xml"): 37 return useryadis(request, uid) 35 if checkYadisRequest(request): 36 return useryadis(request, uid) 38 37 39 38 res = render_to_response("users/userpage.html", {"server_url": settings.BASE_URL, "uid": uid}) … … 45 44 46 45 def accept(request): 47 #Copy over all query (GET and POST) key-value pairs, so we can pass them to out OpenID server. 48 #request.REQUEST.copy() seems not to work, as openidserver.decodeRequest seems to use some function 49 #on the passed object that's not implemented in the copied object. 50 query = {} 51 for i in request.REQUEST.items(): 52 query[i[0]] = i[1] 53 try: 54 r = openidserver.decodeRequest(query) 55 except server.ProtocolError, why: 56 raise 46 r = convertToOpenIDRequest(request) 57 47 58 48 if r is None: … … 64 54 if request.method == "POST": 65 55 if request.POST.has_key("cancel"): 66 return convert OpenidServerResponse(r.answer(False))56 return convertToHttpResponse(r.answer(False)) 67 57 if request.POST.has_key("remember"): 68 58 user = getDjangoidUserFromIdentity(r.identity) 69 59 root = TrustedRoot.objects.get(root = r.trust_root) 70 60 user.trusted_roots.add(root) 71 return convert OpenidServerResponse(r.answer(True))61 return convertToHttpResponse(r.answer(True)) 72 62
