mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-06-30 00:03:30 +02:00
refactored complicated test code in common, satisfied the linter
This commit is contained in:
parent
a9d57cda07
commit
93d8b8227e
7 changed files with 241 additions and 205 deletions
|
@ -1,7 +1,8 @@
|
||||||
# common.py
|
# common.py
|
||||||
#
|
#
|
||||||
# ALGORITHM_CHOICES are options for alg attribute in DS Data and Key Data
|
# ALGORITHM_CHOICES are options for alg attribute in DS Data and Key Data
|
||||||
# reference: https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml
|
# reference:
|
||||||
|
# https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml
|
||||||
ALGORITHM_CHOICES = [
|
ALGORITHM_CHOICES = [
|
||||||
(1, "(1) ERSA/MD5 [RSAMD5]"),
|
(1, "(1) ERSA/MD5 [RSAMD5]"),
|
||||||
(2, "(2) Diffie-Hellman [DH]"),
|
(2, "(2) Diffie-Hellman [DH]"),
|
||||||
|
|
|
@ -7,7 +7,13 @@ from django.forms import formset_factory
|
||||||
from phonenumber_field.widgets import RegionalPhoneNumberWidget
|
from phonenumber_field.widgets import RegionalPhoneNumberWidget
|
||||||
|
|
||||||
from ..models import Contact, DomainInformation
|
from ..models import Contact, DomainInformation
|
||||||
from .common import ALGORITHM_CHOICES, DIGEST_TYPE_CHOICES, FLAG_CHOICES, PROTOCOL_CHOICES
|
from .common import (
|
||||||
|
ALGORITHM_CHOICES,
|
||||||
|
DIGEST_TYPE_CHOICES,
|
||||||
|
FLAG_CHOICES,
|
||||||
|
PROTOCOL_CHOICES,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class DomainAddUserForm(forms.Form):
|
class DomainAddUserForm(forms.Form):
|
||||||
|
|
||||||
|
@ -157,35 +163,27 @@ class DomainDsdataForm(forms.Form):
|
||||||
MinValueValidator(0, message="Value must be between 0 and 65535"),
|
MinValueValidator(0, message="Value must be between 0 and 65535"),
|
||||||
MaxValueValidator(65535, message="Value must be between 0 and 65535"),
|
MaxValueValidator(65535, message="Value must be between 0 and 65535"),
|
||||||
],
|
],
|
||||||
error_messages={
|
error_messages={"required": ("Key tag is required.")},
|
||||||
"required": ("Key tag is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
algorithm = forms.TypedChoiceField(
|
algorithm = forms.TypedChoiceField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Algorithm",
|
label="Algorithm",
|
||||||
choices=[(None, "--Select--")] + ALGORITHM_CHOICES,
|
choices=[(None, "--Select--")] + ALGORITHM_CHOICES, # type: ignore
|
||||||
error_messages={
|
error_messages={"required": ("Algorithm is required.")},
|
||||||
"required": ("Algorithm is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
digest_type = forms.TypedChoiceField(
|
digest_type = forms.TypedChoiceField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Digest Type",
|
label="Digest Type",
|
||||||
choices=[(None, "--Select--")] + DIGEST_TYPE_CHOICES,
|
choices=[(None, "--Select--")] + DIGEST_TYPE_CHOICES, # type: ignore
|
||||||
error_messages={
|
error_messages={"required": ("Digest Type is required.")},
|
||||||
"required": ("Digest Type is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
digest = forms.CharField(
|
digest = forms.CharField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Digest",
|
label="Digest",
|
||||||
error_messages={
|
error_messages={"required": ("Digest is required.")},
|
||||||
"required": ("Digest is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,35 +202,27 @@ class DomainKeydataForm(forms.Form):
|
||||||
required=True,
|
required=True,
|
||||||
label="Flag",
|
label="Flag",
|
||||||
choices=FLAG_CHOICES,
|
choices=FLAG_CHOICES,
|
||||||
error_messages={
|
error_messages={"required": ("Flag is required.")},
|
||||||
"required": ("Flag is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
protocol = forms.TypedChoiceField(
|
protocol = forms.TypedChoiceField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Protocol",
|
label="Protocol",
|
||||||
choices=PROTOCOL_CHOICES,
|
choices=PROTOCOL_CHOICES,
|
||||||
error_messages={
|
error_messages={"required": ("Protocol is required.")},
|
||||||
"required": ("Protocol is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
algorithm = forms.TypedChoiceField(
|
algorithm = forms.TypedChoiceField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Algorithm",
|
label="Algorithm",
|
||||||
choices=[(None, "--Select--")] + ALGORITHM_CHOICES,
|
choices=[(None, "--Select--")] + ALGORITHM_CHOICES, # type: ignore
|
||||||
error_messages={
|
error_messages={"required": ("Algorithm is required.")},
|
||||||
"required": ("Algorithm is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
pub_key = forms.CharField(
|
pub_key = forms.CharField(
|
||||||
required=True,
|
required=True,
|
||||||
label="Pub key",
|
label="Pub key",
|
||||||
error_messages={
|
error_messages={"required": ("Pub key is required.")},
|
||||||
"required": ("Pub key is required.")
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -240,4 +230,4 @@ DomainKeydataFormset = formset_factory(
|
||||||
DomainKeydataForm,
|
DomainKeydataForm,
|
||||||
extra=0,
|
extra=0,
|
||||||
can_delete=True,
|
can_delete=True,
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,12 +18,14 @@ def startswith(text, starts):
|
||||||
return text.startswith(starts)
|
return text.startswith(starts)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@register.filter("endswith")
|
@register.filter("endswith")
|
||||||
def endswith(text, ends):
|
def endswith(text, ends):
|
||||||
if isinstance(text, str):
|
if isinstance(text, str):
|
||||||
return text.endswith(ends)
|
return text.endswith(ends)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def public_site_url(url_path):
|
def public_site_url(url_path):
|
||||||
"""Make a full URL for this path at our public site.
|
"""Make a full URL for this path at our public site.
|
||||||
|
|
|
@ -689,18 +689,18 @@ class MockEppLib(TestCase):
|
||||||
"alg": 1,
|
"alg": 1,
|
||||||
"pubKey": "AQPJ////4Q==",
|
"pubKey": "AQPJ////4Q==",
|
||||||
}
|
}
|
||||||
dnssecExtensionWithDsData: Mapping[str, Any] = {
|
dnssecExtensionWithDsData: Mapping[Any, Any] = {
|
||||||
"dsData": [common.DSData(**addDsData1)]
|
"dsData": [common.DSData(**addDsData1)] # type: ignore
|
||||||
}
|
}
|
||||||
dnssecExtensionWithMultDsData: Mapping[str, Any] = {
|
dnssecExtensionWithMultDsData: Mapping[str, Any] = {
|
||||||
"dsData": [
|
"dsData": [
|
||||||
common.DSData(**addDsData1),
|
common.DSData(**addDsData1), # type: ignore
|
||||||
common.DSData(**addDsData2),
|
common.DSData(**addDsData2), # type: ignore
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
dnssecExtensionWithKeyData: Mapping[str, Any] = {
|
dnssecExtensionWithKeyData: Mapping[str, Any] = {
|
||||||
"maxSigLife": 3215,
|
"maxSigLife": 3215,
|
||||||
"keyData": [common.DNSSECKeyData(**keyDataDict)],
|
"keyData": [common.DNSSECKeyData(**keyDataDict)], # type: ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
def mockSend(self, _request, cleaned):
|
def mockSend(self, _request, cleaned):
|
||||||
|
@ -709,54 +709,9 @@ class MockEppLib(TestCase):
|
||||||
returns objects that simulate what would be in a epp response
|
returns objects that simulate what would be in a epp response
|
||||||
but only relevant pieces for tests"""
|
but only relevant pieces for tests"""
|
||||||
if isinstance(_request, commands.InfoDomain):
|
if isinstance(_request, commands.InfoDomain):
|
||||||
if getattr(_request, "name", None) == "security.gov":
|
return self.mockInfoDomainCommands(_request, cleaned)
|
||||||
return MagicMock(res_data=[self.infoDomainNoContact])
|
|
||||||
elif getattr(_request, "name", None) == "dnssec-dsdata.gov":
|
|
||||||
return MagicMock(
|
|
||||||
res_data=[self.mockDataInfoDomain],
|
|
||||||
extensions=[
|
|
||||||
extensions.DNSSECExtension(**self.dnssecExtensionWithDsData)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
elif getattr(_request, "name", None) == "dnssec-multdsdata.gov":
|
|
||||||
return MagicMock(
|
|
||||||
res_data=[self.mockDataInfoDomain],
|
|
||||||
extensions=[
|
|
||||||
extensions.DNSSECExtension(**self.dnssecExtensionWithMultDsData)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
elif getattr(_request, "name", None) == "dnssec-keydata.gov":
|
|
||||||
return MagicMock(
|
|
||||||
res_data=[self.mockDataInfoDomain],
|
|
||||||
extensions=[
|
|
||||||
extensions.DNSSECExtension(**self.dnssecExtensionWithKeyData)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
elif getattr(_request, "name", None) == "dnssec-none.gov":
|
|
||||||
# this case is not necessary, but helps improve readability
|
|
||||||
return MagicMock(res_data=[self.mockDataInfoDomain])
|
|
||||||
elif getattr(_request, "name", None) == "freeman.gov":
|
|
||||||
return MagicMock(res_data=[self.InfoDomainWithContacts])
|
|
||||||
else:
|
|
||||||
return MagicMock(res_data=[self.mockDataInfoDomain])
|
|
||||||
elif isinstance(_request, commands.InfoContact):
|
elif isinstance(_request, commands.InfoContact):
|
||||||
mocked_result: info.InfoContactResultData
|
return self.mockInfoContactCommands(_request, cleaned)
|
||||||
|
|
||||||
# For testing contact types
|
|
||||||
match getattr(_request, "id", None):
|
|
||||||
case "securityContact":
|
|
||||||
mocked_result = self.mockSecurityContact
|
|
||||||
case "technicalContact":
|
|
||||||
mocked_result = self.mockTechnicalContact
|
|
||||||
case "adminContact":
|
|
||||||
mocked_result = self.mockAdministrativeContact
|
|
||||||
case "regContact":
|
|
||||||
mocked_result = self.mockRegistrantContact
|
|
||||||
case _:
|
|
||||||
# Default contact return
|
|
||||||
mocked_result = self.mockDataInfoContact
|
|
||||||
|
|
||||||
return MagicMock(res_data=[mocked_result])
|
|
||||||
elif (
|
elif (
|
||||||
isinstance(_request, commands.CreateContact)
|
isinstance(_request, commands.CreateContact)
|
||||||
and getattr(_request, "id", None) == "fail"
|
and getattr(_request, "id", None) == "fail"
|
||||||
|
@ -782,6 +737,57 @@ class MockEppLib(TestCase):
|
||||||
raise RegistryError(code=ErrorCode.PARAMETER_VALUE_RANGE_ERROR)
|
raise RegistryError(code=ErrorCode.PARAMETER_VALUE_RANGE_ERROR)
|
||||||
return MagicMock(res_data=[self.mockDataInfoHosts])
|
return MagicMock(res_data=[self.mockDataInfoHosts])
|
||||||
|
|
||||||
|
def mockInfoDomainCommands(self, _request, cleaned):
|
||||||
|
if getattr(_request, "name", None) == "security.gov":
|
||||||
|
return MagicMock(res_data=[self.infoDomainNoContact])
|
||||||
|
elif getattr(_request, "name", None) == "dnssec-dsdata.gov":
|
||||||
|
return MagicMock(
|
||||||
|
res_data=[self.mockDataInfoDomain],
|
||||||
|
extensions=[
|
||||||
|
extensions.DNSSECExtension(**self.dnssecExtensionWithDsData)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
elif getattr(_request, "name", None) == "dnssec-multdsdata.gov":
|
||||||
|
return MagicMock(
|
||||||
|
res_data=[self.mockDataInfoDomain],
|
||||||
|
extensions=[
|
||||||
|
extensions.DNSSECExtension(**self.dnssecExtensionWithMultDsData)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
elif getattr(_request, "name", None) == "dnssec-keydata.gov":
|
||||||
|
return MagicMock(
|
||||||
|
res_data=[self.mockDataInfoDomain],
|
||||||
|
extensions=[
|
||||||
|
extensions.DNSSECExtension(**self.dnssecExtensionWithKeyData)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
elif getattr(_request, "name", None) == "dnssec-none.gov":
|
||||||
|
# this case is not necessary, but helps improve readability
|
||||||
|
return MagicMock(res_data=[self.mockDataInfoDomain])
|
||||||
|
elif getattr(_request, "name", None) == "freeman.gov":
|
||||||
|
return MagicMock(res_data=[self.InfoDomainWithContacts])
|
||||||
|
else:
|
||||||
|
return MagicMock(res_data=[self.mockDataInfoDomain])
|
||||||
|
|
||||||
|
def mockInfoContactCommands(self, _request, cleaned):
|
||||||
|
mocked_result: info.InfoContactResultData
|
||||||
|
|
||||||
|
# For testing contact types
|
||||||
|
match getattr(_request, "id", None):
|
||||||
|
case "securityContact":
|
||||||
|
mocked_result = self.mockSecurityContact
|
||||||
|
case "technicalContact":
|
||||||
|
mocked_result = self.mockTechnicalContact
|
||||||
|
case "adminContact":
|
||||||
|
mocked_result = self.mockAdministrativeContact
|
||||||
|
case "regContact":
|
||||||
|
mocked_result = self.mockRegistrantContact
|
||||||
|
case _:
|
||||||
|
# Default contact return
|
||||||
|
mocked_result = self.mockDataInfoContact
|
||||||
|
|
||||||
|
return MagicMock(res_data=[mocked_result])
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"""mock epp send function as this will fail locally"""
|
"""mock epp send function as this will fail locally"""
|
||||||
self.mockSendPatch = patch("registrar.models.domain.registry.send")
|
self.mockSendPatch = patch("registrar.models.domain.registry.send")
|
||||||
|
|
|
@ -1003,7 +1003,6 @@ class TestRegistrantDNSSEC(MockEppLib):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
# for the tests, need a domain in the unknown state
|
# for the tests, need a domain in the unknown state
|
||||||
self.domain, _ = Domain.objects.get_or_create(name="fake.gov")
|
self.domain, _ = Domain.objects.get_or_create(name="fake.gov")
|
||||||
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
Domain.objects.all().delete()
|
Domain.objects.all().delete()
|
||||||
|
|
|
@ -1072,11 +1072,15 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
self.domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
||||||
self.domain_dsdata, _ = Domain.objects.get_or_create(name="dnssec-dsdata.gov")
|
self.domain_dsdata, _ = Domain.objects.get_or_create(name="dnssec-dsdata.gov")
|
||||||
self.domain_multdsdata, _ = Domain.objects.get_or_create(name="dnssec-multdsdata.gov")
|
self.domain_multdsdata, _ = Domain.objects.get_or_create(
|
||||||
|
name="dnssec-multdsdata.gov"
|
||||||
|
)
|
||||||
self.domain_keydata, _ = Domain.objects.get_or_create(name="dnssec-keydata.gov")
|
self.domain_keydata, _ = Domain.objects.get_or_create(name="dnssec-keydata.gov")
|
||||||
# We could simply use domain (igoreville) but this will be more readable in tests
|
# We could simply use domain (igorville) but this will be more readable in tests
|
||||||
# that inherit this setUp
|
# that inherit this setUp
|
||||||
self.domain_dnssec_none, _ = Domain.objects.get_or_create(name="dnssec-none.gov")
|
self.domain_dnssec_none, _ = Domain.objects.get_or_create(
|
||||||
|
name="dnssec-none.gov"
|
||||||
|
)
|
||||||
self.domain_information, _ = DomainInformation.objects.get_or_create(
|
self.domain_information, _ = DomainInformation.objects.get_or_create(
|
||||||
creator=self.user, domain=self.domain
|
creator=self.user, domain=self.domain
|
||||||
)
|
)
|
||||||
|
@ -1099,13 +1103,17 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
user=self.user, domain=self.domain_dsdata, role=UserDomainRole.Roles.ADMIN
|
user=self.user, domain=self.domain_dsdata, role=UserDomainRole.Roles.ADMIN
|
||||||
)
|
)
|
||||||
UserDomainRole.objects.get_or_create(
|
UserDomainRole.objects.get_or_create(
|
||||||
user=self.user, domain=self.domain_multdsdata, role=UserDomainRole.Roles.ADMIN
|
user=self.user,
|
||||||
|
domain=self.domain_multdsdata,
|
||||||
|
role=UserDomainRole.Roles.ADMIN,
|
||||||
)
|
)
|
||||||
UserDomainRole.objects.get_or_create(
|
UserDomainRole.objects.get_or_create(
|
||||||
user=self.user, domain=self.domain_keydata, role=UserDomainRole.Roles.ADMIN
|
user=self.user, domain=self.domain_keydata, role=UserDomainRole.Roles.ADMIN
|
||||||
)
|
)
|
||||||
UserDomainRole.objects.get_or_create(
|
UserDomainRole.objects.get_or_create(
|
||||||
user=self.user, domain=self.domain_dnssec_none, role=UserDomainRole.Roles.ADMIN
|
user=self.user,
|
||||||
|
domain=self.domain_dnssec_none,
|
||||||
|
role=UserDomainRole.Roles.ADMIN,
|
||||||
)
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
@ -1177,7 +1185,7 @@ class TestDomainOverview(TestWithDomainPermissions, WebTest):
|
||||||
detail_page = home_page.click("Manage", index=0)
|
detail_page = home_page.click("Manage", index=0)
|
||||||
self.assertContains(detail_page, "igorville.gov")
|
self.assertContains(detail_page, "igorville.gov")
|
||||||
self.assertContains(detail_page, "Status")
|
self.assertContains(detail_page, "Status")
|
||||||
|
|
||||||
def test_domain_overview_blocked_for_ineligible_user(self):
|
def test_domain_overview_blocked_for_ineligible_user(self):
|
||||||
"""We could easily duplicate this test for all domain management
|
"""We could easily duplicate this test for all domain management
|
||||||
views, but a single url test should be solid enough since all domain
|
views, but a single url test should be solid enough since all domain
|
||||||
|
@ -1192,7 +1200,6 @@ class TestDomainOverview(TestWithDomainPermissions, WebTest):
|
||||||
|
|
||||||
|
|
||||||
class TestDomainUserManagement(TestDomainOverview):
|
class TestDomainUserManagement(TestDomainOverview):
|
||||||
|
|
||||||
def test_domain_user_management(self):
|
def test_domain_user_management(self):
|
||||||
response = self.client.get(
|
response = self.client.get(
|
||||||
reverse("domain-users", kwargs={"pk": self.domain.id})
|
reverse("domain-users", kwargs={"pk": self.domain.id})
|
||||||
|
@ -1350,9 +1357,9 @@ class TestDomainUserManagement(TestDomainOverview):
|
||||||
# Now load the home page and make sure our domain appears there
|
# Now load the home page and make sure our domain appears there
|
||||||
home_page = self.app.get(reverse("home"))
|
home_page = self.app.get(reverse("home"))
|
||||||
self.assertContains(home_page, self.domain.name)
|
self.assertContains(home_page, self.domain.name)
|
||||||
|
|
||||||
class TestDomainNameservers(TestDomainOverview):
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestDomainNameservers(TestDomainOverview):
|
||||||
def test_domain_nameservers(self):
|
def test_domain_nameservers(self):
|
||||||
"""Can load domain's nameservers page."""
|
"""Can load domain's nameservers page."""
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
|
@ -1403,9 +1410,9 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
# error text appears twice, once at the top of the page, once around
|
# error text appears twice, once at the top of the page, once around
|
||||||
# the field.
|
# the field.
|
||||||
self.assertContains(result, "This field is required", count=2, status_code=200)
|
self.assertContains(result, "This field is required", count=2, status_code=200)
|
||||||
|
|
||||||
class TestDomainAuthorizingOfficial(TestDomainOverview):
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestDomainAuthorizingOfficial(TestDomainOverview):
|
||||||
def test_domain_authorizing_official(self):
|
def test_domain_authorizing_official(self):
|
||||||
"""Can load domain's authorizing official page."""
|
"""Can load domain's authorizing official page."""
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
|
@ -1423,9 +1430,9 @@ class TestDomainAuthorizingOfficial(TestDomainOverview):
|
||||||
reverse("domain-authorizing-official", kwargs={"pk": self.domain.id})
|
reverse("domain-authorizing-official", kwargs={"pk": self.domain.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Testy")
|
self.assertContains(page, "Testy")
|
||||||
|
|
||||||
class TestDomainOrganization(TestDomainOverview):
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestDomainOrganization(TestDomainOverview):
|
||||||
def test_domain_org_name_address(self):
|
def test_domain_org_name_address(self):
|
||||||
"""Can load domain's org name and mailing address page."""
|
"""Can load domain's org name and mailing address page."""
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
|
@ -1461,9 +1468,9 @@ class TestDomainOrganization(TestDomainOverview):
|
||||||
|
|
||||||
self.assertContains(success_result_page, "Not igorville")
|
self.assertContains(success_result_page, "Not igorville")
|
||||||
self.assertContains(success_result_page, "Faketown")
|
self.assertContains(success_result_page, "Faketown")
|
||||||
|
|
||||||
class TestDomainContactInformation(TestDomainOverview):
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestDomainContactInformation(TestDomainOverview):
|
||||||
def test_domain_your_contact_information(self):
|
def test_domain_your_contact_information(self):
|
||||||
"""Can load domain's your contact information page."""
|
"""Can load domain's your contact information page."""
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
|
@ -1479,9 +1486,9 @@ class TestDomainContactInformation(TestDomainOverview):
|
||||||
reverse("domain-your-contact-information", kwargs={"pk": self.domain.id})
|
reverse("domain-your-contact-information", kwargs={"pk": self.domain.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Testy")
|
self.assertContains(page, "Testy")
|
||||||
|
|
||||||
class TestDomainSecurityEmail(TestDomainOverview):
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestDomainSecurityEmail(TestDomainOverview):
|
||||||
def test_domain_security_email_existing_security_contact(self):
|
def test_domain_security_email_existing_security_contact(self):
|
||||||
"""Can load domain's security email page."""
|
"""Can load domain's security email page."""
|
||||||
self.mockSendPatch = patch("registrar.models.domain.registry.send")
|
self.mockSendPatch = patch("registrar.models.domain.registry.send")
|
||||||
|
@ -1546,47 +1553,50 @@ class TestDomainSecurityEmail(TestDomainOverview):
|
||||||
self.assertContains(
|
self.assertContains(
|
||||||
success_page, "The security email for this domain has been updated"
|
success_page, "The security email for this domain has been updated"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestDomainDNSSEC(TestDomainOverview):
|
class TestDomainDNSSEC(TestDomainOverview):
|
||||||
|
|
||||||
"""MockEPPLib is already inherited."""
|
"""MockEPPLib is already inherited."""
|
||||||
|
|
||||||
def test_dnssec_page_refreshes_enable_button(self):
|
def test_dnssec_page_refreshes_enable_button(self):
|
||||||
"""DNSSEC overview page loads when domain has no DNSSEC data
|
"""DNSSEC overview page loads when domain has no DNSSEC data
|
||||||
and shows a 'Enable DNSSEC' button. When button is clicked the template
|
and shows a 'Enable DNSSEC' button. When button is clicked the template
|
||||||
updates. When user navigates away then comes back to the page, the
|
updates. When user navigates away then comes back to the page, the
|
||||||
'Enable DNSSEC' button is shown again."""
|
'Enable DNSSEC' button is shown again."""
|
||||||
# home_page = self.app.get("/")
|
# home_page = self.app.get("/")
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id})
|
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Enable DNSSEC")
|
self.assertContains(page, "Enable DNSSEC")
|
||||||
|
|
||||||
# Prepare the data for the POST request
|
# Prepare the data for the POST request
|
||||||
post_data = {
|
post_data = {
|
||||||
'enable_dnssec': 'Enable DNSSEC', # Replace with the actual form field and value
|
"enable_dnssec": "Enable DNSSEC",
|
||||||
# Add other form fields as needed
|
|
||||||
}
|
}
|
||||||
updated_page = self.client.post(reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id}), post_data, follow=True)
|
updated_page = self.client.post(
|
||||||
|
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id}),
|
||||||
|
post_data,
|
||||||
|
follow=True,
|
||||||
|
)
|
||||||
|
|
||||||
self.assertEqual(updated_page.status_code, 200)
|
self.assertEqual(updated_page.status_code, 200)
|
||||||
|
|
||||||
self.assertContains(updated_page, "Add DS Data")
|
self.assertContains(updated_page, "Add DS Data")
|
||||||
self.assertContains(updated_page, "Add Key Data")
|
self.assertContains(updated_page, "Add Key Data")
|
||||||
|
|
||||||
self.app.get("/")
|
self.app.get("/")
|
||||||
|
|
||||||
back_to_page = self.client.get(
|
back_to_page = self.client.get(
|
||||||
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id})
|
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id})
|
||||||
)
|
)
|
||||||
self.assertContains(back_to_page, "Enable DNSSEC")
|
self.assertContains(back_to_page, "Enable DNSSEC")
|
||||||
|
|
||||||
def test_dnssec_page_loads_with_data_in_domain(self):
|
def test_dnssec_page_loads_with_data_in_domain(self):
|
||||||
"""DNSSEC overview page loads when domain has DNSSEC data
|
"""DNSSEC overview page loads when domain has DNSSEC data
|
||||||
and the template contains a button to disable DNSSEC."""
|
and the template contains a button to disable DNSSEC."""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec", kwargs={"pk": self.domain_multdsdata.id})
|
reverse("domain-dns-dnssec", kwargs={"pk": self.domain_multdsdata.id})
|
||||||
)
|
)
|
||||||
|
@ -1594,63 +1604,71 @@ class TestDomainDNSSEC(TestDomainOverview):
|
||||||
|
|
||||||
# Prepare the data for the POST request
|
# Prepare the data for the POST request
|
||||||
post_data = {
|
post_data = {
|
||||||
'disable_dnssec': 'Disable DNSSEC', # Replace with the actual form field and value
|
"disable_dnssec": "Disable DNSSEC",
|
||||||
}
|
}
|
||||||
updated_page = self.client.post(reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id}), post_data, follow=True)
|
updated_page = self.client.post(
|
||||||
|
reverse("domain-dns-dnssec", kwargs={"pk": self.domain.id}),
|
||||||
|
post_data,
|
||||||
|
follow=True,
|
||||||
|
)
|
||||||
|
|
||||||
self.assertEqual(updated_page.status_code, 200)
|
self.assertEqual(updated_page.status_code, 200)
|
||||||
|
|
||||||
self.assertContains(updated_page, "Enable DNSSEC")
|
self.assertContains(updated_page, "Enable DNSSEC")
|
||||||
|
|
||||||
def test_ds_form_loads_with_no_domain_data(self):
|
def test_ds_form_loads_with_no_domain_data(self):
|
||||||
"""DNSSEC Add DS Data page loads when there is no
|
"""DNSSEC Add DS Data page loads when there is no
|
||||||
domain DNSSEC data and shows a button to Add DS Data record"""
|
domain DNSSEC data and shows a button to Add DS Data record"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_dnssec_none.id})
|
reverse(
|
||||||
|
"domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_dnssec_none.id}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Add DS Data record")
|
self.assertContains(page, "Add DS Data record")
|
||||||
|
|
||||||
def test_ds_form_loads_with_ds_data(self):
|
def test_ds_form_loads_with_ds_data(self):
|
||||||
"""DNSSEC Add DS Data page loads when there is
|
"""DNSSEC Add DS Data page loads when there is
|
||||||
domain DNSSEC DS data and shows the data"""
|
domain DNSSEC DS data and shows the data"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_dsdata.id})
|
reverse("domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_dsdata.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "DS Data record 1")
|
self.assertContains(page, "DS Data record 1")
|
||||||
|
|
||||||
def test_ds_form_loads_with_key_data(self):
|
def test_ds_form_loads_with_key_data(self):
|
||||||
"""DNSSEC Add DS Data page loads when there is
|
"""DNSSEC Add DS Data page loads when there is
|
||||||
domain DNSSEC KEY data and shows an alert"""
|
domain DNSSEC KEY data and shows an alert"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_keydata.id})
|
reverse("domain-dns-dnssec-dsdata", kwargs={"pk": self.domain_keydata.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Warning, you cannot add DS Data")
|
self.assertContains(page, "Warning, you cannot add DS Data")
|
||||||
|
|
||||||
def test_key_form_loads_with_no_domain_data(self):
|
def test_key_form_loads_with_no_domain_data(self):
|
||||||
"""DNSSEC Add Key Data page loads when there is no
|
"""DNSSEC Add Key Data page loads when there is no
|
||||||
domain DNSSEC data and shows a button to Add DS Key record"""
|
domain DNSSEC data and shows a button to Add DS Key record"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-keydata", kwargs={"pk": self.domain_dnssec_none.id})
|
reverse(
|
||||||
|
"domain-dns-dnssec-keydata", kwargs={"pk": self.domain_dnssec_none.id}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
self.assertContains(page, "Add DS Key record")
|
self.assertContains(page, "Add DS Key record")
|
||||||
|
|
||||||
def test_key_form_loads_with_key_data(self):
|
def test_key_form_loads_with_key_data(self):
|
||||||
"""DNSSEC Add Key Data page loads when there is
|
"""DNSSEC Add Key Data page loads when there is
|
||||||
domain DNSSEC Key data and shows the data"""
|
domain DNSSEC Key data and shows the data"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-keydata", kwargs={"pk": self.domain_keydata.id})
|
reverse("domain-dns-dnssec-keydata", kwargs={"pk": self.domain_keydata.id})
|
||||||
)
|
)
|
||||||
self.assertContains(page, "DS Data record 1")
|
self.assertContains(page, "DS Data record 1")
|
||||||
|
|
||||||
def test_key_form_loads_with_ds_data(self):
|
def test_key_form_loads_with_ds_data(self):
|
||||||
"""DNSSEC Add Key Data page loads when there is
|
"""DNSSEC Add Key Data page loads when there is
|
||||||
domain DNSSEC DS data and shows an alert"""
|
domain DNSSEC DS data and shows an alert"""
|
||||||
|
|
||||||
page = self.client.get(
|
page = self.client.get(
|
||||||
reverse("domain-dns-dnssec-keydata", kwargs={"pk": self.domain_dsdata.id})
|
reverse("domain-dns-dnssec-keydata", kwargs={"pk": self.domain_dsdata.id})
|
||||||
)
|
)
|
||||||
|
@ -1676,7 +1694,9 @@ class TestDomainDNSSEC(TestDomainOverview):
|
||||||
)
|
)
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
page = result.follow()
|
page = result.follow()
|
||||||
self.assertContains(page, "The DS Data records for this domain have been updated.")
|
self.assertContains(
|
||||||
|
page, "The DS Data records for this domain have been updated."
|
||||||
|
)
|
||||||
|
|
||||||
def test_ds_data_form_invalid(self):
|
def test_ds_data_form_invalid(self):
|
||||||
"""DS Data form errors with invalid data
|
"""DS Data form errors with invalid data
|
||||||
|
@ -1718,7 +1738,9 @@ class TestDomainDNSSEC(TestDomainOverview):
|
||||||
)
|
)
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
page = result.follow()
|
page = result.follow()
|
||||||
self.assertContains(page, "The Key Data records for this domain have been updated.")
|
self.assertContains(
|
||||||
|
page, "The Key Data records for this domain have been updated."
|
||||||
|
)
|
||||||
|
|
||||||
def test_key_data_form_invalid(self):
|
def test_key_data_form_invalid(self):
|
||||||
"""Key Data form errors with invalid data
|
"""Key Data form errors with invalid data
|
||||||
|
@ -1739,8 +1761,8 @@ class TestDomainDNSSEC(TestDomainOverview):
|
||||||
# error text appears twice, once at the top of the page, once around
|
# error text appears twice, once at the top of the page, once around
|
||||||
# the field.
|
# the field.
|
||||||
self.assertContains(result, "Pub key is required", count=2, status_code=200)
|
self.assertContains(result, "Pub key is required", count=2, status_code=200)
|
||||||
|
|
||||||
|
|
||||||
class TestApplicationStatus(TestWithUser, WebTest):
|
class TestApplicationStatus(TestWithUser, WebTest):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
|
@ -233,20 +233,24 @@ class DomainDNSSECView(DomainPermissionView, FormMixin):
|
||||||
|
|
||||||
template_name = "domain_dnssec.html"
|
template_name = "domain_dnssec.html"
|
||||||
form_class = DomainDnssecForm
|
form_class = DomainDnssecForm
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
"""The initial value for the form (which is a formset here)."""
|
"""The initial value for the form (which is a formset here)."""
|
||||||
self.domain = self.get_object()
|
self.domain = self.get_object()
|
||||||
|
|
||||||
has_dnssec_records = self.domain.dnssecdata is not None
|
|
||||||
|
|
||||||
# Create HTML for the buttons
|
|
||||||
modal_button = '<button type="submit" class="usa-button" name="disable_dnssec">Disable DNSSEC</button>'
|
|
||||||
|
|
||||||
context['modal_button'] = modal_button
|
has_dnssec_records = self.domain.dnssecdata is not None
|
||||||
context['has_dnssec_records'] = has_dnssec_records
|
|
||||||
context['dnssec_enabled'] = self.request.session.pop('dnssec_enabled', False)
|
# Create HTML for the buttons
|
||||||
|
modal_button = (
|
||||||
|
'<button type="submit" '
|
||||||
|
'class="usa-button" '
|
||||||
|
'name="disable_dnssec">Disable DNSSEC</button>'
|
||||||
|
)
|
||||||
|
|
||||||
|
context["modal_button"] = modal_button
|
||||||
|
context["has_dnssec_records"] = has_dnssec_records
|
||||||
|
context["dnssec_enabled"] = self.request.session.pop("dnssec_enabled", False)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -255,27 +259,24 @@ class DomainDNSSECView(DomainPermissionView, FormMixin):
|
||||||
return reverse("domain-dns-dnssec", kwargs={"pk": self.domain.pk})
|
return reverse("domain-dns-dnssec", kwargs={"pk": self.domain.pk})
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
"""Form submission posts to this view.
|
"""Form submission posts to this view."""
|
||||||
"""
|
|
||||||
self.domain = self.get_object()
|
self.domain = self.get_object()
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
if 'disable_dnssec' in request.POST:
|
if "disable_dnssec" in request.POST:
|
||||||
try:
|
try:
|
||||||
self.domain.dnssecdata = {}
|
self.domain.dnssecdata = {}
|
||||||
except RegistryError as err:
|
except RegistryError as err:
|
||||||
errmsg = "Error removing existing DNSSEC record(s)."
|
errmsg = "Error removing existing DNSSEC record(s)."
|
||||||
logger.error(errmsg + ": " + err)
|
logger.error(errmsg + ": " + err)
|
||||||
messages.error(
|
messages.error(self.request, errmsg)
|
||||||
self.request, errmsg
|
request.session["dnssec_ds_confirmed"] = False
|
||||||
)
|
request.session["dnssec_key_confirmed"] = False
|
||||||
request.session['dnssec_ds_confirmed'] = False
|
elif "enable_dnssec" in request.POST:
|
||||||
request.session['dnssec_key_confirmed'] = False
|
request.session["dnssec_enabled"] = True
|
||||||
elif 'enable_dnssec' in request.POST:
|
request.session["dnssec_ds_confirmed"] = False
|
||||||
request.session['dnssec_enabled'] = True
|
request.session["dnssec_key_confirmed"] = False
|
||||||
request.session['dnssec_ds_confirmed'] = False
|
|
||||||
request.session['dnssec_key_confirmed'] = False
|
|
||||||
|
|
||||||
return self.form_valid(form)
|
return self.form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
@ -292,21 +293,28 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
domain = self.get_object()
|
domain = self.get_object()
|
||||||
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
||||||
initial_data = []
|
initial_data = []
|
||||||
|
|
||||||
if dnssecdata is not None:
|
|
||||||
|
|
||||||
|
if dnssecdata is not None:
|
||||||
if dnssecdata.keyData is not None:
|
if dnssecdata.keyData is not None:
|
||||||
# TODO: Throw an error
|
# TODO: Throw an error
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if dnssecdata.dsData is not None:
|
if dnssecdata.dsData is not None:
|
||||||
# Add existing nameservers as initial data
|
# Add existing nameservers as initial data
|
||||||
initial_data.extend({"key_tag": record.keyTag, "algorithm": record.alg, "digest_type": record.digestType, "digest": record.digest} for record in dnssecdata.dsData)
|
initial_data.extend(
|
||||||
|
{
|
||||||
|
"key_tag": record.keyTag,
|
||||||
|
"algorithm": record.alg,
|
||||||
|
"digest_type": record.digestType,
|
||||||
|
"digest": record.digest,
|
||||||
|
}
|
||||||
|
for record in dnssecdata.dsData
|
||||||
|
)
|
||||||
|
|
||||||
# Ensure at least 3 fields, filled or empty
|
# Ensure at least 3 fields, filled or empty
|
||||||
while len(initial_data) == 0:
|
while len(initial_data) == 0:
|
||||||
initial_data.append({})
|
initial_data.append({})
|
||||||
|
|
||||||
return initial_data
|
return initial_data
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
|
@ -319,16 +327,18 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
# use "formset" instead of "form" for the key
|
# use "formset" instead of "form" for the key
|
||||||
context["formset"] = context.pop("form")
|
context["formset"] = context.pop("form")
|
||||||
|
|
||||||
# set the dnssec_ds_confirmed flag in the context for this view
|
# set the dnssec_ds_confirmed flag in the context for this view
|
||||||
# based either on the existence of DS Data in the domain,
|
# based either on the existence of DS Data in the domain,
|
||||||
# or on the flag stored in the session
|
# or on the flag stored in the session
|
||||||
domain = self.get_object()
|
domain = self.get_object()
|
||||||
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
||||||
|
|
||||||
if dnssecdata is not None and dnssecdata.dsData is not None:
|
if dnssecdata is not None and dnssecdata.dsData is not None:
|
||||||
self.request.session['dnssec_ds_confirmed'] = True
|
self.request.session["dnssec_ds_confirmed"] = True
|
||||||
|
|
||||||
context['dnssec_ds_confirmed'] = self.request.session.get('dnssec_ds_confirmed', False)
|
context["dnssec_ds_confirmed"] = self.request.session.get(
|
||||||
|
"dnssec_ds_confirmed", False
|
||||||
|
)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
|
@ -336,14 +346,14 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
formset = self.get_form()
|
formset = self.get_form()
|
||||||
|
|
||||||
if 'confirm-ds' in request.POST:
|
if "confirm-ds" in request.POST:
|
||||||
request.session['dnssec_ds_confirmed'] = True
|
request.session["dnssec_ds_confirmed"] = True
|
||||||
request.session['dnssec_key_confirmed'] = False
|
request.session["dnssec_key_confirmed"] = False
|
||||||
return super().form_valid(formset)
|
return super().form_valid(formset)
|
||||||
|
|
||||||
if 'btn-cancel-click' in request.POST:
|
if "btn-cancel-click" in request.POST:
|
||||||
return redirect('/', {'formset': formset},RequestContext(request))
|
return redirect("/", {"formset": formset}, RequestContext(request))
|
||||||
|
|
||||||
if formset.is_valid():
|
if formset.is_valid():
|
||||||
return self.form_valid(formset)
|
return self.form_valid(formset)
|
||||||
else:
|
else:
|
||||||
|
@ -353,11 +363,12 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
"""The formset is valid, perform something with it."""
|
"""The formset is valid, perform something with it."""
|
||||||
|
|
||||||
# Set the nameservers from the formset
|
# Set the nameservers from the formset
|
||||||
dnssecdata = {"dsData":[]}
|
dnssecdata = {"dsData": []}
|
||||||
|
|
||||||
for form in formset:
|
for form in formset:
|
||||||
try:
|
try:
|
||||||
# if 'delete' not in form.cleaned_data or form.cleaned_data['delete'] == False:
|
# if 'delete' not in form.cleaned_data
|
||||||
|
# or form.cleaned_data['delete'] == False:
|
||||||
dsrecord = {
|
dsrecord = {
|
||||||
"keyTag": form.cleaned_data["key_tag"],
|
"keyTag": form.cleaned_data["key_tag"],
|
||||||
"alg": form.cleaned_data["algorithm"],
|
"alg": form.cleaned_data["algorithm"],
|
||||||
|
@ -378,9 +389,7 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
errmsg = "Error updating DNSSEC data in the registry."
|
errmsg = "Error updating DNSSEC data in the registry."
|
||||||
logger.error(errmsg)
|
logger.error(errmsg)
|
||||||
logger.error(err)
|
logger.error(err)
|
||||||
messages.error(
|
messages.error(self.request, errmsg)
|
||||||
self.request, errmsg
|
|
||||||
)
|
|
||||||
return self.form_invalid(formset)
|
return self.form_invalid(formset)
|
||||||
else:
|
else:
|
||||||
messages.success(
|
messages.success(
|
||||||
|
@ -388,7 +397,6 @@ class DomainDsdataView(DomainPermissionView, FormMixin):
|
||||||
)
|
)
|
||||||
# superclass has the redirect
|
# superclass has the redirect
|
||||||
return super().form_valid(formset)
|
return super().form_valid(formset)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DomainKeydataView(DomainPermissionView, FormMixin):
|
class DomainKeydataView(DomainPermissionView, FormMixin):
|
||||||
|
@ -404,21 +412,28 @@ class DomainKeydataView(DomainPermissionView, FormMixin):
|
||||||
domain = self.get_object()
|
domain = self.get_object()
|
||||||
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
||||||
initial_data = []
|
initial_data = []
|
||||||
|
|
||||||
if dnssecdata is not None:
|
|
||||||
|
|
||||||
|
if dnssecdata is not None:
|
||||||
if dnssecdata.dsData is not None:
|
if dnssecdata.dsData is not None:
|
||||||
# TODO: Throw an error
|
# TODO: Throw an error
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if dnssecdata.keyData is not None:
|
if dnssecdata.keyData is not None:
|
||||||
# Add existing keydata as initial data
|
# Add existing keydata as initial data
|
||||||
initial_data.extend({"flag": record.flags, "protocol": record.protocol, "algorithm": record.alg, "pub_key": record.pubKey} for record in dnssecdata.keyData)
|
initial_data.extend(
|
||||||
|
{
|
||||||
|
"flag": record.flags,
|
||||||
|
"protocol": record.protocol,
|
||||||
|
"algorithm": record.alg,
|
||||||
|
"pub_key": record.pubKey,
|
||||||
|
}
|
||||||
|
for record in dnssecdata.keyData
|
||||||
|
)
|
||||||
|
|
||||||
# Ensure at least 3 fields, filled or empty
|
# Ensure at least 3 fields, filled or empty
|
||||||
while len(initial_data) == 0:
|
while len(initial_data) == 0:
|
||||||
initial_data.append({})
|
initial_data.append({})
|
||||||
|
|
||||||
return initial_data
|
return initial_data
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
|
@ -431,32 +446,34 @@ class DomainKeydataView(DomainPermissionView, FormMixin):
|
||||||
# use "formset" instead of "form" for the key
|
# use "formset" instead of "form" for the key
|
||||||
context["formset"] = context.pop("form")
|
context["formset"] = context.pop("form")
|
||||||
|
|
||||||
# set the dnssec_key_confirmed flag in the context for this view
|
# set the dnssec_key_confirmed flag in the context for this view
|
||||||
# based either on the existence of Key Data in the domain,
|
# based either on the existence of Key Data in the domain,
|
||||||
# or on the flag stored in the session
|
# or on the flag stored in the session
|
||||||
domain = self.get_object()
|
domain = self.get_object()
|
||||||
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
dnssecdata: extensions.DNSSECExtension = domain.dnssecdata
|
||||||
|
|
||||||
if dnssecdata is not None and dnssecdata.keyData is not None:
|
if dnssecdata is not None and dnssecdata.keyData is not None:
|
||||||
self.request.session['dnssec_key_confirmed'] = True
|
self.request.session["dnssec_key_confirmed"] = True
|
||||||
|
|
||||||
context['dnssec_key_confirmed'] = self.request.session.get('dnssec_key_confirmed', False)
|
context["dnssec_key_confirmed"] = self.request.session.get(
|
||||||
|
"dnssec_key_confirmed", False
|
||||||
|
)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
"""Formset submission posts to this view."""
|
"""Formset submission posts to this view."""
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
formset = self.get_form()
|
formset = self.get_form()
|
||||||
|
|
||||||
if 'confirm-key' in request.POST:
|
if "confirm-key" in request.POST:
|
||||||
request.session['dnssec_key_confirmed'] = True
|
request.session["dnssec_key_confirmed"] = True
|
||||||
request.session['dnssec_ds_confirmed'] = False
|
request.session["dnssec_ds_confirmed"] = False
|
||||||
self.object.save()
|
self.object.save()
|
||||||
return super().form_valid(formset)
|
return super().form_valid(formset)
|
||||||
|
|
||||||
if 'btn-cancel-click' in request.POST:
|
if "btn-cancel-click" in request.POST:
|
||||||
return redirect('/', {'formset': formset},RequestContext(request))
|
return redirect("/", {"formset": formset}, RequestContext(request))
|
||||||
|
|
||||||
if formset.is_valid():
|
if formset.is_valid():
|
||||||
return self.form_valid(formset)
|
return self.form_valid(formset)
|
||||||
else:
|
else:
|
||||||
|
@ -466,11 +483,12 @@ class DomainKeydataView(DomainPermissionView, FormMixin):
|
||||||
"""The formset is valid, perform something with it."""
|
"""The formset is valid, perform something with it."""
|
||||||
|
|
||||||
# Set the nameservers from the formset
|
# Set the nameservers from the formset
|
||||||
dnssecdata = {"keyData":[]}
|
dnssecdata = {"keyData": []}
|
||||||
|
|
||||||
for form in formset:
|
for form in formset:
|
||||||
try:
|
try:
|
||||||
# if 'delete' not in form.cleaned_data or form.cleaned_data['delete'] == False:
|
# if 'delete' not in form.cleaned_data
|
||||||
|
# or form.cleaned_data['delete'] == False:
|
||||||
keyrecord = {
|
keyrecord = {
|
||||||
"flags": form.cleaned_data["flag"],
|
"flags": form.cleaned_data["flag"],
|
||||||
"protocol": form.cleaned_data["protocol"],
|
"protocol": form.cleaned_data["protocol"],
|
||||||
|
@ -490,9 +508,7 @@ class DomainKeydataView(DomainPermissionView, FormMixin):
|
||||||
errmsg = "Error updating DNSSEC data in the registry."
|
errmsg = "Error updating DNSSEC data in the registry."
|
||||||
logger.error(errmsg)
|
logger.error(errmsg)
|
||||||
logger.error(err)
|
logger.error(err)
|
||||||
messages.error(
|
messages.error(self.request, errmsg)
|
||||||
self.request, errmsg
|
|
||||||
)
|
|
||||||
return self.form_invalid(formset)
|
return self.form_invalid(formset)
|
||||||
else:
|
else:
|
||||||
messages.success(
|
messages.success(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue