summaryrefslogtreecommitdiff
path: root/coip/apps/membership
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-09-20 11:01:05 +0200
committerLeif Johansson <leifj@sunet.se>2011-09-20 11:01:05 +0200
commitbc0b2364b1a22ecc9662ddfce1a4bd314f38f79b (patch)
treef2b2446f44cc276e12a7e1ea0749822f98464893 /coip/apps/membership
parentcd364fba4c45f80cfd326f786c3d4901b2d464c2 (diff)
removed entity model, celery
Diffstat (limited to 'coip/apps/membership')
-rw-r--r--coip/apps/membership/forms.py23
-rw-r--r--coip/apps/membership/models.py64
-rw-r--r--coip/apps/membership/views.py77
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())