Skip to content

Commit

Permalink
Merge 290380b into 7d9c79b
Browse files Browse the repository at this point in the history
  • Loading branch information
rembik authored Dec 14, 2018
2 parents 7d9c79b + 290380b commit 0b0f856
Show file tree
Hide file tree
Showing 58 changed files with 58,430 additions and 0 deletions.
1 change: 1 addition & 0 deletions CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ lexicon/providers/gehirn.py @chibiegg
lexicon/providers/glesys.py @hecd
lexicon/providers/godaddy.py @adferrand
lexicon/providers/henet.py @hank
lexicon/providers/hetzner.py @rembik
lexicon/providers/internetbs.py @edausq
lexicon/providers/inwx.py @lociii
lexicon/providers/linode.py @trinopoty
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ The current supported providers are:
- GoDaddy ([docs](https://developer.godaddy.com/getstarted#access))
- Google Cloud DNS ([docs](https://cloud.google.com/dns/api/v1/))
- Hurricane Electric DNS ([docs](https://dns.he.net/))
- Hetzner ([docs](https://wiki.hetzner.de/index.php/DNS_Zonendatei/en))
- Internet.bs ([docs](https://internetbs.net/ResellerRegistrarDomainNameAPI))
- INWX ([docs](https://www.inwx.de/en/offer/api))
- Linode ([docs](https://www.linode.com/api/dns))
Expand Down
716 changes: 716 additions & 0 deletions lexicon/providers/hetzner.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions optional-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@
-e .[transip]
-e .[plesk]
-e .[henet]
-e .[hetzner]
-e .[easyname]
-e .[localzone]
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
'transip': ['transip>=0.3.0'],
'plesk': ['xmltodict'],
'henet': ['beautifulsoup4'],
'hetzner': ['dnspython>=1.15.0','beautifulsoup4'],
'easyname': ['beautifulsoup4'],
'localzone': ['localzone'],
},
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

77 changes: 77 additions & 0 deletions tests/providers/test_hetzner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Test for one implementation of the interface
from lexicon.providers.hetzner import Provider
from integration_tests import IntegrationTests
from unittest import TestCase
import pytest

import os
from bs4 import BeautifulSoup

# Hook into testing framework by inheriting unittest.TestCase and reuse
# the tests which *each and every* implementation of the interface must
# pass, by inheritance from integration_tests.IntegrationTests
class HetznerRobotProviderTests(TestCase, IntegrationTests):

Provider = Provider
provider_name = 'hetzner'
provider_variant = 'Robot'
domain = 'rimek.info'

def _filter_post_data_parameters(self):
return ['_username','_password', '_csrf_token']

def _filter_headers(self):
return ['Cookie']

def _filter_response(self, response):
for cookie in ['set-cookie', 'Set-Cookie']:
if cookie in response['headers']:
del response['headers'][cookie]
if os.environ.get('LEXICON_LIVE_TESTS', 'false') == 'true':
filter_body = BeautifulSoup(response['body']['string'], 'html.parser').find(id='center_col')
if not filter_body:
filter_body = BeautifulSoup(response['body']['string'], 'html.parser').find(id='login-form')
response['body']['string'] = str(filter_body).encode('UTF-8')
return response

def _test_parameters_overrides(self):
options = {'auth_account': 'robot',
'concatenate': 'no',
'propagated': 'no',
'latency': 1}
return options

class HetznerKonsoleHProviderTests(TestCase, IntegrationTests):

Provider = Provider
provider_name = 'hetzner'
provider_variant = 'KonsoleH'
domain = 'bettilaila.com'

def _filter_post_data_parameters(self):
return ['login_user_inputbox','login_pass_inputbox', '_csrf_name', '_csrf_token']

def _filter_headers(self):
return ['Cookie']

def _filter_response(self, response):
for cookie in ['set-cookie', 'Set-Cookie']:
if cookie in response['headers']:
del response['headers'][cookie]
if os.environ.get('LEXICON_LIVE_TESTS', 'false') == 'true':
filter_body = BeautifulSoup(response['body']['string'], 'html.parser').find(id='content')
if not filter_body:
filter_body = BeautifulSoup(response['body']['string'], 'html.parser').find(id='loginform')
response['body']['string'] = str(filter_body).encode('UTF-8')
return response

def _test_parameters_overrides(self):
env_username = os.environ.get('LEXICON_HETZNER_KONSOLEH_USERNAME')
env_password = os.environ.get('LEXICON_HETZNER_KONSOLEH_PASSWORD')
options = {'auth_account': 'konsoleh',
'auth_username': env_username,
'auth_password': env_password,
'concatenate': 'no',
'propagated': 'no',
'latency': 1}
return options

0 comments on commit 0b0f856

Please sign in to comment.