Invitation improvements
authorGiorgos Verigakis <verigak@gmail.com>
Thu, 27 Oct 2011 13:48:21 +0000 (16:48 +0300)
committerGiorgos Verigakis <verigak@gmail.com>
Thu, 27 Oct 2011 13:48:21 +0000 (16:48 +0300)
Create the appropriate level and invitations when
a user is created.

Refs #1459

pithos/im/models.py
pithos/im/target/invitation.py
pithos/im/target/util.py

index 1dab24f..e404132 100644 (file)
@@ -67,18 +67,20 @@ class User(models.Model):
     
     auth_token = models.CharField('Authentication Token', max_length=32,
                                     null=True, blank=True)
-    auth_token_created = models.DateTimeField('Token creation date')
-    auth_token_expires = models.DateTimeField('Token expiration date')
+    auth_token_created = models.DateTimeField('Token creation date',
+                                                null=True)
+    auth_token_expires = models.DateTimeField('Token expiration date',
+                                                null=True)
     
     created = models.DateTimeField('Creation date')
     updated = models.DateTimeField('Update date')
     
-    def save(self, update_timestamps=True):
+    def save(self, update_timestamps=True, **kwargs):
         if update_timestamps:
             if not self.id:
                 self.created = datetime.now()
             self.updated = datetime.now()
-        super(User, self).save()
+        super(User, self).save(**kwargs)
     
     def renew_token(self):
         md5 = hashlib.md5()
index 076f5d6..1a3a630 100644 (file)
@@ -37,8 +37,16 @@ from datetime import datetime
 
 from django.http import HttpResponseBadRequest
 
-from pithos.im.models import Invitation
-from pithos.im.target.util import get_user, prepare_response
+from pithos.im.models import User, Invitation
+from pithos.im.target.util import prepare_response
+
+
+INVITATIONS_PER_LEVEL = {
+    0   :   10000,
+    1   :   3,
+    2   :   2,
+    3   :   1,
+    4   :   0}
 
 
 def login(request):
@@ -54,6 +62,15 @@ def login(request):
         invitation.save()
         logging.info('Accepted invitation %s', invitation)
     
-    return prepare_response(get_user(invitation.uniq, invitation.realname, 'Invitation'),
-                            request.GET.get('next'),
-                            'renew' in request.GET)
+    user, created = User.objects.get_or_create(uniq=invitation.uniq)
+    if created:
+        user.realname = invitation.realname
+        user.affiliation = 'Invitation'
+        user.level = invitation.inviter.level + 1
+        user.invitations = INVITATIONS_PER_LEVEL.get(user.level, 0)
+        user.renew_token()
+        user.save()
+        logging.info('Created user %s', user)
+    
+    next = request.GET.get('next')
+    return prepare_response(user, next, 'renew' in request.GET)
index 0fbc879..5dca845 100644 (file)
@@ -37,7 +37,6 @@ from urlparse import urlsplit, urlunsplit
 
 from django.http import HttpResponse
 from django.utils.http import urlencode
-#from django.utils.cache import patch_vary_headers
 
 from pithos.im.models import User
 
@@ -47,11 +46,8 @@ def get_user(uniq, realname, affiliation):
        and issue a token for subsequent requests.
     """
     
-    try:
-        user = User.objects.get(uniq=uniq)
-    except User.DoesNotExist:
-        user = User()
-        user.uniq = uniq
+    user, created = User.objects.get_or_create(uniq=uniq)
+    if created:
         user.realname = realname
         user.affiliation = affiliation
         user.renew_token()