Revision 683cf244 snf-astakos-app/astakos/im/views.py

b/snf-astakos-app/astakos/im/views.py
49 49
from django.db import transaction
50 50
from django.contrib.auth import logout as auth_logout
51 51
from django.utils.http import urlencode
52
from django.http import HttpResponseRedirect
52
from django.http import HttpResponseRedirect, HttpResponseBadRequest
53 53
from django.db.utils import IntegrityError
54 54

  
55 55
from astakos.im.models import AstakosUser, Invitation
56 56
from astakos.im.backends import get_backend
57 57
from astakos.im.util import get_context, prepare_response, set_cookie
58 58
from astakos.im.forms import *
59
from astakos.im.functions import send_greeting
59 60
from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, COOKIE_NAME, COOKIE_DOMAIN, IM_MODULES, SITENAME, BASEURL, LOGOUT_NEXT
60 61
from astakos.im.functions import invite as invite_func
61 62

  
......
396 397
    response.write(render_to_string(template, context_instance=context))
397 398
    return response
398 399

  
399
def activate(request):
400
@transaction.commit_manually
401
def activate(request, email_template_name='im/welcome_email.txt', on_failure=''):
400 402
    """
401
    Activates the user identified by the ``auth`` request parameter
403
    Activates the user identified by the ``auth`` request parameter, sends a welcome email
404
    and renews the user token.
405
    
406
    The view uses commit_manually decorator in order to ensure the user state will be updated
407
    only if the email will be send successfully.
402 408
    """
403 409
    token = request.GET.get('auth')
404 410
    next = request.GET.get('next')
405 411
    try:
406 412
        user = AstakosUser.objects.get(auth_token=token)
407 413
    except AstakosUser.DoesNotExist:
408
        return HttpResponseBadRequest('No such user')
414
        return HttpResponseBadRequest(_('No such user'))
409 415
    
410 416
    user.is_active = True
411 417
    user.email_verified = True
412 418
    user.save()
413
    return prepare_response(request, user, next, renew=True)
419
    try:
420
        send_greeting(user, email_template_name)
421
        response = prepare_response(request, user, next, renew=True)
422
        transaction.commit()
423
        return response
424
    except (SMTPException, socket.error) as e:
425
        message = getattr(e, 'name') if hasattr(e, 'name') else e
426
        messages.add_message(request, messages.ERROR, message)
427
        transaction.rollback()
428
        return signup(request, on_failure='im/signup.html')

Also available in: Unified diff