41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from django.http import HttpRequest, HttpResponse, HttpResponseNotAllowed
|
|
from django.shortcuts import redirect, render
|
|
from django.utils.http import url_has_allowed_host_and_scheme
|
|
|
|
from apps.core.consent import ConsentService
|
|
|
|
|
|
def consent_view(request: HttpRequest) -> HttpResponse:
|
|
if request.method != "POST":
|
|
return HttpResponseNotAllowed(["POST"])
|
|
|
|
analytics = False
|
|
advertising = False
|
|
|
|
if request.POST.get("accept_all"):
|
|
analytics = True
|
|
advertising = True
|
|
elif request.POST.get("reject_all"):
|
|
analytics = False
|
|
advertising = False
|
|
else:
|
|
analytics = request.POST.get("analytics") in {"true", "1", "on"}
|
|
advertising = request.POST.get("advertising") in {"true", "1", "on"}
|
|
|
|
target = request.META.get("HTTP_REFERER", "/")
|
|
if not url_has_allowed_host_and_scheme(
|
|
url=target,
|
|
allowed_hosts={request.get_host()},
|
|
require_https=request.is_secure(),
|
|
):
|
|
target = "/"
|
|
response = redirect(target)
|
|
ConsentService.set_consent(response, analytics=analytics, advertising=advertising)
|
|
return response
|
|
|
|
|
|
def robots_txt(request: HttpRequest) -> HttpResponse:
|
|
return render(request, "core/robots.txt", content_type="text/plain")
|