Files
netbox-plugin-dns-bridge/netbox_dns_bridge/views.py
T
sven a3f53767e4 Move from hard-coded CatalogZone SOA values (refresh, retry, expire and minimum)
to DB driven to permit user modification:

modified:   netbox_dns_bridge/models.py
  Add 4 cols for values.

modified:   netbox_dns_bridge/migrations/0003_catalogzone_and_per_zone_identifier.py
  Adjust migration. This expects that the last migration the user has is 0002 (<=v1.5.8)

modified:   netbox_dns_bridge/jobs/notify.py
modified:   netbox_dns_bridge/management/commands/dns_transfer_endpoint/catalog_zone_manager.py
  Update to use new db values for SOA creation.

Change UI to permit editing for SOA values and disable member identifier editing.
modified:   netbox_dns_bridge/forms.py
modified:   netbox_dns_bridge/navigation.py
new file:   netbox_dns_bridge/templates/netbox_dns_bridge/catalog_zone_edit.html
new file:   netbox_dns_bridge/templates/netbox_dns_bridge/catalog_zone_list.html
new file:   netbox_dns_bridge/templates/netbox_dns_bridge/catalog_zone_members.html
deleted:    netbox_dns_bridge/templates/netbox_dns_bridge/catz_overview.html
modified:   netbox_dns_bridge/tables.py
modified:   netbox_dns_bridge/urls.py
modified:   netbox_dns_bridge/views.py
modified:   netbox_dns_bridge/filtersets.py
  GUI components are entirely AI generated. Plumbing also with AI assist but code verified.
2026-09-02 12:05:21 +02:00

68 lines
2.1 KiB
Python

from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render
from django.utils.decorators import method_decorator
from django.views import View
import netbox_dns.models
from netbox.views.generic import ObjectEditView, ObjectListView
from .filtersets import CatalogZoneFilterSet, ZoneFilterSet
from .forms import (
CatalogZoneFilterForm,
CatalogZoneForm,
CatalogZoneMemberFilterForm,
)
from .models import CatalogZone, SeenTransferClients
from .tables import CatalogZoneMemberTable, CatalogZoneTable
@method_decorator(
user_passes_test(lambda u: u.is_superuser), name="dispatch"
)
class CatalogZoneListView(ObjectListView):
queryset = CatalogZone.objects.select_related("view").order_by("view__name")
table = CatalogZoneTable
filterset = CatalogZoneFilterSet
filterset_form = CatalogZoneFilterForm
template_name = "netbox_dns_bridge/catalog_zone_list.html"
actions = ("edit", "export")
@method_decorator(
user_passes_test(lambda u: u.is_superuser), name="dispatch"
)
class CatalogZoneEditView(ObjectEditView):
queryset = CatalogZone.objects.select_related("view")
form = CatalogZoneForm
template_name = "netbox_dns_bridge/catalog_zone_edit.html"
@method_decorator(
user_passes_test(lambda u: u.is_superuser), name="dispatch"
)
class CatalogZoneMembersView(ObjectListView):
queryset = netbox_dns.models.Zone.objects.select_related(
"view", "catz_identifier"
).order_by("view__name", "name")
table = CatalogZoneMemberTable
filterset = ZoneFilterSet
filterset_form = CatalogZoneMemberFilterForm
template_name = "netbox_dns_bridge/catalog_zone_members.html"
actions = ()
@method_decorator(
user_passes_test(lambda u: u.is_superuser), name="dispatch"
)
class NotifyOverviewView(View):
template_name = "netbox_dns_bridge/notify_overview.html"
def get(self, request):
seen_clients = (
SeenTransferClients.objects.select_related("view")
.all()
.order_by("source_ip")
)
context = {"seen_clients": seen_clients}
return render(request, self.template_name, context)