def email_verification()

in src/olympia/devhub/views.py [0:0]


def email_verification(request):
    data = {'state': None}
    email_verification = request.user.email_verification
    suppressed_email = request.user.suppressed_email

    if not waffle.switch_is_active('suppressed-email'):
        return redirect('devhub.addons')

    if request.method == 'POST':
        if email_verification:
            email_verification.delete()

        if suppressed_email:
            email_verification = SuppressedEmailVerification.objects.create(
                suppressed_email=suppressed_email
            )
            send_suppressed_email_confirmation.delay(email_verification.id)

        return redirect('devhub.email_verification')

    if email_verification:
        data['render_table'] = True
        data['found_emails'] = check_suppressed_email_confirmation(email_verification)
        if email_verification.is_expired:
            data['state'] = VERIFY_EMAIL_STATE['verification_expired']
        elif code := request.GET.get('code'):
            if code == email_verification.confirmation_code:
                suppressed_email.delete()
                send_mail_jinja(
                    gettext('Your email has been verified'),
                    'devhub/emails/verify-email-completed.ltxt',
                    {},
                    recipient_list=[request.user.email],
                )
                return redirect('devhub.email_verification')
            else:
                data['state'] = VERIFY_EMAIL_STATE['confirmation_invalid']
        elif email_verification.is_timedout:
            data['state'] = VERIFY_EMAIL_STATE['verification_timedout']
        else:
            if (
                email_verification.reload().status
                == SuppressedEmailVerification.STATUS_CHOICES.Delivered
            ):
                data['state'] = VERIFY_EMAIL_STATE['confirmation_pending']
                data['render_table'] = False
            else:
                data['state'] = VERIFY_EMAIL_STATE['verification_pending']

    elif suppressed_email:
        data['state'] = VERIFY_EMAIL_STATE['email_suppressed']
    else:
        data['state'] = VERIFY_EMAIL_STATE['email_verified']

    if data['state'] is None:
        raise Exception('Invalid view must result in assigned state')

    if data['state'] in RENDER_BUTTON_STATES:
        data['render_button'] = True
        data['button_text'] = get_button_text(data['state'])

    return TemplateResponse(request, 'devhub/verify_email.html', context=data)