diff options
Diffstat (limited to 'coip/apps/user')
-rw-r--r-- | coip/apps/user/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/user/admin.py | 5 | ||||
-rw-r--r-- | coip/apps/user/models.py | 65 | ||||
-rw-r--r-- | coip/apps/user/views.py | 38 |
4 files changed, 108 insertions, 0 deletions
diff --git a/coip/apps/user/__init__.py b/coip/apps/user/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/user/__init__.py diff --git a/coip/apps/user/admin.py b/coip/apps/user/admin.py new file mode 100644 index 0000000..c0e5ff4 --- /dev/null +++ b/coip/apps/user/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from coip.apps.user.models import Identifier, UserProfile + +admin.site.register(Identifier) +admin.site.register(UserProfile) diff --git a/coip/apps/user/models.py b/coip/apps/user/models.py new file mode 100644 index 0000000..9521d89 --- /dev/null +++ b/coip/apps/user/models.py @@ -0,0 +1,65 @@ +''' +Created on Jul 5, 2010 + +@author: leifj +''' +from django.db import models +from django.contrib.auth.models import User +from coip.apps.name.models import Name, lookup +from coip.apps.membership.models import add_member +from django.dispatch.dispatcher import receiver +from django.db.models.signals import post_save + +class Identifier(models.Model): + + FEDERATION=0 + EMAIL=1 + SSHKEY=2 + GRIDCERT=3 + INTERNAL=4 + + 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 "%s [%s]" % (self.value,self.display_name) + +class UserProfile(models.Model): + user = models.OneToOneField(User) + home = models.ForeignKey(Name,blank=True,null=True,editable=False) + identifier = models.ForeignKey(Identifier,editable=False,blank=True,null=True) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + + def __unicode__(self): + return "%s" % (self.user.__unicode__()) + +@receiver(post_save,sender=User) +def _create_profile(sender,**kwargs): + user = kwargs['instance'] + created = kwargs['created'] + if created: + profile,profile_created = UserProfile.objects.get_or_create(user=user) + urn = lookup("urn",True) + anyuser = lookup("system:anyuser",True) + urn.setacl(anyuser,'rl') + profile.home = lookup('user:'+user.username,autocreate=True) + add_member(profile.home,user,hidden=True) + profile.home.setpacl(profile.home, "rwlida") + profile.home.setacl(profile.home,"rwla") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell + profile.home.short = user.get_full_name() + profile.home.save() + profile.save() + + diff --git a/coip/apps/user/views.py b/coip/apps/user/views.py new file mode 100644 index 0000000..f204e21 --- /dev/null +++ b/coip/apps/user/views.py @@ -0,0 +1,38 @@ +''' +Created on Jul 6, 2010 + +@author: leifj +''' +from django.contrib.auth.decorators import login_required +from coip.multiresponse import respond_to, json_response +from coip.apps.membership.models import Membership +from django.core.exceptions import ObjectDoesNotExist +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.user.models import Identifier + +@login_required +def home(request): + memberships = [] + try: + memberships = Membership.objects.filter(user=request.user,hidden=False) + except ObjectDoesNotExist: + pass + + names = [(link.src,link.data) for link in NameLink.objects.filter(dst__memberships__user=request.user,type=NameLink.access_control,data__contains='i').all()] + 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): + list = [] + if request.REQUEST.has_key('term'): + term = request.REQUEST['term'] + list = [{'label': user.username,'value': user.id} for user in User.objects.filter(username__contains=term)] + return json_response(list) + +@login_required +def info(request,username): + user = get_object_or_404(User,username=username) + return json_response({'username': user.username});
\ No newline at end of file |