netbox-plugin-dns 1.2.5__py3-none-any.whl → 1.2.7b2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of netbox-plugin-dns might be problematic. Click here for more details.

Files changed (65) hide show
  1. netbox_dns/__init__.py +15 -1
  2. netbox_dns/api/serializers.py +3 -0
  3. netbox_dns/api/serializers_/dnssec_key_template.py +46 -0
  4. netbox_dns/api/serializers_/dnssec_policy.py +83 -0
  5. netbox_dns/api/serializers_/zone.py +10 -0
  6. netbox_dns/api/serializers_/zone_template.py +13 -4
  7. netbox_dns/api/urls.py +4 -0
  8. netbox_dns/api/views.py +18 -0
  9. netbox_dns/choices/__init__.py +2 -0
  10. netbox_dns/choices/dnssec_key_template.py +63 -0
  11. netbox_dns/choices/dnssec_policy.py +40 -0
  12. netbox_dns/choices/record.py +2 -25
  13. netbox_dns/choices/utilities.py +26 -0
  14. netbox_dns/fields/__init__.py +2 -0
  15. netbox_dns/fields/choice_array.py +20 -0
  16. netbox_dns/fields/timeperiod.py +31 -0
  17. netbox_dns/filtersets/__init__.py +3 -0
  18. netbox_dns/filtersets/dnssec_key_template.py +51 -0
  19. netbox_dns/filtersets/dnssec_policy.py +73 -0
  20. netbox_dns/filtersets/zone.py +23 -4
  21. netbox_dns/filtersets/zone_template.py +11 -0
  22. netbox_dns/forms/__init__.py +2 -0
  23. netbox_dns/forms/dnssec_key_template.py +188 -0
  24. netbox_dns/forms/dnssec_policy.py +563 -0
  25. netbox_dns/forms/record.py +12 -6
  26. netbox_dns/forms/record_template.py +9 -3
  27. netbox_dns/forms/zone.py +70 -22
  28. netbox_dns/forms/zone_template.py +29 -0
  29. netbox_dns/graphql/__init__.py +7 -3
  30. netbox_dns/graphql/filters.py +16 -0
  31. netbox_dns/graphql/schema.py +20 -0
  32. netbox_dns/graphql/types.py +67 -3
  33. netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  34. netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
  35. netbox_dns/migrations/0015_dnssec.py +168 -0
  36. netbox_dns/migrations/0016_dnssec_policy_status.py +18 -0
  37. netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +41 -0
  38. netbox_dns/models/__init__.py +2 -0
  39. netbox_dns/models/dnssec_key_template.py +114 -0
  40. netbox_dns/models/dnssec_policy.py +201 -0
  41. netbox_dns/models/zone.py +29 -16
  42. netbox_dns/models/zone_template.py +16 -6
  43. netbox_dns/navigation.py +49 -0
  44. netbox_dns/signals/dnssec.py +32 -0
  45. netbox_dns/tables/__init__.py +2 -0
  46. netbox_dns/tables/dnssec_key_template.py +48 -0
  47. netbox_dns/tables/dnssec_policy.py +131 -0
  48. netbox_dns/tables/zone.py +17 -1
  49. netbox_dns/tables/zone_template.py +4 -0
  50. netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +70 -0
  51. netbox_dns/templates/netbox_dns/dnssecpolicy.html +155 -0
  52. netbox_dns/templates/netbox_dns/zone.html +16 -0
  53. netbox_dns/templates/netbox_dns/zonetemplate/child.html +46 -0
  54. netbox_dns/templates/netbox_dns/zonetemplate.html +12 -0
  55. netbox_dns/urls.py +16 -0
  56. netbox_dns/validators/__init__.py +1 -0
  57. netbox_dns/validators/dnssec.py +146 -0
  58. netbox_dns/views/__init__.py +2 -0
  59. netbox_dns/views/dnssec_key_template.py +87 -0
  60. netbox_dns/views/dnssec_policy.py +153 -0
  61. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/METADATA +2 -2
  62. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/RECORD +65 -39
  63. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/WHEEL +1 -1
  64. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/LICENSE +0 -0
  65. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,73 @@
