Revision d1757ca7 snf-astakos-app/astakos/im/views.py

b/snf-astakos-app/astakos/im/views.py
52 52
from django.db.utils import IntegrityError
53 53
from django.contrib.auth.views import password_change
54 54
from django.core.exceptions import ValidationError
55
from django.db.models import Q
55 56

  
56 57
from astakos.im.models import AstakosUser, Invitation, ApprovalTerms
57 58
from astakos.im.activation_backends import get_backend, SimpleBackend
......
442 443
    except AstakosUser.DoesNotExist:
443 444
        return HttpResponseBadRequest(_('No such user'))
444 445
    
446
    if user.is_active:
447
        message = 'Account already active.'
448
        messages.add_message(request, messages.ERROR, message)
449
        return render_response(on_failure)
450
    
445 451
    try:
446
        local_user = AstakosUser.objects.get(email=user.email, is_active=True)
452
        local_user = AstakosUser.objects.get(~Q(id = user.id), email=user.email, is_active=True)
447 453
    except AstakosUser.DoesNotExist:
448 454
        user.is_active = True
449 455
        user.email_verified = True
......
453 459
            return HttpResponseBadRequest(e)
454 460
    else:
455 461
        # switch the existing account to shibboleth one
456
        local_user.provider = 'shibboleth'
457
        local_user.set_unusable_password()
458
        local_user.third_party_identifier = user.third_party_identifier
459
        try:
460
            local_user.save()
461
        except ValidationError, e:
462
            return HttpResponseBadRequest(e)
463
        user.delete()
464
        user = local_user
465
    
462
        if user.provider == 'shibboleth':
463
            local_user.provider = 'shibboleth'
464
            local_user.set_unusable_password()
465
            local_user.third_party_identifier = user.third_party_identifier
466
            try:
467
                local_user.save()
468
            except ValidationError, e:
469
                return HttpResponseBadRequest(e)
470
            user.delete()
471
            user = local_user
472
        
466 473
    try:
467 474
        send_greeting(user, email_template_name)
468 475
        response = prepare_response(request, user, next, renew=True)

Also available in: Unified diff