summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coip/apps/auth/views.py62
-rw-r--r--coip/apps/invitation/models.py9
-rw-r--r--coip/apps/invitation/views.py2
-rw-r--r--coip/apps/name/views.py13
-rw-r--r--coip/apps/opensocial/people.py16
-rw-r--r--coip/apps/userprofile/admin.py5
-rw-r--r--coip/apps/userprofile/models.py64
-rw-r--r--coip/apps/userprofile/utils.py32
-rw-r--r--coip/apps/userprofile/views.py43
-rw-r--r--coip/extensions/templatetags/userdisplay.py29
-rw-r--r--coip/middleware.py168
-rw-r--r--coip/multiresponse.py6
-rw-r--r--coip/settings.py3
-rw-r--r--coip/urls.py4
-rw-r--r--templates/base.html2
-rw-r--r--templates/tree.html4
16 files changed, 239 insertions, 223 deletions
diff --git a/coip/apps/auth/views.py b/coip/apps/auth/views.py
index 6dd311d..bab6bf8 100644
--- a/coip/apps/auth/views.py
+++ b/coip/apps/auth/views.py
@@ -4,71 +4,15 @@ 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 coip.apps.auth.utils import anonid
+from coip.apps.userprofile.models import UserProfile, user_profile
from coip.apps.name.models import lookup
-import datetime
from django.views.decorators.cache import never_cache
-import logging
+from coip.apps.membership.models import add_member
-def meta(request,attr):
- v = request.META.get(attr)
- if not v:
- return None
- values = filter(lambda x: x != "(null)",v.split(";"))
- return values;
-
-def meta1(request,attr):
- v = meta(request,attr)
- if v:
- return v[0]
- else:
- return None
def accounts_login_federated(request):
if request.user.is_authenticated():
- profile,created = UserProfile.objects.get_or_create(identifier=request.user.username)
- if created:
- profile.identifier = request.user.username
- profile.user = request.user
- profile.save()
-
-
- update = False
- cn = meta1(request,'cn')
- if not cn:
- cn = meta1(request,'displayName')
- logging.warn(cn)
- if not cn:
- fn = meta1(request,'givenName')
- ln = meta1(request,'sn')
- if fn and ln:
- cn = "%s %s" % (fn,ln)
- if not cn:
- cn = profile.identifier
-
- mail = meta1(request,'mail')
-
- idp = meta1(request,'Shib-Identity-Provider')
-
- for attrib_name, meta_value in (('display_name',cn),('email',mail),('idp',idp)):
- 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()
-
- # Allow auto_now to kick in for the lastupdated field
- #profile.lastupdated = datetime.datetime.now()
- profile.save()
-
+ #profile,created = UserProfile.objects.get_or_create(user=request.user)
next = request.session.get("after_login_redirect", None)
if next is not None:
return HttpResponseRedirect(next)
diff --git a/coip/apps/invitation/models.py b/coip/apps/invitation/models.py
index e6b7df4..64c3d5d 100644
--- a/coip/apps/invitation/models.py
+++ b/coip/apps/invitation/models.py
@@ -6,11 +6,7 @@ Created on Jun 23, 2010
from django.db import models
from django.contrib.auth.models import User
from coip.apps.name.models import Name
-import datetime
-from pprint import pformat
from django.core.mail import send_mail
-from coip.apps.userprofile.models import last_used_profile
-import logging
from coip.settings import PREFIX_URL, NOREPLY
class Invitation(models.Model):
@@ -29,8 +25,7 @@ class Invitation(models.Model):
def __unicode__(self):
return "%s invited to %s by %s" % (self.email,self.name,self.inviter)
- def send_email(self):
- pinviter = last_used_profile(self.inviter)
+ def send_email(self,user):
send_mail('Invitation to join \'%s\'' % (self.name.shortname()),
'''
%s (%s) has invited you to join \'%s\':
@@ -45,7 +40,7 @@ If you want to accept the invitation open this link in your browser:
To view information about \'%s\' open this link in your browser:
%s
-''' % (pinviter.display_name,pinviter.identifier,self.name.shortname(),self.message,PREFIX_URL,self.nonce,self.name.shortname(),self.name.url()),
+''' % (user.get_full_name,user.identifier.value,self.name.shortname(),self.message,PREFIX_URL,self.nonce,self.name.shortname(),self.name.url()),
NOREPLY,
[self.email],
fail_silently=False)
diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py
index 542728b..b0b1fb9 100644
--- a/coip/apps/invitation/views.py
+++ b/coip/apps/invitation/views.py
@@ -27,7 +27,7 @@ def invite(request,id):
form = InvitationForm(request.POST,instance=invitation)
if form.is_valid():
invitation = form.save()
- invitation.send_email()
+ invitation.send_email(user)
return HttpResponseRedirect("/name/id/%d" % (name.id))
else:
exp = datetime.datetime.now()+datetime.timedelta(days=1)
diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py
index b50526c..31efbc8 100644
--- a/coip/apps/name/views.py
+++ b/coip/apps/name/views.py
@@ -5,11 +5,10 @@ Created on Jul 6, 2010
'''
from coip.apps.name.models import Name, lookup, traverse, NameLink
from django.core.exceptions import ObjectDoesNotExist
-from django.http import HttpResponseNotFound, HttpResponseForbidden,\
- HttpResponseRedirect, Http404
+from django.http import HttpResponseNotFound,HttpResponseRedirect, Http404
from django.contrib.auth.decorators import login_required
from coip.multiresponse import respond_to, json_response, render403
-from pprint import pformat, pprint
+from pprint import pformat
import logging
from coip.apps.name.forms import NameEditForm, NewNameForm, NameDeleteForm,\
PermissionForm
@@ -29,7 +28,7 @@ def delete(request,id):
if form.is_valid():
parent = name.parent
if not form.cleaned_data['recursive'] and name.children.count() > 0:
- return HttpResponseForbidden("Will not delete non-empty node")
+ return render403(request,"Will not delete non-empty node")
for link in name.links.all():
link.delete()
@@ -54,10 +53,10 @@ def add(request,id):
if id:
if not parent.has_permission(request.user,'w'):
- return HttpResponseForbidden('You are not allowed to create names under '+parent)
+ return render403(request,'You are not allowed to create names under %s' % parent)
else:
if not request.user.admin:
- return HttpResponseForbidden('You are not allowed to create names in the root')
+ return render403(request,'You are not allowed to create names in the root context')
if request.method == 'POST':
name = Name(parent=parent,creator=request.user)
@@ -76,7 +75,7 @@ def edit(request,id):
name = get_object_or_404(Name,pk=id)
if not name.has_permission(request.user,'w'):
- return HttpResponseForbidden()
+ return render403(request,"You do not have write-permission here")
if request.method == 'POST':
form = NameEditForm(request.POST,instance=name)
diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py
index 4572829..e51949c 100644
--- a/coip/apps/opensocial/people.py
+++ b/coip/apps/opensocial/people.py
@@ -4,7 +4,6 @@ Created on Jun 19, 2011
@author: leifj
'''
from tastypie.resources import ModelResource
-from coip.apps.userprofile.models import UserProfile, last_used_profile
from django.contrib.auth.models import User
from coip.apps.opensocial.serializer import OpenSocialSerializer
from django.conf.urls.defaults import url
@@ -19,6 +18,7 @@ from django.shortcuts import get_object_or_404
import logging
from pprint import pformat
from tastypie.bundle import Bundle
+from coip.apps.userprofile.models import Identifier
_rekey = {
'objects': 'entry'
@@ -122,8 +122,8 @@ class PersonResource(OpenSocialResource):
#memberships = ToManyField(MembershipResource,'memberships',full=True)
class Meta:
- queryset = User.objects.all()
- fields = ['username']
+ queryset = Identifier.objects.filter(type=Identifier.FEDERATION)
+ fields = ['value']
resource_name = 'people'
serializer = OpenSocialSerializer()
@@ -138,8 +138,8 @@ class PersonResource(OpenSocialResource):
def list_memberships(self, request, **kwargs):
logging.debug(pformat(kwargs))
try:
- user = self.cached_obj_get(request=request, username=kwargs['username'])
- logging.debug(pformat(user))
+ id = self.cached_obj_get(request=request, value=kwargs['username'])
+ logging.debug(pformat(id))
except ObjectDoesNotExist:
return HttpGone()
except MultipleObjectsReturned:
@@ -157,8 +157,8 @@ class PersonResource(OpenSocialResource):
def dehydrate(self,bundle):
bundle = super(PersonResource,self).dehydrate(bundle)
- bundle.data['id'] = bundle.data['username']
- bundle.data['displayName'] = last_used_profile(bundle.obj).display_name
+ bundle.data['id'] = bundle.data['value']
+ bundle.data['displayName'] = bundle.data['display_name']
del bundle.data['resource_uri']
- del bundle.data['username']
+ del bundle.data['value']
return bundle \ No newline at end of file
diff --git a/coip/apps/userprofile/admin.py b/coip/apps/userprofile/admin.py
index 32c1ad8..1e5c7a0 100644
--- a/coip/apps/userprofile/admin.py
+++ b/coip/apps/userprofile/admin.py
@@ -1,4 +1,5 @@
from django.contrib import admin
-from coip.apps.userprofile.models import UserProfile
+from coip.apps.userprofile.models import UserProfile, Identifier
-admin.site.register(UserProfile) \ No newline at end of file
+admin.site.register(UserProfile)
+admin.site.register(Identifier) \ No newline at end of file
diff --git a/coip/apps/userprofile/models.py b/coip/apps/userprofile/models.py
index 40751fb..e780d81 100644
--- a/coip/apps/userprofile/models.py
+++ b/coip/apps/userprofile/models.py
@@ -5,39 +5,57 @@ 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 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')
- 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)
+ user = models.ForeignKey(User)
+ home = models.ForeignKey(Name,blank=True,null=True,editable=False)
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]
+ return "%s" % (self.user.__unicode__())
+
-def primary_profile(user):
- return UserProfile.objects.filter(user=user,primary=True)[0]
+def user_profile(user):
+ profile,created = UserProfile.objects.get_or_create(user=user)
+ if created:
+ urn = lookup("urn",True)
+ anyuser = lookup("system:anyuser",True)
+ urn.setacl(anyuser,'rl')
+ home = lookup('user:'+user.username,autocreate=True)
+ home.short = user.get_full_name()
+ profile.home = home
+ profile.save()
+ home.save()
+ add_member(home,profile.user,hidden=True)
+ home.setpacl(home, "rwlida")
+ home.setacl(home,"rwla") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell
+
+ return profile
+class Identifier(models.Model):
+
+ FEDERATION=0
+ EMAIL=1
+ SSHKEY=2
+ GRIDCERT=3
+ INTERNAL=4
-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)
+ 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 "A merge-key for "+self.user_profile
+ return "%s [%s]" % (self.value,self.display_name)
diff --git a/coip/apps/userprofile/utils.py b/coip/apps/userprofile/utils.py
deleted file mode 100644
index d3854f6..0000000
--- a/coip/apps/userprofile/utils.py
+++ /dev/null
@@ -1,32 +0,0 @@
-'''
-Created on Jul 6, 2010
-
-@author: leifj
-'''
-from coip.apps.userprofile.models import UserProfile, PKey
-from django.core.exceptions import ObjectDoesNotExist
-import logging
-from pprint import pformat
-
-def request_profile(request):
- if request.user.is_authenticated():
- logging.warn(pformat(request.META))
- if request.META.has_key('REMOTE_USER'):
- return UserProfile.objects.get(identifier=request.META['REMOTE_USER'])
- else:
- return UserProfile.objects.get(user=request.user)
- 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
index 7ce8f74..50fe184 100644
--- a/coip/apps/userprofile/views.py
+++ b/coip/apps/userprofile/views.py
@@ -4,34 +4,14 @@ 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 coip.multiresponse import respond_to, json_response
-from coip.apps.membership.models import Membership, add_member
-from coip.apps.userprofile.utils import user_profile
+from coip.apps.membership.models import Membership
from django.core.exceptions import ObjectDoesNotExist
-from pprint import pformat
-from coip.apps.auth.utils import nonce
-from coip.apps.name.models import Name, NameLink, lookup
+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.userprofile.models import Identifier
-@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=nonce())
- k.save()
- return HttpResponseRedirect("/accounts/login?next=/user/merge/"+k.key)
@login_required
def home(request):
@@ -41,22 +21,9 @@ def home(request):
except ObjectDoesNotExist:
pass
- urn = lookup("urn",True)
- anyuser = lookup("system:anyuser",True)
- urn.setacl(anyuser,'rl')
-
- profile = user_profile(request)
- home = lookup('user:'+request.user.username,autocreate=True)
- home.short = "%s (%s)" % (profile.display_name,profile.identifier)
- profile.home = home
- home.save()
- add_member(home,profile.user,hidden=True)
- home.setpacl(home, "rwlida")
- home.setacl(home,"rwla") #don't allow users to delete or reset acls on their home, nor invite members - that would be confusing as hell
-
names = [(link.src,link.data) for link in NameLink.objects.filter(dst__memberships__user=request.user,type=NameLink.access_control,data__contains='i').all()]
-
- return respond_to(request, {'text/html': 'apps/userprofile/home.html'},{'memberships': memberships,'names': names, 'name': home})
+ 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):
diff --git a/coip/extensions/templatetags/userdisplay.py b/coip/extensions/templatetags/userdisplay.py
index de6f363..8bdd63f 100644
--- a/coip/extensions/templatetags/userdisplay.py
+++ b/coip/extensions/templatetags/userdisplay.py
@@ -1,8 +1,4 @@
from django import template
-from django.template import defaultfilters
-from coip.apps.userprofile.models import last_used_profile
-from pprint import pformat
-import logging
register = template.Library()
@@ -10,27 +6,18 @@ MOMENT = 120 # duration in seconds within which the time difference
# will be rendered as 'a moment ago'
def userdisplay(user):
- try:
- p = last_used_profile(user)
- return p.display_name
- except Exception,e:
- logging.warning(e)
- return user.username
+ cn = user.get_full_name()
+ if not cn and hasattr(user,'identifier'):
+ id = user.identifier
+ if id:
+ cn = user.identifier.value
+ if not cn:
+ cn = user.username
+ return cn
userdisplay.is_safe = True
register.filter(userdisplay)
-def lastidentifier(user):
- #try:
- p = last_used_profile(user)
- return p.identifier
- #except Exception,e:
- # pprint(e)
- # return user.username
-
-lastidentifier.is_safe = True
-register.filter(lastidentifier)
-
def memberdisplay(membership):
if membership.user:
return userdisplay(membership.user)
diff --git a/coip/middleware.py b/coip/middleware.py
index 82d371e..f60cd60 100644
--- a/coip/middleware.py
+++ b/coip/middleware.py
@@ -3,25 +3,163 @@ Created on Dec 13, 2010
@author: leifj
'''
-from django.core.exceptions import ImproperlyConfigured
-from coip.apps.userprofile.models import UserProfile
+from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
+from coip.apps.userprofile.models import Identifier
+from django_extensions.utils import uuid
+from django.contrib import auth
+from django.contrib.auth.models import UNUSABLE_PASSWORD, User
+import logging
-class UserMappingMiddleware(object):
- '''
- Middleware for supporting merged and mapped user identities
- '''
+def meta(request,attr):
+ v = request.META.get(attr)
+ if not v:
+ return None
+ values = filter(lambda x: x != "(null)",v.split(";"))
+ return values;
- def process_request(self,request):
+def meta1(request,attr):
+ v = meta(request,attr)
+ if v:
+ return v[0]
+ else:
+ return None
+
+class MappedUserProxy(User):
+
+ def __init__(self,user,identifier):
+ self.user = user
+ self.identifier = identifier
+
+ def __unicode__(self):
+ return self.identifier.display_name
+
+ def get_full_name(self):
+ return self.identifier.display_name
+
+ def __getattr__(self,attr):
+ if attr == 'identifier':
+ return self.identifier
+ return getattr(self.user,attr)
+
+class MappedRemoteUserMiddleware(object):
+ """
+ Middleware for utilizing Web-server-provided authentication.
+
+ If request.user is not authenticated, then this middleware attempts to
+ authenticate the username passed in the ``REMOTE_USER`` request header.
+ If authentication is successful, the user is automatically logged in to
+ persist the user in the session.
+
+ The header used is configurable and defaults to ``REMOTE_USER``. Subclass
+ this class and change the ``header`` attribute if you need to use a
+ different header.
+ """
+
+ # Name of request header to grab username from. This will be the key as
+ # used in the request.META dictionary, i.e. the normalization of headers to
+ # all uppercase and the addition of "HTTP_" prefix apply.
+ header = "REMOTE_USER"
+
+ def process_request(self, request):
+ # AuthenticationMiddleware is required so that request.user exists.
+ if not hasattr(request, 'user'):
+ raise ImproperlyConfigured(
+ "The Django remote user auth middleware requires the"
+ " authentication middleware to be installed. Edit your"
+ " MIDDLEWARE_CLASSES setting to insert"
+ " 'django.contrib.auth.middleware.AuthenticationMiddleware'"
+ " before the RemoteUserMiddleware class.")
+
+ if request.user.is_authenticated():
+ # this is to make internal users work too...
+ if not isinstance(request.user, MappedUserProxy) and not request.user.is_anonymous():
+ user = request.user
+ identifier,created = Identifier.objects.get_or_create(user=user,value=user.username,type=Identifier.INTERNAL,verified=True)
+ request.user = MappedUserProxy(user,identifier)
+ return
+
try:
- username = request.META['REMOTE_USER']
+ username = request.META[self.header]
except KeyError:
+ # If specified header doesn't exist then return (leaving
+ # request.user set to AnonymousUser by the
+ # AuthenticationMiddleware).
return
- qs = UserProfile.objects.filter(user__username=username,primary=True)
- if qs:
- profile = qs[0]
- username = profile.identifier
-
- request.META['REMOTE_USER'] = username
+ idp = meta1(request,'Shib-Identity-Provider')
+ if not idp:
+ raise Exception("No IdP information in request")
+
+ user = None
+ identifier = None
+ try:
+ # Try to find a user based on the identifier received. If we find it we turn
+ # around and authenticate the username as if it was received in the header.
+ idp = meta1(request,'Shib-Identity-Provider')
+ identifier = Identifier.objects.get(value=username,type=Identifier.FEDERATION,idp=idp,verified=True)
+ user = auth.authenticate(remote_user=id.user.username)
+ except ObjectDoesNotExist:
+ pass
+
+ if user == None:
+ # We've never seen this identifier before. Create a new random uuid for the
+ # django username and associate the identifier with it.
+ user = auth.authenticate(remote_user=uuid.uuid4());
+ request.user.password = UNUSABLE_PASSWORD
+ request.user.save()
+ identifier = Identifier.objects.create(user=user,value=username,type=Identifier.FEDERATION,idp=idp,verified=True)
+
+ if not identifier:
+ raise Exception("Unable to create user/id mapping")
+
+ update = False
+ cn = meta1(request,'cn')
+ if not cn:
+ cn = meta1(request,'displayName')
+ if not cn:
+ fn = meta1(request,'givenName')
+ ln = meta1(request,'sn')
+ if fn and ln:
+ cn = "%s %s" % (fn,ln)
+ if not cn:
+ cn = "%s according to %s" % (id.value,id.idp)
+
+ if identifier.display_name != cn:
+ identifier.display_name = cn
+ identifier.save()
+
+ mail = meta1(request,'mail')
+ if mail:
+ mail_id,created = Identifier.objects.get_or_create(user=user,value=mail,type=Identifier.EMAIL,verified=True)
+ user.email = mail
+ update = True
+
+ if fn:
+ id.user.first_name = fn
+ update = True
+ if ln:
+ id.user.last_name = ln
+ update = True
+
+ if update:
+ identifier.user.save()
- \ No newline at end of file
+ if user:
+ # User is valid. Set request.user and persist user in the session
+ # by logging the user in.
+ request.user = MappedUserProxy(user,identifier)
+ auth.login(request, user)
+
+
+ def clean_username(self, username, request):
+ """
+ Allows the backend to clean the username, if the backend defines a
+ clean_username method.
+ """
+ backend_str = request.session[auth.BACKEND_SESSION_KEY]
+ backend = auth.load_backend(backend_str)
+ try:
+ username = backend.clean_username(username)
+ except AttributeError: # Backend has no clean_username method.
+ pass
+ return username
diff --git a/coip/multiresponse.py b/coip/multiresponse.py
index e91e527..0c4f36c 100644
--- a/coip/multiresponse.py
+++ b/coip/multiresponse.py
@@ -3,11 +3,11 @@ import re
from django.conf import settings
from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseForbidden
-from coip.apps.userprofile.utils import user_profile
from django.utils import simplejson
from django.template import loader
from coip.settings import PREFIX_URL
from coip.apps.membership.models import has_member
+from coip.apps.userprofile.models import user_profile, Identifier
default_suffix_mapping = {"\.htm(l?)$": "text/html",
"\.json$": "application/json",
@@ -30,7 +30,7 @@ def make_response_dict(request,d={}):
if request.user.is_authenticated():
d['user'] = request.user
- d['profile'] = user_profile(request)
+ d['profile'] = user_profile(request.user)
d['prefix_url'] = PREFIX_URL
if d.has_key('name'):
@@ -58,7 +58,7 @@ def render403(request,message="You don't seem to have enough rights for what you
dict['message'] = message
dict['user'] = request.user
if request.user.is_authenticated():
- dict['profile'] = user_profile(request)
+ dict['profile'] = user_profile(request.user)
return HttpResponseForbidden(loader.render_to_string("403.html",dict))
def respond_to(request, template_mapping, dict={}, suffix_mapping=default_suffix_mapping):
diff --git a/coip/settings.py b/coip/settings.py
index 2a8297f..6e2203f 100644
--- a/coip/settings.py
+++ b/coip/settings.py
@@ -72,8 +72,7 @@ MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'coip.middleware.UserMappingMiddleware',
- 'django.contrib.auth.middleware.RemoteUserMiddleware',
+ 'coip.middleware.MappedRemoteUserMiddleware',
#'django.middleware.cache.FetchFromCacheMiddleware'
)
diff --git a/coip/urls.py b/coip/urls.py
index 4b1bc6f..13c422f 100644
--- a/coip/urls.py
+++ b/coip/urls.py
@@ -24,8 +24,8 @@ urlpatterns = patterns('',
(r'^accounts/login-federated/$', 'coip.apps.auth.views.accounts_login_federated'),
(r'^accounts/logout/$', 'coip.apps.auth.views.logout'),
# Profiles and user information
- (r'^user/merge/(?P<pkey>.+)$', 'coip.apps.userprofile.views.merge'),
- (r'^user/merge$', 'coip.apps.userprofile.views.merge'),
+ #(r'^user/merge/(?P<pkey>.+)$', 'coip.apps.userprofile.views.merge'),
+ #(r'^user/merge$', 'coip.apps.userprofile.views.merge'),
(r'^user/home$', 'coip.apps.userprofile.views.home'),
(r'^user/(.+)/groups.json$', 'coip.apps.name.views.user_groups'),
(r'^user/search.json$', 'coip.apps.userprofile.views.search'),
diff --git a/templates/base.html b/templates/base.html
index 5c4a1c3..5d1a4c1 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -75,7 +75,7 @@
{% if user.is_authenticated %}
<ul class="menubar">
<li>
- <a href="#">{{profile.display_name}}</a>
+ <a href="#">{{user.get_full_name}}</a>
<ul>
<li><a href="/user/home">Dashboard</a></li>
<li><a href="/accounts/logout">Logout</a></li>
diff --git a/templates/tree.html b/templates/tree.html
index 01969ab..27399fc 100644
--- a/templates/tree.html
+++ b/templates/tree.html
@@ -38,8 +38,8 @@ $(function() {
<li id="left">
<ul id="sidemenu">
{% if user.is_authenticated %}
- <li><a class="gravatar" href="#" title="{{profile.email}}"></a></li>
- <li><a href="/user/home"><span class="ui-icon ui-icon-home"></span>{{profile.display_name}}</a></li>
+ <li><a class="gravatar" href="#" title="{{user.email}}"></a></li>
+ <li><a href="/user/home"><span class="ui-icon ui-icon-home"></span>{{user.get_full_name}}</a></li>
{% endif %}
<li style="border-top: 1px solid black; width: 100%; margin-top: 5px;">&nbsp;</li>
{% if name %}