def confirm()

in bedrock/newsletter/views.py [0:0]


def confirm(request, token):
    """
    Confirm subscriptions.
    """
    token = str(token)

    success = generic_error = token_error = rate_limit_error = False

    try:
        result = basket.confirm(token)
    except basket.BasketException as e:
        log.exception(f"Exception confirming token {token}")
        if e.code == basket.errors.BASKET_UNKNOWN_TOKEN:
            token_error = True
        elif e.code == basket.errors.BASKET_USAGE_ERROR:
            rate_limit_error = True
        else:
            # Any other exception
            generic_error = True
    else:
        if result["status"] == "ok":
            success = True
        else:
            # Shouldn't happen (errors should raise exception),
            # but just in case:
            generic_error = True

    # Assume rate limit error means user already confirmed and clicked confirm
    # link twice in quick succession
    qparams = {}
    for k, v in request.GET.items():
        qparams[k] = v

    if success or rate_limit_error:
        qparams["confirm"] = "1"
        return HttpResponseRedirect(urlparams(reverse("newsletter.existing", kwargs={"token": token}), **qparams))
    else:
        if generic_error:
            qparams["error"] = "1"
        elif token_error:
            qparams["error"] = "2"
        else:
            qparams["success"] = "1"

        return HttpResponseRedirect(urlparams(reverse("newsletter.confirm.thanks"), **qparams))