1
+ import django_filters
2
+
3
+ from django.db.models import Q
4
+ from django.utils.translation import gettext as _
5
+
6
+ from netbox.filtersets import NetBoxModelFilterSet
7
+ from tenancy.filtersets import TenancyFilterSet
8
+ from utilities.filters import MultiValueCharFilter
9
+
10
+ from netbox_dns.models import DNSSECPolicy, DNSSECKeyTemplate
11
+ from netbox_dns.choices import DNSSECPolicyStatusChoices
12
+
13
+ __all__ = ("DNSSECPolicyFilterSet",)
14
+
15
+
16
+ class DNSSECPolicyFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
17
+ class Meta:
18
+ model = DNSSECPolicy
19
+ fields = (
20
+ "id",
21
+ "name",
22
+ "description",
23
+ "status",
24
+ "dnskey_ttl",
25
+ "purge_keys",
26
+ "publish_safety",
27
+ "retire_safety",
28
+ "signatures_jitter",
29
+ "signatures_refresh",
30
+ "signatures_validity",
31
+ "signatures_validity_dnskey",
32
+ "max_zone_ttl",
33
+ "zone_propagation_delay",
34
+ "create_cdnskey",
35
+ "parent_ds_ttl",
36
+ "parent_propagation_delay",
37
+ "use_nsec3",
38
+ "nsec3_iterations",
39
+ "nsec3_opt_out",
40
+ "nsec3_salt_size",
41
+ )
42
+
43
+ status = django_filters.MultipleChoiceFilter(
44
+ choices=DNSSECPolicyStatusChoices,
45
+ )
46
+ cds_digest_types = MultiValueCharFilter(
47
+ method="filter_cds_digest_types",
48
+ label=_("CDS Digest Types"),
49
+ )
50
+ key_template = django_filters.ModelMultipleChoiceFilter(
51
+ field_name="key_templates__name",
52
+ queryset=DNSSECKeyTemplate.objects.all(),
53
+ to_field_name="name",
54
+ label=_("DNSSEC Key Templates"),
55
+ )
56
+ key_template_id = django_filters.ModelMultipleChoiceFilter(
57
+ field_name="key_templates",
58
+ queryset=DNSSECKeyTemplate.objects.all(),
59
+ to_field_name="id",
60
+ label=_("DNSSEC Key Template IDs"),
61
+ )
62
+
63
+ def filter_cds_digest_types(self, queryset, name, value):
64
+ if not value:
65
+ return queryset
66
+
67
+ return queryset.filter(cds_digest_types__overlap=value)
68
+
69
+ def search(self, queryset, name, value):
70
+ if not value.strip():
71
+ return queryset
72
+ qs_filter = Q(name__icontains=value)
73
+ return queryset.filter(qs_filter)
@@ -8,7 +8,14 @@ from netbox.filtersets import NetBoxModelFilterSet
8
8
  from tenancy.filtersets import TenancyFilterSet
9
9
  from utilities.filters import MultiValueCharFilter
10
10
 
11
- from netbox_dns.models import View, Zone, Registrar, RegistrationContact, NameServer
11
+ from netbox_dns.models import (
12
+ View,
13
+ Zone,
14
+ Registrar,
15
+ RegistrationContact,
16
+ NameServer,
17
+ DNSSECPolicy,
18
+ )
12
19
  from netbox_dns.choices import ZoneStatusChoices
13
20
 
14
21
 
@@ -51,9 +58,15 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
51
58
  to_field_name="name",
52
59
  label=_("SOA MName"),
53
60
  )
54
- arpa_network = MultiValueCharFilter(
55
- method="filter_arpa_network",
56
- label=_("ARPA Network"),
61
+ dnssec_policy_id = django_filters.ModelMultipleChoiceFilter(
62
+ queryset=DNSSECPolicy.objects.all(),
63
+ label=_("DNSSEC Policy ID"),
64
+ )
65
+ dnssec_policy = django_filters.ModelMultipleChoiceFilter(
66
+ queryset=DNSSECPolicy.objects.all(),
67
+ field_name="dnssec_policy__name",
68
+ to_field_name="name",
69
+ label=_("DNSSEC Policy"),
57
70
  )
58
71
  rfc2317_prefix = MultiValueCharFilter(
59
72
  method="filter_rfc2317_prefix",
@@ -121,6 +134,10 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
121
134
  to_field_name="contact_id",
122
135
  label=_("Billing Contact"),
123
136
  )
137
+ arpa_network = MultiValueCharFilter(
138
+ method="filter_arpa_network",
139
+ label=_("ARPA Network"),
140
+ )
124
141
  active = django_filters.BooleanFilter(
125
142
  label=_("Zone is active"),
126
143
  )
@@ -141,6 +158,7 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
141
158
  "soa_minimum",
142
159
  "soa_serial_auto",
143
160
  "rfc2317_parent_managed",
161
+ "inline_signing",
144
162
  "registry_domain_id",
145
163
  )
