summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coip/apps/auth/views.py3
-rw-r--r--coip/apps/opensocial/people.py3
-rw-r--r--coip/apps/user/__init__.py (renamed from coip/apps/userprofile/__init__.py)0
-rw-r--r--coip/apps/user/admin.py5
-rw-r--r--coip/apps/user/models.py (renamed from coip/apps/userprofile/models.py)58
-rw-r--r--coip/apps/user/views.py (renamed from coip/apps/userprofile/views.py)5
-rw-r--r--coip/apps/userprofile/admin.py5
-rw-r--r--coip/extensions/templatetags/userdisplay.py9
-rw-r--r--coip/middleware.py11
-rw-r--r--coip/multiresponse.py4
-rw-r--r--coip/settings.py6
-rw-r--r--coip/urls.py10
-rw-r--r--templates/base.html3
-rw-r--r--templates/tree.html3
14 files changed, 63 insertions, 62 deletions
diff --git a/coip/apps/auth/views.py b/coip/apps/auth/views.py
index bab6bf8..a7c29d6 100644
--- a/coip/apps/auth/views.py
+++ b/coip/apps/auth/views.py
@@ -4,10 +4,7 @@ Created on Jul 5, 2010
@author: leifj
'''
from django.http import HttpResponseRedirect
-from coip.apps.userprofile.models import UserProfile, user_profile
-from coip.apps.name.models import lookup
from django.views.decorators.cache import never_cache
-from coip.apps.membership.models import add_member
def accounts_login_federated(request):
diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py
index e51949c..6572e06 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 django.contrib.auth.models import User
from coip.apps.opensocial.serializer import OpenSocialSerializer
from django.conf.urls.defaults import url
from coip.apps.membership.models import Membership
@@ -18,7 +17,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
+from coip.apps.user.models import Identifier
_rekey = {
'objects': 'entry'
diff --git a/coip/apps/userprofile/__init__.py b/coip/apps/user/__init__.py
index e69de29..e69de29 100644
--- a/coip/apps/userprofile/__init__.py
+++ 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/userprofile/models.py b/coip/apps/user/models.py
index e780d81..9521d89 100644
--- a/coip/apps/userprofile/models.py
+++ b/coip/apps/user/models.py
@@ -7,33 +7,8 @@ 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
-
-class UserProfile(models.Model):
- 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)
-
- def __unicode__(self):
- return "%s" % (self.user.__unicode__())
-
-
-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
+from django.dispatch.dispatcher import receiver
+from django.db.models.signals import post_save
class Identifier(models.Model):
@@ -59,3 +34,32 @@ class Identifier(models.Model):
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/userprofile/views.py b/coip/apps/user/views.py
index 50fe184..f204e21 100644
--- a/coip/apps/userprofile/views.py
+++ b/coip/apps/user/views.py
@@ -10,9 +10,8 @@ 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.userprofile.models import Identifier
-
-
+from coip.apps.user.models import Identifier
+
@login_required
def home(request):
memberships = []
diff --git a/coip/apps/userprofile/admin.py b/coip/apps/userprofile/admin.py
deleted file mode 100644
index 1e5c7a0..0000000
--- a/coip/apps/userprofile/admin.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.contrib import admin
-from coip.apps.userprofile.models import UserProfile, Identifier
-
-admin.site.register(UserProfile)
-admin.site.register(Identifier) \ No newline at end of file
diff --git a/coip/extensions/templatetags/userdisplay.py b/coip/extensions/templatetags/userdisplay.py
index 8bdd63f..e7d3852 100644
--- a/coip/extensions/templatetags/userdisplay.py
+++ b/coip/extensions/templatetags/userdisplay.py
@@ -7,10 +7,13 @@ MOMENT = 120 # duration in seconds within which the time difference
def userdisplay(user):
cn = user.get_full_name()
- if not cn and hasattr(user,'identifier'):
- id = user.identifier
+ if not cn:
+ id = user.get_profile().identifier
if id:
- cn = user.identifier.value
+ if id.display_name:
+ cn = id.display_name
+ else:
+ cn = "%s according to %s" % (id.value,id.idp)
if not cn:
cn = user.username
return cn
diff --git a/coip/middleware.py b/coip/middleware.py
index 093b5a0..ce5e1e8 100644
--- a/coip/middleware.py
+++ b/coip/middleware.py
@@ -4,11 +4,10 @@ Created on Dec 13, 2010
@author: leifj
'''
from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
-from coip.apps.userprofile.models import Identifier
+from coip.apps.user.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
+from django.contrib.auth.models import UNUSABLE_PASSWORD
def _headers(request,attr):
v = request.META.get(attr)
@@ -24,7 +23,7 @@ def meta1(request,attr):
else:
return None
-class MappedRemoteUserMiddleware(object):
+class COIPRemoteUserMiddleware(object):
"""
Middleware for utilizing Web-server-provided authentication.
@@ -58,7 +57,7 @@ class MappedRemoteUserMiddleware(object):
if 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.identifier = identifier
+ user.get_profile().identifier = identifier
return
try:
@@ -130,8 +129,8 @@ class MappedRemoteUserMiddleware(object):
if user:
# User is valid. Set request.user and persist user in the session
# by logging the user in.
+ user.get_profile().identifier = identifier
auth.login(request, user)
- request.identifier = identifier
def clean_username(self, username, request):
diff --git a/coip/multiresponse.py b/coip/multiresponse.py
index 0c4f36c..0b6875e 100644
--- a/coip/multiresponse.py
+++ b/coip/multiresponse.py
@@ -7,7 +7,6 @@ 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 +29,6 @@ def make_response_dict(request,d={}):
if request.user.is_authenticated():
d['user'] = request.user
- d['profile'] = user_profile(request.user)
d['prefix_url'] = PREFIX_URL
if d.has_key('name'):
@@ -57,8 +55,6 @@ def json_response(data):
def render403(request,message="You don't seem to have enough rights for what you are trying to do....",dict={}):
dict['message'] = message
dict['user'] = request.user
- if request.user.is_authenticated():
- 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 6e2203f..e7f1fb6 100644
--- a/coip/settings.py
+++ b/coip/settings.py
@@ -72,7 +72,7 @@ MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'coip.middleware.MappedRemoteUserMiddleware',
+ 'coip.middleware.COIPRemoteUserMiddleware',
#'django.middleware.cache.FetchFromCacheMiddleware'
)
@@ -81,6 +81,8 @@ AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
+AUTH_PROFILE_MODULE = 'user.UserProfile'
+
ROOT_URLCONF = 'coip.urls'
TEMPLATE_DIRS = (
@@ -105,7 +107,7 @@ INSTALLED_APPS = (
'coip.apps.name',
'coip.apps.membership',
'coip.apps.invitation',
- 'coip.apps.userprofile',
+ 'coip.apps.user',
'coip.apps.link',
'coip.apps.entity'
)
diff --git a/coip/urls.py b/coip/urls.py
index 13c422f..ace059e 100644
--- a/coip/urls.py
+++ b/coip/urls.py
@@ -24,12 +24,12 @@ 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/home$', 'coip.apps.userprofile.views.home'),
+ #(r'^user/merge/(?P<pkey>.+)$', 'coip.apps.user.views.merge'),
+ #(r'^user/merge$', 'coip.apps.user.views.merge'),
+ (r'^user/home$', 'coip.apps.user.views.home'),
(r'^user/(.+)/groups.json$', 'coip.apps.name.views.user_groups'),
- (r'^user/search.json$', 'coip.apps.userprofile.views.search'),
- (r'^user/info/(.+).json$', 'coip.apps.userprofile.views.info'),
+ (r'^user/search.json$', 'coip.apps.user.views.search'),
+ (r'^user/info/(.+).json$', 'coip.apps.user.views.info'),
# Invitations
(r'^name/(?P<id>[0-9]+)/invite$', 'coip.apps.invitation.views.invite'),
(r'^invitation/(?P<id>[0-9]+)/cancel$', 'coip.apps.invitation.views.cancel'),
diff --git a/templates/base.html b/templates/base.html
index 5d1a4c1..110d7b8 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,3 +1,4 @@
+{% load userdisplay %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
@@ -75,7 +76,7 @@
{% if user.is_authenticated %}
<ul class="menubar">
<li>
- <a href="#">{{user.get_full_name}}</a>
+ <a href="#">{{user|userdisplay}}</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 27399fc..78fc0e2 100644
--- a/templates/tree.html
+++ b/templates/tree.html
@@ -1,4 +1,5 @@
{% extends "base.html" %}
+{% load userdisplay %}
{% block js %}
<script type="text/javascript">
$(function() {
@@ -39,7 +40,7 @@ $(function() {
<ul id="sidemenu">
{% if user.is_authenticated %}
<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>
+ <li><a href="/user/home"><span class="ui-icon ui-icon-home"></span>{{user|userdisplay}}</a></li>
{% endif %}
<li style="border-top: 1px solid black; width: 100%; margin-top: 5px;">&nbsp;</li>
{% if name %}