diff options
author | Leif Johansson <leifj@sunet.se> | 2012-04-20 10:42:45 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2012-04-20 10:42:45 +0200 |
commit | 131f7f2d869d394ac6e942c1135529033f1e0ca2 (patch) | |
tree | 128e490a425be8e9834ffdc216743c306d96c84e /coip/apps/invitation | |
parent | 241905ce73223ed97b6ac9c62d8250b9659f6e3a (diff) |
scim v0.1newprofiles2
Diffstat (limited to 'coip/apps/invitation')
-rw-r--r-- | coip/apps/invitation/models.py | 68 | ||||
-rw-r--r-- | coip/apps/invitation/views.py | 7 |
2 files changed, 66 insertions, 9 deletions
diff --git a/coip/apps/invitation/models.py b/coip/apps/invitation/models.py index fabc145..22a4492 100644 --- a/coip/apps/invitation/models.py +++ b/coip/apps/invitation/models.py @@ -5,10 +5,20 @@ Created on Jun 23, 2010 ''' from django.db import models from django.contrib.auth.models import User -from coip.apps.name.models import Name +from coip.apps.name.models import Name, lookup from django.core.mail import send_mail import logging from coip.settings import PREFIX_URL, NOREPLY +from coip.apps.scim.schema import scim_simple_attribute, ScimAttribute,\ + scim_reference_attribute +from coip.apps.scim import types +from coip.apps.resource.models import object_for_uuid +from coip.apps.auth.utils import nonce +from django.dispatch.dispatcher import receiver +from django.db.models.signals import post_save +from actstream.signals import action +from django.core.exceptions import ObjectDoesNotExist +from iso8601 import iso8601 class Invitation(models.Model): ''' @@ -26,8 +36,8 @@ class Invitation(models.Model): def __unicode__(self): return "%s invited to %s by %s" % (self.email,self.name,self.inviter) - def send_email(self,request): - pinviter = request.user.get_profile() + def send_email(self): + pinviter = self.inviter.get_profile() send_mail('Invitation to join \'%s\'' % (self.name.shortname()), ''' %s (%s) has invited you to join \'%s\': @@ -48,3 +58,55 @@ To view information about \'%s\' open this link in your browser: fail_silently=False) return +try: + from coip.apps.resource.models import resources + resources.register(Invitation) +except ImportError: + pass + +@receiver(post_save,sender=Invitation) +def auto_create_resource(sender,**kwargs): + if kwargs['created']: + invitation = kwargs['instance'] + user = invitation.inviter + invitation.send_email() + action.send(user,verb='invited',target=invitation.name,action_object=invitation) + +class InvitationSchema(): + URI = "uri:mace:swami.se:scim:schema:coip:1.0" + ATTRIBUTES = ('mail','externalId','groupId','message','expires','userId') + + externalId = scim_simple_attribute('id') + mail = scim_simple_attribute('email') + groupId = scim_reference_attribute('name') + message = scim_simple_attribute('message') + expires = scim_simple_attribute('expires') + userId = scim_reference_attribute('inviter') + + def create(self,model,d): + user = None + if d.has_key('userId'): + user = object_for_uuid(d['userId']) + elif d.has_key('userName'): + try: + user = User.objects.get(username=d['userName']) + except ObjectDoesNotExist: + pass + + if user == None: + raise Exception("unspecified user") + + name = None + if d.has_key('groupId'): + name = object_for_uuid(d['groupId']) + elif d.has_key('groupName'): + name = lookup(d['groupName']) + + if name == None: + raise Exception("unspecified group") + + expires = iso8601.parse_date(d['expires']) + invitation,created = Invitation.objects.get_or_create(inviter=user,nonce=nonce(),name=name,email=d['mail'],expires=expires) + return invitation + +types.register(Invitation,"Invitations",[InvitationSchema()])
\ No newline at end of file diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py index 8e09ddc..2d11764 100644 --- a/coip/apps/invitation/views.py +++ b/coip/apps/invitation/views.py @@ -28,15 +28,12 @@ def invite(request,id): form = InvitationForm(request.POST,instance=invitation) if form.is_valid(): invitation = form.save() - invitation.send_email(request) return HttpResponseRedirect("/name/id/%d" % (name.id)) else: exp = datetime.datetime.now()+datetime.timedelta(days=1) invitation=Invitation(message="Please consider joining my group!",expires=exp.strftime("%Y-%m-%d")) form = InvitationForm(instance=invitation); - action.send(user,verb='invited',target=name,action_object=invitation) - return respond_to(request,{'text/html': 'apps/invitation/edit.html'},{'form': form,'name': name,'formtitle': 'Invite someone to join %s' % (name.short),'submitname': 'Invite User'}) @login_required @@ -74,6 +71,4 @@ def resend(request,id): action.send(request.user,verb='renewed invitation to',target=name,action_object=invitation) invitation.send_email() - return HttpResponseRedirect("/name/id/%d" % (name.id)) - - + return HttpResponseRedirect("/name/id/%d" % (name.id))
\ No newline at end of file |