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

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4from __future__ import annotations 

5 

6from typing import TYPE_CHECKING 

7 

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 

13 

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 

18 

19if TYPE_CHECKING: 

20 from weblate.auth.models import AuthenticatedHttpRequest 

21 

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) 

29 

30 

31class LegalView(TemplateView): 

32 page = "index" 

33 

34 def get_context_data(self, **kwargs): 

35 context = super().get_context_data(**kwargs) 

36 

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

41 

42 return context 

43 

44 def get_template_names(self): 

45 return [f"legal/{self.page}.html"] 

46 

47 

48class TermsView(LegalView): 

49 page = "terms" 

50 

51 

52class CookiesView(LegalView): 

53 page = "cookies" 

54 

55 

56class PrivacyView(LegalView): 

57 page = "privacy" 

58 

59 

60class ContractsView(LegalView): 

61 page = "contracts" 

62 

63 

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

71 

72 if user is None: 

73 return redirect("home") 

74 

75 agreement = Agreement.objects.get_or_create(user=user)[0] 

76 if agreement.is_current(): 

77 return redirect_next(request.GET.get("next"), "home") 

78 

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

86 

87 return render( 

88 request, 

89 "legal/confirm.html", 

90 {"form": form, "privacy_url": reverse("legal:privacy")}, 

91 )