diff options
author | Leif Johansson <leifj@sunet.se> | 2011-08-16 09:59:58 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-08-16 09:59:58 +0200 |
commit | 1ad5e8f6b33f42966918d56f04c58e6b1e15357b (patch) | |
tree | ae1214a05802ea00812eaf30e0206d4035b09558 /coip/apps/userprofile | |
parent | 36dad4f8b67948daef92257cea362c5d772279e3 (diff) |
new profiles implementation
Diffstat (limited to 'coip/apps/userprofile')
-rw-r--r-- | coip/apps/userprofile/admin.py | 5 | ||||
-rw-r--r-- | coip/apps/userprofile/models.py | 64 | ||||
-rw-r--r-- | coip/apps/userprofile/utils.py | 32 | ||||
-rw-r--r-- | coip/apps/userprofile/views.py | 43 |
4 files changed, 49 insertions, 95 deletions
diff --git a/coip/apps/userprofile/admin.py b/coip/apps/userprofile/admin.py index 32c1ad8..1e5c7a0 100644 --- a/coip/apps/userprofile/admin.py +++ b/coip/apps/userprofile/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin -from coip.apps.userprofile.models import UserProfile +from coip.apps.userprofile.models import UserProfile, Identifier -admin.site.register(UserProfile)
\ No newline at end of file +admin.site.register(UserProfile) +admin.site.register(Identifier)
\ No newline at end of file diff --git a/coip/apps/userprofile/models.py b/coip/apps/userprofile/models.py index 40751fb..e780d81 100644 --- a/coip/apps/userprofile/models.py +++ b/coip/apps/userprofile/models.py @@ -5,39 +5,57 @@ Created on Jul 5, 2010 ''' from django.db import models from django.contrib.auth.models import User -from coip.apps.name.models import Name +from coip.apps.name.models import Name, lookup +from coip.apps.membership.models import add_member class UserProfile(models.Model): - user = models.ForeignKey(User,blank=True,null=True,related_name='profiles') - display_name = models.CharField(max_length=255,blank=True,null=True) - primary = models.BooleanField() - email = models.EmailField(blank=True,null=True) - idp = models.CharField(max_length=255,blank=True,null=True) - identifier = models.CharField(max_length=1023,unique=True) + user = models.ForeignKey(User) + home = models.ForeignKey(Name,blank=True,null=True,editable=False) timecreated = models.DateTimeField(auto_now_add=True) lastupdated = models.DateTimeField(auto_now=True) - home = models.ForeignKey(Name,blank=True,null=True,editable=False) def __unicode__(self): - return "%s [%s] - %s" % (self.identifier,self.user.username,self.display_name) - - def make_primary(self): - for p in UserProfile.objects.filter(user=self.user).all: - p.primary = False - self.primary = True - -def last_used_profile(user): - return UserProfile.objects.filter(user=user).order_by('lastupdated')[0] + return "%s" % (self.user.__unicode__()) + -def primary_profile(user): - return UserProfile.objects.filter(user=user,primary=True)[0] +def user_profile(user): + profile,created = UserProfile.objects.get_or_create(user=user) + if created: + urn = lookup("urn",True) + anyuser = lookup("system:anyuser",True) + urn.setacl(anyuser,'rl') + home = lookup('user:'+user.username,autocreate=True) + home.short = user.get_full_name() + profile.home = home + profile.save() + home.save() + add_member(home,profile.user,hidden=True) + home.setpacl(home, "rwlida") + home.setacl(home,"rwla") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell + + return profile +class Identifier(models.Model): + + FEDERATION=0 + EMAIL=1 + SSHKEY=2 + GRIDCERT=3 + INTERNAL=4 -class PKey(models.Model): - user_profile = models.ForeignKey(UserProfile,related_name='keys') - key = models.CharField(max_length=1023,unique=True) timecreated = models.DateTimeField(auto_now_add=True) lastupdated = models.DateTimeField(auto_now=True) + user = models.ForeignKey(User,related_name='identifiers') + display_name = models.CharField(max_length=255,blank=True,null=True) + type = models.SmallIntegerField(default=0,choices=((0,'Federation Identifier'),(1,'Email Address'),(2,'SSH Key'),(3,'eScience Certificate'),(4,'Internal User'))) + idp = models.CharField(max_length=255,blank=True,null=True) + verified = models.BooleanField() + value = models.CharField(max_length=1023) + verification_code = models.CharField(max_length=1023,blank=True,null=True) + + #class Meta: + # unique_together = ('value','idp') + def __unicode__(self): - return "A merge-key for "+self.user_profile + return "%s [%s]" % (self.value,self.display_name) diff --git a/coip/apps/userprofile/utils.py b/coip/apps/userprofile/utils.py deleted file mode 100644 index d3854f6..0000000 --- a/coip/apps/userprofile/utils.py +++ /dev/null @@ -1,32 +0,0 @@ -''' -Created on Jul 6, 2010 - -@author: leifj -''' -from coip.apps.userprofile.models import UserProfile, PKey -from django.core.exceptions import ObjectDoesNotExist -import logging -from pprint import pformat - -def request_profile(request): - if request.user.is_authenticated(): - logging.warn(pformat(request.META)) - if request.META.has_key('REMOTE_USER'): - return UserProfile.objects.get(identifier=request.META['REMOTE_USER']) - else: - return UserProfile.objects.get(user=request.user) - else: - return None - -def user_profile(request,key=None): - if key: - try: - k = PKey.objects.get(key=key) - return k.profile,k - except ObjectDoesNotExist: - return None - else: - return request_profile(request) - #if not request.session.has_key('_profile'): - # request.session['_profile'] = request_profile(request) - #return request.session['_profile']
\ No newline at end of file diff --git a/coip/apps/userprofile/views.py b/coip/apps/userprofile/views.py index 7ce8f74..50fe184 100644 --- a/coip/apps/userprofile/views.py +++ b/coip/apps/userprofile/views.py @@ -4,34 +4,14 @@ Created on Jul 6, 2010 @author: leifj ''' from django.contrib.auth.decorators import login_required -from coip.apps.userprofile.models import PKey -from django.http import HttpResponseRedirect from coip.multiresponse import respond_to, json_response -from coip.apps.membership.models import Membership, add_member -from coip.apps.userprofile.utils import user_profile +from coip.apps.membership.models import Membership from django.core.exceptions import ObjectDoesNotExist -from pprint import pformat -from coip.apps.auth.utils import nonce -from coip.apps.name.models import Name, NameLink, lookup +from coip.apps.name.models import NameLink from django.contrib.auth.models import User from django.shortcuts import get_object_or_404 +from coip.apps.userprofile.models import Identifier -@login_required -def merge(request,pkey=None): - if pkey: - profile = user_profile(request) - merge_profile,pkey = profile(request,pkey) - if merge_profile: - merge_profile.user.delete() - merge_profile.user = request.user - merge_profile.save() - pkey.delete() - return HttpResponseRedirect("/user/home") - else: - profile = profile(request) - k = PKey(profile=profile,key=nonce()) - k.save() - return HttpResponseRedirect("/accounts/login?next=/user/merge/"+k.key) @login_required def home(request): @@ -41,22 +21,9 @@ def home(request): except ObjectDoesNotExist: pass - urn = lookup("urn",True) - anyuser = lookup("system:anyuser",True) - urn.setacl(anyuser,'rl') - - profile = user_profile(request) - home = lookup('user:'+request.user.username,autocreate=True) - home.short = "%s (%s)" % (profile.display_name,profile.identifier) - profile.home = home - home.save() - add_member(home,profile.user,hidden=True) - home.setpacl(home, "rwlida") - home.setacl(home,"rwla") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell - names = [(link.src,link.data) for link in NameLink.objects.filter(dst__memberships__user=request.user,type=NameLink.access_control,data__contains='i').all()] - - return respond_to(request, {'text/html': 'apps/userprofile/home.html'},{'memberships': memberships,'names': names, 'name': home}) + identifiers = Identifier.objects.filter(user=request.user) + return respond_to(request, {'text/html': 'apps/userprofile/home.html'},{'memberships': memberships,'names': names,'identifiers': identifiers}) @login_required def search(request): |