summaryrefslogtreecommitdiff
path: root/coip/apps
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps')
-rw-r--r--coip/apps/auth/__init__.py0
-rw-r--r--coip/apps/auth/views.py63
-rw-r--r--coip/apps/invitation/views.py4
-rw-r--r--coip/apps/membership/models.py9
-rw-r--r--coip/apps/name/models.py7
-rw-r--r--coip/apps/userprofile/__init__.py0
-rw-r--r--coip/apps/userprofile/admin.py4
-rw-r--r--coip/apps/userprofile/models.py30
-rw-r--r--coip/apps/userprofile/utils.py29
-rw-r--r--coip/apps/userprofile/views.py44
10 files changed, 188 insertions, 2 deletions
diff --git a/coip/apps/auth/__init__.py b/coip/apps/auth/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/coip/apps/auth/__init__.py
diff --git a/coip/apps/auth/views.py b/coip/apps/auth/views.py
new file mode 100644
index 0000000..3e54e9c
--- /dev/null
+++ b/coip/apps/auth/views.py
@@ -0,0 +1,63 @@
+'''
+Created on Jul 5, 2010
+
+@author: leifj
+'''
+from django.http import HttpResponseRedirect
+from coip.apps.userprofile.models import UserProfile
+from django.contrib.auth.models import User
+from uuid import uuid4
+
+def meta(request,attr):
+ v = request.META.get(attr)
+ values = v.split(";")
+ return values[0]
+
+def accounts_login_federated(request):
+ if request.user.is_authenticated():
+ profile = UserProfile.objects.get_or_create(identifier=request.user.username)
+ if profile.user:
+ request.user = profile.user
+ else:
+ profile.identifier = request.user.username
+ request.user = User(username=uuid4().urn)
+ request.user.save()
+ profile.user = request.user
+
+ update = False
+ cn = meta(request,'HTTP_CN')
+ if not cn:
+ cn = meta(request,'HTTP_DISPLAYNAME')
+ if not cn:
+ fn = meta(request,'HTTP_GIVENNAME')
+ ln = meta(request,'HTTP_SN')
+ cn = "%s %s" % (fn,ln)
+ if not cn:
+ cn = profile.identifier
+
+ mail = meta(request,'HTTP_MAIL')
+
+ for attrib_name, meta_value in (('display_name',cn),('email',mail)):
+ attrib_value = getattr(profile, attrib_name)
+ if meta_value and not attrib_value:
+ setattr(profile,attrib_name,meta_value)
+ update = True
+
+ if request.user.password == "":
+ request.user.password = "(not used for federated logins)"
+ update = True
+
+ if update:
+ request.user.save()
+ profile.save()
+ next = request.session.get("after_login_redirect", None)
+ if next is not None:
+ return HttpResponseRedirect(next)
+ else:
+ pass
+ return HttpResponseRedirect("/")
+
+def logout(request):
+ from django.contrib.auth import logout
+ logout(request)
+ return HttpResponseRedirect("/Shibboleth.sso/Logout") \ No newline at end of file
diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py
index fe1c6af..63f017f 100644
--- a/coip/apps/invitation/views.py
+++ b/coip/apps/invitation/views.py
@@ -4,8 +4,8 @@ Created on Jun 23, 2010
@author: leifj
'''
from django.contrib.auth.decorators import login_required
-from apps.invitation.forms import InvitationForm
-from apps.invitation.models import Invitation
+from coip.apps.invitation.forms import InvitationForm
+from coip.apps.invitation.models import Invitation
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py
index df6e796..a86f2e5 100644
--- a/coip/apps/membership/models.py
+++ b/coip/apps/membership/models.py
@@ -19,5 +19,14 @@ class Membership(models.Model):
expires = models.DateTimeField(blank=True)
name = models.ForeignKey(Name)
+ def __unicode__(self):
+ return "%s in %s" % (self.user,self.name)
+
def valid(self):
return self.enabled and datetime.date.today() > self.expires
+
+ def status(self):
+ if self.valid():
+ return "active"
+ else:
+ return "inactive";
diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py
index ec86769..7801a0d 100644
--- a/coip/apps/name/models.py
+++ b/coip/apps/name/models.py
@@ -25,11 +25,18 @@ class Name(models.Model):
parent = models.ForeignKey('self', blank=True, null=True,related_name='children')
partof = models.ForeignKey('self', blank=True, null=True,related_name='parts')
acl = models.TextField(blank=True) # fully-qualified-name '#' rights
+ short = models.CharField(max_length=64,blank=True)
description = models.TextField(blank=True)
creator = models.ForeignKey(User)
timecreated = models.DateTimeField(auto_now_add=True)
lastupdated = models.DateTimeField(auto_now=True)
+ def shortname(self):
+ if self.short:
+ return self.short
+ else:
+ return self.__unicode__()
+
def relative_name(self):
if self.type:
return "%s=%s" % (self.type.name,self.value)
diff --git a/coip/apps/userprofile/__init__.py b/coip/apps/userprofile/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/coip/apps/userprofile/__init__.py
diff --git a/coip/apps/userprofile/admin.py b/coip/apps/userprofile/admin.py
new file mode 100644
index 0000000..32c1ad8
--- /dev/null
+++ b/coip/apps/userprofile/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+from coip.apps.userprofile.models import UserProfile
+
+admin.site.register(UserProfile) \ No newline at end of file
diff --git a/coip/apps/userprofile/models.py b/coip/apps/userprofile/models.py
new file mode 100644
index 0000000..2387e36
--- /dev/null
+++ b/coip/apps/userprofile/models.py
@@ -0,0 +1,30 @@
+'''
+Created on Jul 5, 2010
+
+@author: leifj
+'''
+from django.db import models
+from django.contrib.auth.models import User
+
+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)
+ 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)
+ timecreated = models.DateTimeField(auto_now_add=True)
+ lastupdated = models.DateTimeField(auto_now=True)
+
+ def __unicode__(self):
+ return "%s [%s] - %s" % (self.identifier,self.user.username,self.display_name)
+
+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)
+
+ def __unicode__(self):
+ return "A merge-key for "+self.user_profile
+
+ \ No newline at end of file
diff --git a/coip/apps/userprofile/utils.py b/coip/apps/userprofile/utils.py
new file mode 100644
index 0000000..ecbc21a
--- /dev/null
+++ b/coip/apps/userprofile/utils.py
@@ -0,0 +1,29 @@
+'''
+Created on Jul 6, 2010
+
+@author: leifj
+'''
+from coip.apps.userprofile.models import UserProfile, PKey
+from django.core.exceptions import ObjectDoesNotExist
+
+def request_profile(request):
+ if request.user.is_authenticated():
+ if request.META.has_key('REMOTE_USER'):
+ return UserProfile.objects.get(identifier=request.META['REMOTE_USER'])
+ else:
+ return UserProfile.objects.get(user=request.user.id)
+ 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
new file mode 100644
index 0000000..36f6a48
--- /dev/null
+++ b/coip/apps/userprofile/views.py
@@ -0,0 +1,44 @@
+'''
+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 uuid import uuid4
+from coip.multiresponse import respond_to
+from coip.apps.membership.models import Membership
+from coip.apps.userprofile.utils import user_profile
+from django.core.exceptions import ObjectDoesNotExist
+from pprint import pprint
+
+@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=uuid4().hex)
+ k.save()
+ return HttpResponseRedirect("/accounts/login?next=/user/merge/"+k.key)
+
+@login_required
+def home(request):
+ memberships = []
+ try:
+ memberships = Membership.objects.filter(user=request.user)
+ except ObjectDoesNotExist:
+ pass
+
+ pprint(memberships)
+ return respond_to(request, {'text/html': 'apps/userprofile/home.html'},{'memberships': memberships})
+
+