summaryrefslogtreecommitdiff
path: root/coip
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-03-07 16:47:58 +0100
committerLeif Johansson <leifj@sunet.se>2011-03-07 16:47:58 +0100
commit28210df4fa2230fd887f468bdc90107f108767d7 (patch)
tree1799656b1dc746c2bad2981ee496641811161a74 /coip
parente71bccc7400c3d2ce5734e6f269aca48d12b8b82 (diff)
cleanup display for service members
Diffstat (limited to 'coip')
-rw-r--r--coip/apps/membership/views.py58
-rw-r--r--coip/extensions/templatetags/userdisplay.py11
2 files changed, 67 insertions, 2 deletions
diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py
index dd505d2..10a2b7b 100644
--- a/coip/apps/membership/views.py
+++ b/coip/apps/membership/views.py
@@ -7,12 +7,15 @@ from django.shortcuts import get_object_or_404
from coip.apps.membership.models import Membership, add_member, remove_member
from coip.multiresponse import render403, respond_to
from django.contrib.auth.models import User
-from coip.apps.name.models import Name
+from coip.apps.name.models import Name, lookup
from django.http import HttpResponseRedirect
from django.core.exceptions import ObjectDoesNotExist
from coip.apps.entity.models import Entity
from django.contrib.auth.decorators import login_required
from coip.apps.membership.forms import MembershipForm
+from coip.settings import METADATA
+from lxml import etree
+from pprint import pprint
def show(request,id):
membership = get_object_or_404(Membership,pk=id)
@@ -24,6 +27,58 @@ def show(request,id):
{'text/html': 'apps/membership/membership.html'},
{'membership': membership})
+def import_metadata():
+ doc = etree.parse(METADATA)
+ ns = {'md': 'urn:oasis:names:tc:SAML:2.0:metadata',
+ 'xml': 'http://www.w3.org/XML/1998/namespace'}
+ for e in doc.xpath("md:EntityDescriptor",namespaces=ns):
+ entityId = e.get('entityID')
+ display = entityId
+ x = e.xpath("md:OrganizationDisplayName",namespaces=ns)
+ if x:
+ display = x[0]
+
+ (entity,created) = Entity.objects.get_or_create(entityId=entityId)
+ save = created
+
+ if created:
+ entity.type = Entity.OTHER
+
+ x = e.xpath("md:SPSSODescriptor",namespaces=ns)
+ if x:
+ type = Entity.SP
+ x = e.xpath("md:IDPSSODescriptor",namespaces=ns)
+ if x:
+ type = Entity.IDP
+
+ if type != entity.type:
+ entity.type = type
+ save = True
+
+ if display != entity.display_name:
+ entity.display_name = display
+ save = True
+
+ if save:
+ entity.save()
+
+ anyuser = lookup("system:anyuser")
+
+ anyentity = lookup("system:anyentity",True)
+ anyentity.setacl(anyuser, "rl")
+
+ anysp = lookup("system:anysp",True)
+ anysp.setacl(anyuser, "rl")
+
+ anyidp = lookup("system:anyidp",True)
+ anyidp.setacl(anyuser, "rl")
+
+ add_member(anyentity,entity)
+ if entity.type == Entity.SP:
+ add_member(anysp,entity)
+ if entity.type == Entity.IDP:
+ add_member(anyidp,entity)
+
@login_required
def join(request,id,membername=None):
name = get_object_or_404(Name,pk=id)
@@ -56,6 +111,7 @@ def join(request,id,membername=None):
return HttpResponseRedirect(name.url())
else:
form = MembershipForm()
+ import_metadata()
return respond_to(request,
{'text/html': 'apps/membership/edit.html'},
{'form': form,'name': name, 'formtitle': 'Add a member to %s' % name.short})
diff --git a/coip/extensions/templatetags/userdisplay.py b/coip/extensions/templatetags/userdisplay.py
index 9def122..de6f363 100644
--- a/coip/extensions/templatetags/userdisplay.py
+++ b/coip/extensions/templatetags/userdisplay.py
@@ -29,4 +29,13 @@ def lastidentifier(user):
# return user.username
lastidentifier.is_safe = True
-register.filter(lastidentifier) \ No newline at end of file
+register.filter(lastidentifier)
+
+def memberdisplay(membership):
+ if membership.user:
+ return userdisplay(membership.user)
+ else:
+ return membership.entity.display_name
+
+memberdisplay.is_safe = True
+register.filter(memberdisplay) \ No newline at end of file