146
164
 
@@ -179,6 +197,7 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
179
197
  Q(name__icontains=value)
180
198
  | Q(status__icontains=value)
181
199
  | Q(view__name__icontains=value)
200
+ | Q(dnssec_policy__name__icontains=value)
182
201
  | Q(registrar__name__icontains=value)
183
202
  | Q(registry_domain_id__icontains=value)
184
203
  | Q(registrant__name__icontains=value)
@@ -12,6 +12,7 @@ from netbox_dns.models import (
12
12
  Registrar,
13
13
  RegistrationContact,
14
14
  NameServer,
15
+ DNSSECPolicy,
15
16
  )
16
17
 
17
18
 
@@ -55,6 +56,16 @@ class ZoneTemplateFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
55
56
  to_field_name="name",
56
57
  label=_("SOA MNAME"),
57
58
  )
59
+ dnssec_policy_id = django_filters.ModelMultipleChoiceFilter(
60
+ queryset=DNSSECPolicy.objects.all(),
61
+ label=_("DNSSEC Policy ID"),
62
+ )
63
+ dnssec_policy = django_filters.ModelMultipleChoiceFilter(
64
+ queryset=DNSSECPolicy.objects.all(),
65
+ field_name="dnssec_policy__name",
66
+ to_field_name="name",
67
+ label=_("DNSSEC Policy"),
68
+ )
58
69
  registrar_id = django_filters.ModelMultipleChoiceFilter(
59
70
  queryset=Registrar.objects.all(),
60
71
  label=_("Registrar ID"),
@@ -6,3 +6,5 @@ from .registration_contact import *
6
6
  from .registrar import *
7
7
  from .zone_template import *
8
8
  from .record_template import *
9
+ from .dnssec_key_template import *
10
+ from .dnssec_policy import *
@@ -0,0 +1,188 @@
1
+ from django import forms
2
+ from django.contrib.postgres.forms import SimpleArrayField
3
+ from django.utils.translation import gettext_lazy as _
4
+
5
+ from netbox.forms import (
6
+ NetBoxModelBulkEditForm,
7
+ NetBoxModelFilterSetForm,
8
+ NetBoxModelImportForm,
9
+ NetBoxModelForm,
10
+ )
11
+ from utilities.forms.fields import (
12
+ TagFilterField,
13
+ CSVModelChoiceField,
14
+ DynamicModelChoiceField,
15
+ DynamicModelMultipleChoiceField,
16
+ )
17
+ from utilities.forms.rendering import FieldSet
18
+ from utilities.forms import add_blank_choice
19
+ from tenancy.models import Tenant, TenantGroup
20
+ from tenancy.forms import TenancyForm, TenancyFilterForm
21
+
22
+ from netbox_dns.models import DNSSECKeyTemplate, DNSSECPolicy
23
+ from netbox_dns.choices import (
24
+ DNSSECKeyTemplateTypeChoices,
25
+ DNSSECKeyTemplateAlgorithmChoices,
26
+ DNSSECKeyTemplateKeySizeChoices,
27
+ )
28
+ from netbox_dns.fields import TimePeriodField
29
+
30
+
31
+ __all__ = (
32
+ "DNSSECKeyTemplateForm",
33
+ "DNSSECKeyTemplateFilterForm",
34
+ "DNSSECKeyTemplateImportForm",
35
+ "DNSSECKeyTemplateBulkEditForm",
36
+ )
37
+
38
+
39
+ class DNSSECKeyTemplateForm(TenancyForm, NetBoxModelForm):
40
+ lifetime = TimePeriodField(
41
+ required=False,
42
+ )
43
+
44
+ fieldsets = (
45
+ FieldSet("name", "description", name=_("Attributes")),
46
+ FieldSet("type", "lifetime", "algorithm", "key_size", name=_("Key Properties")),
47
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
48
+ FieldSet("tags", name=_("Tags")),
49
+ )
50
+
51
+ class Meta:
52
+ model = DNSSECKeyTemplate
53
+ fields = (
54
+ "name",
55
+ "description",
56
+ "type",
57
+ "lifetime",
58
+ "key_size",
59
+ "algorithm",
60
+ "tenant_group",
61
+ "tenant",
62
+ "tags",
63
+ )
64
+
65
+
66
+ class DNSSECKeyTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
67
+ model = DNSSECKeyTemplate
68
+ fieldsets = (
69
+ FieldSet("q", "filter_id", "tag"),
70
+ FieldSet("name", "description", name=_("Attributes")),
71
+ FieldSet("policy_id", name=_("Policies")),
72
+ FieldSet("type", "lifetime", "algorithm", "key_size", name=_("Key Properties")),
73
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
74
+ )
75
+
76
+ name = forms.CharField(
77
+ required=False,
78
+ )
79
+ description = forms.CharField(
80
+ required=False,
81
+ )
82
+ policy_id = DynamicModelMultipleChoiceField(
83
+ queryset=DNSSECPolicy.objects.all(),
84
+ required=False,
85
+ label=_("Policies"),
86
+ )
87
+ type = forms.MultipleChoiceField(
88
+ choices=DNSSECKeyTemplateTypeChoices,
89
+ required=False,
90
+ )
91
+ lifetime = SimpleArrayField(
92
+ base_field=forms.IntegerField(),
93
+ required=False,
94
+ help_text=_("Enter a list of integer lifetime values, separated by comma (,)"),
95
+ )
96
+ algorithm = forms.MultipleChoiceField(
97
+ choices=DNSSECKeyTemplateAlgorithmChoices,
98
+ required=False,
99
+ )
100
+ key_size = SimpleArrayField(
101
+ base_field=forms.ChoiceField(
102
+ choices=DNSSECKeyTemplateKeySizeChoices,
103
+ ),
104
+ required=False,
105
+ help_text=_("Enter a list of integer key sizes, separated by comma (,)"),
106
+ )
107
+ tag = TagFilterField(DNSSECKeyTemplate)
108
+
109
+
110
+ class DNSSECKeyTemplateImportForm(NetBoxModelImportForm):
111
+ lifetime = TimePeriodField(
112
+ required=False,
113
+ label=_("Lifetime"),
114
+ )
115
+ tenant = CSVModelChoiceField(
116
+ queryset=Tenant.objects.all(),
117
+ to_field_name="name",
118
+ required=False,
119
+ label=_("Tenant"),
120
+ )
121
+
122
+ class Meta:
123
+ model = DNSSECKeyTemplate
124
+ fields = (
125
+ "name",
126
+ "description",
127
+ "type",
128
+ "lifetime",
129
+ "algorithm",
130
+ "key_size",
131
+ "tenant",
132
+ "tags",
133
+ )
134
+
135
+
136
+ class DNSSECKeyTemplateBulkEditForm(NetBoxModelBulkEditForm):
137
+ model = DNSSECKeyTemplate
138
+
139
+ type = forms.ChoiceField(
140
+ choices=add_blank_choice(DNSSECKeyTemplateTypeChoices),
141
+ required=False,
142
+ label=_("Key Type"),
143
+ )
144
+ lifetime = TimePeriodField(
145
+ required=False,
146
+ label=_("Lifetime"),
147
+ )
148
+ algorithm = forms.ChoiceField(
149
+ choices=add_blank_choice(DNSSECKeyTemplateAlgorithmChoices),
150
+ required=False,
151
+ label=_("Algorithm"),
152
+ )
153
+ key_size = forms.ChoiceField(
154
+ choices=add_blank_choice(DNSSECKeyTemplateKeySizeChoices),
155
+ required=False,
156
+ label=_("Key Size"),
157
+ )
158
+ description = forms.CharField(
159
+ max_length=200,
160
+ required=False,
161
+ label=_("Description"),
162
+ )
163
+ tenant_group = DynamicModelChoiceField(
164
+ queryset=TenantGroup.objects.all(),
165
+ required=False,
166
+ label=_("Tenant Group"),
167
+ )
168
+ tenant = DynamicModelChoiceField(
169
+ queryset=Tenant.objects.all(),
170
+ required=False,
171
+ label=_("Tenant"),
172
+ )
173
+
174
+ fieldsets = (
175
+ FieldSet(
176
+ "description",
177
+ name=_("Attributes"),
178
+ ),
179
+ FieldSet("type", "lifetime", "algorithm", "key_size", name=_("Key Properties")),
180
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
181
+ )
182
+
183
+ fields = (
184
+ "algorithm",
185
+ "key_size",
186
+ )
187
+
188
+ nullable_fields = ("description", "tenant", "lifetime", "key_size")