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))