summaryrefslogtreecommitdiff
path: root/coip/apps/invitation/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/invitation/models.py')
-rw-r--r--coip/apps/invitation/models.py68
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