summaryrefslogtreecommitdiff
path: root/coip/apps/user
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/user')
-rw-r--r--coip/apps/user/__init__.py0
-rw-r--r--coip/apps/user/admin.py5
-rw-r--r--coip/apps/user/models.py65
-rw-r--r--coip/apps/user/views.py38
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