netbox-plugin-dns 0.21.4__py3-none-any.whl → 1.4.7__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.
Files changed (232) hide show
  1. netbox_dns/__init__.py +106 -41
  2. netbox_dns/api/field_serializers.py +25 -0
  3. netbox_dns/api/nested_serializers.py +95 -52
  4. netbox_dns/api/serializers.py +14 -296
  5. netbox_dns/api/serializers_/__init__.py +0 -0
  6. netbox_dns/api/serializers_/dnssec_key_template.py +69 -0
  7. netbox_dns/api/serializers_/dnssec_policy.py +165 -0
  8. netbox_dns/api/serializers_/nameserver.py +56 -0
  9. netbox_dns/api/serializers_/prefix.py +18 -0
  10. netbox_dns/api/serializers_/record.py +105 -0
  11. netbox_dns/api/serializers_/record_template.py +71 -0
  12. netbox_dns/api/serializers_/registrar.py +45 -0
  13. netbox_dns/api/serializers_/registration_contact.py +50 -0
  14. netbox_dns/api/serializers_/view.py +81 -0
  15. netbox_dns/api/serializers_/zone.py +247 -0
  16. netbox_dns/api/serializers_/zone_template.py +157 -0
  17. netbox_dns/api/urls.py +13 -2
  18. netbox_dns/api/views.py +96 -58
  19. netbox_dns/choices/__init__.py +4 -0
  20. netbox_dns/choices/dnssec_key_template.py +67 -0
  21. netbox_dns/choices/dnssec_policy.py +40 -0
  22. netbox_dns/choices/record.py +104 -0
  23. netbox_dns/choices/utilities.py +4 -0
  24. netbox_dns/choices/zone.py +119 -0
  25. netbox_dns/fields/__init__.py +4 -0
  26. netbox_dns/fields/address.py +22 -16
  27. netbox_dns/fields/choice_array.py +33 -0
  28. netbox_dns/fields/ipam.py +15 -0
  29. netbox_dns/fields/network.py +42 -18
  30. netbox_dns/fields/rfc2317.py +97 -0
  31. netbox_dns/fields/timeperiod.py +33 -0
  32. netbox_dns/filters.py +7 -0
  33. netbox_dns/filtersets/__init__.py +12 -0
  34. netbox_dns/filtersets/dnssec_key_template.py +57 -0
  35. netbox_dns/filtersets/dnssec_policy.py +101 -0
  36. netbox_dns/filtersets/nameserver.py +46 -0
  37. netbox_dns/filtersets/record.py +135 -0
  38. netbox_dns/filtersets/record_template.py +59 -0
  39. netbox_dns/{filters → filtersets}/registrar.py +8 -1
  40. netbox_dns/{filters/contact.py → filtersets/registration_contact.py} +9 -3
  41. netbox_dns/filtersets/view.py +45 -0
  42. netbox_dns/filtersets/zone.py +254 -0
  43. netbox_dns/filtersets/zone_template.py +165 -0
  44. netbox_dns/forms/__init__.py +5 -1
  45. netbox_dns/forms/dnssec_key_template.py +250 -0
  46. netbox_dns/forms/dnssec_policy.py +654 -0
  47. netbox_dns/forms/nameserver.py +121 -27
  48. netbox_dns/forms/record.py +215 -104
  49. netbox_dns/forms/record_template.py +285 -0
  50. netbox_dns/forms/registrar.py +108 -31
  51. netbox_dns/forms/registration_contact.py +282 -0
  52. netbox_dns/forms/view.py +331 -20
  53. netbox_dns/forms/zone.py +769 -373
  54. netbox_dns/forms/zone_template.py +463 -0
  55. netbox_dns/graphql/__init__.py +25 -22
  56. netbox_dns/graphql/enums.py +41 -0
  57. netbox_dns/graphql/filter_lookups.py +13 -0
  58. netbox_dns/graphql/filters/__init__.py +12 -0
  59. netbox_dns/graphql/filters/dnssec_key_template.py +63 -0
  60. netbox_dns/graphql/filters/dnssec_policy.py +124 -0
  61. netbox_dns/graphql/filters/nameserver.py +32 -0
  62. netbox_dns/graphql/filters/record.py +89 -0
  63. netbox_dns/graphql/filters/record_template.py +55 -0
  64. netbox_dns/graphql/filters/registrar.py +30 -0
  65. netbox_dns/graphql/filters/registration_contact.py +27 -0
  66. netbox_dns/graphql/filters/view.py +28 -0
  67. netbox_dns/graphql/filters/zone.py +147 -0
  68. netbox_dns/graphql/filters/zone_template.py +97 -0
  69. netbox_dns/graphql/schema.py +89 -7
  70. netbox_dns/graphql/types.py +355 -0
  71. netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  72. netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  73. netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
  74. netbox_dns/management/commands/cleanup_database.py +175 -156
  75. netbox_dns/management/commands/cleanup_rrset_ttl.py +64 -0
  76. netbox_dns/management/commands/rebuild_dnssync.py +23 -0
  77. netbox_dns/management/commands/setup_dnssync.py +140 -0
  78. netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -27
  79. netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +557 -0
  80. netbox_dns/migrations/{0013_add_nameserver_zone_record_description.py → 0002_contact_description_registrar_description.py} +4 -9
  81. netbox_dns/migrations/0003_default_view.py +15 -0
  82. netbox_dns/migrations/0004_create_and_assign_default_view.py +26 -0
  83. netbox_dns/migrations/0005_alter_zone_view_not_null.py +18 -0
  84. netbox_dns/migrations/0006_templating.py +172 -0
  85. netbox_dns/migrations/0007_alter_ordering_options.py +25 -0
  86. netbox_dns/migrations/0008_view_prefixes.py +18 -0
  87. netbox_dns/migrations/0009_rename_contact_registrationcontact.py +36 -0
  88. netbox_dns/migrations/0010_view_ip_address_filter.py +18 -0
  89. netbox_dns/migrations/0011_rename_related_fields.py +63 -0
  90. netbox_dns/migrations/0012_natural_ordering.py +88 -0
  91. netbox_dns/migrations/0013_zonetemplate_soa_mname_zonetemplate_soa_rname.py +30 -0
  92. netbox_dns/migrations/0014_alter_unique_constraints_lowercase.py +42 -0
  93. netbox_dns/migrations/0015_dnssec.py +168 -0
  94. netbox_dns/migrations/{0015_add_record_status.py → 0016_dnssec_policy_status.py} +5 -4
  95. netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +41 -0
  96. netbox_dns/migrations/0018_zone_domain_status_zone_expiration_date.py +23 -0
  97. netbox_dns/migrations/0019_dnssecpolicy_parental_agents.py +25 -0
  98. netbox_dns/migrations/0020_netbox_3_4.py +1 -1
  99. netbox_dns/migrations/0020_remove_dnssecpolicy_parental_agents_and_more.py +29 -0
  100. netbox_dns/migrations/0021_alter_record_ptr_record.py +25 -0
  101. netbox_dns/migrations/0021_record_ip_address.py +1 -1
  102. netbox_dns/migrations/0022_alter_record_ipam_ip_address.py +26 -0
  103. netbox_dns/migrations/0023_disable_ptr_false.py +27 -0
  104. netbox_dns/migrations/0024_zonetemplate_parental_agents.py +25 -0
  105. netbox_dns/migrations/0025_remove_zone_inline_signing_and_more.py +22 -0
  106. netbox_dns/migrations/0026_alter_dnssecpolicy_nsec3_opt_out.py +18 -0
  107. netbox_dns/migrations/0026_domain_registration.py +1 -1
  108. netbox_dns/migrations/0027_zone_comments.py +18 -0
  109. netbox_dns/migrations/0028_alter_zone_default_ttl_alter_zone_soa_minimum_and_more.py +54 -0
  110. netbox_dns/migrations/0028_rfc2317_fields.py +44 -0
  111. netbox_dns/migrations/0029_alter_registrationcontact_street.py +18 -0
  112. netbox_dns/migrations/0029_record_fqdn.py +30 -0
  113. netbox_dns/mixins/__init__.py +1 -0
  114. netbox_dns/mixins/object_modification.py +57 -0
  115. netbox_dns/models/__init__.py +5 -1
  116. netbox_dns/models/dnssec_key_template.py +114 -0
  117. netbox_dns/models/dnssec_policy.py +203 -0
  118. netbox_dns/models/nameserver.py +61 -30
  119. netbox_dns/models/record.py +781 -234
  120. netbox_dns/models/record_template.py +198 -0
  121. netbox_dns/models/registrar.py +34 -15
  122. netbox_dns/models/{contact.py → registration_contact.py} +72 -43
  123. netbox_dns/models/view.py +129 -9
  124. netbox_dns/models/zone.py +806 -242
  125. netbox_dns/models/zone_template.py +209 -0
  126. netbox_dns/navigation.py +176 -76
  127. netbox_dns/signals/__init__.py +0 -0
  128. netbox_dns/signals/dnssec.py +32 -0
  129. netbox_dns/signals/ipam_dnssync.py +216 -0
  130. netbox_dns/tables/__init__.py +5 -1
  131. netbox_dns/tables/dnssec_key_template.py +49 -0
  132. netbox_dns/tables/dnssec_policy.py +140 -0
  133. netbox_dns/tables/ipam_dnssync.py +12 -0
  134. netbox_dns/tables/nameserver.py +14 -17
  135. netbox_dns/tables/record.py +117 -59
  136. netbox_dns/tables/record_template.py +91 -0
  137. netbox_dns/tables/registrar.py +20 -10
  138. netbox_dns/tables/{contact.py → registration_contact.py} +22 -11
  139. netbox_dns/tables/view.py +47 -3
  140. netbox_dns/tables/zone.py +62 -31
  141. netbox_dns/tables/zone_template.py +78 -0
  142. netbox_dns/template_content.py +124 -38
  143. netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +70 -0
  144. netbox_dns/templates/netbox_dns/dnssecpolicy.html +163 -0
  145. netbox_dns/templates/netbox_dns/nameserver.html +31 -28
  146. netbox_dns/templates/netbox_dns/record/managed.html +2 -1
  147. netbox_dns/templates/netbox_dns/record/related.html +17 -6
  148. netbox_dns/templates/netbox_dns/record.html +140 -93
  149. netbox_dns/templates/netbox_dns/recordtemplate.html +96 -0
  150. netbox_dns/templates/netbox_dns/registrar.html +41 -34
  151. netbox_dns/templates/netbox_dns/registrationcontact.html +76 -0
  152. netbox_dns/templates/netbox_dns/view/button.html +10 -0
  153. netbox_dns/templates/netbox_dns/view/prefix.html +44 -0
  154. netbox_dns/templates/netbox_dns/view/related.html +33 -0
  155. netbox_dns/templates/netbox_dns/view.html +62 -18
  156. netbox_dns/templates/netbox_dns/zone/base.html +6 -3
  157. netbox_dns/templates/netbox_dns/zone/child.html +6 -5
  158. netbox_dns/templates/netbox_dns/zone/child_zone.html +18 -0
  159. netbox_dns/templates/netbox_dns/zone/delegation_record.html +18 -0
  160. netbox_dns/templates/netbox_dns/zone/managed_record.html +1 -1
  161. netbox_dns/templates/netbox_dns/zone/record.html +6 -5
  162. netbox_dns/templates/netbox_dns/zone/registration.html +43 -24
  163. netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +18 -0
  164. netbox_dns/templates/netbox_dns/zone.html +178 -119
  165. netbox_dns/templates/netbox_dns/zonetemplate/child.html +46 -0
  166. netbox_dns/templates/netbox_dns/zonetemplate.html +124 -0
  167. netbox_dns/templatetags/netbox_dns.py +10 -0
  168. netbox_dns/urls.py +50 -210
  169. netbox_dns/utilities/__init__.py +3 -0
  170. netbox_dns/{utilities.py → utilities/conversions.py} +55 -7
  171. netbox_dns/utilities/dns.py +11 -0
  172. netbox_dns/utilities/ipam_dnssync.py +370 -0
  173. netbox_dns/validators/__init__.py +4 -0
  174. netbox_dns/validators/dns_name.py +116 -0
  175. netbox_dns/validators/dns_value.py +147 -0
  176. netbox_dns/validators/dnssec.py +148 -0
  177. netbox_dns/validators/rfc2317.py +28 -0
  178. netbox_dns/views/__init__.py +5 -1
  179. netbox_dns/views/dnssec_key_template.py +78 -0
  180. netbox_dns/views/dnssec_policy.py +146 -0
  181. netbox_dns/views/nameserver.py +34 -15
  182. netbox_dns/views/record.py +156 -15
  183. netbox_dns/views/record_template.py +93 -0
  184. netbox_dns/views/registrar.py +32 -13
  185. netbox_dns/views/registration_contact.py +101 -0
  186. netbox_dns/views/view.py +58 -14
  187. netbox_dns/views/zone.py +130 -33
  188. netbox_dns/views/zone_template.py +82 -0
  189. netbox_plugin_dns-1.4.7.dist-info/METADATA +132 -0
  190. netbox_plugin_dns-1.4.7.dist-info/RECORD +201 -0
  191. {netbox_plugin_dns-0.21.4.dist-info → netbox_plugin_dns-1.4.7.dist-info}/WHEEL +2 -1
  192. {netbox_plugin_dns-0.21.4.dist-info → netbox_plugin_dns-1.4.7.dist-info/licenses}/LICENSE +2 -1
  193. netbox_plugin_dns-1.4.7.dist-info/top_level.txt +1 -0
  194. netbox_dns/filters/__init__.py +0 -6
  195. netbox_dns/filters/nameserver.py +0 -18
  196. netbox_dns/filters/record.py +0 -53
  197. netbox_dns/filters/view.py +0 -18
  198. netbox_dns/filters/zone.py +0 -112
  199. netbox_dns/forms/contact.py +0 -211
  200. netbox_dns/graphql/contact.py +0 -19
  201. netbox_dns/graphql/nameserver.py +0 -19
  202. netbox_dns/graphql/record.py +0 -19
  203. netbox_dns/graphql/registrar.py +0 -19
  204. netbox_dns/graphql/view.py +0 -19
  205. netbox_dns/graphql/zone.py +0 -19
  206. netbox_dns/management/commands/setup_coupling.py +0 -75
  207. netbox_dns/management/commands/update_soa.py +0 -22
  208. netbox_dns/middleware.py +0 -226
  209. netbox_dns/migrations/0001_initial.py +0 -115
  210. netbox_dns/migrations/0002_zone_default_ttl.py +0 -18
  211. netbox_dns/migrations/0003_soa_managed_records.py +0 -112
  212. netbox_dns/migrations/0004_create_ptr_for_a_aaaa_records.py +0 -80
  213. netbox_dns/migrations/0005_update_ns_records.py +0 -41
  214. netbox_dns/migrations/0006_zone_soa_serial_auto.py +0 -29
  215. netbox_dns/migrations/0007_alter_zone_soa_serial_auto.py +0 -17
  216. netbox_dns/migrations/0008_zone_status_names.py +0 -21
  217. netbox_dns/migrations/0009_netbox32.py +0 -71
  218. netbox_dns/migrations/0010_update_soa_records.py +0 -58
  219. netbox_dns/migrations/0011_add_view_model.py +0 -70
  220. netbox_dns/migrations/0012_adjust_zone_and_record.py +0 -17
  221. netbox_dns/migrations/0014_add_view_description.py +0 -16
  222. netbox_dns/migrations/0016_cleanup_ptr_records.py +0 -38
  223. netbox_dns/migrations/0017_alter_record_ttl.py +0 -17
  224. netbox_dns/migrations/0018_zone_arpa_network.py +0 -51
  225. netbox_dns/migrations/0019_update_ns_ttl.py +0 -19
  226. netbox_dns/templates/netbox_dns/contact.html +0 -71
  227. netbox_dns/templates/netbox_dns/related_dns_objects.html +0 -21
  228. netbox_dns/templatetags/view_helpers.py +0 -15
  229. netbox_dns/validators.py +0 -57
  230. netbox_dns/views/contact.py +0 -83
  231. netbox_plugin_dns-0.21.4.dist-info/METADATA +0 -101
  232. netbox_plugin_dns-0.21.4.dist-info/RECORD +0 -110
