diff options
Diffstat (limited to 'coip/apps/invitation/models.py')
-rw-r--r-- | coip/apps/invitation/models.py | 68 |
1 files changed, 65 insertions, 3 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 |