Revision 6e3bb9c8 snf-astakos-app/astakos/im/views/im.py

b/snf-astakos-app/astakos/im/views/im.py
310 310
        instance=request.user,
311 311
        session_key=request.session.session_key
312 312
    )
313

  
313 314
    extra_context['next'] = request.GET.get('next')
314 315
    if request.method == 'POST':
315 316
        form = ProfileForm(
......
353 354
    user_available_providers = request.user.get_available_auth_providers()
354 355

  
355 356
    extra_context['services'] = Component.catalog().values()
357

  
358
    if request.method == "GET":
359
        if request.user.email_change_is_pending():
360
            change_email = request.user.get_pending_email_change()
361
            msg = _(astakos_messages.PENDING_EMAIL_CHANGE_WARNING) % {
362
                'email': change_email.new_email_address,
363
                'cancel_url': change_email.get_cancel_url()
364
            }
365
            messages.warning(request, msg)
366

  
356 367
    return render_response(template_name,
357 368
                           profile_form=form,
358 369
                           user_providers=user_providers,
......
710 721
                                                            extra_context))
711 722

  
712 723

  
724
@require_http_methods(["GET"])
725
@required_auth_methods_assigned(allow_access=True)
726
@login_required
727
@cookie_fix
728
@signed_terms_required
729
@transaction.commit_on_success
730
def change_email_cancel(request, cancel_key):
731
    email_change = get_object_or_404(EmailChange, cancel_key=cancel_key)
732
    email_change.delete()
733
    msg = _(astakos_messages.EMAIL_CHANGE_REQUEST_CANCELED)
734
    messages.success(request, msg)
735
    return HttpResponseRedirect(reverse('edit_profile'))
736

  
737

  
738

  
713 739
@require_http_methods(["GET", "POST"])
714 740
@cookie_fix
715 741
@transaction.commit_on_success
......
723 749
    if not settings.EMAILCHANGE_ENABLED:
724 750
        raise PermissionDenied
725 751

  
752
    objects = EmailChange.objects
726 753
    if activation_key:
727 754
        try:
728 755
            try:
729
                email_change = EmailChange.objects.get(
730
                    activation_key=activation_key)
756
                email_change = objects.get(activation_key=activation_key)
731 757
            except EmailChange.DoesNotExist:
732
                logger.error("[change-email] Invalid or used activation "
758
                messages.error(request,
759
                       _(astakos_messages.INVALID_CHANGE_EMAIL_ACTIVATION_KEY))
760
                logger.error("[change-email] Invalid change email activation "
733 761
                             "code, %s", activation_key)
734
                raise Http404
762
                return HttpResponseRedirect(reverse('index'))
735 763

  
736 764
            if (
737 765
                request.user.is_authenticated() and
......
741 769
                user = EmailChange.objects.change_email(activation_key)
742 770
                msg = _(astakos_messages.EMAIL_CHANGED)
743 771
                messages.success(request, msg)
744
                transaction.commit()
745 772
                return HttpResponseRedirect(reverse('edit_profile'))
746 773
            else:
747 774
                logger.error("[change-email] Access from invalid user, %s %s",
748 775
                             email_change.user, request.user.log_display)
749 776
                raise PermissionDenied
750
        except ValueError, e:
751
            messages.error(request, e)
752
            transaction.rollback()
753
            return HttpResponseRedirect(reverse('index'))
777
        except ValueError:
778
            # this means that new email which corresponds to this activation url
779
            # is no longer available
780

  
781
            # invalidate change email object
782
            email_change.delete()
783
            logger.error("[change-email] Email change with code '%s' failed. "
784
                         "Email address '%s' no longer available",
785
                         activation_key, email_change.new_email_address)
786
            messages.error(request, astakos_messages.NEW_EMAIL_ADDR_RESERVED)
787
            return HttpResponseRedirect(reverse('edit_profile'))
788

  
754 789

  
755 790
        return render_response(confirm_template_name,
756 791
                               modified_user=user if 'user' in locals()
......
758 793
                               context_instance=get_context(request,
759 794
                                                            extra_context))
760 795

  
796
    # redirect to login
761 797
    if not request.user.is_authenticated():
762 798
        path = quote(request.get_full_path())
763 799
        url = request.build_absolute_uri(reverse('index'))
......
768 804
        change = request.user.emailchanges.get()
769 805
        if change.activation_key_expired():
770 806
            change.delete()
771
            transaction.commit()
772 807
            return HttpResponseRedirect(reverse('email_change'))
773 808

  
774 809
    form = EmailChangeForm(request.POST or None)
......
776 811
        ec = form.save(request, email_template_name, request)
777 812
        msg = _(astakos_messages.EMAIL_CHANGE_REGISTERED)
778 813
        messages.success(request, msg)
779
        transaction.commit()
780 814
        return HttpResponseRedirect(reverse('edit_profile'))
781 815

  
782 816
    if request.user.email_change_is_pending():

Also available in: Unified diff