From 9a43d4b982d2e2e6a96d919571e454648111a5e2 Mon Sep 17 00:00:00 2001 From: Giorgos Verigakis Date: Thu, 27 Oct 2011 16:48:21 +0300 Subject: [PATCH] Invitation improvements Create the appropriate level and invitations when a user is created. Refs #1459 --- pithos/im/models.py | 10 ++++++---- pithos/im/target/invitation.py | 27 ++++++++++++++++++++++----- pithos/im/target/util.py | 8 ++------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/pithos/im/models.py b/pithos/im/models.py index 1dab24f..e404132 100644 --- a/pithos/im/models.py +++ b/pithos/im/models.py @@ -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() diff --git a/pithos/im/target/invitation.py b/pithos/im/target/invitation.py index 076f5d6..1a3a630 100644 --- a/pithos/im/target/invitation.py +++ b/pithos/im/target/invitation.py @@ -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) diff --git a/pithos/im/target/util.py b/pithos/im/target/util.py index 0fbc879..5dca845 100644 --- a/pithos/im/target/util.py +++ b/pithos/im/target/util.py @@ -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() -- 1.7.10.4