Changeset 5
- Timestamp:
- 12/28/06 14:13:36 (5 years ago)
- Files:
-
- trunk/djangoid/server/views.py (modified) (3 diffs)
- trunk/djangoid/settings.py (modified) (1 diff)
- trunk/djangoid/templates/users/yadis.xrds (modified) (1 diff)
- trunk/djangoid/urls.py (modified) (1 diff)
- trunk/djangoid/users/models.py (modified) (1 diff)
- trunk/djangoid/users/views.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/djangoid/server/views.py
r2 r5 1 from django.http import HttpResponse 1 from django.http import HttpResponse, HttpResponseRedirect 2 2 from openid.server import server 3 3 from djangoid.server.djangoidstore import DjangoidStore 4 4 from django.conf import settings 5 5 from django.shortcuts import render_to_response 6 from users.models import DjangoidUser 7 import re 8 9 _identityRe = re.compile(settings.BASE_URL + "(?P<uid>[^/]+)/$") 6 10 7 11 openidserver = server.Server(DjangoidStore()) … … 20 24 return r 21 25 26 def _getDjangoidUserFromIdentity(identity): 27 uid = _identityRe.match(identity).groupdict()["uid"] 28 print "Found uid: ", uid 29 user = DjangoidUser.objects.filter(djangouser = uid) 30 if not len(user) == 0: 31 return user[0] 32 return None 33 22 34 def endpoint(request): 35 if request.META.has_key("HTTP_ACCEPT"): 36 ct = request.META["HTTP_ACCEPT"] 37 if ct.startswith("application/xrds+xml"): 38 return serveryadis(request) 39 23 40 query = {} 24 41 for i in request.REQUEST.items(): … … 33 50 34 51 if r.mode in ["checkid_immediate", "checkid_setup"]: 35 if True: #user logged in 36 response = r.answer(True) 52 user = _getDjangoidUserFromIdentity(r.identity) 53 if not user == None: 54 if user.authenticate(r.trust_root): #user logged in (using r.identity and r.trust_root) 55 response = r.answer(True) 56 elif r.immediate: 57 response = r.answer(False, settings.BASE_URL) 58 else: 59 return HttpResponseRedirect(r.encodeToURL(settings.BASE_URL + "login/")) 37 60 else: 38 61 response = openidserver.handleRequest(r) trunk/djangoid/settings.py
r3 r5 71 71 'django.contrib.sessions', 72 72 'django.contrib.sites', 73 'django.contrib.admin', 73 74 'djangoid.server', 74 75 'djangoid.users', trunk/djangoid/templates/users/yadis.xrds
r2 r5 2 2 <xrds:XRDS 3 3 xmlns:xrds="xri://$xrds" 4 xmlns:openid="http://openid.net/xmlns/ 2.0"4 xmlns:openid="http://openid.net/xmlns/1.0" 5 5 xmlns="xri://$xrd*($v*2.0)"> 6 6 <XRD> 7 7 <Service priority="0"> 8 <Type>http://openid.net/signon/1. 0</Type>8 <Type>http://openid.net/signon/1.2</Type> 9 9 <URI>{{ server_url }}</URI> 10 10 <openid:Delegate>{{ server_url }}{{ uid }}/</openid:Delegate> trunk/djangoid/urls.py
r4 r5 4 4 # Example: 5 5 # (r'^djangoid/', include('djangoid.apps.foo.urls.foo')), 6 (r'^testid/$', 'djangoid.users.views.testid'), 6 7 (r'^yadis/$', 'djangoid.server.views.serveryadis'), 7 8 (r'^admin/', include('django.contrib.admin.urls')), 9 (r'^login/$', 'djangoid.users.views.login'), 8 10 (r'^(?P<uid>[^/]+)/yadis/$', 'djangoid.users.views.useryadis'), 9 11 (r'^(?P<uid>[^/]+)/$', 'djangoid.users.views.userpage'), trunk/djangoid/users/models.py
r2 r5 1 1 from django.db import models 2 from django.contrib import auth 2 3 3 # Create your models here. 4 class TrustedRoot(models.Model): 5 root = models.URLField(primary_key = True) 6 7 def __str__(self): 8 return self.root 9 10 class Admin: 11 pass 12 13 class DjangoidUser(models.Model): 14 #This seems not to work: 15 #djangouser = models.ForeignKey(auth.models.User, primary_key = True) 16 #So using an ugly hack... TODO: Fixme! 17 djangouser = models.CharField('username', maxlength = 30, primary_key = True) 18 trusted_roots = models.ManyToManyField(TrustedRoot, blank = True, null = True) 19 20 def __str__(self): 21 return self.djangouser 22 23 def authenticate(self, root): 24 r = TrustedRoot.objects.filter(root = root) 25 if len(r) == 0: #Certainly not trusted 26 TrustedRoot(root = root).save() 27 else: 28 for mr in self.trusted_roots.all(): 29 if root == mr.root: 30 return True 31 return False 32 33 class Admin: 34 pass 35 36 class IdentityAttribute(models.Model): 37 name = models.CharField(maxlength = 128) 38 namespace = models.CharField(maxlength = 32) 39 description = models.TextField(blank = True) 40 41 def __str__(self): 42 return self.namespace + "." + self.name 43 44 class Admin: 45 pass 46 47 class Meta: 48 unique_together = (("name", "namespace"),) 49 50 class UserAttribute(models.Model): 51 user = models.ForeignKey(DjangoidUser) 52 attribute = models.ForeignKey(IdentityAttribute) 53 value = models.TextField() 54 public = models.BooleanField() 55 public_for = models.ManyToManyField(TrustedRoot, blank = True, null = True) 56 57 def __str__(self): 58 return str(self.user) + ": " + str(self.attribute) 59 60 class Admin: 61 pass 62 63 class Meta: 64 unique_together = (("user", "attribute"),) trunk/djangoid/users/views.py
r2 r5 9 9 10 10 def userpage(request, uid): 11 #Check whether this is a YADIS request 12 if request.META.has_key("HTTP_ACCEPT"): 13 ct = request.META["HTTP_ACCEPT"] 14 if ct.startswith("application/xrds+xml"): 15 return useryadis(request, uid) 16 11 17 res = render_to_response("users/userpage.html", {"server_url": settings.BASE_URL, "uid": uid}) 12 18 res["X-XRDS-Location"] = settings.BASE_URL + uid + "/yadis/" 13 19 return res 20 21 def testid(request): 22 return userpage(request, "nicolas")
