Coverage for src/meshadmin/server/networks/views/rule.py: 43%
92 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-10 16:08 +0200
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-10 16:08 +0200
1from django.contrib.auth.mixins import LoginRequiredMixin
2from django.http import HttpResponse, HttpResponseRedirect
3from django.shortcuts import get_object_or_404, render
4from django.urls import reverse_lazy
5from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
7from meshadmin.server.networks.forms import RuleForm
8from meshadmin.server.networks.mixins import NetworkPermissionMixin
9from meshadmin.server.networks.models import Group, Rule
12class RuleDetailView(LoginRequiredMixin, NetworkPermissionMixin, DetailView):
13 model = Rule
14 template_name = "networks/rule/detail.html"
16 def get_network(self):
17 return self.get_object().security_group.network
19 def get_context_data(self, **kwargs):
20 context = super().get_context_data(**kwargs)
21 context["fields"] = [
22 {
23 "name": field.name,
24 "verbose_name": field.verbose_name,
25 "value": getattr(self.object, field.name),
26 }
27 for field in self.model._meta.fields
28 ]
29 return context
32class RuleCreateView(LoginRequiredMixin, NetworkPermissionMixin, CreateView):
33 model = Rule
34 form_class = RuleForm
35 template_name = "networks/rule/form.html"
37 def get_network(self):
38 security_group_id = self.kwargs.get("security_group_id")
39 if security_group_id:
40 security_group = get_object_or_404(Group, id=security_group_id)
41 return security_group.network
42 return None
44 def get_success_url(self):
45 return reverse_lazy("networks:rule-detail", kwargs={"pk": self.object.pk})
47 def get_form_kwargs(self):
48 kwargs = super().get_form_kwargs()
49 security_group_id = self.kwargs.get("security_group_id")
50 if security_group_id:
51 kwargs["initial"] = {"security_group_id": security_group_id}
52 return kwargs
54 def get_context_data(self, **kwargs):
55 context = super().get_context_data(**kwargs)
56 context["action"] = "Create"
57 context["model_name"] = self.model._meta.verbose_name
58 security_group_id = self.kwargs.get("security_group_id")
59 if security_group_id:
60 context["security_group"] = get_object_or_404(Group, id=security_group_id)
61 return context
63 def form_invalid(self, form):
64 return super().form_invalid(form)
66 def form_valid(self, form):
67 security_group_id = self.kwargs.get("security_group_id")
68 if security_group_id:
69 form.instance.security_group_id = security_group_id
70 return super().form_valid(form)
73class RuleUpdateView(LoginRequiredMixin, NetworkPermissionMixin, UpdateView):
74 model = Rule
75 form_class = RuleForm
76 template_name = "networks/rule/form.html"
78 def get_network(self):
79 return self.get_object().security_group.network
81 def get_context_data(self, **kwargs):
82 context = super().get_context_data(**kwargs)
83 context["action"] = "Update"
84 context["security_group"] = self.object.security_group
85 return context
87 def get_form_kwargs(self):
88 kwargs = super().get_form_kwargs()
89 kwargs["initial"] = {"security_group_id": self.object.security_group_id}
90 return kwargs
92 def form_invalid(self, form):
93 return super().form_invalid(form)
95 def get_success_url(self):
96 return reverse_lazy("networks:rule-detail", kwargs={"pk": self.object.pk})
98 def form_valid(self, form):
99 response = super().form_valid(form)
100 if self.request.htmx:
101 context = {
102 "rules": self.object.security_group.rules.all(),
103 }
104 return render(self.request, "networks/group/_rules_list.html", context)
105 return response
108class RuleDeleteView(LoginRequiredMixin, NetworkPermissionMixin, DeleteView):
109 model = Rule
110 template_name = "networks/shared/delete.html"
112 def get_network(self):
113 return self.get_object().security_group.network
115 def delete(self, request, *args, **kwargs):
116 self.object = self.get_object()
117 self.object.delete()
119 if request.htmx:
120 return HttpResponse("")
122 return HttpResponseRedirect(self.get_success_url())
124 def get_success_url(self):
125 return (
126 reverse_lazy(
127 "networks:network-detail",
128 kwargs={"pk": self.object.security_group.network.pk},
129 )
130 + "#groups-section"
131 )
133 def get_context_data(self, **kwargs):
134 context = super().get_context_data(**kwargs)
135 context["model_name"] = self.model._meta.verbose_name
136 return context