Revision 23b9b72f snf-astakos-app/astakos/im/views.py

b/snf-astakos-app/astakos/im/views.py
59 59
from astakos.im.util import get_context, prepare_response, set_cookie, get_query
60 60
from astakos.im.forms import *
61 61
from astakos.im.functions import send_greeting, send_feedback, SendMailError, \
62
    invite as invite_func, logout as auth_logout, send_helpdesk_notification
62
    invite as invite_func, logout as auth_logout, activate as activate_func, switch_account_to_shibboleth
63 63
from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, COOKIE_NAME, COOKIE_DOMAIN, IM_MODULES, SITENAME, LOGOUT_NEXT, LOGGING_LEVEL
64 64

  
65 65
logger = logging.getLogger(__name__)
......
431 431
    return response
432 432

  
433 433
@transaction.commit_manually
434
def activate(request, email_template_name='im/welcome_email.txt', on_failure='im/signup.html', 
435
                helpdesk_email_template_name='im/helpdesk_notification.txt'):
434
def activate(request, email_template_name='im/welcome_email.txt', helpdesk_email_template_name='im/helpdesk_notification.txt'):
436 435
    """
437 436
    Activates the user identified by the ``auth`` request parameter, sends a welcome email
438 437
    and renews the user token.
......
448 447
        return HttpResponseBadRequest(_('No such user'))
449 448
    
450 449
    if user.is_active:
451
        message = 'Account already active.'
450
        message = _('Account already active.')
452 451
        messages.add_message(request, messages.ERROR, message)
453
        return render_response(on_failure)
452
        return index(request)
454 453
    
455
    notify_helpdesk = False
456 454
    try:
457 455
        local_user = AstakosUser.objects.get(~Q(id = user.id), email=user.email, is_active=True)
458 456
    except AstakosUser.DoesNotExist:
459
        user.is_active = True
460
        user.email_verified = True
461 457
        try:
462
            user.save()
463
        except ValidationError, e:
464
            return HttpResponseBadRequest(e)
465
        notify_helpdesk = True
458
            activate_func(user, email_template_name, helpdesk_email_template_name, verify_email=True)
459
            response = prepare_response(request, user, next, renew=True)
460
            transaction.commit()
461
            return response
462
        except SendMailError, e:
463
            message = e.message
464
            messages.add_message(request, messages.ERROR, message)
465
            transaction.rollback()
466
            return index(request)
467
        except BaseException, e:
468
            status = messages.ERROR
469
            message = _('Something went wrong.')
470
            messages.add_message(request, messages.ERROR, message)
471
            logger.exception(e)
472
            transaction.rollback()
473
            return index(request)
466 474
    else:
467
        # switch the existing account to shibboleth one
468
        if user.provider == 'shibboleth':
469
            local_user.provider = 'shibboleth'
470
            local_user.set_unusable_password()
471
            local_user.third_party_identifier = user.third_party_identifier
472
            try:
473
                local_user.save()
474
            except ValidationError, e:
475
                return HttpResponseBadRequest(e)
476
            user.delete()
477
            user = local_user
478
        
479
    try:
480
        if notify_helpdesk:
481
            send_helpdesk_notification(user, helpdesk_email_template_name)
482
        send_greeting(user, email_template_name)
483
        response = prepare_response(request, user, next, renew=True)
484
        transaction.commit()
485
        return response
486
    except SendMailError, e:
487
        message = e.message
488
        messages.add_message(request, messages.ERROR, message)
489
        transaction.rollback()
490
        return render_response(on_failure)
491
    except BaseException, e:
492
        status = messages.ERROR
493
        message = _('Something went wrong.')
494
        messages.add_message(request, messages.ERROR, message)
495
        logger.exception(e)
496
        transaction.rollback()
497
        return signup(request, on_failure)
475
        try:
476
            user = switch_account_to_shibboleth(user, local_user)
477
            send_greeting(user, email_template_name)
478
            response = prepare_response(request, user, next, renew=True)
479
            transaction.commit()
480
            return response
481
        except SendMailError, e:
482
            message = e.message
483
            messages.add_message(request, messages.ERROR, message)
484
            transaction.rollback()
485
            return index(request)
486
        except BaseException, e:
487
            status = messages.ERROR
488
            message = _('Something went wrong.')
489
            messages.add_message(request, messages.ERROR, message)
490
            logger.exception(e)
491
            transaction.rollback()
492
            return index(request)
498 493

  
499 494
def approval_terms(request, term_id=None, template_name='im/approval_terms.html', extra_context={}):
500 495
    term = None

Also available in: Unified diff