@@ -0,0 +1,654 @@
1
+ from django import forms
2
+ from django.utils.translation import gettext_lazy as _
3
+
4
+ from netbox.forms import (
5
+ NetBoxModelBulkEditForm,
6
+ NetBoxModelFilterSetForm,
7
+ NetBoxModelImportForm,
8
+ NetBoxModelForm,
9
+ )
10
+ from utilities.forms.fields import (
11
+ TagFilterField,
12
+ CSVModelChoiceField,
13
+ CSVChoiceField,
14
+ DynamicModelChoiceField,
15
+ DynamicModelMultipleChoiceField,
16
+ )
17
+ from utilities.forms.rendering import FieldSet
18
+ from utilities.forms.widgets import BulkEditNullBooleanSelect
19
+ from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
20
+ from tenancy.models import Tenant, TenantGroup
21
+ from tenancy.forms import TenancyForm, TenancyFilterForm
22
+
23
+ from netbox_dns.models import DNSSECPolicy, DNSSECKeyTemplate, Zone, ZoneTemplate
24
+ from netbox_dns.choices import DNSSECPolicyDigestChoices, DNSSECPolicyStatusChoices
25
+ from netbox_dns.fields import TimePeriodField
26
+
27
+
28
+ __all__ = (
29
+ "DNSSECPolicyForm",
30
+ "DNSSECPolicyFilterForm",
31
+ "DNSSECPolicyImportForm",
32
+ "DNSSECPolicyBulkEditForm",
33
+ )
34
+
35
+
36
+ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
37
+ class Meta:
38
+ model = DNSSECPolicy
39
+
40
+ fields = (
41
+ "name",
42
+ "description",
43
+ "status",
44
+ "inline_signing",
45
+ "key_templates",
46
+ "dnskey_ttl",
47
+ "purge_keys",
48
+ "publish_safety",
49
+ "retire_safety",
50
+ "signatures_jitter",
51
+ "signatures_refresh",
52
+ "signatures_validity",
53
+ "signatures_validity_dnskey",
54
+ "max_zone_ttl",
55
+ "zone_propagation_delay",
56
+ "create_cdnskey",
57
+ "cds_digest_types",
58
+ "parent_ds_ttl",
59
+ "parent_propagation_delay",
60
+ "use_nsec3",
61
+ "nsec3_iterations",
62
+ "nsec3_opt_out",
63
+ "nsec3_salt_size",
64
+ "tenant_group",
65
+ "tenant",
66
+ "tags",
67
+ )
68
+
69
+ fieldsets = (
70
+ FieldSet(
71
+ "name",
72
+ "description",
73
+ "status",
74
+ "key_templates",
75
+ "inline_signing",
76
+ name=_("Attributes"),
77
+ ),
78
+ FieldSet(
79
+ "dnskey_ttl",
80
+ "purge_keys",
81
+ "publish_safety",
82
+ "retire_safety",
83
+ "signatures_jitter",
84
+ "signatures_refresh",
85
+ "signatures_validity",
86
+ "signatures_validity_dnskey",
87
+ "max_zone_ttl",
88
+ "zone_propagation_delay",
89
+ name=_("Timing"),
90
+ ),
91
+ FieldSet(
92
+ "create_cdnskey",
93
+ "cds_digest_types",
94
+ "parent_ds_ttl",
95
+ "parent_propagation_delay",
96
+ name=_("Parent Delegation"),
97
+ ),
98
+ FieldSet(
99
+ "use_nsec3",
100
+ "nsec3_iterations",
101
+ "nsec3_opt_out",
102
+ "nsec3_salt_size",
103
+ name=_("Proof of Non-Existence"),
104
+ ),
105
+ FieldSet(
106
+ "tenant_group",
107
+ "tenant",
108
+ name=_("Tenancy"),
109
+ ),
110
+ FieldSet(
111
+ "tags",
112
+ name=_("Tags"),
113
+ ),
114
+ )
115
+
116
+ def __init__(self, *args, **kwargs):
117
+ super().__init__(*args, **kwargs)
118
+
119
+ if not self.initial.get("use_nsec3"):
120
+ self.initial["nsec3_iterations"] = None
121
+ self.initial["nsec3_opt_out"] = None
122
+ self.initial["nsec3_salt_size"] = None
123
+
124
+ key_templates = DynamicModelMultipleChoiceField(
125
+ queryset=DNSSECKeyTemplate.objects.all(),
126
+ required=False,
127
+ label=_("Key Templates"),
128
+ help_text=_("Select CSK or KSK/ZSK templates for signing"),
129
+ quick_add=True,
130
+ )
131
+ dnskey_ttl = TimePeriodField(
132
+ required=False,
133
+ label=_("DNSKEY TTL"),
134
+ placeholder=DNSSECPolicy.get_fallback_setting("dnskey_ttl"),
135
+ )
136
+ purge_keys = TimePeriodField(
137
+ required=False,
138
+ label=_("Purge Keys"),
139
+ placeholder=DNSSECPolicy.get_fallback_setting("purge_keys"),
140
+ )
141
+ publish_safety = TimePeriodField(
142
+ required=False,
143
+ label=_("Publish Safety"),
144
+ placeholder=DNSSECPolicy.get_fallback_setting("publish_safety"),
145
+ )
146
+ retire_safety = TimePeriodField(
147
+ required=False,
148
+ label=_("Retire Safety"),
149
+ placeholder=DNSSECPolicy.get_fallback_setting("retire_safety"),
150
+ )
151
+ signatures_jitter = TimePeriodField(
152
+ required=False,
153
+ label=_("Signatures Jitter"),
154
+ placeholder=DNSSECPolicy.get_fallback_setting("signatures_jitter"),
155
+ )
156
+ signatures_refresh = TimePeriodField(
157
+ required=False,
158
+ label=_("Signatures Refresh"),
159
+ placeholder=DNSSECPolicy.get_fallback_setting("signatures_refresh"),
160
+ )
161
+ signatures_validity = TimePeriodField(
162
+ required=False,
163
+ label=_("Signatures Validity"),
164
+ placeholder=DNSSECPolicy.get_fallback_setting("signatures_validity"),
165
+ )
166
+ signatures_validity_dnskey = TimePeriodField(
167
+ required=False,
168
+ label=_("Signatures Validity (DNSKEY)"),
169
+ placeholder=DNSSECPolicy.get_fallback_setting("signatures_validity_dnskey"),
170
+ )
171
+ max_zone_ttl = TimePeriodField(
172
+ required=False,
173
+ label=_("Max Zone TTL"),
174
+ placeholder=DNSSECPolicy.get_fallback_setting("max_zone_ttl"),
175
+ )
176
+ zone_propagation_delay = TimePeriodField(
177
+ required=False,
178
+ label=_("Zone Propagation Delay"),
179
+ placeholder=DNSSECPolicy.get_fallback_setting("zone_propagation_delay"),
180
+ )
181
+ parent_ds_ttl = TimePeriodField(
182
+ required=False,
183
+ label=_("Parent DS TTL"),
184
+ placeholder=DNSSECPolicy.get_fallback_setting("parent_ds_ttl"),
185
+ )
186
+ parent_propagation_delay = TimePeriodField(
187
+ required=False,
188
+ label=_("Parent Propagation Delay"),
189
+ placeholder=DNSSECPolicy.get_fallback_setting("parent_propagation_delay"),
190
+ )
191
+ nsec3_opt_out = forms.NullBooleanField(
192
+ required=False,
193
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
194
+ label=_("NSEC3 Opt-Out"),
195
+ )
196
+
197
+ def clean(self, *args, **kwargs):
198
+ super().clean(*args, **kwargs)
199
+
200
+ if not self.cleaned_data.get("use_nsec3"):
201
+ self.cleaned_data["nsec3_iterations"] = None
202
+ self.cleaned_data["nsec3_opt_out"] = None
203
+ self.cleaned_data["nsec3_salt_size"] = None
204
+
205
+ return self.cleaned_data
206
+
207
+
208
+ class DNSSECPolicyFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
209
+ model = DNSSECPolicy
210
+
211
+ fieldsets = (
212
+ FieldSet(
213
+ "q",
214
+ "filter_id",
215
+ "tag",
216
+ ),
217
+ FieldSet(
218
+ "name",
219
+ "description",
220
+ "status",
221
+ "key_template_id",
222
+ "inline_signing",
223
+ name=_("Attributes"),
224
+ ),
225
+ FieldSet(
226
+ "zone_id",
227
+ "zone_template_id",
228
+ name=_("Assignments"),
229
+ ),
230
+ FieldSet(
231
+ "dnskey_ttl",
232
+ "purge_keys",
233
+ "publish_safety",
234
+ "retire_safety",
235
+ "signatures_jitter",
236
+ "signatures_refresh",
237
+ "signatures_validity",
238
+ "signatures_validity_dnskey",
239
+ "max_zone_ttl",
240
+ "zone_propagation_delay",
241
+ name=_("Timing"),
242
+ ),
243
+ FieldSet(
244
+ "create_cdnskey",
245
+ "cds_digest_types",
246
+ "parent_ds_ttl",
247
+ "parent_propagation_delay",
248
+ name=_("Parent Delegation"),
249
+ ),
250
+ FieldSet(
251
+ "use_nsec3",
252
+ "nsec3_iterations",
253
+ "nsec3_opt_out",
254
+ "nsec3_salt_size",
255
+ name=_("Proof of Non-Existence"),
256
+ ),
257
+ FieldSet(
258
+ "tenant_group_id",
259
+ "tenant_id",
260
+ name=_("Tenancy"),
261
+ ),
262
+ FieldSet(
263
+ "tags",
264
+ name=_("Tags"),
265
+ ),
266
+ )
267
+
268
+ name = forms.CharField(
269
+ required=False,
270
+ )
271
+ description = forms.CharField(
272
+ required=False,
273
+ )
274
+ status = forms.MultipleChoiceField(
275
+ choices=DNSSECPolicyStatusChoices,
276
+ required=False,
277
+ label=_("Status"),
278
+ )
279
+ inline_signing = forms.NullBooleanField(
280
+ required=False,
281
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
282
+ label=_("Use Inline Signing"),
283
+ )
284
+ key_template_id = DynamicModelMultipleChoiceField(
285
+ queryset=DNSSECKeyTemplate.objects.all(),
286
+ required=False,
287
+ null_option=_("None"),
288
+ label=_("Key Templates"),
289
+ )
290
+ zone_id = DynamicModelMultipleChoiceField(
291
+ queryset=Zone.objects.all(),
292
+ required=False,
293
+ null_option=_("None"),
294
+ label=_("Zones"),
295
+ )
296
+ zone_template_id = DynamicModelMultipleChoiceField(
297
+ queryset=ZoneTemplate.objects.all(),
298
+ required=False,
299
+ null_option=_("None"),
300
+ label=_("Zone Templates"),
301
+ )
302
+ dnskey_ttl = TimePeriodField(
303
+ required=False,
304
+ label=_("DNSKEY TTL"),
305
+ )
306
+ purge_keys = TimePeriodField(
307
+ required=False,
308
+ label=_("Purge Keys"),
309
+ )
310
+ publish_safety = TimePeriodField(
311
+ required=False,
312
+ label=_("Publish Safety"),
313
+ )
314
+ retire_safety = TimePeriodField(
315
+ required=False,
316
+ label=_("Retire Safety"),
317
+ )
318
+ signatures_jitter = TimePeriodField(
319
+ required=False,
320
+ label=_("Signatures Jitter"),
321
+ )
322
+ signatures_refresh = TimePeriodField(
323
+ required=False,
324
+ label=_("Signatures Refresh"),
325
+ )
326
+ signatures_validity = TimePeriodField(
327
+ required=False,
328
+ label=_("Signatures Validity"),
329
+ )
330
+ signatures_validity_dnskey = TimePeriodField(
331
+ required=False,
332
+ label=_("Signatures Validity (DNSKEY)"),
333
+ )
334
+ max_zone_ttl = TimePeriodField(
335
+ required=False,
336
+ label=_("Max Zone TTL"),
337
+ )
338
+ zone_propagation_delay = TimePeriodField(
339
+ required=False,
340
+ label=_("Zone Propagation Delay"),
341
+ )
342
+ create_cdnskey = forms.NullBooleanField(
343
+ required=False,
344
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
345
+ label=_("Create CDNSKEY"),
346
+ )
347
+ cds_digest_types = forms.MultipleChoiceField(
348
+ required=False,
349
+ choices=DNSSECPolicyDigestChoices,
350
+ label=_("CDS Digest Types"),
351
+ )
352
+ parent_ds_ttl = TimePeriodField(
353
+ required=False,
354
+ label=_("Parent DS TTL"),
355
+ )
356
+ parent_propagation_delay = TimePeriodField(
357
+ required=False,
358
+ label=_("Parent Propagation Delay"),
359
+ )
360
+ use_nsec3 = forms.NullBooleanField(
361
+ required=False,
362
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
363
+ label=_("Use NSEC3"),
364
+ )
365
+ nsec3_iterations = forms.IntegerField(
366
+ required=False,
367
+ label=_("NSEC3 Iterations"),
368
+ )
369
+ nsec3_opt_out = forms.NullBooleanField(
370
+ required=False,
371
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
372
+ label=_("NSEC3 Opt-Out"),
373
+ )
374
+ nsec3_salt_size = forms.IntegerField(
375
+ required=False,
376
+ label=_("NSEC3 Salt Size"),
377
+ )
378
+
379
+ tag = TagFilterField(DNSSECPolicy)
380
+
381
+
382
+ class DNSSECPolicyImportForm(NetBoxModelImportForm):
383
+ class Meta:
384
+ model = DNSSECPolicy
385
+
386
+ fields = (
387
+ "name",
388
+ "description",
389
+ "inline_signing",
390
+ "key_templates",
391
+ "dnskey_ttl",
392
+ "purge_keys",
393
+ "publish_safety",
394
+ "retire_safety",
395
+ "signatures_jitter",
396
+ "signatures_refresh",
397
+ "signatures_validity",
398
+ "signatures_validity_dnskey",
399
+ "max_zone_ttl",
400
+ "zone_propagation_delay",
401
+ "create_cdnskey",
402
+ "cds_digest_types",
403
+ "parent_ds_ttl",
404
+ "parent_propagation_delay",
405
+ "use_nsec3",
406
+ "nsec3_iterations",
407
+ "nsec3_opt_out",
408
+ "nsec3_salt_size",
409
+ "tenant",
410
+ "tags",
411
+ )
412
+
413
+ status = CSVChoiceField(
414
+ choices=DNSSECPolicyStatusChoices,
415
+ required=False,
416
+ label=_("Status"),
417
+ )
418
+ inline_signing = forms.BooleanField(
419
+ required=False,
420
+ label=_("Use Inline Signing"),
421
+ )
422
+ dnskey_ttl = TimePeriodField(
423
+ required=False,
424
+ label=_("DNSKEY TTL"),
425
+ )
426
+ purge_keys = TimePeriodField(
427
+ required=False,
428
+ label=_("Purge Keys"),
429
+ )
430
+ publish_safety = TimePeriodField(
431
+ required=False,
432
+ label=_("Publish Safety"),
433
+ )
434
+ retire_safety = TimePeriodField(
435
+ required=False,
436
+ label=_("Retire Safety"),
437
+ )
438
+ signatures_jitter = TimePeriodField(
439
+ required=False,
440
+ label=_("Signatures Jitter"),
441
+ )
442
+ signatures_refresh = TimePeriodField(
443
+ required=False,
444
+ label=_("Signatures Refresh"),
445
+ )
446
+ signatures_validity = TimePeriodField(
447
+ required=False,
448
+ label=_("Signatures Validity"),
449
+ )
450
+ signatures_validity_dnskey = TimePeriodField(
451
+ required=False,
452
+ label=_("Signatures Validity (DNSKEY)"),
453
+ )
454
+ max_zone_ttl = TimePeriodField(
455
+ required=False,
456
+ label=_("Max Zone TTL"),
457
+ )
458
+ zone_propagation_delay = TimePeriodField(
459
+ required=False,
460
+ label=_("Zone Propagation Delay"),
461
+ )
462
+ parent_ds_ttl = TimePeriodField(
463
+ required=False,
464
+ label=_("Parent DS TTL"),
465
+ )
466
+ parent_propagation_delay = TimePeriodField(
467
+ required=False,
468
+ label=_("Parent Propagation Delay"),
469
+ )
470
+ tenant = CSVModelChoiceField(
471
+ queryset=Tenant.objects.all(),
472
+ to_field_name="name",
473
+ required=False,
474
+ label=_("Tenant"),
475
+ )
476
+
477
+
478
+ class DNSSECPolicyBulkEditForm(NetBoxModelBulkEditForm):
479
+ model = DNSSECPolicy
480
+
481
+ fieldsets = (
482
+ FieldSet(
483
+ "description",
484
+ "key_templates",
485
+ "inline_signing",
486
+ name=_("Attributes"),
487
+ ),
488
+ FieldSet(
489
+ "dnskey_ttl",
490
+ "purge_keys",
491
+ "publish_safety",
492
+ "retire_safety",
493
+ "signatures_jitter",
494
+ "signatures_refresh",
495
+ "signatures_validity",
496
+ "signatures_validity_dnskey",
497
+ "max_zone_ttl",
498
+ "zone_propagation_delay",
499
+ name=_("Timing"),
500
+ ),
501
+ FieldSet(
502
+ "create_cdnskey",
503
+ "cds_digest_types",
504
+ "parent_ds_ttl",
505
+ "parent_propagation_delay",
506
+ name=_("Parent Delegation"),
507
+ ),
508
+ FieldSet(
509
+ "use_nsec3",
510
+ "nsec3_iterations",
511
+ "nsec3_opt_out",
512
+ "nsec3_salt_size",
513
+ name=_("Proof of Non-Existence"),
514
+ ),
515
+ FieldSet(
516
+ "tenant_group",
517
+ "tenant",
518
+ name=_("Tenancy"),
519
+ ),
520
+ )
521
+
522
+ nullable_fields = (
523
+ "description",
524
+ "tenant",
525
+ "dnskey_ttl",
526
+ "purge_keys",
527
+ "publish_safety",
528
+ "retire_safety",
529
+ "signatures_jitter",
530
+ "signatures_refresh",
531
+ "signatures_validity",
532
+ "signatures_validity_dnskey",
533
+ "max_zone_ttl",
534
+ "zone_propagation_delay",
535
+ "cds_digest_types",
536
+ "parent_ds_ttl",
537
+ "parent_propagation_delay",
538
+ "nsec3_iterations",
539
+ "nsec3_opt_out",
540
+ "nsec3_salt_size",
541
+ "cds_digest_types",
542
+ "parent_ds_ttl",
543
+ "parent_propagation_delay",
544
+ )
545
+
546
+ description = forms.CharField(
547
+ max_length=200,
548
+ required=False,
549
+ label=_("Description"),
550
+ )
551
+ status = forms.ChoiceField(
552
+ choices=add_blank_choice(DNSSECPolicyStatusChoices),
553
+ required=False,
554
+ label=_("Status"),
555
+ )
556
+ inline_signing = forms.NullBooleanField(
557
+ required=False,
558
+ widget=BulkEditNullBooleanSelect(),
559
+ label=_("Use Inline Signing"),
560
+ )
561
+ dnskey_ttl = TimePeriodField(
562
+ required=False,
563
+ label=_("DNSKEY TTL"),
564
+ )
565
+ purge_keys = TimePeriodField(
566
+ required=False,
567
+ label=_("Purge Keys"),
568
+ )
569
+ publish_safety = TimePeriodField(
570
+ required=False,
571
+ label=_("Publish Safety"),
572
+ )
573
+ retire_safety = TimePeriodField(
574
+ required=False,
575
+ label=_("Retire Safety"),
576
+ )
577
+ signatures_jitter = TimePeriodField(
578
+ required=False,
579
+ label=_("Signatures Jitter"),
580
+ )
581
+ signatures_refresh = TimePeriodField(
582
+ required=False,
583
+ label=_("Signatures Refresh"),
584
+ )
585
+ signatures_validity = TimePeriodField(
586
+ required=False,
587
+ label=_("Signatures Validity"),
588
+ )
589
+ signatures_validity_dnskey = TimePeriodField(
590
+ required=False,
591
+ label=_("Signatures Validity (DNSKEY)"),
592
+ )
593
+ max_zone_ttl = TimePeriodField(
594
+ required=False,
595
+ label=_("Max Zone TTL"),
596
+ )
597
+ zone_propagation_delay = TimePeriodField(
598
+ required=False,
599
+ label=_("Zone Propagation Delay"),
600
+ )
601
+ create_cdnskey = forms.NullBooleanField(
602
+ required=False,
603
+ widget=BulkEditNullBooleanSelect(),
604
+ label=_("Create CDNSKEY"),
605
+ )
606
+ cds_digest_types = forms.MultipleChoiceField(
607
+ choices=DNSSECPolicyDigestChoices,
608
+ required=False,
609
+ label=_("CDS Digest Types"),
610
+ )
611
+ parent_ds_ttl = TimePeriodField(
612
+ required=False,
613
+ label=_("Parent DS TTL"),
614
+ )
615
+ parent_propagation_delay = TimePeriodField(
616
+ required=False,
617
+ label=_("Parent Propagation Delay"),
618
+ )
619
+ use_nsec3 = forms.NullBooleanField(
620
+ required=False,
621
+ widget=BulkEditNullBooleanSelect(),
622
+ label=_("Use NSEC3"),
623
+ )
624
+ nsec3_iterations = forms.IntegerField(
625
+ required=False,
626
+ label=_("NSEC3 Iterations"),
627
+ )
628
+ nsec3_opt_out = forms.NullBooleanField(
629
+ required=False,
630
+ widget=BulkEditNullBooleanSelect(),
631
+ label=_("NSEC3 Opt-Out"),
632
+ )
633
+ nsec3_salt_size = forms.IntegerField(
634
+ required=False,
635
+ label=_("NSEC3 Salt Size"),
636
+ )
637
+ tenant_group = DynamicModelChoiceField(
638
+ queryset=TenantGroup.objects.all(),
639
+ required=False,
640
+ label=_("Tenant Group"),
641
+ )
642
+ tenant = DynamicModelChoiceField(
643
+ queryset=Tenant.objects.all(),
644
+ required=False,
645
+ label=_("Tenant"),
646
+ )
647
+
648
+ def clean_cds_digest_types(self, *args, **kwargs):
649
+ if not (
650
+ cds_digest_types := self.cleaned_data.get("cds_digest_types")
651
+ ) and "cds_digest_types" not in self.data.get("_nullify", []):
652
+ return self.initial.get("cds_digest_types")
653
+
654
+ return cds_digest_types