summaryrefslogtreecommitdiff
path: root/coip/apps/userprofile/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/userprofile/models.py')
-rw-r--r--coip/apps/userprofile/models.py79
1 files changed, 55 insertions, 24 deletions
diff --git a/coip/apps/userprofile/models.py b/coip/apps/userprofile/models.py
index 40751fb..6e2364a 100644
--- a/coip/apps/userprofile/models.py
+++ b/coip/apps/userprofile/models.py
@@ -5,39 +5,70 @@ 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 django.dispatch.dispatcher import receiver
+from django.db.models.signals import post_save
+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')
+
+ INTERNAL = 0
+ ENTITY = 1
+ SSHKEY = 2
+ GRIDCERT = 3
+ FEDID = 4
+
+ #
+ # User content
+ # 0 (internal) - normal
+ # 1 (entity) - username=entity:sha1(entityID), profile.display_name = display or entityID, profile.identifier = ssh key
+ # 2 (sshkey) - username=sshkey:fingerprint, profile.display_name = key alias or "SSH Key with fingerprint ..."
+ # 3 (gridcert) - username=x509:sha1-fingerprint, profile.display_name = dn, profile.identifier = PEM
+ # 4 (fedid) - username=eppn or equiv (REMOTE_USER),profile.display_name = display or eppn, profile.identifier = eppn, profile.authority = idp
+ #
+
+ user = models.OneToOneField(User)
+ home = models.ForeignKey(Name,blank=True,null=True)
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)
+ type = models.SmallIntegerField(choices=((ENTITY,"Connected Service"),
+ (INTERNAL,"System User"),
+ (SSHKEY,"SSH Key"),
+ (GRIDCERT,"eScience Certificate"),
+ (FEDID,"User Identity")))
+
+ authority = models.CharField(max_length=255,blank=True,null=True)
+ identifier = models.CharField(max_length=1023,blank=True,null=True)
+
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]
-
-def primary_profile(user):
- return UserProfile.objects.filter(user=user,primary=True)[0]
+def import_sshkey(keyfile):
+ fingerprint = "xxx"
+ user = User.objects.get_or_create(username="sshkey:%s" % fingerprint)
+def home_name(user,short=None,autocreate=False):
+ if short == None:
+ short = user.username
+ urn = lookup("urn",True)
+ anyuser = lookup("system:anyuser",True)
+ urn.setacl(anyuser,'rl')
-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)
+ home = lookup('user:'+user.username,autocreate=autocreate)
+ add_member(home,user,hidden=True)
+ home.setpacl(home, "rwlida")
+ home.setacl(home,"rwlia") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell
+ home.short = short
+ home.save()
- def __unicode__(self):
- return "A merge-key for "+self.user_profile
+ return home
+
+@receiver(post_save,sender=User)
+def _create_profile(sender,**kwargs):
+ user = kwargs['instance']
+ profile,created = UserProfile.objects.get_or_create(user=user)
+ if profile.home == None:
+ profile.home = home_name(user,autocreate=True)
+ profile.save() \ No newline at end of file