diff options
author | Leif Johansson <leifj@sunet.se> | 2011-09-20 11:01:05 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-09-20 11:01:05 +0200 |
commit | bc0b2364b1a22ecc9662ddfce1a4bd314f38f79b (patch) | |
tree | f2b2446f44cc276e12a7e1ea0749822f98464893 /coip/apps/membership | |
parent | cd364fba4c45f80cfd326f786c3d4901b2d464c2 (diff) |
removed entity model, celery
Diffstat (limited to 'coip/apps/membership')
-rw-r--r-- | coip/apps/membership/forms.py | 23 | ||||
-rw-r--r-- | coip/apps/membership/models.py | 64 | ||||
-rw-r--r-- | coip/apps/membership/views.py | 77 |
3 files changed, 43 insertions, 121 deletions
diff --git a/coip/apps/membership/forms.py b/coip/apps/membership/forms.py index d44bb3b..b935e35 100644 --- a/coip/apps/membership/forms.py +++ b/coip/apps/membership/forms.py @@ -5,28 +5,21 @@ Created on Jun 23, 2010 ''' from coip.apps.membership.models import Membership from form_utils.forms import BetterModelForm -from django.forms.fields import ChoiceField, CharField -from django.forms.widgets import Select, HiddenInput +from django.forms.fields import CharField +from django.forms.widgets import HiddenInput, TextInput class MembershipForm(BetterModelForm): - type = ChoiceField(choices=(("user","I'm adding a user to the group"),("entity","I'm adding a relying party (SP or IdP) to the group")), label="", widget=Select(attrs={'class':'link'}), required=False, initial="user") - username = CharField(label="Username") + username = CharField(label="User") class Meta: model = Membership - fields = ['entity','user'] + fields = ['user'] widgets = { - 'user': HiddenInput() + 'user': HiddenInput(), + 'username': TextInput(attrs={'size': 40}) } - fieldsets = [('type', {'fields': ['type'], - 'legend': 'Which type of member are you adding to the group?', - 'description': 'Groups can consist of users and/or relying partys. Adding a relying party to a group limits can be useful if you want to limit the visibility of your group. This is an advanced option and you should know what you are doing.', - 'classes': ['step']}), - ('entity', {'fields': ['entity'], - 'legend': 'Adding a federation entity to the group', - 'description': 'Select the relying party you wish to add to the group.', - 'classes': ['step','submit_step']}), + fieldsets = [ ('user', {'fields': ['user','username'], 'legend': 'Adding a user to the group', - 'description': 'Provide the federation identifier of the user you wish to join. That user must have already logged in at least once. To add a user that has not yet logged in, send an invitation instead.', + 'description': 'Start typing to find the user to add. That user must have already logged in at least once. To add a user that has not yet logged in, send an invitation instead.', 'classes': ['step','submit_step']}) ]
\ No newline at end of file diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py index b19c04a..71143b5 100644 --- a/coip/apps/membership/models.py +++ b/coip/apps/membership/models.py @@ -7,18 +7,23 @@ from django.db import models from django.contrib.auth.models import User from coip.apps.name.models import Name import datetime -import logging -from coip.apps.entity.models import Entity import tagging from django.core.mail import send_mail from coip.settings import NOREPLY +from coip.extensions.templatetags.userdisplay import userdisplay +from coip.apps.userprofile.models import UserProfile + +STATUS = {UserProfile.INTERNAL:'internal', + UserProfile.ENTITY:'entity', + UserProfile.SSHKEY:'sshkey', + UserProfile.X509:'certificate', + UserProfile.FEDID:'fedid'} class Membership(models.Model): ''' Membership in a namespace/group ''' - user = models.ForeignKey(User,blank=True,null=True,related_name='memberships') - entity = models.ForeignKey(Entity,blank=True,null=True,related_name='entity') # XXX should this be memberships too? + user = models.ForeignKey(User,related_name='memberships') name = models.ForeignKey(Name,related_name='memberships') enabled = models.BooleanField() hidden = models.BooleanField() @@ -27,12 +32,7 @@ class Membership(models.Model): expires = models.DateTimeField(blank=True,null=True) def __unicode__(self): - who = "(unknown)" - if self.user: - who = self.user - elif self.entity: - who = self.entity - + who = self.user status = "" if not self.enabled: status = " (disabled)" @@ -49,18 +49,15 @@ class Membership(models.Model): return "active" else: return "inactive"; - - def is_user(self): - return self.user != None - def is_entity(self): - return self.entity != None + def type(self): + return STATUS[self.user.get_profile().type] def send_notification(self,what): if not self.user or not self.user.email: return - - send_mail('You have been %s \'%s\'' % (what,self.name.short), + + send_mail('%s have been %s \'%s\'' % (userdisplay(self.user),what,self.name.short), ''' You have been %s \'%s\'. @@ -74,41 +71,40 @@ To view information about \'%s\' open this link in your browser: return def add_member(name,member_name,hidden=False): - if isinstance(member_name,User): - (m,created) = Membership.objects.get_or_create(user=member_name,name=name) - else: - (m,created) = Membership.objects.get_or_create(entity=member_name,name=name) - + (m,created) = Membership.objects.get_or_create(user=member_name,name=name) if created or not m.enabled or m.hidden != hidden: m.enabled = True m.hidden = hidden m.save() + + if name.nmembers != -1: + name.nmembers = -1 + name.save() return m.send_notification("added to") def disable_member(name,member_name): - if isinstance(member_name,User): - m = Membership.objects.get(name=name,user=member_name) - else: - m = Membership.objects.get(name=name,entity=member_name) + m = Membership.objects.get(name=name,user=member_name) if m: m.enabled = False m.save() m.send_notification("temporarily removed from") + if name.nmembers != -1: + name.nmembers = -1 + name.save() + def remove_member(name,member_name): - if isinstance(member_name,User): - m = Membership.objects.get(name=name,user=member_name) - else: - m = Membership.objects.get(name=name,entity=member_name) + m = Membership.objects.get(name=name,user=member_name) if m: m.send_notification("removed from") m.delete() + + if name.nmembers != -1: + name.nmembers = -1 + name.save() def has_member(name,member_name): - if isinstance(member_name,User): - return Membership.objects.filter(name=name,user=member_name) - else: - return Membership.objects.filter(name=name,entity=member_name) + return Membership.objects.filter(name=name,user=member_name) tagging.register(Membership)
\ No newline at end of file diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py index 176f750..97c8c46 100644 --- a/coip/apps/membership/views.py +++ b/coip/apps/membership/views.py @@ -7,15 +7,11 @@ 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, lookup +from coip.apps.name.models import Name 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) @@ -27,58 +23,6 @@ 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) @@ -89,13 +33,7 @@ def join(request,id,membername=None): m = Membership(name=name,enabled=True) form = MembershipForm(request.POST,instance=m) if form.is_valid(): - if form.cleaned_data.has_key('user'): - add_member(name,form.cleaned_data['user']) - elif form.cleaned_data.has_key('entity'): - add_member(name,form.cleaned_data['entity']) - else: - raise Exception,"Bad form state - should not happen at all!" - + add_member(name,form.cleaned_data['user']) return HttpResponseRedirect(name.url()) else: return respond_to(request, @@ -103,15 +41,10 @@ def join(request,id,membername=None): {'form': form,'name': name, 'formtitle': 'Add a member to %s' % name.short}) else: if membername: - try: - member = User.objects.get(username=membername) - except ObjectDoesNotExist: - member = Entity.objects.get(entityId=name) - add_member(name, member) + add_member(name, membername) 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}) @@ -122,7 +55,7 @@ def leave(request,id,membername=None): if membername: try: member = User.objects.get(username=membername) + remove_member(name, member) except ObjectDoesNotExist: - member = Entity.objects.get(entityId=name) - remove_member(name, member) + pass return HttpResponseRedirect(name.url()) |