# or implied, of GRNET S.A.
import logging
+import datetime
+
+from urllib import quote
+from urlparse import urlsplit, urlunsplit
+from functools import wraps
from datetime import tzinfo, timedelta
+from django.http import HttpResponse, urlencode
from django.conf import settings
from django.template import RequestContext
from django.contrib.sites.models import Site
from django.utils.translation import ugettext as _
-from django.contrib import messages
+from django.contrib.auth import login, authenticate
+from django.core.urlresolvers import reverse
from astakos.im.models import AstakosUser, Invitation
raise ValueError(_('Email: %s is reserved' % invitation.username))
except AstakosUser.DoesNotExist:
pass
- return invitation
\ No newline at end of file
+ return invitation
+
+def prepare_response(request, user, next='', renew=False):
+ """Return the unique username and the token
+ as 'X-Auth-User' and 'X-Auth-Token' headers,
+ or redirect to the URL provided in 'next'
+ with the 'user' and 'token' as parameters.
+
+ Reissue the token even if it has not yet
+ expired, if the 'renew' parameter is present
+ or user has not a valid token.
+ """
+
+ renew = renew or (not user.auth_token)
+ renew = renew or (user.auth_token_expires and user.auth_token_expires < datetime.datetime.now())
+ if renew:
+ user.renew_token()
+ user.save()
+
+ if settings.FORCE_PROFILE_UPDATE and not user.is_verified and not user.is_superuser:
+ params = ''
+ if next:
+ params = '?' + urlencode({'next': next})
+ next = reverse('astakos.im.views.edit_profile') + params
+
+ response = HttpResponse()
+
+ # authenticate before login
+ user = authenticate(email=user.email, auth_token=user.auth_token)
+ login(request, user)
+ # set cookie
+ expire_fmt = user.auth_token_expires.strftime('%a, %d-%b-%Y %H:%M:%S %Z')
+ cookie_value = quote(user.email + '|' + user.auth_token)
+ response.set_cookie(settings.COOKIE_NAME, value=cookie_value,
+ expires=expire_fmt, path='/',
+ domain = settings.COOKIE_DOMAIN)
+
+ if not next:
+ next = reverse('astakos.im.views.index')
+
+ response['Location'] = next
+ response.status_code = 302
+ return response