summaryrefslogtreecommitdiff
path: root/coip/apps/user/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/user/models.py')
-rw-r--r--coip/apps/user/models.py65
1 files changed, 65 insertions, 0 deletions
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()
+
+