From d745e0aaa844645ec3c332a735a39fa306f8eaeb Mon Sep 17 00:00:00 2001 From: Ehsan Faraji Jalal Date: Mon, 9 Oct 2023 11:26:20 +1300 Subject: [PATCH] Fix typo in dnssec and fix other bugs (#57) --- pyepp/__init__.py | 2 +- pyepp/domain.py | 43 +++++++-------- tests/test_domain.py | 125 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 145 insertions(+), 25 deletions(-) diff --git a/pyepp/__init__.py b/pyepp/__init__.py index 5ece229..d3db8c6 100644 --- a/pyepp/__init__.py +++ b/pyepp/__init__.py @@ -1,6 +1,6 @@ """ PyEPP Package """ -__version__ = "0.0.4-alpha.4" +__version__ = "0.0.5" from pyepp.epp import EppCommunicator, EppResultCode, EppCommunicatorException diff --git a/pyepp/domain.py b/pyepp/domain.py index 21097a0..c15a755 100644 --- a/pyepp/domain.py +++ b/pyepp/domain.py @@ -85,8 +85,7 @@ class DomainData: expiry_date: Optional[str] = '' transfer_date: Optional[str] = '' password: Optional[str] = '' - dns_sec: Optional[DSRecordData] = None - dns_key: Optional[DSRecordKeyData] = None + dns_sec: Optional[list[DSRecordData]] = None class Domain(BaseCommand): @@ -173,26 +172,28 @@ def info(self, domain_name: str, client_transaction_id: Optional[str] = None) -> 'transfer_date': raw_response.find('trDate').text if raw_response.find('trDate') else None, 'password': raw_response.find('pw').text if raw_response.find('pw') else None, 'period': None, - 'dns_sec': DSRecordData(**{ - 'key_tag': raw_response.find('keyTag').text, - 'algorithm': raw_response.find('alg').text, - 'digest_type': raw_response.find('digestType').text, - 'digest': raw_response.find('digest').text, - 'dns_key': { - 'flag': raw_response.find('flag').text, - 'protocol': raw_response.find('protocol').text, - 'algorithm': raw_response.find('algorithm').text, - 'public_key': raw_response.find('public_key').text, - } if raw_response.find('keyData') else None - }) if raw_response.find('dsData') else None, - 'dns_key': DSRecordKeyData(**{ - 'flag': raw_response.find('flag').text, - 'protocol': raw_response.find('protocol').text, - 'algorithm': raw_response.find('algorithm').text, - 'public_key': raw_response.find('public_key').text, - }) if raw_response.find('keyData') else None + 'dns_sec': None, } + dns_sec = [] + all_ds_data = raw_response.find_all('dsData') + for ds_data in all_ds_data: + dns_sec.append(DSRecordData(**{ + 'key_tag': ds_data.find('keyTag').text, + 'algorithm': ds_data.find('alg').text, + 'digest_type': ds_data.find('digestType').text, + 'digest': ds_data.find('digest').text, + 'dns_key': { + 'flag': ds_data.find('flags').text, + 'protocol': ds_data.find('protocol').text, + 'algorithm': ds_data.find('alg').text, + 'public_key': ds_data.find('pubKey').text, + } if ds_data.find('keyData') else None + })) + + if dns_sec: + result_data['dns_sec'] = dns_sec + result.result_data = DomainData(**result_data) return result @@ -272,7 +273,7 @@ def transfer(self, domain_name: str, password: str, period: Optional[int] = None def update(self, domain_name: str, registrant: Optional[str] = None, admin: Optional[str] = None, - tech: Optional[str] = None, + tech: Optional[str] = None, add_billings: Optional[list[str]] = None, remove_billings: Optional[list[str]] = None, add_statues: Optional[list[tuple]] = None, diff --git a/tests/test_domain.py b/tests/test_domain.py index 869ca6c..503f437 100644 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -113,6 +113,54 @@ def test_info(self) -> None: '2024-02-23T21:56:22.713Z\n' '\n' '\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '1\n' + '4ffb0f3f0fb5edbaa0067d1cd94bb545249cfea2\n' + '\n' + '257\n' + '3\n' + '14\n' + '1fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '2\n' + '024c96b094aaad3892babb303e02587f7d6f8f749fef9ff642e3bb8bfc2e0dcf\n' + '\n' + '257\n' + '3\n' + '13\n' + '2fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '4\n' + '14d92f9f1e82c0906e2003b9e3401de4024f705724ef14d848fc2708d5714d5572db040faa3e317753e6577c7e70cbb8\n' + '\n' + '257\n' + '3\n' + '13\n' + '3fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + 'standard\n' + '\n' + '\n' '\n' 'CIRA-000063163743-0000000003\n' '\n' @@ -148,11 +196,58 @@ def test_info(self) -> None: '2024-02-23T21:56:22.713Z\n' '\n' '\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '1\n' + '4ffb0f3f0fb5edbaa0067d1cd94bb545249cfea2\n' + '\n' + '257\n' + '3\n' + '14\n' + '1fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '2\n' + '024c96b094aaad3892babb303e02587f7d6f8f749fef9ff642e3bb8bfc2e0dcf\n' + '\n' + '257\n' + '3\n' + '13\n' + '2fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '17600\n' + '13\n' + '4\n' + '14d92f9f1e82c0906e2003b9e3401de4024f705724ef14d848fc2708d5714d5572db040faa3e317753e6577c7e70cbb8\n' + '\n' + '257\n' + '3\n' + '13\n' + '3fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg==\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + 'standard\n' + '\n' + '\n' '\n' 'CIRA-000063163743-0000000003\n' '\n' '', - 'reason': None, 'repository_object_id': '9204701-INZ', 'result_data': DomainData(domain_name='internet.nz', sponsoring_client_id='933', @@ -169,13 +264,37 @@ def test_info(self) -> None: expiry_date='2024-02-23T21:56:22.713Z', transfer_date=None, password=None, - period=None), + period=None, + dns_sec=[DSRecordData(key_tag='17600', + algorithm='13', + digest_type='1', + digest='4ffb0f3f0fb5edbaa0067d1cd94bb545249cfea2', + dns_key={'algorithm': '13', + 'flag': '257', + 'protocol': '3', + 'public_key': '1fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg=='}), + DSRecordData(key_tag='17600', + algorithm='13', + digest_type='2', + digest='024c96b094aaad3892babb303e02587f7d6f8f749fef9ff642e3bb8bfc2e0dcf', + dns_key={'algorithm': '13', + 'flag': '257', + 'protocol': '3', + 'public_key': '2fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg=='}), + DSRecordData(key_tag='17600', + algorithm='13', + digest_type='4', + digest='14d92f9f1e82c0906e2003b9e3401de4024f705724ef14d848fc2708d5714d5572db040faa3e317753e6577c7e70cbb8', + dns_key={'algorithm': '13', + 'flag': '257', + 'protocol': '3', + 'public_key': '3fHiagyGUIxsDmeYaaKOWceffQn7QTaCwM1y6Oy1zYRpndxu/6WAHM99p/X/dM7t+RcGahZ8+GlX5JHkbyaMllg=='})] + ), 'server_transaction_id': 'CIRA-000063163743-0000000003'}) domain.execute = MagicMock(return_value=execute_result) result = domain.info('internet.nz') - self.assertEqual(result, expected_result) def test_create(self) -> None: