Coverage for app/venv/lib/python3.14/site-packages/weblate/legal/views.py: 0%
52 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
4from __future__ import annotations
6from typing import TYPE_CHECKING
8from django.shortcuts import redirect, render
9from django.urls import reverse
10from django.utils.translation import gettext_lazy
11from django.views.decorators.cache import never_cache
12from django.views.generic import TemplateView
14from weblate.auth.models import User
15from weblate.legal.forms import TOSForm
16from weblate.legal.models import Agreement
17from weblate.trans.util import redirect_next
19if TYPE_CHECKING:
20 from weblate.auth.models import AuthenticatedHttpRequest
22MENU = (
23 ("index", "legal:index", gettext_lazy("Overview")),
24 ("terms", "legal:terms", gettext_lazy("General Terms and Conditions")),
25 ("cookies", "legal:cookies", gettext_lazy("Cookies")),
26 ("privacy", "legal:privacy", gettext_lazy("Privacy Policy")),
27 ("contracts", "legal:contracts", gettext_lazy("Subcontractors")),
28)
31class LegalView(TemplateView):
32 page = "index"
34 def get_context_data(self, **kwargs):
35 context = super().get_context_data(**kwargs)
37 context["legal_menu"] = MENU
38 context["legal_page"] = self.page
39 context["privacy_url"] = reverse("legal:privacy")
40 context["terms_url"] = reverse("legal:terms")
42 return context
44 def get_template_names(self):
45 return [f"legal/{self.page}.html"]
48class TermsView(LegalView):
49 page = "terms"
52class CookiesView(LegalView):
53 page = "cookies"
56class PrivacyView(LegalView):
57 page = "privacy"
60class ContractsView(LegalView):
61 page = "contracts"
64@never_cache
65def tos_confirm(request: AuthenticatedHttpRequest):
66 user = None
67 if request.user.is_authenticated:
68 user = request.user
69 elif "tos_user" in request.session:
70 user = User.objects.get(pk=request.session["tos_user"])
72 if user is None:
73 return redirect("home")
75 agreement = Agreement.objects.get_or_create(user=user)[0]
76 if agreement.is_current():
77 return redirect_next(request.GET.get("next"), "home")
79 if request.method == "POST":
80 form = TOSForm(request.POST)
81 if form.is_valid():
82 agreement.make_current(request)
83 return redirect_next(form.cleaned_data["next"], "home")
84 else:
85 form = TOSForm(initial={"next": request.GET.get("next")})
87 return render(
88 request,
89 "legal/confirm.html",
90 {"form": form, "privacy_url": reverse("legal:privacy")},
91 )