diff options
author | Leif Johansson <leifj@sunet.se> | 2011-03-07 16:47:58 +0100 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-03-07 16:47:58 +0100 |
commit | 28210df4fa2230fd887f468bdc90107f108767d7 (patch) | |
tree | 1799656b1dc746c2bad2981ee496641811161a74 /coip | |
parent | e71bccc7400c3d2ce5734e6f269aca48d12b8b82 (diff) |
cleanup display for service members
Diffstat (limited to 'coip')
-rw-r--r-- | coip/apps/membership/views.py | 58 | ||||
-rw-r--r-- | coip/extensions/templatetags/userdisplay.py | 11 |
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 |