diff -Nru lexicon-2.7.12/capsule.yml lexicon-3.0.8/capsule.yml --- lexicon-2.7.12/capsule.yml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/capsule.yml 2019-01-03 16:26:53.000000000 +0000 @@ -2,7 +2,7 @@ engine_cmd_test: 'tox -e basic,py27' engine_disable_lint: true mgr_keep_lock_file: true - +scm_enable_branch_cleanup: true test_step: pre: diff -Nru lexicon-2.7.12/.circleci/config.yml lexicon-3.0.8/.circleci/config.yml --- lexicon-2.7.12/.circleci/config.yml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/.circleci/config.yml 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,20 @@ version: 2 +dependencies: &install_dependencies + command: | + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git dnsutils + pip install --upgrade tox + name: Install required runtime dependencies + shared: &shared steps: - run: - name: Install required runtime dependencies - command: | - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git dnsutils - pip install --upgrade tox + <<: *install_dependencies - checkout - run: name: Execute tests through tox - command: tox + command: tox -e basic,full jobs: "python-2.7": @@ -34,6 +37,16 @@ <<: *shared docker: - image: python:3.7-slim + "lint": + steps: + - run: + <<: *install_dependencies + - checkout + - run: + name: Check code quality with pylint + command: tox -e lint + docker: + - image: python:3.7-slim workflows: version: 2 @@ -44,3 +57,4 @@ - "python-3.5" - "python-3.6" - "python-3.7" + - "lint" \ No newline at end of file diff -Nru lexicon-2.7.12/CODEOWNERS lexicon-3.0.8/CODEOWNERS --- lexicon-2.7.12/CODEOWNERS 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/CODEOWNERS 2019-01-03 16:26:53.000000000 +0000 @@ -25,19 +25,24 @@ lexicon/providers/dnspark.py @analogj lexicon/providers/dnspod.py @analogj lexicon/providers/easydns.py @analogj +lexicon/providers/easyname.py @astzweig @rqelibari lexicon/providers/exoscale.py @greut @brutasse lexicon/providers/gandi.py @hrunting @adferrand 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 lexicon/providers/linode4.py @trinopoty +lexicon/providers/localzone.py @ags-slc lexicon/providers/luadns.py @analogj lexicon/providers/memset.py @tnwhitwell lexicon/providers/namecheap.py @pschmitt @rbelnap lexicon/providers/namesilo.py @analogj +lexicon/providers/nfsn.py @tersers lexicon/providers/nsone.py @init-js @trinopoty lexicon/providers/onapp.py @alexzorin lexicon/providers/online.py @kapouer diff -Nru lexicon-2.7.12/CONTRIBUTING.md lexicon-3.0.8/CONTRIBUTING.md --- lexicon-2.7.12/CONTRIBUTING.md 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/CONTRIBUTING.md 2019-01-03 16:26:53.000000000 +0000 @@ -52,8 +52,8 @@ - a `ProviderParser` which is used to add provider specific commandline arguments. eg. If you define two cli arguments: `--auth-username` and `--auth-token`, - those values will be available to your provider via `self.options['auth_username']` - or `self.options['auth_token']` respectively + those values will be available to your provider via `self._get_provider_option('auth_username')` + or `self._get_provider_option('auth_token')` respectively - a `Provider` class which inherits from [`BaseProvider`](https://github.com/AnalogJ/lexicon/blob/master/lexicon/providers/base.py), which is in the `base.py` file. The [`BaseProvider`](https://github.com/AnalogJ/lexicon/blob/master/lexicon/providers/base.py) @@ -70,6 +70,9 @@ See the [`cloudflare.py`](https://github.com/AnalogJ/lexicon/blob/master/lexicon/providers/cloudflare.py) file, or any provider in the [`lexicon/providers/`](https://github.com/AnalogJ/lexicon/tree/master/lexicon/providers) folder for examples +It's a good idea to review the provider [specification](https://github.com/AnalogJ/lexicon/blob/master/SPECIFICATION.md) to ensure that your interface follows +the proper conventions. + ## Testing your provider diff -Nru lexicon-2.7.12/debian/changelog lexicon-3.0.8/debian/changelog --- lexicon-2.7.12/debian/changelog 2018-11-02 02:02:27.000000000 +0000 +++ lexicon-3.0.8/debian/changelog 2019-01-06 14:24:20.000000000 +0000 @@ -1,3 +1,29 @@ +lexicon (3.0.8-1) unstable; urgency=medium + + [ Ana Custura ] + * New upstream version 3.0.8 + + [ Ana C. Custura ] + * Updates debhelper compat to version 12 + * Updates standards version to 4.3.0 + * Updates test exclusion list + * Adds patch to workaround import in excluded test + * Adds patch to workaround network requirement in excluded test + + -- Ana Custura Sun, 06 Jan 2019 14:24:20 +0000 + +lexicon (3.0.6-1) unstable; urgency=medium + + * Team upload. + * New upstream version 3.0.6 + * Exclude dns providers requiring addtl deps from test + * Add new dependencies introduced upstream + * Add autopkgtest Testsuite to d/control + * Support nocheck for tests, update test exclusion list + * Add patch to workaround import in excluded test + + -- Harlan Lieberman-Berg Sat, 08 Dec 2018 23:32:55 -0500 + lexicon (2.7.12-1) unstable; urgency=medium [ Ondřej Nový ] diff -Nru lexicon-2.7.12/debian/compat lexicon-3.0.8/debian/compat --- lexicon-2.7.12/debian/compat 2018-11-02 01:53:28.000000000 +0000 +++ lexicon-3.0.8/debian/compat 2019-01-05 22:43:42.000000000 +0000 @@ -1 +1 @@ -11 +12 diff -Nru lexicon-2.7.12/debian/control lexicon-3.0.8/debian/control --- lexicon-2.7.12/debian/control 2018-11-02 02:02:10.000000000 +0000 +++ lexicon-3.0.8/debian/control 2019-01-05 22:44:36.000000000 +0000 @@ -3,7 +3,7 @@ Uploaders: Debian Python Modules Team Section: python Priority: optional -Build-Depends: debhelper (>= 11), +Build-Depends: debhelper (>= 12), python3-all, dh-python, python3-boto3, @@ -16,11 +16,13 @@ python3-setuptools, python3-softlayer, python3-tldextract, - python3-vcr -Standards-Version: 4.2.1 + python3-vcr, + python3-yaml +Standards-Version: 4.3.0 Vcs-Browser: https://salsa.debian.org/python-team/modules/python-lexicon Vcs-Git: https://salsa.debian.org/python-team/modules/python-lexicon.git Homepage: https://github.com/AnalogJ/lexicon +Testsuite: autopkgtest-pkg-python Package: python3-lexicon Architecture: all diff -Nru lexicon-2.7.12/debian/patches/0001-disable-easyname.patch lexicon-3.0.8/debian/patches/0001-disable-easyname.patch --- lexicon-2.7.12/debian/patches/0001-disable-easyname.patch 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/debian/patches/0001-disable-easyname.patch 2019-01-05 23:04:15.000000000 +0000 @@ -0,0 +1,15 @@ +Description: Remove dependency import from excluded test to prevent FTBFS in test suite processing +Author: Harlan Lieberman-Berg +Forwarded: not-needed +Index: python-lexicon/tests/providers/test_easyname.py +=================================================================== +--- python-lexicon.orig/tests/providers/test_easyname.py ++++ python-lexicon/tests/providers/test_easyname.py +@@ -1,7 +1,6 @@ + # Test for one implementation of the interface + from unittest import TestCase + +-from bs4 import BeautifulSoup + from integration_tests import IntegrationTests + from lexicon.providers.easyname import Provider + diff -Nru lexicon-2.7.12/debian/patches/0002-disable-hetzner.patch lexicon-3.0.8/debian/patches/0002-disable-hetzner.patch --- lexicon-2.7.12/debian/patches/0002-disable-hetzner.patch 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/debian/patches/0002-disable-hetzner.patch 2019-01-06 14:24:20.000000000 +0000 @@ -0,0 +1,29 @@ +Description: Remove dependency import and function from test to prevent FTBFS in test suite processing +Author: Ana Custura +Forwarded: not-needed +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/tests/providers/test_hetzner.py ++++ b/tests/providers/test_hetzner.py +@@ -2,21 +2,10 @@ + import os + import mock + import pytest +-from bs4 import BeautifulSoup +-import dns.resolver + from lexicon.providers.hetzner import Provider + from integration_tests import IntegrationTests + + def _no_dns_lookup(): +- _domains = ['rimek.info', 'bettilaila.com'] +- _resolver = dns.resolver.Resolver() +- _resolver.lifetime = 1 +- try: +- for _domain in _domains: +- _ = dns.resolver.zone_for_name(_domain, resolver=_resolver) +- return False +- except dns.exception.DNSException: +- pass + return True + + class HetznerIntegrationTests(IntegrationTests): diff -Nru lexicon-2.7.12/debian/patches/0003-disable-localzone.patch lexicon-3.0.8/debian/patches/0003-disable-localzone.patch --- lexicon-2.7.12/debian/patches/0003-disable-localzone.patch 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/debian/patches/0003-disable-localzone.patch 2019-01-06 14:24:20.000000000 +0000 @@ -0,0 +1,16 @@ +Description: Removes network-dependent line from test to prevent FTBFS is test suite processing +Author: Ana Custura +Forwarded: not-needed +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/tests/providers/test_localzone.py ++++ b/tests/providers/test_localzone.py +@@ -22,7 +22,7 @@ + provider_name = "localzone" + domain = "example.com" + file_uri = "https://raw.githubusercontent.com/ags-slc/localzone/master/tests/zonefiles/db.example.com" +- filename, headers = urlretrieve(file_uri) ++ #filename, headers = urlretrieve(file_uri) + + def _test_parameters_overrides(self): + options = { diff -Nru lexicon-2.7.12/debian/patches/series lexicon-3.0.8/debian/patches/series --- lexicon-2.7.12/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/debian/patches/series 2019-01-06 14:24:20.000000000 +0000 @@ -0,0 +1,3 @@ +0001-disable-easyname.patch +0002-disable-hetzner.patch +0003-disable-localzone.patch diff -Nru lexicon-2.7.12/debian/rules lexicon-3.0.8/debian/rules --- lexicon-2.7.12/debian/rules 2018-11-02 02:02:27.000000000 +0000 +++ lexicon-3.0.8/debian/rules 2019-01-06 12:01:31.000000000 +0000 @@ -9,7 +9,9 @@ override_dh_auto_test: - pytest-3 tests/ -k "not namecheap and not route53 and not subreg and not transip and not plesk and not henet and not auto" +ifeq ($(filter nocheck,$(DEB_BUILD_OPTIONS)),) + pytest-3 tests/ -k "not namecheap and not route53 and not subreg and not transip and not plesk and not henet and not easyname and not localzone and not auto and not hetzner" +endif override_dh_auto_install: dh_auto_install diff -Nru lexicon-2.7.12/examples/dehydrated.default.sh lexicon-3.0.8/examples/dehydrated.default.sh --- lexicon-2.7.12/examples/dehydrated.default.sh 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/examples/dehydrated.default.sh 2019-01-03 16:26:53.000000000 +0000 @@ -10,20 +10,35 @@ export PROVIDER=${PROVIDER:-"cloudflare"} function deploy_challenge { - local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}" - - echo "deploy_challenge called: ${DOMAIN}, ${TOKEN_FILENAME}, ${TOKEN_VALUE}" - - lexicon $PROVIDER create ${DOMAIN} TXT --name="_acme-challenge.${DOMAIN}." --content="${TOKEN_VALUE}" - - DELAY_COUNTDOWN=$PROVIDER_UPDATE_DELAY - while [ $DELAY_COUNTDOWN -gt 0 ]; do - echo -ne "$DELAY_COUNTDOWN\033[0K\r" - sleep 1 - : $((DELAY_COUNTDOWN--)) + local chain=($@) + for ((i=0; i < $#; i+=3)); do + local DOMAIN="${chain[i]}" TOKEN_FILENAME="${chain[i+1]}" TOKEN_VALUE="${chain[i+2]}" + + echo "deploy_challenge called: ${DOMAIN}, ${TOKEN_FILENAME}, ${TOKEN_VALUE}" + + if [ "${PROVIDER}" != "hetzner" ]; then + lexicon $PROVIDER create ${DOMAIN} TXT --name="_acme-challenge.${DOMAIN}." \ + --content="${TOKEN_VALUE}" + else + local PROPAGATED="yes" + if ((i < $# - 3)); then + local PROPAGATED="no" + fi + lexicon $PROVIDER create ${DOMAIN} TXT --name="_acme-challenge.${DOMAIN}." \ + --content="${TOKEN_VALUE}" --propagated="${PROPAGATED}" + fi done - # This hook is called once for every domain that needs to be + if [ "${PROVIDER}" != "hetzner" ]; then + local DELAY_COUNTDOWN=$PROVIDER_UPDATE_DELAY + while [ $DELAY_COUNTDOWN -gt 0 ]; do + echo -ne "${DELAY_COUNTDOWN}\033[0K\r" + sleep 1 + : $((DELAY_COUNTDOWN--)) + done + fi + + # This hook is called once for every domain chain that needs to be # validated, including any alternative names you may have listed. # # Parameters: @@ -42,15 +57,19 @@ } function clean_challenge { - local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}" + local chain=($@) + for ((i=0; i < $#; i+=3)); do + local DOMAIN="${chain[i]}" TOKEN_FILENAME="${chain[i+1]}" TOKEN_VALUE="${chain[i+2]}" - echo "clean_challenge called: ${DOMAIN}, ${TOKEN_FILENAME}, ${TOKEN_VALUE}" + echo "clean_challenge called: ${DOMAIN}, ${TOKEN_FILENAME}, ${TOKEN_VALUE}" - lexicon $PROVIDER delete ${DOMAIN} TXT --name="_acme-challenge.${DOMAIN}." --content="${TOKEN_VALUE}" + lexicon $PROVIDER delete ${DOMAIN} TXT --name="_acme-challenge.${DOMAIN}." \ + --content="${TOKEN_VALUE}" + done - # This hook is called after attempting to validate each domain, - # whether or not validation was successful. Here you can delete - # files or DNS records that are no longer needed. + # This hook is called after attempting to validate each domain + # chain, whether or not validation was successful. Here you + # can delete files or DNS records that are no longer needed. # # The parameters are the same as for deploy_challenge. } diff -Nru lexicon-2.7.12/lexicon/client.py lexicon-3.0.8/lexicon/client.py --- lexicon-2.7.12/lexicon/client.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/client.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,61 +1,92 @@ -from builtins import object +"""Main module of Lexicon. Defines the Client class, that holds all Lexicon logic.""" +from __future__ import absolute_import import importlib -import os -import tldextract -from .common.options_handler import env_auth_options -#from providers import Example -class Client(object): - def __init__(self, cli_options): - #validate options - self._validate(cli_options) - - #process domain, strip subdomain - domain_parts = tldextract.extract(cli_options.get('domain')) - cli_options['domain'] = '{0}.{1}'.format(domain_parts.domain, domain_parts.suffix) +import tldextract +from lexicon.config import ( + ConfigResolver, + DictConfigSource, + legacy_config_resolver, + non_interactive_config_resolver, +) + + +class Client(object): # pylint: disable=useless-object-inheritance,too-few-public-methods + """This is the Lexicon client, that will execute all the logic.""" + + def __init__(self, config=None): + if not config: + # If there is not config specified, we load a non-interactive configuration. + self.config = non_interactive_config_resolver() + elif not isinstance(config, ConfigResolver): + # If config is not a ConfigResolver, we are in a legacy situation. + # We protect this part of the Client API. + self.config = legacy_config_resolver(config) + else: + self.config = config + + # Validate configuration + self._validate_config() + + runtime_config = {} + + # Process domain, strip subdomain + domain_parts = tldextract.extract( + self.config.resolve('lexicon:domain')) + runtime_config['domain'] = '{0}.{1}'.format( + domain_parts.domain, domain_parts.suffix) - if cli_options.get('delegated'): + if self.config.resolve('lexicon:delegated'): # handle delegated domain - delegated = cli_options.get('delegated').rstrip('.') - if delegated != cli_options.get('domain'): + delegated = self.config.resolve('lexicon:delegated').rstrip('.') + if delegated != runtime_config.get('domain'): # convert to relative name - if delegated.endswith(cli_options.get('domain')): - delegated = delegated[:-len(cli_options.get('domain'))] + if delegated.endswith(runtime_config.get('domain')): + delegated = delegated[:-len(runtime_config.get('domain'))] delegated = delegated.rstrip('.') # update domain - cli_options['domain'] = '{0}.{1}'.format(delegated, cli_options.get('domain')) + runtime_config['domain'] = '{0}.{1}'.format( + delegated, runtime_config.get('domain')) + + self.action = self.config.resolve('lexicon:action') + self.provider_name = (self.config.resolve('lexicon:provider_name') + or self.config.resolve('lexicon:provider')) - self.action = cli_options.get('action') - self.provider_name = cli_options.get('provider_name') - self.options = env_auth_options(self.provider_name) - self.options.update(cli_options) + self.config.add_config_source(DictConfigSource(runtime_config), 0) - provider_module = importlib.import_module('lexicon.providers.' + self.provider_name) + provider_module = importlib.import_module( + 'lexicon.providers.' + self.provider_name) provider_class = getattr(provider_module, 'Provider') - self.provider = provider_class(self.options) + self.provider = provider_class(self.config) def execute(self): + """Execute provided configuration in class constructor to the DNS records""" self.provider.authenticate() + identifier = self.config.resolve('lexicon:identifier') + record_type = self.config.resolve('lexicon:type') + name = self.config.resolve('lexicon:name') + content = self.config.resolve('lexicon:content') if self.action == 'create': - return self.provider.create_record(self.options.get('type'), self.options.get('name'), self.options.get('content')) + return self.provider.create_record(record_type, name, content) - elif self.action == 'list': - return self.provider.list_records(self.options.get('type'), self.options.get('name'), self.options.get('content')) + if self.action == 'list': + return self.provider.list_records(record_type, name, content) - elif self.action == 'update': - return self.provider.update_record(self.options.get('identifier'), self.options.get('type'), self.options.get('name'), self.options.get('content')) + if self.action == 'update': + return self.provider.update_record(identifier, record_type, name, content) - elif self.action == 'delete': - return self.provider.delete_record(self.options.get('identifier'), self.options.get('type'), self.options.get('name'), self.options.get('content')) + if self.action == 'delete': + return self.provider.delete_record(identifier, record_type, name, content) - def _validate(self, options): - if not options.get('provider_name'): + raise ValueError('Invalid action statement: {0}'.format(self.action)) + + def _validate_config(self): + if not self.config.resolve('lexicon:provider_name'): raise AttributeError('provider_name') - if not options.get('action'): + if not self.config.resolve('lexicon:action'): raise AttributeError('action') - if not options.get('domain'): + if not self.config.resolve('lexicon:domain'): raise AttributeError('domain') - if not options.get('type'): + if not self.config.resolve('lexicon:type'): raise AttributeError('type') - diff -Nru lexicon-2.7.12/lexicon/cli.py lexicon-3.0.8/lexicon/cli.py --- lexicon-2.7.12/lexicon/cli.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/cli.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,123 @@ +#!/usr/bin/env python +"""Module for Lexicon command-line interface""" +from __future__ import absolute_import, print_function +import json +import logging +import os +import sys + +from lexicon.client import Client +from lexicon.config import ConfigResolver +from lexicon.parser import generate_cli_main_parser + + +logger = logging.getLogger(__name__) # pylint: disable=C0103 + + +def generate_list_table_result(lexicon_logger, output=None, without_header=None): + """Convert returned data from list actions into a nice table for command line usage""" + if not isinstance(output, list): + lexicon_logger.debug('Command output is not a list, and then cannot ' + 'be printed with --quiet parameter not enabled.') + return None + + array = [[ + row.get('id', ''), + row.get('type', ''), + row.get('name', ''), + row.get('content', ''), + row.get('ttl', '')] for row in output] + + # Insert header (insert before calculating the max width of each column + # to take headers size into account) + if not without_header: + headers = ['ID', 'TYPE', 'NAME', 'CONTENT', 'TTL'] + array.insert(0, headers) + + column_widths = [0, 0, 0, 0, 0] + # Find max width for each column + for row in array: + for idx, col in enumerate(row): + width = len(str(col)) + if width > column_widths[idx]: + column_widths[idx] = width + + # Add a 'nice' separator + if not without_header: + array.insert(1, ['-' * column_widths[idx] + for idx in range(len(column_widths))]) + + # Construct table to be printed + table = [] + for row in array: + row_list = [] + for idx, col in enumerate(row): + row_list.append(str(col).ljust(column_widths[idx])) + table.append(' '.join(row_list)) + + # Return table + return os.linesep.join(table) + + +def generate_table_results(output=None, without_header=None): + """Convert returned data from non-list actions into a nice table for command line usage""" + array = [] + str_output = str(output) + + if not without_header: + array.append('RESULT') + array.append('-' * max(6, len(str_output))) + + array.append(str_output) + return os.linesep.join(array) + + +def handle_output(results, output_type, action): + """Print the relevant output for given output_type""" + if output_type == 'QUIET': + return + + if not output_type == 'JSON': + if action == 'list': + table = generate_list_table_result( + logger, results, output_type == 'TABLE-NO-HEADER') + else: + table = generate_table_results(results, output_type == 'TABLE-NO-HEADER') + if table: + print(table) + else: + try: + json_str = json.dumps(results) + if json_str: + print(json_str) + except TypeError: + logger.debug('Output is not JSON serializable, and then cannot ' + 'be printed with --output=JSON parameter.') + + +def main(): + """Main function of Lexicon.""" + # Dynamically determine all the providers available and gather command line arguments. + parsed_args = generate_cli_main_parser().parse_args() + + log_level = logging.getLevelName(parsed_args.log_level) + logging.basicConfig(stream=sys.stdout, level=log_level, + format='%(message)s') + logger.debug('Arguments: %s', parsed_args) + + # In the CLI context, will get configuration interactively: + # * from the command line + # * from the environment variables + # * from lexicon configuration files in working directory + config = ConfigResolver() + config.with_args(parsed_args).with_env().with_config_dir(os.getcwd()) + + client = Client(config) + + results = client.execute() + + handle_output(results, parsed_args.output, config.resolve('lexicon:action')) + + +if __name__ == '__main__': + main() diff -Nru lexicon-2.7.12/lexicon/common/__init__.py lexicon-3.0.8/lexicon/common/__init__.py --- lexicon-2.7.12/lexicon/common/__init__.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/common/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -__author__ = 'Jason Kulatunga' \ No newline at end of file diff -Nru lexicon-2.7.12/lexicon/common/options_handler.py lexicon-3.0.8/lexicon/common/options_handler.py --- lexicon-2.7.12/lexicon/common/options_handler.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/common/options_handler.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -import os - -# make sure that auth parameters can be specified via environmental variables as well. -# basically we map env variables for the chosen provider to the options dictionary (if a value isnt already provided) -# LEXICON_CLOUDFLARE_TOKEN => options['auth_token'] -# LEXICON_CLOUDFLARE_USERNAME => options['auth_username'] -# LEXICON_CLOUDFLARE_PASSWORD => options['auth_password'] -# we only care about environmental variables for this Provider, which match --auth-* CLI parameters. -def env_auth_options(provider_name): - options = {} - - env_prefix = 'LEXICON_{0}_'.format(provider_name.upper()) - for key in list(os.environ.keys()): - if key.startswith(env_prefix): - auth_type = key[len(env_prefix):].lower() - options['auth_{0}'.format(auth_type)] = os.environ[key] - return SafeOptions(options) - - -class SafeOptions(dict): - def update(self, update_options): - if update_options: - super(SafeOptions, self).update({k:v for k,v in update_options.items() if v}) - - -class SafeOptionsWithFallback(SafeOptions): - def __init__(self, content=None, fallbackFn=None): - super(SafeOptionsWithFallback, self).__init__() - self.update(content) - self.fallbackFn = fallbackFn or (lambda x: None) - - #this method is the exact same as __main__.py parse env, with some slight modifications to storage. - # should not be used directly. - def __missing__(self, key): - return self.fallbackFn(key) - - def get(self,key,default=None): - return self[key] or default diff -Nru lexicon-2.7.12/lexicon/config.py lexicon-3.0.8/lexicon/config.py --- lexicon-2.7.12/lexicon/config.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/config.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,349 @@ +""" +Definition of the ConfigResolver to configure Lexicon, and convenient classes to build +various configuration sources. +""" +import logging +import os +import re +import warnings + +import yaml + + +LOGGER = logging.getLogger(__name__) + + +class ConfigResolver(object): # pylint: disable=useless-object-inheritance + """ + Highly customizable configuration resolver object, that gets configuration parameters + from various sources with a precedence order. Sources and their priority are configured + by calling the with* methods of this object, in the decreasing priority order. + + A configuration parameter can be retrieved using the resolve() method. The configuration + parameter key needs to conform to a namespace, whose delimeters is ':'. Two namespaces will + be used in the context of Lexicon: + * the parameters relevant for Lexicon itself: 'lexicon:global_parameter' + * the parameters specific to a DNS provider: 'lexicon:cloudflare:cloudflare_parameter' + + Example: + # This will resolve configuration parameters from environment variables, + # then from a configuration file named '/my/path/to/lexicon.yml'. + $ from lexicon.config import Config + $ config = Config() + $ config.with_env().with_config_file() + $ print(config.resolve('lexicon:delegated')) + $ print(config.resolve('lexicon:cloudflare:auth_token)) + + Config can resolve parameters for Lexicon and providers from: + * environment variables + * arguments parsed by ArgParse library + * YAML configuration files, generic or specific to a provider + * any object implementing the underlying ConfigSource class + + Each parameter will be resolved against each source, and value from the higher priority source + is returned. If a parameter could not be resolve by any source, then None will be returned. + """ + + def __init__(self): + super(ConfigResolver, self).__init__() + self._config_sources = [] + + def resolve(self, config_key): + """ + Resolve the value of the given config parameter key. Key must be correctly scoped for + Lexicon, and optionally for the DNS provider for which the parameter is consumed. + For instance: + * config.resolve('lexicon:delegated') will get the delegated parameter for Lexicon + * config.resolve('lexicon:cloudflare:auth_token') will get the auth_token parameter + consumed by cloudflare DNS provider. + + Value is resolved against each configured source, and value from the highest priority source + is returned. None will be returned if the given config parameter key could not be resolved + from any source. + """ + for config_source in self._config_sources: + value = config_source.resolve(config_key) + if value: + return value + + return None + + def add_config_source(self, config_source, position=None): + """ + Add a config source to the current ConfigResolver instance. + If position is not set, this source will be inserted with the lowest priority. + """ + rank = position if position is not None else len(self._config_sources) + self._config_sources.insert(rank, config_source) + + def with_config_source(self, config_source): + """ + Configure current resolver to use the provided ConfigSource instance to be used as a source. + See documentation of ConfigSource to see how to implement correctly a ConfigSource. + """ + self.add_config_source(config_source) + return self + + def with_env(self): + """ + Configure current resolver to use available environment variables as a source. + Only environment variables starting with 'LEXICON' or 'LEXICON_[PROVIDER]' + will be taken into account. + """ + return self.with_config_source(EnvironmentConfigSource()) + + def with_args(self, argparse_namespace): + """ + Configure current resolver to use a Namespace object given by a ArgParse instance + using arg_parse() as a source. This method is typically used to allow a ConfigResolver + to get parameters from the command line. + + It is assumed that the argument parser have already checked that provided arguments are + valid for Lexicon or the current provider. No further namespace check on parameter keys will + be done here. Meaning that if 'lexicon:cloudflare:auth_token' is asked, any auth_token + present in the given Namespace object will be returned. + """ + return self.with_config_source(ArgsConfigSource(argparse_namespace)) + + def with_dict(self, dict_object): + """ + Configure current resolver to use the given dict object, scoped to lexicon namespace. + Example of valid dict object for lexicon: + { + 'delegated': 'onedelegated', + 'cloudflare': { + 'auth_token': 'SECRET_TOKEN' + } + } + => Will define properties 'lexicon:delegated' and 'lexicon:cloudflare:auth_token' + """ + return self.with_config_source(DictConfigSource(dict_object)) + + def with_config_file(self, file_path): + """ + Configure current resolver to use a YAML configuration file specified on the given path. + This file provides configuration parameters for Lexicon and any DNS provider. + + Typical format is: + $ cat lexicon.yml + # Will define properties 'lexicon:delegated' and 'lexicon:cloudflare:auth_token' + delegated: 'onedelegated' + cloudflare: + auth_token: SECRET_TOKEN + """ + return self.with_config_source(FileConfigSource(file_path)) + + def with_provider_config_file(self, provider_name, file_path): + """ + Configure current resolver to use a YAML configuration file specified on the given path. + This file provides configuration parameters for a DNS provider exclusively. + + Typical format is: + $ cat lexicon_cloudflare.yml + # Will define properties 'lexicon:cloudflare:auth_token' + # and 'lexicon:cloudflare:auth_username' + auth_token: SECRET_TOKEN + auth_username: USERNAME + + NB: If file_path is not specified, '/etc/lexicon/lexicon_[provider].yml' will be taken + by default, with [provider] equals to the given provider_name parameter. + """ + return self.with_config_source(ProviderFileConfigSource(provider_name, file_path)) + + def with_config_dir(self, dir_path): + """ + Configure current resolver to use every valid YAML configuration files available in the + given directory path. To be taken into account, a configuration file must conform to the + following naming convention: + * 'lexicon.yml' for a global Lexicon config file (see with_config_file doc) + * 'lexicon_[provider].yml' for a DNS provider specific configuration file, with + [provider] equals to the DNS provider name (see with_provider_config_file doc) + + Example: + $ ls /etc/lexicon + lexicon.yml # global Lexicon configuration file + lexicon_cloudflare.yml # specific configuration file for clouflare DNS provder + """ + lexicon_provider_config_files = [] + lexicon_config_files = [] + + for path in os.listdir(dir_path): + path = os.path.join(dir_path, path) + if os.path.isfile(path): + basename = os.path.basename(path) + search = re.search(r'^lexicon(?:_(\w+)|)\.yml$', basename) + if search: + provider = search.group(1) + if provider: + lexicon_provider_config_files.append((provider, path)) + else: + lexicon_config_files.append(path) + + for lexicon_provider_config_file in lexicon_provider_config_files: + self.with_provider_config_file(lexicon_provider_config_file[0], + lexicon_provider_config_file[1]) + + for lexicon_config_file in lexicon_config_files: + self.with_config_file(lexicon_config_file) + + return self + + def with_legacy_dict(self, legacy_dict_object): + """Configure a source that consumes the dict that where used on Lexicon 2.x""" + warnings.warn(DeprecationWarning('Legacy configuration object has been used ' + 'to load the ConfigResolver.')) + return self.with_config_source(LegacyDictConfigSource(legacy_dict_object)) + + +class ConfigSource(object): # pylint: disable=useless-object-inheritance,too-few-public-methods + """ + Base class to implement a configuration source for a ConfigResolver. + The relevant method to override is resolve(self, config_parameter). + """ + + def resolve(self, config_key): + """ + Using the given config_parameter value (in the form of 'lexicon:config_key' or + 'lexicon:[provider]:config_key'), try to get the associated value. + + None must be returned if no value could be found. + + Must be implemented by each ConfigSource concrete child class. + """ + raise NotImplementedError('The method resolve(config_key) ' + 'must be implemented in the concret sub-classes.') + + +class EnvironmentConfigSource(ConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against existing environment variables.""" + + def __init__(self): + super(EnvironmentConfigSource, self).__init__() + self._parameters = {} + for (key, value) in os.environ.items(): + if key.startswith('LEXICON_'): + self._parameters[key] = value + + def resolve(self, config_key): + # First try, with a direct conversion of the config_parameter: + # * lexicon:provider:auth_my_config => LEXICON_PROVIDER_AUTH_MY_CONFIG + # * lexicon:provider:my_other_config => LEXICON_PROVIDER_AUTH_MY_OTHER_CONFIG + # * lexicon:my_global_config => LEXICON_MY_GLOBAL_CONFIG + environment_variable = re.sub(':', '_', config_key).upper() + value = self._parameters.get(environment_variable, None) + if value: + return value + + # Second try, with the legacy naming convention for specific provider config: + # * lexicon:provider:auth_my_config => LEXICON_PROVIDER_MY_CONFIG + # Users get a warning about this deprecated usage. + environment_variable_legacy = re.sub(r'(.*)_AUTH_(.*)', r'\1_\2', + environment_variable).upper() + value = self._parameters.get(environment_variable_legacy, None) + if value: + LOGGER.warning(('Warning: Use of environment variable %s is deprecated. ' + 'Try %s instead.'), + environment_variable_legacy, + environment_variable) + return value + + return None + + +class ArgsConfigSource(ConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against an argparse namespace.""" + + def __init__(self, namespace): + super(ArgsConfigSource, self).__init__() + self._parameters = vars(namespace) + + def resolve(self, config_key): + # We assume here that the namespace provided has already done its job, + # by validating that all given parameters are relevant for Lexicon or the current provider. + # So we ignore the namespaces 'lexicon:' and 'lexicon:provider' in given config key. + splitted_config_key = config_key.split(':') + + return self._parameters.get(splitted_config_key[-1], None) + + +class DictConfigSource(ConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against a dict object.""" + + def __init__(self, dict_object): + super(DictConfigSource, self).__init__() + self._parameters = dict_object + + def resolve(self, config_key): + splitted_config_key = config_key.split(':') + # Note that we ignore 'lexicon:' in the iteration, + # as the dict object is already scoped to lexicon. + cursor = self._parameters + for current in splitted_config_key[1:-1]: + cursor = cursor.get(current, {}) + + return cursor.get(splitted_config_key[-1], None) + + +class FileConfigSource(DictConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against a lexicon config file.""" + + def __init__(self, file_path): + with open(file_path, 'r') as stream: + yaml_object = yaml.load(stream) or {} + + super(FileConfigSource, self).__init__(yaml_object) + + +class ProviderFileConfigSource(FileConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against an provider config file.""" + + def __init__(self, provider_name, file_path): + super(ProviderFileConfigSource, self).__init__(file_path) + # Scope the loaded config file into provider namespace + self._parameters = {provider_name: self._parameters} + + +class LegacyDictConfigSource(DictConfigSource): # pylint: disable=too-few-public-methods + """ConfigSource that resolve configuration against a legacy Lexicon 2.x dict object.""" + + def __init__(self, dict_object): + provider_name = dict_object.get('provider_name') + if not provider_name: + raise AttributeError('Error, key provider_name is not defined.' + 'LegacyDictConfigSource cannot scope correctly ' + 'the provider specific options.') + + generic_parameters = [ + 'domain', 'action', 'provider_name', 'delegated', 'identifier', 'type', 'name', + 'content', 'ttl', 'priority', 'log_level', 'output'] + + provider_options = {} + refactor_dict_object = {} + refactor_dict_object[provider_name] = provider_options + + for (key, value) in dict_object.items(): + if key not in generic_parameters: + provider_options[key] = value + else: + refactor_dict_object[key] = value + + super(LegacyDictConfigSource, self).__init__(refactor_dict_object) + + +def non_interactive_config_resolver(): + """ + Create a typical config resolver in a non-interactive context (eg. lexicon used as a library). + Configuration will be resolved againts env variables and lexicon config files in working dir. + """ + return ConfigResolver().with_env().with_config_dir(os.getcwd()) + + +def legacy_config_resolver(legacy_dict): + """ + With the old legacy approach, we juste got a plain configuration dict object. + Custom logic was to enrich this configuration with env variables. + + This function create a resolve that respect the expected behavior, by using the relevant + ConfigSources, and we add the config files from working directory. + """ + return ConfigResolver().with_legacy_dict(legacy_dict).with_env().with_config_dir(os.getcwd()) diff -Nru lexicon-2.7.12/lexicon/__main__.py lexicon-3.0.8/lexicon/__main__.py --- lexicon-2.7.12/lexicon/__main__.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/__main__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -#!/usr/bin/env python -from __future__ import absolute_import -from __future__ import print_function - -import argparse -import importlib -import logging -import os -import sys -import json -import pkgutil - -import pkg_resources - -from lexicon.client import Client -from lexicon import providers as providers_package - -#based off https://docs.python.org/2/howto/argparse.html - -logger = logging.getLogger(__name__) - - -def BaseProviderParser(): - parser = argparse.ArgumentParser(add_help=False) - parser.add_argument('action', help='specify the action to take', default='list', choices=['create', 'list', 'update', 'delete']) - parser.add_argument('domain', help='specify the domain, supports subdomains as well') - parser.add_argument('type', help='specify the entry type', default='TXT', choices=['A', 'AAAA', 'CNAME', 'MX', 'NS', 'SOA', 'TXT', 'SRV', 'LOC']) - - parser.add_argument('--name', help='specify the record name') - parser.add_argument('--content', help='specify the record content') - parser.add_argument('--ttl', type=int, help='specify the record time-to-live') - parser.add_argument('--priority', help='specify the record priority') - parser.add_argument('--identifier', help='specify the record for update or delete actions') - parser.add_argument('--log_level', help='specify the log level', default='ERROR', choices=['CRITICAL','ERROR','WARNING','INFO','DEBUG','NOTSET']) - parser.add_argument('--output', - help='specify the type of output: by default a formatted table (TABLE), a formatted table without header (TABLE-NO-HEADER), a JSON string (JSON) or no output (QUIET)', - default='TABLE', choices=['TABLE', 'TABLE-NO-HEADER', 'JSON', 'QUIET']) - return parser - -def MainParser(): - providers = [] - for _, modname, _ in pkgutil.iter_modules(providers_package.__path__): - if modname != 'base': - providers.append(modname) - providers = sorted(providers) - - parser = argparse.ArgumentParser(description='Create, Update, Delete, List DNS entries') - try: - version = pkg_resources.get_distribution('dns-lexicon').version - except pkg_resources.DistributionNotFound: - version = 'unknown' - parser.add_argument('--version', help='show the current version of lexicon', action='version', version='%(prog)s {0}'.format(version)) - parser.add_argument('--delegated', help='specify the delegated domain') - subparsers = parser.add_subparsers(dest='provider_name', help='specify the DNS provider to use') - subparsers.required = True - - for provider in providers: - provider_module = importlib.import_module('lexicon.providers.' + provider) - provider_parser = getattr(provider_module, 'ProviderParser') - - subparser = subparsers.add_parser(provider, help='{0} provider'.format(provider), parents=[BaseProviderParser()]) - provider_parser(subparser) - - return parser - -# Convert returned JSON into a nice table for command line usage -def generate_table_result(logger, output=None, without_header=None): - try: - _ = (entry for entry in output) - except: - logger.debug('Command output is not iterable, and then cannot be printed with --quiet parameter not enabled.') - return None - - array = [[ - row.get('id', ''), - row.get('type', ''), - row.get('name', ''), - row.get('content', ''), - row.get('ttl', '')] for row in output] - - # Insert header (insert before calculating the max width of each column to take headers size into account) - if not without_header: - headers = ['ID', 'TYPE', 'NAME', 'CONTENT', 'TTL'] - array.insert(0, headers) - - columnWidths = [0, 0, 0, 0, 0] - # Find max width for each column - for row in array: - for idx, col in enumerate(row): - width = len(str(col)) - if width > columnWidths[idx]: - columnWidths[idx] = width - - # Add a 'nice' separator - if not without_header: - array.insert(1, ['-' * columnWidths[idx] for idx in range(len(columnWidths))]) - - # Construct table to be printed - table = [] - for row in array: - rowList = [] - for idx, col in enumerate(row): - rowList.append(str(col).ljust(columnWidths[idx])) - table.append(' '.join(rowList)) - - # Return table - return '\n'.join(table) - -# Print the relevant output for given output_type -def handle_output(results, output_type): - if not output_type == 'QUIET': - if not output_type == 'JSON': - table = generate_table_result(logger, results, output_type == 'TABLE-NO-HEADER') - if table: - print(table) - else: - try: - _ = (entry for entry in results) - json_str = json.dumps(results) - if json_str: - print(json_str) - except: - logger.debug('Output is not a JSON, and then cannot be printed with --output=JSON parameter.') - pass - -# Dynamically determine all the providers available. -def main(): - parsed_args = MainParser().parse_args() - log_level = logging.getLevelName(parsed_args.log_level) - logging.basicConfig(stream=sys.stdout, level=log_level, format='%(message)s') - - logger.debug('Arguments: %s', parsed_args) - - client = Client(vars(parsed_args)) - - results = client.execute() - - handle_output(results, parsed_args.output) - -if __name__ == '__main__': - main() diff -Nru lexicon-2.7.12/lexicon/parser.py lexicon-3.0.8/lexicon/parser.py --- lexicon-2.7.12/lexicon/parser.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/parser.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,67 @@ +"""Parsers definition for the Lexicon command-line interface""" +import argparse +import importlib +import pkgutil + +import pkg_resources +from lexicon import providers as providers_package + + +def generate_base_provider_parser(): + """Function that generates the base provider to be used by all dns providers.""" + parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('action', help='specify the action to take', default='list', + choices=['create', 'list', 'update', 'delete']) + parser.add_argument( + 'domain', help='specify the domain, supports subdomains as well') + parser.add_argument('type', help='specify the entry type', default='TXT', + choices=['A', 'AAAA', 'CNAME', 'MX', 'NS', 'SOA', 'TXT', 'SRV', 'LOC']) + + parser.add_argument('--name', help='specify the record name') + parser.add_argument('--content', help='specify the record content') + parser.add_argument('--ttl', type=int, + help='specify the record time-to-live') + parser.add_argument('--priority', help='specify the record priority') + parser.add_argument( + '--identifier', help='specify the record for update or delete actions') + parser.add_argument('--log_level', help='specify the log level', default='ERROR', + choices=['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET']) + parser.add_argument('--output', + help=('specify the type of output: by default a formatted table (TABLE), ' + 'a formatted table without header (TABLE-NO-HEADER), ' + 'a JSON string (JSON) or no output (QUIET)'), + default='TABLE', choices=['TABLE', 'TABLE-NO-HEADER', 'JSON', 'QUIET']) + return parser + + +def generate_cli_main_parser(): + """Using all providers available, generate a parser that will be used by Lexicon CLI""" + providers = [] + for _, modname, _ in pkgutil.iter_modules(providers_package.__path__): + if modname != 'base': + providers.append(modname) + providers = sorted(providers) + + parser = argparse.ArgumentParser( + description='Create, Update, Delete, List DNS entries') + try: + version = pkg_resources.get_distribution('dns-lexicon').version + except pkg_resources.DistributionNotFound: + version = 'unknown' + parser.add_argument('--version', help='show the current version of lexicon', + action='version', version='%(prog)s {0}'.format(version)) + parser.add_argument('--delegated', help='specify the delegated domain') + subparsers = parser.add_subparsers( + dest='provider_name', help='specify the DNS provider to use') + subparsers.required = True + + for provider in providers: + provider_module = importlib.import_module( + 'lexicon.providers.' + provider) + provider_parser = getattr(provider_module, 'ProviderParser') + + subparser = subparsers.add_parser(provider, help='{0} provider'.format(provider), + parents=[generate_base_provider_parser()]) + provider_parser(subparser) + + return parser diff -Nru lexicon-2.7.12/lexicon/providers/aurora.py lexicon-3.0.8/lexicon/providers/aurora.py --- lexicon-2.7.12/lexicon/providers/aurora.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/aurora.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,38 +1,40 @@ from __future__ import absolute_import - -import json -import logging import base64 -import hmac -import hashlib import datetime +import hashlib +import hmac +import json +import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['auroradns.eu'] + def ProviderParser(subparser): - subparser.add_argument("--auth-api-key", help="specify API key for authentication") - subparser.add_argument("--auth-secret-key", help="specify the secret key for authentication") + subparser.add_argument( + "--auth-api-key", help="specify API key for authentication") + subparser.add_argument("--auth-secret-key", + help="specify the secret key for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.auroradns.eu') + self.api_endpoint = 'https://api.auroradns.eu' def authenticate(self): zone = None payload = self._get('/zones') for item in payload: - if item['name'] == self.options['domain']: + if item['name'] == self.domain: zone = item if not zone: @@ -42,12 +44,13 @@ # Create record. If record already exists with the same content, do nothing' def create_record(self, type, name, content): - data = {'type': type, 'name': self._relative_name(name), 'content': content} - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + data = {'type': type, 'name': self._relative_name( + name), 'content': content} + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') payload = self._post('/zones/{0}/records'.format(self.domain_id), data) - logger.debug('create_record: {0}'.format(payload)) + LOGGER.debug('create_record: {0}'.format(payload)) return payload # List all records. Return an empty list if no records found @@ -59,11 +62,14 @@ # Apply filtering first. processed_records = payload if type: - processed_records = [record for record in processed_records if record['type'] == type] + processed_records = [ + record for record in processed_records if record['type'] == type] if name: - processed_records = [record for record in processed_records if record['name'] == self._relative_name(name)] + processed_records = [ + record for record in processed_records if record['name'] == self._relative_name(name)] if content: - processed_records = [record for record in processed_records if record['content'].lower() == content.lower()] + processed_records = [ + record for record in processed_records if record['content'].lower() == content.lower()] # Format the records. records = [] @@ -77,7 +83,7 @@ } records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -93,12 +99,13 @@ data['name'] = self._relative_name(name) if content: data['content'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') - payload = self._put('/zones/{0}/records/{1}'.format(self.domain_id, identifier), data) + payload = self._put( + '/zones/{0}/records/{1}'.format(self.domain_id, identifier), data) - logger.debug('update_record: %s', payload) + LOGGER.debug('update_record: %s', payload) return payload # Delete an existing record. @@ -111,17 +118,18 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._delete('/zones/{0}/records/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/zones/{0}/records/{1}'.format(self.domain_id, record_id)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -130,15 +138,16 @@ t = datetime.datetime.utcnow() timestamp = t.strftime('%Y%m%dT%H%M%SZ') - authorization_header = self._generate_auth_header(action, url, timestamp) + authorization_header = self._generate_auth_header( + action, url, timestamp) r = requests.request(action, self.api_endpoint + url, params=query_params, - data=json.dumps(data), - headers={ - 'X-AuroraDNS-Date': timestamp, - 'Authorization': authorization_header, - 'Content-Type': 'application/json' - }) + data=json.dumps(data), + headers={ + 'X-AuroraDNS-Date': timestamp, + 'Authorization': authorization_header, + 'Content-Type': 'application/json' + }) # If the response is a HTTP 409 statusCode, the record already exists: return true. if r.status_code == 409: @@ -154,8 +163,8 @@ return True def _generate_auth_header(self, action, url, timestamp): - secret_key = self.options['auth_secret_key'] - api_key = self.options['auth_api_key'] + secret_key = self._get_provider_option('auth_secret_key') + api_key = self._get_provider_option('auth_api_key') sig = action + url + timestamp signature = base64.b64encode(hmac.new( @@ -168,8 +177,9 @@ def _find_record_identifier(self, type, name, content): records = self.list_records(type, name, content) - logger.debug('records: %s', records) + LOGGER.debug('records: %s', records) if len(records) == 1: return records[0]['id'] else: - raise Exception('Record identifier could not be found. Try to provide an identifier') + raise Exception( + 'Record identifier could not be found. Try to provide an identifier') diff -Nru lexicon-2.7.12/lexicon/providers/auto.py lexicon-3.0.8/lexicon/providers/auto.py --- lexicon-2.7.12/lexicon/providers/auto.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/auto.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,56 +1,63 @@ from __future__ import absolute_import - -import subprocess -import re -import os -import pkgutil -import logging import argparse import importlib -import argparse +import logging +import os +import pkgutil import re - -from builtins import object +import subprocess import six import tldextract -import sys - from lexicon import providers -from lexicon.common.options_handler import env_auth_options +from lexicon.config import ( + ArgsConfigSource, + ConfigResolver, + legacy_config_resolver, +) + + +LOGGER = logging.getLogger(__name__) -logger = logging.getLogger(__name__) def _get_available_providers(): available_providers = {} for _, modname, _ in pkgutil.iter_modules(providers.__path__): if modname != 'base' and modname != 'auto': try: - available_providers[modname] = importlib.import_module('lexicon.providers.' + modname) + available_providers[modname] = importlib.import_module( + 'lexicon.providers.' + modname) except ImportError: - logger.warn('Warning, the provider {0} cannot be loaded due to missing optional dependencies.' + LOGGER.warn('Warning, the provider {0} cannot be loaded due ' + 'to missing optional dependencies.' .format(modname)) return available_providers + AVAILABLE_PROVIDERS = _get_available_providers() + def _get_ns_records_domains_for_domain(domain): - tlds = [tldextract.extract(ns_entry) for ns_entry in _get_ns_records_for_domain(domain)] + tlds = [tldextract.extract(ns_entry) + for ns_entry in _get_ns_records_for_domain(domain)] return set(['{0}.{1}'.format(tld.domain, tld.suffix) for tld in tlds]) + def _get_ns_records_for_domain(domain): # Available both for Windows and Linux (if dnsutils is installed for the latter) try: output = subprocess.check_output(['nslookup', '-querytype=NS', domain], - stderr=subprocess.STDOUT) + stderr=subprocess.STDOUT, universal_newlines=True) except subprocess.CalledProcessError as e: if 'NXDOMAIN' in e.output: - raise ValueError('Error, domain {0} could not be resolved.'.format(domain)) + raise ValueError( + 'Error, domain {0} could not be resolved.'.format(domain)) + output = e.output - pattern = re.compile(r'nameserver = (.*?)\.*{0}'.format(os.linesep)) - match = pattern.findall(output.decode()) + pattern = re.compile(r'nameserver = (.*?)\.*\n') + match = pattern.findall(output) if not match: raise ValueError('Error, could not find ns entries for domain {0}. ' @@ -58,21 +65,25 @@ return match + def _relevant_provider_for_domain(domain): nameserver_domains = _get_ns_records_domains_for_domain(domain) relevant_providers = [] for provider_name, provider_module in AVAILABLE_PROVIDERS.items(): ns_domains = provider_module.NAMESERVER_DOMAINS - + # Test plain domain string comparison - if set([ns_domain for ns_domain in ns_domains if isinstance(ns_domain, six.string_types)]) & nameserver_domains: + if set([ns_domain for ns_domain in ns_domains + if isinstance(ns_domain, six.string_types)]) & nameserver_domains: relevant_providers.append((provider_name, provider_module)) continue # Test domains regexp matching for ns_domain in ns_domains: - if hasattr(ns_domain, 'match') and [nameserver_domain for nameserver_domain in nameserver_domains if ns_domain.match(nameserver_domain)]: + if hasattr(ns_domain, 'match') \ + and [nameserver_domain for nameserver_domain + in nameserver_domains if ns_domain.match(nameserver_domain)]: relevant_providers.append((provider_name, provider_module)) continue @@ -81,19 +92,27 @@ 'Found nameservers domains are {1}'.format(domain, nameserver_domains)) if len(relevant_providers) > 1: - logger.warn('Warning, multiple DNS providers have been found for given domain {0}, first one will be used: {1} ' + LOGGER.warn('Warning, multiple DNS providers have been found for given domain {0}, ' + 'first one will be used: {1} ' 'This may indicate a misconfiguration in one or more provider.' .format(domain, relevant_providers)) return relevant_providers[0] + def ProviderParser(subparser): subparser.description = ''' - Provider 'auto' enables the Lexicon provider auto-discovery feature. - Based on the nameservers declared for the given domain, Lexicon will try to find the DNS provider holding the DNS zone if it is supported. - Actual DNS zone read/write operations will be delegated to the provider found: every environment variable or command line specific to this provider can be passed to Lexicon and will be processed accordingly. + Provider 'auto' enables the Lexicon provider auto-discovery. + Based on the nameservers declared for the given domain, + Lexicon will try to find the DNS provider holding the DNS zone if it is supported. + Actual DNS zone read/write operations will be delegated to the provider found: + every environment variable or command line specific to this provider + can be passed to Lexicon and will be processed accordingly. ''' - subparser.add_argument("--mapping-override", metavar="[DOMAIN]:[PROVIDER], ...", help="comma separated list of elements in the form of [DOMAIN]:[PROVIDER] to authoritatively map a particular domain to a particular provider") + subparser.add_argument("--mapping-override", metavar="[DOMAIN]:[PROVIDER], ...", + help="comma separated list of elements in the form of " + "[DOMAIN]:[PROVIDER] to authoritatively map a " + "particular domain to a particular provider") # Explore and load the arguments available for every provider into the 'auto' provider. for provider_name, provider_module in AVAILABLE_PROVIDERS.items(): @@ -101,19 +120,23 @@ provider_module.ProviderParser(parser) for action in parser._actions: - action.option_strings = [re.sub(r'^--(.*)$', r'--{0}-\1'.format(provider_name), option) for option in action.option_strings] + action.option_strings = [re.sub( + r'^--(.*)$', r'--{0}-\1'.format(provider_name), option) + for option in action.option_strings] action.dest = 'auto_{0}_{1}'.format(provider_name, action.dest) - subparser._add_action(action) + subparser._add_action(action) # pylint: disable=protected-access # Take care of the fact that this provider extends object, not BaseProvider ! # Indeed we want to delegate every parameter/method call to the delegate provider # but __getattr__ is called only if the parameter/method cannot be found in the # current Provider hierarchy. If it is object, it will be the case for every relevant # call in the Lexicon library. + + class Provider(object): """ Implementation of the provider 'auto'. - For the given domain, it will resolve the actual Provider class to use by inspecting the + For the given domain, it will resolve the actual Provider class to use by inspecting the nameservers declared for the domain, using declared nameservers domain in each Lexicon DNS provider. Any call upon instantiation will be delegated to the resolved Provider. @@ -121,11 +144,18 @@ the resolved provider if it respect the naming convention: --[provider]-[parameter_name] for a command line parameter, or LEXICON_[PROVIDER]_PARAMETER_NAME for a environment variable. """ - def __init__(self, options, engine_overrides=None): - self.domain = options.get('domain') + + def __init__(self, config): + if not isinstance(config, ConfigResolver): + # If config is a plain dict, we are in a legacy situation. + # To protect the Provider API, the legacy dict is handled in a + # correctly defined ConfigResolver. + self.config = legacy_config_resolver(config) + else: + self.config = config + + self.domain = config.resolve('lexicon:domain') self.proxy_provider = None - self.options = options - self.engine_overrides = engine_overrides def authenticate(self): """ @@ -133,32 +163,50 @@ provider, then call its authenticate() method. Almost every subsequent operation will then be delegated to that provider. """ - mapping_override = self.options.get('mapping_override') + mapping_override = self.config.resolve('lexicon:auto:mapping_override') + print(mapping_override) mapping_override_processed = {} if mapping_override: for one_mapping in mapping_override.split(','): one_mapping_processed = one_mapping.split(':') - mapping_override_processed[one_mapping_processed[0]] = one_mapping_processed[1] + mapping_override_processed[one_mapping_processed[0] + ] = one_mapping_processed[1] override_provider = mapping_override_processed.get(self.domain) if override_provider: - provider = [element for element in AVAILABLE_PROVIDERS if element.__name__ == override_provider][0] - logger.info('Provider authoritatively mapped for domain %s: %s.', self.domain, provider.__name__) + provider = [ + element for element in AVAILABLE_PROVIDERS.items() + if element[0] == override_provider][0] + LOGGER.info('Provider authoritatively mapped for domain %s: %s.', + self.domain, provider.__name__) + (provider_name, provider_module) = provider else: (provider_name, provider_module) = _relevant_provider_for_domain(self.domain) - logger.info('Provider discovered for domain %s: %s.', self.domain, provider_name) + LOGGER.info('Provider discovered for domain %s: %s.', + self.domain, provider_name) - new_options = env_auth_options(provider_name) - for key, value in self.options.items(): - target_prefix = 'auto_{0}_'.format(provider_name) - if key.startswith(target_prefix): - new_options[re.sub('^{0}'.format(target_prefix), '', key)] = value - if not key.startswith('auto_'): - new_options[key] = value + new_config = ConfigResolver() + new_config.with_dict({'lexicon:provider_name': provider_name}) - new_options['provider_name'] = provider_name + target_prefix = 'auto_{0}_'.format(provider_name) + for configSource in self.config._config_sources: + if not isinstance(configSource, ArgsConfigSource): + new_config.with_config_source(configSource) + else: + # ArgsConfigSource needs to be reprocessed to rescope the provided + # args to the delegate provider + new_dict = {} + for key, value in configSource._parameters.items(): + if key.startswith(target_prefix): + new_param_name = re.sub( + '^{0}'.format(target_prefix), '', key) + new_dict['lexicon:{0}:{1}'.format( + provider_name, new_param_name)] = value + elif not key.startswith('auto_'): + new_dict['lexicon:{0}'.format(key)] = value + new_config.with_dict(new_dict) - self.proxy_provider = provider_module.Provider(new_options, self.engine_overrides) + self.proxy_provider = provider_module.Provider(new_config) self.proxy_provider.authenticate() def __getattr__(self, attr_name): diff -Nru lexicon-2.7.12/lexicon/providers/base.py lexicon-3.0.8/lexicon/providers/base.py --- lexicon-2.7.12/lexicon/providers/base.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/base.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,15 +1,15 @@ from __future__ import absolute_import -from builtins import object - -from lexicon.common.options_handler import SafeOptionsWithFallback +from lexicon.config import ConfigResolver, legacy_config_resolver class Provider(object): """ - This is the base class for all lexicon Providers. It provides common functionality and ensures that all implemented - Providers follow a standard ducktype. All standardized options will be provided here as defaults, but can be overwritten + This is the base class for all lexicon Providers. + It provides common functionality and ensures that all implemented + Providers follow a standard ducktype. + All standardized options will be provided here as defaults, but can be overwritten by environmental variables and cli arguments. Common options are: @@ -30,20 +30,32 @@ auth_password ... - :param provider_env_cli_options: is a SafeOptions object that contains all the options for this provider, merged from CLI and Env variables. - :param engine_overrides: is an empty dict under runtime conditions, only used for testing (eg. overriding api_endpoint to point to sandbox url) see tests/providers/integration_tests.py + :param config: is a ConfigResolver object that contains all the options + for this provider, merged from CLI and Env variables. """ - def __init__(self, provider_env_cli_options, engine_overrides=None): - self.provider_name = 'example', - self.engine_overrides = engine_overrides or {} - - base_options = SafeOptionsWithFallback({'ttl': 3600}, engine_overrides.get('fallbackFn') if engine_overrides else None) - base_options.update(provider_env_cli_options) - self.options = base_options + + def __init__(self, config): + if not isinstance(config, ConfigResolver): + # If config is a plain dict, we are in a legacy situation. + # To protect the Provider API, the legacy dict is handled in a + # correctly defined ConfigResolver. + self.config = legacy_config_resolver(config) + else: + self.config = config + + # Default ttl + self.config.with_dict({'ttl': 3600}) + + self.provider_name = self.config.resolve( + 'lexicon:provider_name') or self.config.resolve('lexicon:provider') + self.domain = self.config.resolve('lexicon:domain') + self.domain_id = None # Authenticate against provider, - # Make any requests required to get the domain's id for this provider, so it can be used in subsequent calls. - # Should throw an error if authentication fails for any reason, of if the domain does not exist. + # Make any requests required to get the domain's id for this provider, + # so it can be used in subsequent calls. + # Should throw an error if authentication fails for any reason, + # of if the domain does not exist. def authenticate(self): raise NotImplementedError("Providers should implement this!") @@ -67,7 +79,7 @@ def delete_record(self, identifier=None, type=None, name=None, content=None): raise NotImplementedError("Providers should implement this!") - #Helpers + # Helpers def _request(self, action='GET', url='/', data=None, query_params=None): raise NotImplementedError("Providers should implement this!") @@ -84,29 +96,39 @@ return self._request('DELETE', url, query_params=query_params) def _fqdn_name(self, record_name): - record_name = record_name.rstrip('.') # strip trailing period from fqdn if present - #check if the record_name is fully specified - if not record_name.endswith(self.options['domain']): - record_name = "{0}.{1}".format(record_name, self.options['domain']) - return "{0}.".format(record_name) #return the fqdn name + # strip trailing period from fqdn if present + record_name = record_name.rstrip('.') + # check if the record_name is fully specified + if not record_name.endswith(self.domain): + record_name = "{0}.{1}".format(record_name, self.domain) + return "{0}.".format(record_name) # return the fqdn name def _full_name(self, record_name): - record_name = record_name.rstrip('.') # strip trailing period from fqdn if present - #check if the record_name is fully specified - if not record_name.endswith(self.options['domain']): - record_name = "{0}.{1}".format(record_name, self.options['domain']) + # strip trailing period from fqdn if present + record_name = record_name.rstrip('.') + # check if the record_name is fully specified + if not record_name.endswith(self.domain): + record_name = "{0}.{1}".format(record_name, self.domain) return record_name def _relative_name(self, record_name): - record_name = record_name.rstrip('.') # strip trailing period from fqdn if present - #check if the record_name is fully specified - if record_name.endswith(self.options['domain']): - record_name = record_name[:-len(self.options['domain'])] + # strip trailing period from fqdn if present + record_name = record_name.rstrip('.') + # check if the record_name is fully specified + if record_name.endswith(self.domain): + record_name = record_name[:-len(self.domain)] record_name = record_name.rstrip('.') return record_name def _clean_TXT_record(self, record): if record['type'] == 'TXT': - # some providers have quotes around the TXT records, so we're going to remove those extra quotes + # Some providers have quotes around the TXT records, + # so we're going to remove those extra quotes record['content'] = record['content'][1:-1] return record + + def _get_lexicon_option(self, option): + return self.config.resolve('lexicon:{0}'.format(option)) + + def _get_provider_option(self, option): + return self.config.resolve('lexicon:{0}:{1}'.format(self.provider_name, option)) diff -Nru lexicon-2.7.12/lexicon/providers/cloudflare.py lexicon-3.0.8/lexicon/providers/cloudflare.py --- lexicon-2.7.12/lexicon/providers/cloudflare.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/cloudflare.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,31 +1,34 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['cloudflare.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify email address for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify email address for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.cloudflare.com/client/v4') + self.api_endpoint = 'https://api.cloudflare.com/client/v4' def authenticate(self): payload = self._get('/zones', { - 'name': self.options['domain'], + 'name': self.domain, 'status': 'active' }) @@ -36,22 +39,25 @@ self.domain_id = payload['result'][0]['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): - data = {'type': type, 'name': self._full_name(name), 'content': content} - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + data = {'type': type, 'name': self._full_name( + name), 'content': content} + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') payload = {'success': True} try: - payload = self._post('/zones/{0}/dns_records'.format(self.domain_id), data) + payload = self._post( + '/zones/{0}/dns_records'.format(self.domain_id), data) except requests.exceptions.HTTPError as err: - already_exists = next((True for error in err.response.json()['errors'] if error['code'] == 81057), False) + already_exists = next((True for error in err.response.json()[ + 'errors'] if error['code'] == 81057), False) if not already_exists: raise - logger.debug('create_record: %s', payload['success']) + LOGGER.debug('create_record: %s', payload['success']) return payload['success'] # List all records. Return an empty list if no records found @@ -66,7 +72,8 @@ if content: filter['content'] = content - payload = self._get('/zones/{0}/dns_records'.format(self.domain_id), filter) + payload = self._get( + '/zones/{0}/dns_records'.format(self.domain_id), filter) records = [] for record in payload['result']: @@ -79,7 +86,7 @@ } records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -92,12 +99,13 @@ data['name'] = self._full_name(name) if content: data['content'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') - payload = self._put('/zones/{0}/dns_records/{1}'.format(self.domain_id, identifier), data) + payload = self._put( + '/zones/{0}/dns_records/{1}'.format(self.domain_id, identifier), data) - logger.debug('update_record: %s', payload['success']) + LOGGER.debug('update_record: %s', payload['success']) return payload['success'] # Delete an existing record. @@ -109,13 +117,14 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._delete('/zones/{0}/dns_records/{1}'.format(self.domain_id, record_id)) + self._delete( + '/zones/{0}/dns_records/{1}'.format(self.domain_id, record_id)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True # Helpers @@ -127,9 +136,10 @@ r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), headers={ - 'X-Auth-Email': self.options['auth_username'], - 'X-Auth-Key': self.options.get('auth_token'), + 'X-Auth-Email': self._get_provider_option('auth_username'), + 'X-Auth-Key': self._get_provider_option('auth_token'), 'Content-Type': 'application/json' }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/cloudns.py lexicon-3.0.8/lexicon/providers/cloudns.py --- lexicon-2.7.12/lexicon/providers/cloudns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/cloudns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,34 +1,40 @@ from __future__ import absolute_import - import logging -import requests +import requests from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['cloudns.net'] + def ProviderParser(subparser): identity_group = subparser.add_mutually_exclusive_group() - identity_group.add_argument("--auth-id", help="specify user id for authentication") - identity_group.add_argument("--auth-subid", help="specify subuser id for authentication") - identity_group.add_argument("--auth-subuser", help="specify subuser name for authentication") - subparser.add_argument("--auth-password", help="specify password for authentication") + identity_group.add_argument( + "--auth-id", help="specify user id for authentication") + identity_group.add_argument( + "--auth-subid", help="specify subuser id for authentication") + identity_group.add_argument( + "--auth-subuser", help="specify subuser name for authentication") + subparser.add_argument( + "--auth-password", help="specify password for authentication") subparser.add_argument("--weight", help="specify the SRV record weight") subparser.add_argument("--port", help="specify the SRV record port") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.cloudns.net') + self.api_endpoint = 'https://api.cloudns.net' def authenticate(self): - payload = self._get('/dns/get-zone-info.json', {'domain-name': self.options['domain']}) + payload = self._get('/dns/get-zone-info.json', + {'domain-name': self.domain}) self.domain_id = payload['name'] - logger.debug('authenticate: %s', payload) + LOGGER.debug('authenticate: %s', payload) def create_record(self, type, name, content): # Skip execution if such a record already exists @@ -43,18 +49,18 @@ 'host': self._relative_name(name), 'record': content } - if self.options['ttl']: - params['ttl'] = self.options['ttl'] - if self.options['priority']: - params['priority'] = self.options['priority'] - if self.options['weight']: - params['weight'] = self.options['weight'] - if self.options['port']: - params['port'] = self.options['port'] + if self._get_lexicon_option('ttl'): + params['ttl'] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + params['priority'] = self._get_lexicon_option('priority') + if self._get_provider_option('weight'): + params['weight'] = self._get_lexicon_option('weight') + if self._get_provider_option('port'): + params['port'] = self._get_lexicon_option('port') # Add new record by calling the ClouDNS API payload = self._post('/dns/add-record.json', params) - logger.debug('create_record: %s', payload) + LOGGER.debug('create_record: %s', payload) # Error handling is already covered by self._request return True @@ -82,10 +88,11 @@ # Filter by content manually as API does not support that if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] # Print records as debug output and return them - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records def update_record(self, identifier, type=None, name=None, content=None): @@ -99,18 +106,18 @@ params['host'] = self._relative_name(name) if content: params['record'] = content - if self.options.get('ttl'): - params['ttl'] = self.options.get('ttl') - if self.options['priority']: - params['priority'] = self.options['priority'] - if self.options['weight']: - params['weight'] = self.options['weight'] - if self.options['port']: - params['port'] = self.options['port'] + if self._get_lexicon_option('ttl'): + params['ttl'] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + params['priority'] = self._get_lexicon_option('priority') + if self._get_provider_option('weight'): + params['weight'] = self._get_provider_option('weight') + if self._get_provider_option('port'): + params['port'] = self._get_provider_option('port') # Update existing record by calling the ClouDNS API payload = self._post('/dns/mod-record.json', params) - logger.debug('update_record: %s', payload) + LOGGER.debug('update_record: %s', payload) # Error handling is already covered by self._request return True @@ -124,40 +131,39 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: # Delete existing record by calling the ClouDNS API - payload = self._post('/dns/delete-record.json', {'domain-name': self.domain_id, 'record-id': record_id}) + payload = self._post( + '/dns/delete-record.json', {'domain-name': self.domain_id, 'record-id': record_id}) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) # Error handling is already covered by self._request return True - def _is_given_option(self, key): - fallback_fn = self.engine_overrides.get('fallbackFn', (lambda x: None)) - return self.options[key] and self.options[key] != fallback_fn(key) - def _build_authentication_data(self): - if not self.options['auth_password']: - raise Exception('No valid authentication data passed, expected: auth-password') - - if self._is_given_option('auth_id'): - return {'auth-id': self.options['auth_id'], 'auth-password': self.options['auth_password']} - elif self._is_given_option('auth_subid'): - return {'sub-auth-id': self.options['auth_subid'], 'auth-password': self.options['auth_password']} - elif self._is_given_option('auth_subuser'): - return {'sub-auth-user': self.options['auth_subuser'], 'auth-password': self.options['auth_password']} - elif self.options['auth_id'] or self.options['auth_subid'] or self.options['auth_subuser']: + if not self._get_provider_option('auth_password'): + raise Exception( + 'No valid authentication data passed, expected: auth-password') + + if self._get_provider_option('auth_id'): + return {'auth-id': self._get_provider_option('auth_id'), 'auth-password': self._get_provider_option('auth_password')} + elif self._get_provider_option('auth_subid'): + return {'sub-auth-id': self._get_provider_option('auth_subid'), 'auth-password': self._get_provider_option('auth_password')} + elif self._get_provider_option('auth_subuser'): + return {'sub-auth-user': self._get_provider_option('auth_subuser'), 'auth-password': self._get_provider_option('auth_password')} + elif self._get_provider_option('auth_id') or self._get_provider_option('auth_subid') or self._get_provider_option('auth_subuser'): # All the options were passed with a fallback value, return an empty dictionary. return {} else: - raise Exception('No valid authentication data passed, expected: auth-id, auth-subid, auth-subuser') + raise Exception( + 'No valid authentication data passed, expected: auth-id, auth-subid, auth-subuser') def _find_record_identifier(self, type, name, content): records = self.list_records(type, name, content) - logger.debug('records: %s', records) + LOGGER.debug('records: %s', records) if len(records) == 1: return records[0]['id'] else: @@ -175,13 +181,15 @@ data.update(self._build_authentication_data()) # Fire request against ClouDNS API and parse result as JSON - r = requests.request(action, self.api_endpoint + url, params=query_params, data=data) + r = requests.request(action, self.api_endpoint + + url, params=query_params, data=data) r.raise_for_status() payload = r.json() # Check ClouDNS specific status code and description if 'status' in payload and 'statusDescription' in payload and payload['status'] != 'Success': - raise Exception('ClouDNS API request has failed: ' + payload['statusDescription']) + raise Exception('ClouDNS API request has failed: ' + + payload['statusDescription']) # Return payload return payload diff -Nru lexicon-2.7.12/lexicon/providers/cloudxns.py lexicon-3.0.8/lexicon/providers/cloudxns.py --- lexicon-2.7.12/lexicon/providers/cloudxns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/cloudxns.py 2019-01-03 16:26:53.000000000 +0000 @@ -2,42 +2,44 @@ from __future__ import absolute_import from future.standard_library import install_aliases install_aliases() +import hashlib # nopep8 +import json # nopep8 +import logging # nopep8 +import time # nopep8 +from urllib.parse import urlencode # nopep8 -import hashlib -import json -import logging -import time +import requests # nopep8 +from lexicon.providers.base import Provider as BaseProvider # nopep8 -import requests -from lexicon.providers.base import Provider as BaseProvider - -from urllib.parse import urlencode - -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['cloudxns.net'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify API-KEY for authentication") - subparser.add_argument("--auth-token", help="specify SECRET-KEY for authentication") + subparser.add_argument( + "--auth-username", help="specify API-KEY for authentication") + subparser.add_argument( + "--auth-token", help="specify SECRET-KEY for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://www.cloudxns.net/api2') + self.api_endpoint = 'https://www.cloudxns.net/api2' def authenticate(self): payload = self._get('/domain') for record in payload['data']: - if record['domain'] == self.options['domain']+'.': + if record['domain'] == self.domain+'.': self.domain_id = record['id'] break - if self.domain_id == None: + if self.domain_id is None: raise Exception('No domain found') # Create record. If record already exists with the same content, do nothing' @@ -50,8 +52,8 @@ 'type': type, 'line_id': 1, } - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') try: payload = self._post('/record', record) @@ -60,7 +62,8 @@ if not already_exists: raise - logger.debug('create_record: %s', True) # CloudXNS will return bad HTTP Status when error, will throw at r.raise_for_status() in _request() + # CloudXNS will return bad HTTP Status when error, will throw at r.raise_for_status() in _request() + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -69,7 +72,8 @@ def list_records(self, type=None, name=None, content=None): filter = {} - payload = self._get('/record/' + self.domain_id, {'host_id':0, 'offset':0, 'row_num': 2000}) + payload = self._get('/record/' + self.domain_id, + {'host_id': 0, 'offset': 0, 'row_num': 2000}) records = [] for record in payload['data']: processed_record = { @@ -77,22 +81,25 @@ 'name': self._full_name(record['host']), 'ttl': record['ttl'], 'content': record['value'], - #this id is useless unless your doing record linking. Lets return the original record identifier. - 'id': record['record_id'] # + # this id is useless unless your doing record linking. Lets return the original record identifier. + 'id': record['record_id'] } if processed_record['type'] == 'TXT': - processed_record['content'] = processed_record['content'].replace('"', '') + processed_record['content'] = processed_record['content'].replace( + '"', '') # CloudXNS will add quotes automaticly for TXT records, https://www.cloudxns.net/Support/detail/id/114.html records.append(processed_record) if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -111,12 +118,12 @@ 'value': content, 'type': type } - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') payload = self._put('/record/' + identifier, data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -129,21 +136,23 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: - payload = self._delete('/record/' + record_id + '/' + self.domain_id) + payload = self._delete( + '/record/' + record_id + '/' + self.domain_id) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} - data['login_token'] = self.options['auth_username'] + ',' + self.options['auth_token'] + data['login_token'] = self._get_provider_option( + 'auth_username') + ',' + self._get_provider_option('auth_token') data['format'] = 'json' if query_params: query_string = '?' + urlencode(query_params) @@ -156,15 +165,16 @@ data = '' date = time.strftime('%a %b %d %H:%M:%S %Y', time.localtime()) default_headers = { - 'API-KEY': self.options['auth_username'], + 'API-KEY': self._get_provider_option('auth_username'), 'API-REQUEST-DATE': date, - 'API-HMAC': hashlib.md5("{0}{1}{2}{3}{4}{5}{6}".format(self.options['auth_username'],self.api_endpoint, url, query_string, data, date, self.options['auth_token']).encode('utf-8')).hexdigest(), - 'API-FORMAT':'json' + 'API-HMAC': hashlib.md5("{0}{1}{2}{3}{4}{5}{6}".format(self._get_provider_option('auth_username'), self.api_endpoint, url, query_string, data, date, self._get_provider_option('auth_token')).encode('utf-8')).hexdigest(), + 'API-FORMAT': 'json' } default_auth = None r = requests.request(action, self.api_endpoint + url, params=query_params, data=data, headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/conoha.py lexicon-3.0.8/lexicon/providers/conoha.py --- lexicon-2.7.12/lexicon/providers/conoha.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/conoha.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,57 +1,65 @@ from __future__ import absolute_import - import json import logging -import requests +import requests from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['conoha.io'] + def ProviderParser(subparser): - subparser.add_argument("--auth-region", help="specify region. If empty, region `tyo1` will be used.") - subparser.add_argument("--auth-token", help="specify token for authentication. If empty, the username and password will be used to create a token.") - subparser.add_argument("--auth-username", help="specify api username for authentication. Only used if --auth-token is empty.") - subparser.add_argument("--auth-password", help="specify api user password for authentication. Only used if --auth-token is empty.") - subparser.add_argument("--auth-tenant-id", help="specify tenand id for authentication. Only used if --auth-token is empty.") + subparser.add_argument( + "--auth-region", help="specify region. If empty, region `tyo1` will be used.") + subparser.add_argument( + "--auth-token", help="specify token for authentication. If empty, the username and password will be used to create a token.") + subparser.add_argument( + "--auth-username", help="specify api username for authentication. Only used if --auth-token is empty.") + subparser.add_argument( + "--auth-password", help="specify api user password for authentication. Only used if --auth-token is empty.") + subparser.add_argument( + "--auth-tenant-id", help="specify tenand id for authentication. Only used if --auth-token is empty.") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get( - 'api_endpoint', - 'https://dns-service.%s.conoha.io/v1' % options.get('region', 'tyo1') - ) - self.auth_api_endpoint = self.engine_overrides.get( - 'auth_api_endpoint', - 'https://identity.%s.conoha.io/v2.0' % options.get('region', 'tyo1') - ) + self.api_endpoint = ('https://dns-service.{0}.conoha.io/v1' + .format(self._get_provider_option('region') or 'tyo1')) + self.auth_api_endpoint = ('https://identity.{0}.conoha.io/v2.0' + .format(self._get_provider_option('region') or 'tyo1')) + self.auth_token = None # Authenticate against provider, # Make any requests required to get the domain's id for this provider, so it can be used in subsequent calls. # Should throw an error if authentication fails for any reason, of if the domain does not exist. def authenticate(self): - if not self.options['auth_token']: - if not (self.options['auth_username'] and self.options['auth_password']): - raise Exception("auth_username and auth_password or auth_token must be specified.") - auth_response = self._send_request('POST', '%s/tokens' % self.auth_api_endpoint, { - 'auth': { - 'passwordCredentials': { - 'username': self.options['auth_username'], - 'password': self.options['auth_password'] - }, - 'tenantId': self.options['auth_tenant_id'] - } - }) - self.options['auth_token'] = auth_response['access']['token']['id'] + self.auth_token = self._get_provider_option('auth_token') + if not self.auth_token: + if not (self._get_provider_option('auth_username') + and self._get_provider_option('auth_password')): + raise Exception( + "auth_username and auth_password or auth_token must be specified.") + auth_response = self._send_request('POST', '{0}/tokens' + .format(self.auth_api_endpoint), { + 'auth': { + 'passwordCredentials': { + 'username': self._get_provider_option('auth_username'), + 'password': self._get_provider_option('auth_password') + }, + 'tenantId': self._get_provider_option('auth_tenant_id') + } + }) + self.auth_token = auth_response['access']['token']['id'] payload = self._get('/domains', { - 'name': self._fqdn_name(self.options['domain']) + 'name': self._fqdn_name(self.domain) }) if not payload['domains']: @@ -69,32 +77,35 @@ raise Exception("name must be specified.") if not content: raise Exception("content must be specified.") - if not self.options.get('priority') and type in ("MX", "SRV"): + if not self._get_lexicon_option('priority') and type in ("MX", "SRV"): raise Exception("priority must be specified.") try: - self._post('/domains/%s/records' % self.domain_id, self._record_payload(type, name, content)) + self._post('/domains/{0}/records'.format(self.domain_id), + self._record_payload(type, name, content)) except requests.exceptions.HTTPError as err: # 409 Duplicate Record if err.response.status_code != 409: raise err - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found # type, name and content are used to filter records. # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None): - payload = self._get('/domains/%s/records' % self.domain_id) + payload = self._get('/domains/{0}/records'.format(self.domain_id)) records = payload['records'] if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._fqdn_name(name)] + records = [record for record in records if record['name'] + == self._fqdn_name(name)] if content: - records = [record for record in records if record['data'] == content] + records = [ + record for record in records if record['data'] == content] records = [{ 'type': record['type'], @@ -104,7 +115,7 @@ 'id': record['id'] } for record in records] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Update a record. Identifier must be specified. @@ -115,9 +126,10 @@ raise Exception("Cannot determine record") identifier = records[0]['id'] - self._put('/domains/%s/records/%s' % (self.domain_id, identifier), self._record_payload(type, name, content)) + self._put('/domains/{0}/records/{1}' + .format(self.domain_id, identifier), self._record_payload(type, name, content)) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -127,17 +139,20 @@ records = self.list_records(type, name, content) if identifier: - records = [record for record in records if record['id'] == identifier] + records = [ + record for record in records if record['id'] == identifier] for record in records: - self._delete('/domains/%s/records/%s' % (self.domain_id, record['id'])) + self._delete( + '/domains/{0}/records/{1}'.format(self.domain_id, record['id'])) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - #Helpers + # Helpers def _request(self, action='GET', url='/', data=None, query_params=None): - return self._send_request(action, "%s%s" % (self.api_endpoint, url), data, query_params) + return self._send_request(action, '{0}{1}'.format(self.api_endpoint, url), + data, query_params) def _send_request(self, action, url, data=None, query_params=None): if data is None: @@ -145,7 +160,7 @@ if query_params is None: query_params = {} r = requests.request(action, url, data=json.dumps(data), params=query_params, headers={ - 'X-Auth-Token': self.options.get('auth_token'), + 'X-Auth-Token': self.auth_token, 'Content-Type': 'application/json', 'Accept': 'application/json' }) @@ -157,8 +172,8 @@ return '%s.' % name.rstrip('.') if name else None def _record_payload(self, type, name, content): - priority = self.options.get('priority') - ttl = self.options.get('ttl') + priority = self._get_lexicon_option('priority') + ttl = self._get_lexicon_option('ttl') return { 'name': self._fqdn_name(name) if name else None, 'type': type, diff -Nru lexicon-2.7.12/lexicon/providers/constellix.py lexicon-3.0.8/lexicon/providers/constellix.py --- lexicon-2.7.12/lexicon/providers/constellix.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/constellix.py 2019-01-03 16:26:53.000000000 +0000 @@ -4,7 +4,7 @@ # 1) SOA records are not first-class record types in the Constellix API, so are not supported. # 2) We expect all records to use the "Standard" record type, so failover, pools or round robin with # failover are not supported. -# 3) Because Constellix represents record sets as a single record with multiple values attached, not as +# 3) Because Constellix represents record sets as a single record with multiple values attached, not as # a set of separate records, create and delete operations end up becoming read/update operations when # working with record sets. # @@ -15,35 +15,38 @@ # out to the Constellix folks to see if they have plans to clean up the API to resolve this. from __future__ import absolute_import - import base64 import contextlib +import hashlib import hmac import json import locale import logging import time -import hashlib - -import requests from builtins import bytes +import requests from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['constellix.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify the API key username for authentication") - subparser.add_argument("--auth-token", help="specify secret key for authenticate=") + subparser.add_argument( + "--auth-username", help="specify the API key username for authentication") + subparser.add_argument( + "--auth-token", help="specify secret key for authenticate=") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.dns.constellix.com/v1') + self.api_endpoint = 'https://api.dns.constellix.com/v1' def authenticate(self): try: @@ -53,9 +56,9 @@ payload = {} else: raise e - + for domain in payload: - if domain['name'] == self.options['domain']: + if domain['name'] == self.domain: self.domain_id = domain['id'] self.domain_details = domain continue @@ -63,20 +66,21 @@ if not self.domain_id: raise Exception('No domain found') - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'name': self._relative_name(name), - 'ttl': self.options['ttl'], + 'ttl': self._get_lexicon_option('ttl'), 'roundRobin': [{'disableFlag': False, - 'value': content}], + 'value': content}], } payload = {} try: - payload = self._post('/domains/{0}/records/{1}/'.format(self.domain_id, type), record) + payload = self._post( + '/domains/{0}/records/{1}/'.format(self.domain_id, type), record) except requests.exceptions.HTTPError as e: # If there is already a record with that name, we need to do an update. if e.response.status_code == 400: @@ -87,15 +91,16 @@ # Constellix will throw an error. if content not in new_content: new_content.append(content) - self.update_record(existing_records[0]['id'], type=type, name=name, content=new_content) + self.update_record( + existing_records[0]['id'], type=type, name=name, content=new_content) else: raise - logger.debug('create_record: %s', 'name' in payload) + LOGGER.debug('create_record: %s', 'name' in payload) return True - # Currently returns the first value for hosts where there may be multiple # values. Need to check to see how this is handled for other providers. + def list_records(self, type=None, name=None, content=None, identifier=None): self._check_type(type) @@ -105,7 +110,8 @@ if not type or type == 'LOC': payload = self._get('/domains/{0}/records/'.format(self.domain_id)) else: - payload = self._get('/domains/{0}/records/{1}/'.format(self.domain_id, type)) + payload = self._get( + '/domains/{0}/records/{1}/'.format(self.domain_id, type)) records = [] @@ -113,18 +119,19 @@ for rr in record['roundRobin']: processed_record = { 'type': record['type'], - 'name': '{0}.{1}'.format(record['name'], self.options['domain']), + 'name': '{0}.{1}'.format(record['name'], self.domain), 'ttl': record['ttl'], 'content': rr['value'], 'id': record['id'] - } + } processed_record = self._clean_TXT_record(processed_record) records.append(processed_record) - records = self._filter_records(records, type=type, name=name, content=content, identifier=identifier) + records = self._filter_records( + records, type=type, name=name, content=content, identifier=identifier) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -147,7 +154,7 @@ data = { 'id': identifier, - 'ttl': self.options['ttl'], + 'ttl': self._get_lexicon_option('ttl'), 'name': self._relative_name(name) } @@ -157,9 +164,10 @@ data['roundRobin'].append({'disableFlag': False, 'value': c}) - payload = self._put('/domains/{0}/records/{1}/{2}/'.format(self.domain_id, type, identifier), data) + payload = self._put( + '/domains/{0}/records/{1}/{2}/'.format(self.domain_id, type, identifier), data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -167,7 +175,8 @@ def delete_record(self, identifier=None, type=None, name=None, content=None): self._check_type(type) - records = self.list_records(identifier=identifier, type=type, name=name) + records = self.list_records( + identifier=identifier, type=type, name=name) # If we are filtering delete records by content and we are going to have # at least one record left over after deleting, then this becomes an @@ -176,7 +185,8 @@ current_content = set(r['content'] for r in records) if content in current_content and len(current_content) > 1: current_content.remove(content) - self.update_record(records[0]['id'], type=type, name=name, content=list(current_content)) + self.update_record( + records[0]['id'], type=type, name=name, content=list(current_content)) return True delete_record_id = set(record['id'] for record in records) @@ -184,12 +194,13 @@ # We need a type to do a delete, so pull one from the first record if it's not supplied. if not type: type = records[0]['type'] - + for record_id in delete_record_id: - payload = self._delete('/domains/{0}/records/{1}/{2}/'.format(self.domain_id, type, record_id)) + payload = self._delete( + '/domains/{0}/records/{1}/{2}/'.format(self.domain_id, type, record_id)) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True # Helpers @@ -199,11 +210,11 @@ # improvement if type == 'SOA': - raise Exception('{0} record type is not supported in the Constellix Provider'.format(type)) + raise Exception( + '{0} record type is not supported in the Constellix Provider'.format(type)) return True - def _filter_records(self, records, type=None, name=None, content=None, identifier=None): _records = [] for record in records: @@ -222,14 +233,15 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'x-cnsdns-apiKey': self.options['auth_username'], + 'x-cnsdns-apiKey': self._get_provider_option('auth_username'), } default_auth = None # Date string in epoch format request_date = str(int(time.time() * 1000)) - hashed = hmac.new(self.options['auth_token'].encode('utf-8'), request_date.encode('utf-8'), digestmod=hashlib.sha1) + hashed = hmac.new(self._get_provider_option('auth_token').encode( + 'utf-8'), request_date.encode('utf-8'), digestmod=hashlib.sha1) default_headers['x-cnsdns-requestDate'] = request_date default_headers['x-cnsdns-hmac'] = base64.b64encode(hashed.digest()) @@ -238,7 +250,8 @@ data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() # PUT and DELETE actions dont return valid json. if action == 'DELETE' or action == 'PUT': diff -Nru lexicon-2.7.12/lexicon/providers/digitalocean.py lexicon-3.0.8/lexicon/providers/digitalocean.py --- lexicon-2.7.12/lexicon/providers/digitalocean.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/digitalocean.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,30 +1,32 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['digitalocean.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.digitalocean.com/v2') + self.api_endpoint = 'https://api.digitalocean.com/v2' def authenticate(self): - payload = self._get('/domains/{0}'.format(self.options['domain'])) - self.domain_id = self.options['domain'] + payload = self._get('/domains/{0}'.format(self.domain)) + self.domain_id = self.domain def create_record(self, type, name, content): # check if record already exists @@ -36,10 +38,12 @@ } if type == 'CNAME': - record['data'] = record['data'].rstrip('.') + '.' # make sure a the data is always a FQDN for CNAMe. + # make sure a the data is always a FQDN for CNAMe. + record['data'] = record['data'].rstrip('.') + '.' - payload = self._post('/domains/{0}/records'.format(self.domain_id), record) - logger.debug('create_record: %s', True) + payload = self._post( + '/domains/{0}/records'.format(self.domain_id), record) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -73,11 +77,13 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'].lower() == content.lower()] + records = [ + record for record in records if record['content'].lower() == content.lower()] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -91,9 +97,10 @@ if content: data['data'] = content - payload = self._put('/domains/{0}/records/{1}'.format(self.domain_id, identifier), data) + payload = self._put( + '/domains/{0}/records/{1}'.format(self.domain_id, identifier), data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -105,18 +112,19 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._delete('/domains/{0}/records/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/domains/{0}/records/{1}'.format(self.domain_id, record_id)) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -125,7 +133,7 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'Authorization': 'Bearer {0}'.format(self.options.get('auth_token')) + 'Authorization': 'Bearer {0}'.format(self._get_provider_option('auth_token')) } if not url.startswith(self.api_endpoint): url = self.api_endpoint + url @@ -133,7 +141,8 @@ r = requests.request(action, url, params=query_params, data=json.dumps(data), headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() if action == 'DELETE': return '' else: diff -Nru lexicon-2.7.12/lexicon/providers/dnsimple.py lexicon-3.0.8/lexicon/providers/dnsimple.py --- lexicon-2.7.12/lexicon/providers/dnsimple.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/dnsimple.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,29 +1,35 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['dnsimple.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify api token for authentication") - subparser.add_argument("--auth-username", help="specify email address for authentication") - subparser.add_argument("--auth-password", help="specify password for authentication") - subparser.add_argument("--auth-2fa", help="specify two-factor auth token (OTP) to use with email/password authentication") + subparser.add_argument( + "--auth-token", help="specify api token for authentication") + subparser.add_argument( + "--auth-username", help="specify email address for authentication") + subparser.add_argument( + "--auth-password", help="specify password for authentication") + subparser.add_argument( + "--auth-2fa", help="specify two-factor auth token (OTP) to use with email/password authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None self.account_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.dnsimple.com/v2') + self.api_endpoint = self._get_provider_option( + 'api_endpoint') or 'https://api.dnsimple.com/v2' def authenticate(self): @@ -33,16 +39,17 @@ raise Exception('No account id found') for account in payload: - dompayload = self._get('/{0}/domains'.format(account['id']), query_params={'name_like': self.options.get('domain')}) + dompayload = self._get( + '/{0}/domains'.format(account['id']), query_params={'name_like': self.domain}) if len(dompayload) > 0 and dompayload[0]['id']: self.account_id = account['id'] self.domain_id = dompayload[0]['id'] if not self.account_id: - raise Exception('No domain found like {}'.format(self.options.get('domain'))) - + raise Exception('No domain found like {}'.format(self.domain)) # Create record. If record already exists with the same content, do nothing + def create_record(self, type, name, content): # check if record already exists existing_records = self.list_records(type, name, content) @@ -54,16 +61,17 @@ 'name': self._relative_name(name), 'content': content } - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') - if self.options.get('priority'): - record['priority'] = self.options.get('priority') - if self.options.get('regions'): - record['regions'] = self.options.get('regions') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + record['priority'] = self._get_lexicon_option('priority') + if self._get_provider_option('regions'): + record['regions'] = self._get_provider_option('regions') - payload = self._post('{0}/zones/{1}/records'.format(self.account_id, self.options.get('domain')), record) + payload = self._post( + '{0}/zones/{1}/records'.format(self.account_id, self.domain), record) - logger.debug('create_record: %s', 'id' in payload) + LOGGER.debug('create_record: %s', 'id' in payload) return 'id' in payload # List all records. Return an empty list if no records found @@ -75,13 +83,14 @@ filter['type'] = type if name: filter['name'] = self._relative_name(name) - payload = self._get('/{0}/zones/{1}/records'.format(self.account_id, self.options.get('domain')), query_params=filter) + payload = self._get( + '/{0}/zones/{1}/records'.format(self.account_id, self.domain), query_params=filter) records = [] for record in payload: processed_record = { 'type': record['type'], - 'name': '{}'.format(self.options.get('domain')) if record['name'] == "" else '{0}.{1}'.format(record['name'],self.options.get('domain')), + 'name': '{}'.format(self.domain) if record['name'] == "" else '{0}.{1}'.format(record['name'], self.domain), 'ttl': record['ttl'], 'content': record['content'], 'id': record['id'] @@ -91,9 +100,10 @@ records.append(processed_record) if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -101,7 +111,7 @@ data = {} - if identifier == None: + if identifier is None: records = self.list_records(type, name, content) identifiers = [record["id"] for record in records] else: @@ -111,18 +121,19 @@ data['name'] = self._relative_name(name) if content: data['content'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') - if self.options.get('priority'): - data['priority'] = self.options.get('priority') - if self.options.get('regions'): - data['regions'] = self.options.get('regions') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + data['priority'] = self._get_lexicon_option('priority') + if self._get_provider_option('regions'): + data['regions'] = self._get_provider_option('regions') for identifier in identifiers: - payload = self._patch('/{0}/zones/{1}/records/{2}'.format(self.account_id, self.options.get('domain'), identifier), data) - logger.debug('update_record: %s', identifier) + payload = self._patch( + '/{0}/zones/{1}/records/{2}'.format(self.account_id, self.domain, identifier), data) + LOGGER.debug('update_record: %s', identifier) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -135,17 +146,18 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: - payload = self._delete('/{0}/zones/{1}/records/{2}'.format(self.account_id, self.options.get('domain'), record_id)) + payload = self._delete( + '/{0}/zones/{1}/records/{2}'.format(self.account_id, self.domain, record_id)) # is always True at this point; if a non 2xx response is returned, an error is raised. - logger.debug('delete_record: True') + LOGGER.debug('delete_record: True') return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -157,12 +169,15 @@ } default_auth = None - if self.options.get('auth_token'): - default_headers['Authorization'] = "Bearer {0}".format(self.options.get('auth_token')) - elif self.options.get('auth_username') and self.options.get('auth_password'): - default_auth = (self.options.get('auth_username'),self.options.get('auth_password')) - if self.options.get('auth_2fa'): - default_headers['X-Dnsimple-OTP'] = self.options.get('auth_2fa') + if self._get_provider_option('auth_token'): + default_headers['Authorization'] = "Bearer {0}".format( + self._get_provider_option('auth_token')) + elif self._get_provider_option('auth_username') and self._get_provider_option('auth_password'): + default_auth = (self._get_provider_option( + 'auth_username'), self._get_provider_option('auth_password')) + if self._get_provider_option('auth_2fa'): + default_headers['X-Dnsimple-OTP'] = self._get_provider_option( + 'auth_2fa') else: raise Exception('No valid authentication mechanism found') @@ -170,8 +185,9 @@ data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. - if r.text and r.json()['data'] == None: + # if the request fails for any reason, throw an error. + r.raise_for_status() + if r.text and r.json()['data'] is None: raise Exception('No data returned') return r.json()['data'] if r.text else None diff -Nru lexicon-2.7.12/lexicon/providers/dnsmadeeasy.py lexicon-3.0.8/lexicon/providers/dnsmadeeasy.py --- lexicon-2.7.12/lexicon/providers/dnsmadeeasy.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/dnsmadeeasy.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,37 +1,42 @@ from __future__ import absolute_import - import contextlib import hmac import json import locale import logging +from builtins import bytes from email.utils import formatdate from hashlib import sha1 import requests -from builtins import bytes - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['dnsmadeeasy'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.dnsmadeeasy.com/V2.0') + self.api_endpoint = self._get_provider_option( + 'api_endpoint') or 'https://api.dnsmadeeasy.com/V2.0' def authenticate(self): try: - payload = self._get('/dns/managed/name', {'domainname': self.options['domain']}) + payload = self._get('/dns/managed/name', + {'domainname': self.domain}) except requests.exceptions.HTTPError as e: if e.response.status_code == 404: payload = {} @@ -43,24 +48,25 @@ self.domain_id = payload['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'type': type, 'name': self._relative_name(name), 'value': content, - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } payload = {} try: - payload = self._post('/dns/managed/{0}/records/'.format(self.domain_id), record) + payload = self._post( + '/dns/managed/{0}/records/'.format(self.domain_id), record) except requests.exceptions.HTTPError as e: if e.response.status_code != 400: raise # http 400 is ok here, because the record probably already exists - logger.debug('create_record: %s', 'name' in payload) + LOGGER.debug('create_record: %s', 'name' in payload) return True # List all records. Return an empty list if no records found @@ -72,13 +78,14 @@ filter['type'] = type if name: filter['recordName'] = self._relative_name(name) - payload = self._get('/dns/managed/{0}/records'.format(self.domain_id), filter) + payload = self._get( + '/dns/managed/{0}/records'.format(self.domain_id), filter) records = [] for record in payload['data']: processed_record = { 'type': record['type'], - 'name': '{0}.{1}'.format(record['name'], self.options['domain']), + 'name': '{0}.{1}'.format(record['name'], self.domain), 'ttl': record['ttl'], 'content': record['value'], 'id': record['id'] @@ -88,9 +95,10 @@ records.append(processed_record) if content: - records = [record for record in records if record['content'].lower() == content.lower()] + records = [ + record for record in records if record['content'].lower() == content.lower()] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -98,7 +106,7 @@ data = { 'id': identifier, - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } if name: @@ -108,9 +116,10 @@ if type: data['type'] = type - payload = self._put('/dns/managed/{0}/records/{1}'.format(self.domain_id, identifier), data) + payload = self._put( + '/dns/managed/{0}/records/{1}'.format(self.domain_id, identifier), data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -122,17 +131,17 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._delete('/dns/managed/{0}/records/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/dns/managed/{0}/records/{1}'.format(self.domain_id, record_id)) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers def _request(self, action='GET', url='/', data=None, query_params=None): @@ -143,14 +152,14 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'x-dnsme-apiKey': self.options['auth_username'] + 'x-dnsme-apiKey': self._get_provider_option('auth_username') } default_auth = None # Date string in HTTP format e.g. Sat, 12 Feb 2011 20:59:04 GMT request_date = formatdate(usegmt=True) - hashed = hmac.new(bytes(self.options['auth_token'], 'ascii'), + hashed = hmac.new(bytes(self._get_provider_option('auth_token'), 'ascii'), bytes(request_date, 'ascii'), sha1) default_headers['x-dnsme-requestDate'] = request_date @@ -160,7 +169,8 @@ data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() # PUT and DELETE actions dont return valid json. if action == 'DELETE' or action == 'PUT': diff -Nru lexicon-2.7.12/lexicon/providers/dnspark.py lexicon-3.0.8/lexicon/providers/dnspark.py --- lexicon-2.7.12/lexicon/providers/dnspark.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/dnspark.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,39 +1,41 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['dnspark.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify api key for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify api key for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.dnspark.com/v2') + self.api_endpoint = 'https://api.dnspark.com/v2' def authenticate(self): - payload = self._get('/dns/{0}'.format(self.options['domain'])) + payload = self._get('/dns/{0}'.format(self.domain)) if not payload['additional']['domain_id']: raise Exception('No domain found') self.domain_id = payload['additional']['domain_id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'rname': self._relative_name(name), @@ -47,8 +49,8 @@ if e.response.status_code == 400: payload = {} raise e - # http 400 is ok here, because the record probably already exists - logger.debug('create_record: %s', True) + # http 400 is ok here, because the record probably already exists + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -72,18 +74,20 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. def update_record(self, identifier, type=None, name=None, content=None): data = { - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } if type: data['rtype'] = type @@ -94,7 +98,7 @@ payload = self._put('/dns/{0}'.format(identifier), data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -107,17 +111,17 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) - + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: payload = self._delete('/dns/{0}'.format(record_id)) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -127,11 +131,13 @@ 'Accept': 'application/json', 'Content-Type': 'application/json' } - default_auth = (self.options['auth_username'], self.options['auth_token']) + default_auth = (self._get_provider_option('auth_username'), + self._get_provider_option('auth_token')) r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/dnspod.py lexicon-3.0.8/lexicon/providers/dnspod.py --- lexicon-2.7.12/lexicon/providers/dnspod.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/dnspod.py 2019-01-03 16:26:53.000000000 +0000 @@ -7,32 +7,36 @@ from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['dnsapi.cn'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify api id for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify api id for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://dnsapi.cn') + self.api_endpoint = 'https://dnsapi.cn' def authenticate(self): - payload = self._post('/Domain.Info', {'domain':self.options['domain']}) + payload = self._post('/Domain.Info', {'domain': self.domain}) if payload['status']['code'] != '1': raise Exception(payload['status']['message']) self.domain_id = payload['domain']['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'domain_id': self.domain_id, @@ -41,15 +45,15 @@ 'record_line': '默认', 'value': content } - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') payload = self._post('/Record.Create', record) if payload['status']['code'] not in ['1', '31']: raise Exception(payload['status']['message']) - logger.debug('create_record: %s', payload['status']['code'] == '1') + LOGGER.debug('create_record: %s', payload['status']['code'] == '1') return payload['status']['code'] == '1' # List all records. Return an empty list if no records found @@ -58,8 +62,8 @@ def list_records(self, type=None, name=None, content=None): filter = {} - payload = self._post('/Record.List', {'domain':self.options['domain']}) - logger.debug('payload: %s', payload) + payload = self._post('/Record.List', {'domain': self.domain}) + LOGGER.debug('payload: %s', payload) records = [] for record in payload['records']: processed_record = { @@ -67,19 +71,22 @@ 'name': self._full_name(record['name']), 'ttl': record['ttl'], 'content': record['value'], - #this id is useless unless your doing record linking. Lets return the original record identifier. - 'id': record['id'] # + # this id is useless unless your doing record linking. + # Lets return the original record identifier. + 'id': record['id'] } records.append(processed_record) if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -93,15 +100,15 @@ 'record_line': '默认', 'value': content } - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') - logger.debug('data: %s', data) + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') + LOGGER.debug('data: %s', data) payload = self._post('/Record.Modify', data) - logger.debug('payload: %s', payload) + LOGGER.debug('payload: %s', payload) if payload['status']['code'] != '1': raise Exception(payload['status']['message']) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -113,25 +120,27 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._post('/Record.Remove', {'domain_id': self.domain_id, 'record_id': record_id}) + payload = self._post( + '/Record.Remove', {'domain_id': self.domain_id, 'record_id': record_id}) - #if payload['status']['code'] != '1': + # if payload['status']['code'] != '1': # raise Exception(payload['status']['message']) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} - data['login_token'] = self.options['auth_username'] + ',' + self.options['auth_token'] + data['login_token'] = self._get_provider_option( + 'auth_username') + ',' + self._get_provider_option('auth_token') data['format'] = 'json' if query_params is None: query_params = {} @@ -141,5 +150,6 @@ data=data, headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/easydns.py lexicon-3.0.8/lexicon/providers/easydns.py --- lexicon-2.7.12/lexicon/providers/easydns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/easydns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,57 +1,61 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['easydns.net'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://rest.easydns.net') + self.api_endpoint = self._get_provider_option( + 'api_endpoint') or 'https://rest.easydns.net' def authenticate(self): - payload = self._get('/domain/{0}'.format(self.options['domain'])) + payload = self._get('/domain/{0}'.format(self.domain)) if payload['data']['exists'] == 'N': raise Exception('No domain found') self.domain_id = payload['data']['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'type': type, 'domain': self.domain_id, 'host': self._relative_name(name), - 'ttl': self.options['ttl'], + 'ttl': self._get_lexicon_option('ttl'), 'prio': 0, 'rdata': content } payload = {} try: - payload = self._put('/zones/records/add/{0}/{1}'.format(self.domain_id, type), record) + payload = self._put( + '/zones/records/add/{0}/{1}'.format(self.domain_id, type), record) except requests.exceptions.HTTPError as e: if e.response.status_code == 400: payload = {} # http 400 is ok here, because the record probably already exists - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -75,18 +79,20 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. def update_record(self, identifier, type=None, name=None, content=None): data = { - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } if type: data['type'] = type @@ -97,7 +103,7 @@ payload = self._post('/zones/records/{0}'.format(identifier), data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -109,26 +115,27 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) + + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: - payload = self._delete('/zones/records/{0}/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/zones/records/{0}/{1}'.format(self.domain_id, record_id)) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} if query_params is None: query_params = {} query_params['format'] = 'json' - query_params['_user'] = self.options['auth_username'] - query_params['_key'] = self.options['auth_token'] + query_params['_user'] = self._get_provider_option('auth_username') + query_params['_key'] = self._get_provider_option('auth_token') default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -137,5 +144,6 @@ r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/easyname.py lexicon-3.0.8/lexicon/providers/easyname.py --- lexicon-2.7.12/lexicon/providers/easyname.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/easyname.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,450 @@ +from __future__ import absolute_import, print_function +import logging +import sys + +from requests import Response, Session + +from .base import Provider as BaseProvider + + +LOGGER = logging.getLogger(__name__) + +NAMESERVER_DOMAINS = ['easyname.eu'] + + +def ProviderParser(subparser): + subparser.description = """A provider for Easyname DNS.""" + subparser.add_argument( + '--auth-username', + help='Specify username used to authenticate' + ) + subparser.add_argument( + '--auth-password', + help='Specify password used to authenticate', + ) + + +class Provider(BaseProvider): + """ + easyname provider + """ + + URLS = { + 'login': 'https://my.easyname.com/en/login', + 'domain_list': 'https://my.easyname.com/domains', + 'overview': 'https://my.easyname.com/hosting/view-user.php', + 'dns': 'https://my.easyname.com/domains/settings/dns.php?domain={}', + 'dns_create_entry': 'https://my.easyname.com/domains/settings/form.php?domain={}', + 'dns_delete_entry': 'https://my.easyname.com/domains/settings/delete_record.php?domain={}&confirm=1&id={}' + } + + def __init__(self, config): + super(Provider, self).__init__(config) + self.session = Session() + self.domain_id = None + self._records = None + + def authenticate(self): + """ + Authenticates against Easyname website and try to find out the domain + id. + Easyname uses a CSRF token in its login form, so two requests are + neccessary to actually login. + + Returns: + bool: True if domain id was found. + + Raises: + AssertionError: When a request returns unexpected or unknown data. + ValueError: When login data is wrong or the domain does not exist. + """ + csrf_token = self._get_csrf_token() + self._login(csrf_token) + + domain_text_element = self._get_domain_text_of_authoritative_zone() + self.domain_id = self._get_domain_id(domain_text_element) + LOGGER.debug('Easyname domain ID: {}'.format(self.domain_id)) + + return True + + def create_record(self, type, name, content, id=None): + """ + Create a new DNS entry in the domain zone if it does not already exist. + + Args: + type (str): The DNS type (e.g. A, TXT, MX, etc) of the new entry. + name (str): The name of the new DNS entry, e.g the domain for which a + MX entry shall be valid. + content (str): The content of the new DNS entry, e.g. the mail server + hostname for a MX entry. + [id] (str): The easyname id of a DNS entry. Use to overwrite an + existing entry. + + Returns: + bool: True if the record was created successfully, False otherwise. + """ + name = self._relative_name(name) if name is not None else name + LOGGER.debug('Creating record with name {}'.format(name)) + if self._is_duplicate_record(type, name, content): + return True + + data = self._get_post_data_to_create_dns_entry(type, name, content, id) + LOGGER.debug('Create DNS data: {}'.format(data)) + create_response = self.session.post( + self.URLS['dns_create_entry'].format(self.domain_id), + data=data + ) + self._invalidate_records_cache() + self._log('Create DNS entry', create_response) + + # Pull a list of records and check for ours + was_success = len(self.list_records(type, name, content)) > 0 + if was_success: + msg = 'Successfully added record {}' + else: + msg = 'Failed to add record {}' + + LOGGER.info(msg.format(name)) + return was_success + + def delete_record(self, identifier=None, type=None, name=None, content=None): + """ + Delete one or more DNS entries in the domain zone that match the given + criteria. + + Args: + [identifier] (str): An ID to match against DNS entry easyname IDs. + [type] (str): A DNS type (e.g. A, TXT, MX, etc) to match against DNS + entry types. + [name] (str): A name to match against DNS entry names. + [content] (str): A content to match against a DNS entry contents. + + Returns: + bool: True if the record(s) were deleted successfully, False + otherwise. + """ + success_url = self.URLS['dns'].format(self.domain_id) + record_ids = self._get_matching_dns_entry_ids(identifier, type, + name, content) + LOGGER.debug('Record IDs to delete: {}'.format(record_ids)) + + success = True + for rec_id in record_ids: + delete_response = self.session.get( + self.URLS['dns_delete_entry'].format(self.domain_id, rec_id)) + self._invalidate_records_cache() + self._log('Delete DNS entry {}'.format(rec_id), delete_response) + success = success and delete_response.url == success_url + + return success + + def update_record(self, identifier, type=None, name=None, content=None): + """ + Update a DNS entry identified by identifier or name in the domain zone. + Any non given argument will leave the current value of the DNS entry. + + Args: + identifier (str): The easyname id of the DNS entry to update. + [type] (str): The DNS type (e.g. A, TXT, MX, etc) of the new entry. + [name] (str): The name of the new DNS entry, e.g the domain for which + a MX entry shall be valid. + [content] (str): The content of the new DNS entry, e.g. the mail + server hostname for a MX entry. + + Returns: + bool: True if the record was updated successfully, False otherwise. + + Raises: + AssertionError: When a request returns unexpected or unknown data. + """ + if identifier is not None: + identifier = int(identifier) + records = self.list_records(id=identifier) + else: + records = self.list_records(name=name, type=type) + LOGGER.debug('Records to update ({}): {}'.format( + len(records), records)) + assert len(records) > 0, 'No record found to update' + success = True + + for record in records: + name = name if name is not None else record['name'] + type = type if type is not None else record['type'] + content = content if content is not None \ + else record['content'] + success = success and self.create_record(type, + name, + content, + record['id']) + return success + + def list_records(self, type=None, name=None, content=None, id=None): + """ + Filter and list DNS entries of domain zone on Easyname. + Easyname shows each entry in a HTML table row and each attribute on a + table column. + + Args: + [type] (str): Filter by DNS type (e.g. A, TXT, MX, etc) + [name] (str): Filter by the name of the DNS entry, e.g the domain for + which a MX entry shall be valid. + [content] (str): Filter by the content of the DNS entry, e.g. the + mail server hostname for a MX entry. + [id] (str): Filter by the easyname id of the DNS entry. + + Returns: + list: A list of DNS entries. A DNS entry is an object with DNS + attribute names as keys (e.g. name, content, priority, etc) + and additionally an id. + + Raises: + AssertionError: When a request returns unexpected or unknown data. + """ + name = self._full_name(name) if name is not None else name + if self._records is None: + records = [] + rows = self._get_dns_entry_trs() + + for no, row in enumerate(rows): + self._log('DNS list entry', row) + try: + rec = {} + if row.has_attr('ondblclick'): + rec['id'] = int(row['ondblclick'].split( + 'id=')[1].split("'")[0]) + else: + rec['id'] = -no + + columns = row.find_all('td') + rec['name'] = (columns[0].string or '').strip() + rec['type'] = (columns[1].contents[1] or '').strip() + rec['content'] = (columns[2].string or '').strip() + rec['priority'] = (columns[3].string or '').strip() + rec['ttl'] = (columns[4].string or '').strip() + + if len(rec['priority']) > 0: + rec['priority'] = int(rec['priority']) + + if len(rec['ttl']) > 0: + rec['ttl'] = int(rec['ttl']) + except Exception as e: + errmsg = 'Cannot parse DNS entry ({}).'.format(e) + LOGGER.warning(errmsg) + raise AssertionError(errmsg) + records.append(rec) + self._records = records + + records = self._filter_records(self._records, type, name, content, id) + LOGGER.debug('Final records ({}): {}'.format(len(records), records)) + return records + + def _request(self, action='GET', url='/', data=None, query_params=None): + pass + + def _invalidate_records_cache(self): + """ + Invalidate DNS entries cache such that list_records will do a new + request to retrieve DNS entries. + """ + self._records = None + + def _get_post_data_to_create_dns_entry(self, type, name, content, id=None): + """ + Build and return the post date that is needed to create a DNS entry. + """ + is_update = id is not None + if is_update: + records = self.list_records(id=id) + assert len(records) == 1, 'ID is not unique or does not exist' + record = records[0] + LOGGER.debug('Create post data to update record: {}'. + format(record)) + + data = { + 'id': str(id) if is_update else '', + 'action': 'save', + 'name': name, + 'type': type, + 'content': content, + 'prio': str(record['priority']) if is_update else '10', + 'ttl': str(record['ttl']) if is_update else '360', + 'commit': '' + } + ttl = self._get_lexicon_option('ttl') + if ttl and ttl > 360: + data['ttl'] = str(ttl) + + prio = self._get_lexicon_option('priority') + if prio and prio > 0: + data['prio'] = str(prio) + + return data + + def _is_duplicate_record(self, type, name, content): + """Check if DNS entry already exists.""" + records = self.list_records(type, name, content) + is_duplicate = len(records) >= 1 + if is_duplicate: + LOGGER.info('Duplicate record {} {} {}, NOOP'. + format(type, name, content)) + return is_duplicate + + def _get_matching_dns_entry_ids(self, identifier=None, type=None, + name=None, content=None): + """Return a list of DNS entries that match the given criteria.""" + record_ids = [] + if not identifier: + records = self.list_records(type, name, content) + record_ids = [record['id'] for record in records] + else: + record_ids.append(identifier) + return record_ids + + def _get_dns_entry_trs(self): + """ + Return the TR elements holding the DNS entries. + """ + from bs4 import BeautifulSoup + dns_list_response = self.session.get( + self.URLS['dns'].format(self.domain_id)) + self._log('DNS list', dns_list_response) + assert dns_list_response.status_code == 200, \ + 'Could not load DNS entries.' + + html = BeautifulSoup(dns_list_response.content, 'html.parser') + self._log('DNS list', html) + dns_table = html.find('table', {'id': 'cp_domains_dnseintraege'}) + assert dns_table is not None, 'Could not find DNS entry table' + + def _is_zone_tr(elm): + has_ondblclick = elm.has_attr('ondblclick') + has_class = elm.has_attr('class') + return elm.name.lower() == 'tr' and (has_class or has_ondblclick) + + rows = dns_table.findAll(_is_zone_tr) + assert rows is not None and len(rows) > 0, \ + 'Could not find any DNS entries' + return rows + + def _filter_records(self, records, type=None, name=None, content=None, id=None): + """ + Filter dns entries based on type, name or content. + """ + if len(records) < 1: + return records + if id is not None: + LOGGER.debug('Filtering {} records by id: {}'. + format(len(records), id)) + records = [record for record in records if record['id'] == id] + if type is not None: + LOGGER.debug('Filtering {} records by type: {}'. + format(len(records), type)) + records = [record for record in records if record['type'] == type] + if name is not None: + LOGGER.debug('Filtering {} records by name: {}'. + format(len(records), name)) + if name.endswith('.'): + name = name[:-1] + records = [record for record in records if name == record['name']] + if content is not None: + LOGGER.debug('Filtering {} records by content: {}'. + format(len(records), content.lower())) + records = [record for record in records if + record['content'].lower() == content.lower()] + return records + + def _get_csrf_token(self): + """Return the CSRF Token of easyname login form.""" + from bs4 import BeautifulSoup + home_response = self.session.get(self.URLS['login']) + self._log('Home', home_response) + assert home_response.status_code == 200, \ + 'Could not load Easyname login page.' + + html = BeautifulSoup(home_response.content, 'html.parser') + self._log('Home', html) + csrf_token_field = html.find('input', {'id': 'loginxtoken'}) + assert csrf_token_field is not None, 'Could not find login token.' + return csrf_token_field['value'] + + def _login(self, csrf_token): + """Attempt to login session on easyname.""" + login_response = self.session.post( + self.URLS['login'], + data={ + 'username': self._get_provider_option('auth_username') or '', + 'password': self._get_provider_option('auth_password') or '', + 'submit': '', + 'loginxtoken': csrf_token, + } + ) + self._log('Login', login_response) + assert login_response.status_code == 200, \ + 'Could not login due to a network error.' + assert login_response.url == self.URLS['overview'], \ + 'Easyname login failed, bad EASYNAME_USER or EASYNAME_PASS.' + + def _get_domain_text_of_authoritative_zone(self): + """Get the authoritative name zone.""" + # We are logged in, so get the domain list + from bs4 import BeautifulSoup + zones_response = self.session.get(self.URLS['domain_list']) + self._log('Zone', zones_response) + assert zones_response.status_code == 200, \ + 'Could not retrieve domain list due to a network error.' + + html = BeautifulSoup(zones_response.content, 'html.parser') + self._log('Zone', html) + domain_table = html.find('table', {'id': 'cp_domain_table'}) + assert domain_table is not None, 'Could not find domain table' + + # (Sub)domains can either be managed in their own zones or by the + # zones of their parent (sub)domains. Iterate over all subdomains + # (starting with the deepest one) and see if there is an own zone + # for it. + domain = self.domain or '' + domain_text = None + subdomains = domain.split('.') + while True: + domain = '.'.join(subdomains) + LOGGER.debug('Check if {} has own zone'.format(domain)) + domain_text = domain_table.find(string=domain) + if domain_text is not None or len(subdomains) < 3: + break + subdomains.pop(0) + + # Update domain to equal the zone's domain. This is important if we are + # handling a subdomain that has no zone of itself. If we do not do + # this, self._relative_name will strip also a part of the subdomain + # away. + self.domain = domain + assert domain_text is not None, \ + 'The domain does not exist on Easyname.' + return domain_text + + def _get_domain_id(self, domain_text_element): + """Return the easyname id of the domain.""" + try: + # Hierarchy: TR > TD > SPAN > Domain Text + tr = domain_text_element.parent.parent.parent + td = tr.find('td', {'class': 'td_2'}) + link = td.find('a')['href'] + domain_id = link.rsplit('/', 1)[-1] + return domain_id + except Exception as e: + errmsg = ('Cannot get the domain id even though the domain seems ' + 'to exist ({}).'.format(e)) + LOGGER.warning(errmsg) + raise AssertionError(errmsg) + + def _log(self, name, element): + """ + Log Response and Tag elements. Do nothing if elements is none of them. + """ + from bs4 import BeautifulSoup, Tag + if isinstance(element, Response): + LOGGER.debug('{} response: URL={} Code={}'.format(name, + element.url, element.status_code)) + + elif isinstance(element, Tag) or isinstance(element, BeautifulSoup): + LOGGER.debug('{} HTML:\n{}'.format(name, element)) diff -Nru lexicon-2.7.12/lexicon/providers/exoscale.py lexicon-3.0.8/lexicon/providers/exoscale.py --- lexicon-2.7.12/lexicon/providers/exoscale.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/exoscale.py 2019-01-03 16:26:53.000000000 +0000 @@ -2,15 +2,16 @@ import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) HOUR = 3600 NAMESERVER_DOMAINS = ['exoscale.ch'] + def ProviderParser(subparser): subparser.add_argument( "--auth-key", help="specify API key for authentication" @@ -21,15 +22,13 @@ class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) - self.api_endpoint = self.engine_overrides.get( - "api_endpoint", "https://api.exoscale.ch/dns" - ) + def __init__(self, config): + super(Provider, self).__init__(config) + self.api_endpoint = 'https://api.exoscale.ch/dns' def authenticate(self): """An innocent call to check that the credentials are okay.""" - r = self._get("/v1/domains/{0}".format(self.options.get("domain"))) + r = self._get("/v1/domains/{0}".format(self.domain)) self.domain_id = r["domain"]["id"] @@ -45,18 +44,18 @@ "name": self._relative_name(name), "content": content, } - if self.options.get("ttl"): - record["ttl"] = self.options.get("ttl", 6 * HOUR) - if self.options.get("prio"): - record["prio"] = self.options.get("prio") + if self._get_lexicon_option("ttl"): + record["ttl"] = self._get_lexicon_option("ttl") + if self._get_lexicon_option("priority"): + record["prio"] = self._get_lexicon_option("priority") payload = self._post( - "/v1/domains/{0}/records".format(self.options.get("domain")), + "/v1/domains/{0}/records".format(self.domain), {"record": record}, ) status = "id" in payload.get("record", {}) - logger.debug("create_record: %s", status) + LOGGER.debug("create_record: %s", status) return status def list_records(self, type=None, name=None, content=None): @@ -74,7 +73,7 @@ name = self._relative_name(name) filter["name"] = name payload = self._get( - "/v1/domains/{0}/records".format(self.options.get("domain")), + "/v1/domains/{0}/records".format(self.domain), query_params=filter, ) @@ -86,9 +85,9 @@ continue if record["name"] == "": - rname = self.options.get("domain") + rname = self.domain else: - rname = ".".join((record["name"], self.options.get("domain"))) + rname = ".".join((record["name"], self.domain)) processed_record = { "type": record["record_type"], @@ -103,7 +102,7 @@ } records.append(processed_record) - logger.debug("list_records: %s", records) + LOGGER.debug("list_records: %s", records) return records def update_record(self, identifier, type=None, name=None, content=None): @@ -120,23 +119,23 @@ record["name"] = self._relative_name(name) if content: record["content"] = content - if self.options.get("ttl"): - record["ttl"] = self.options.get("ttl") - if self.options.get("prio"): - record["prio"] = self.options.get("prio") + if self._get_lexicon_option('ttl'): + record["ttl"] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + record["prio"] = self._get_lexicon_option('priority') - logger.debug("update_records: %s", identifiers) + LOGGER.debug("update_records: %s", identifiers) for record_id in identifiers: self._put( "/v1/domains/{0}/records/{1}".format( - self.options.get("domain"), identifier + self.domain, identifier ), record, ) - logger.debug("update_record: %s", record_id) + LOGGER.debug("update_record: %s", record_id) - logger.debug("update_record: %s", True) + LOGGER.debug("update_record: %s", True) return True def delete_record( @@ -152,17 +151,17 @@ else: identifiers = [identifier] - logger.debug("delete_records: %s", identifiers) + LOGGER.debug("delete_records: %s", identifiers) for record_id in identifiers: self._delete( "/v1/domains/{0}/records/{1}".format( - self.options.get("domain"), record_id + self.domain, record_id ) ) - logger.debug("delete_record: %s", record_id) + LOGGER.debug("delete_record: %s", record_id) - logger.debug("delete_record: %s", True) + LOGGER.debug("delete_record: %s", True) return True def _request(self, action="GET", url="/", data=None, query_params=None): @@ -174,7 +173,8 @@ default_headers = {"Accept": "application/json"} default_headers["X-DNS-Token"] = ":".join( - (self.options.get("auth_key"), self.options.get("auth_secret")) + (self._get_provider_option("auth_key"), + self._get_provider_option("auth_secret")) ) r = requests.request( diff -Nru lexicon-2.7.12/lexicon/providers/gandi.py lexicon-3.0.8/lexicon/providers/gandi.py --- lexicon-2.7.12/lexicon/providers/gandi.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/gandi.py 2019-01-03 16:26:53.000000000 +0000 @@ -5,7 +5,7 @@ against the Gandi API. Gandi introduced the LiveDNS API (http://doc.livedns.gandi.net/) in 2017. -It is the successor of the traditional XMLRPC API, which suffered from +It is the successor of the traditional XMLRPC API, which suffered from long delays between API-based changes and their activation. The LiveDNS API has one significant peculiarity: DNS records with the same name and type are managed as one unit. Thus records cannot be @@ -26,14 +26,14 @@ attempt to detect and account for that. """ from __future__ import absolute_import - import json import logging -import requests - from builtins import object + +import requests from lexicon.providers.base import Provider as BaseProvider + try: import xmlrpclib except ImportError: @@ -43,10 +43,13 @@ NAMESERVER_DOMAINS = ['gandi.net'] + def ProviderParser(subparser): """Specify arguments for Gandi Lexicon Provider.""" subparser.add_argument('--auth-token', help="specify Gandi API key") - subparser.add_argument('--api-protocol', help="(optional) specify Gandi API protocol to use: rpc (default) or rest") + subparser.add_argument( + '--api-protocol', help="(optional) specify Gandi API protocol to use: rpc (default) or rest") + class Provider(BaseProvider): """Provide Gandi LiveDNS API implementation of Lexicon Provider interface. @@ -54,48 +57,52 @@ Note that this implementation will delegates its call to GandiRPCSubProvider if RPC protocol is used. """ - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options) - self.default_ttl = 3600 - self.protocol = self.options.get('api_protocol', 'rpc') - if (self.protocol != 'rpc' and self.protocol != 'rest'): - raise ValueError("Invalid API protocol specified, should be 'rpc' or 'rest'") + def __init__(self, config): + super(Provider, self).__init__(config) + self.default_ttl = 3600 + self.protocol = self._get_provider_option('api_protocol') or 'rpc' - if (self.protocol == 'rpc'): - self.rpc_helper = GandiRPCSubProvider(self.options['auth_token'], - self.options.get('api_endpoint', 'https://rpc.gandi.net/xmlrpc/'), - self.options['domain'].lower(), + if self.protocol != 'rpc' and self.protocol != 'rest': + raise ValueError( + "Invalid API protocol specified, should be 'rpc' or 'rest'") + + if self.protocol == 'rpc': + self.rpc_helper = GandiRPCSubProvider(self._get_provider_option('auth_token'), + 'https://rpc.gandi.net/xmlrpc/', + self.domain.lower(), self._relative_name, self._full_name) else: - self.api_endpoint = self.options.get('api_endpoint', 'https://dns.api.gandi.net/api/v5') + self.api_endpoint = 'https://dns.api.gandi.net/api/v5' def authenticate(self): - if (self.protocol == 'rpc'): + if self.protocol == 'rpc': domain_id = self.rpc_helper.authenticate() self.domain_id = domain_id else: - self._get('/domains/{0}'.format(self.options['domain'])) - self.domain_id = self.options['domain'].lower() + self._get('/domains/{0}'.format(self.domain)) + self.domain_id = self.domain.lower() def create_record(self, type, name, content): - if (self.protocol == 'rpc'): - return self.rpc_helper.create_record(type, self._relative_name(name), - content, self.options.get('ttl') or self.default_ttl) + if self.protocol == 'rpc': + return self.rpc_helper.create_record(type, self._relative_name(name), + content, self._get_lexicon_option('ttl') or self.default_ttl) - current_values = [record['content'] for record in self.list_records(type=type, name=name)] + current_values = [record['content'] + for record in self.list_records(type=type, name=name)] if current_values != [content]: # a change is necessary - url = '/domains/{0}/records/{1}/{2}'.format(self.domain_id, self._relative_name(name), type) + url = '/domains/{0}/records/{1}/{2}'.format( + self.domain_id, self._relative_name(name), type) if current_values: record = {'rrset_values': current_values + [content]} self._put(url, record) else: record = {'rrset_values': [content]} # add the ttl, if this is a new record - if self.options.get('ttl'): - record['rrset_ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['rrset_ttl'] = self._get_lexicon_option('ttl') self._post(url, record) LOGGER.debug('create_record: %s', True) return True @@ -105,7 +112,7 @@ # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None): """List all record for the domain in the active Gandi zone.""" - if (self.protocol == 'rpc'): + if self.protocol == 'rpc': return self.rpc_helper.list_records(type, name, content) try: @@ -118,9 +125,11 @@ query_results = self._get('/domains/{0}/records/{1}' .format(self.domain_id, self._relative_name(name))) else: - query_results = self._get('/domains/{0}/records'.format(self.domain_id)) + query_results = self._get( + '/domains/{0}/records'.format(self.domain_id)) if type is not None: - query_results = [item for item in query_results if item['rrset_type'] == type] + query_results = [ + item for item in query_results if item['rrset_type'] == type] except requests.exceptions.HTTPError as e: if e.response.status_code == 404: query_results = [] @@ -143,7 +152,8 @@ records.append(record) # filter for content, if requested if content is not None: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] LOGGER.debug('list_records: %s', records) return records @@ -153,7 +163,7 @@ 'content' should be a string or a list of strings """ - if (self.protocol == 'rpc'): + if self.protocol == 'rpc': return self.rpc_helper.update_record(identifier, type, name, content) data = {} @@ -169,7 +179,8 @@ if type is None: # replace the records of a specific type url = '/domains/{0}/records/{1}/{2}'.format(self.domain_id, - identifier or self._relative_name(name), + identifier or self._relative_name( + name), type) self._put(url, data) else: @@ -183,7 +194,7 @@ # Delete existings records. # If records do not exist, do nothing. def delete_record(self, identifier=None, type=None, name=None, content=None): - if (self.protocol == 'rpc'): + if self.protocol == 'rpc': return self.rpc_helper.delete_record(identifier, type, name, content) if not identifier: @@ -191,7 +202,8 @@ # get all matching (by type and name) records - ignore 'content' for now records = self.list_records(type=type, name=name) for current_type in set(record['type'] for record in records): - matching_records = [record for record in records if record['type'] == current_type] + matching_records = [ + record for record in records if record['type'] == current_type] # collect all non-matching values if content is None: remaining_values = [] @@ -215,7 +227,8 @@ if remove_count == 0: raise Exception('Record identifier could not be found.') else: - self._delete('/domains/{0}/records/{1}'.format(self.domain_id, identifier)) + self._delete( + '/domains/{0}/records/{1}'.format(self.domain_id, identifier)) # is always True at this point, if a non 200 response is returned an error is raised. LOGGER.debug('delete_record: %s', True) @@ -230,7 +243,7 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'X-Api-Key': self.options.get('auth_token') + 'X-Api-Key': self._get_provider_option('auth_token') } if not url.startswith(self.api_endpoint): url = self.api_endpoint + url @@ -251,6 +264,7 @@ This implementation is called through the main LiveDNS implementation is RPC protocol is used. """ + def __init__(self, api_key, api_endpoint, domain, relative_name_fn, full_name_fn): """Initialize Gandi RCPXML API provider.""" super(GandiRPCSubProvider, self).__init__() @@ -285,19 +299,22 @@ # In this case, no new record will be created, but a new zone version # will be created and set. try: - version = self._api.domain.zone.version.new(self._api_key, self._zone_id) + version = self._api.domain.zone.version.new( + self._api_key, self._zone_id) self._api.domain.zone.record.add(self._api_key, self._zone_id, version, - {'type': type.upper(), - 'name': name, - 'value': content, - 'ttl': ttl - }) - self._api.domain.zone.version.set(self._api_key, self._zone_id, version) + {'type': type.upper(), + 'name': name, + 'value': content, + 'ttl': ttl + }) + self._api.domain.zone.version.set( + self._api_key, self._zone_id, version) ret = True finally: if not ret and version is not None: - self._api.domain.zone.version.delete(self._api_key, self._zone_id, version) + self._api.domain.zone.version.delete( + self._api_key, self._zone_id, version) LOGGER.debug("create_record: %s", ret) return ret @@ -313,10 +330,12 @@ if name is not None: opts['name'] = self._relative_name(name) if content is not None: - opts['value'] = self._txt_encode(content) if opts.get('type', '') == 'TXT' else content + opts['value'] = self._txt_encode(content) if opts.get( + 'type', '') == 'TXT' else content records = [] - payload = self._api.domain.zone.record.list(self._api_key, self._zone_id, 0, opts) + payload = self._api.domain.zone.record.list( + self._api_key, self._zone_id, 0, opts) for record in payload: processed_record = { 'type': record['type'], @@ -328,7 +347,8 @@ # Gandi will add quotes to all TXT record strings if processed_record['type'] == 'TXT': - processed_record['content'] = self._txt_decode(processed_record['content']) + processed_record['content'] = self._txt_decode( + processed_record['content']) records.append(processed_record) @@ -336,8 +356,8 @@ return records # Update a record. Identifier or type+name+content - def update_record(self, identifier, type=None, name=None, content=None): - """Updates the specified record in a new Gandi zone.""" + def update_record(self, identifier, type=None, name=None, content=None): + """Updates the specified record in a new Gandi zone.""" if not identifier: records = self.list_records(type, name) if len(records) == 1: @@ -355,15 +375,18 @@ # a new zone file. To update by identifier, we lookup the record # by identifier, then use the record fields to find the record in # the newly created zone. - records = self._api.domain.zone.record.list(self._api_key, self._zone_id, 0, {'id': identifier}) + records = self._api.domain.zone.record.list( + self._api_key, self._zone_id, 0, {'id': identifier}) if len(records) == 1: rec = records[0] del rec['id'] try: - version = self._api.domain.zone.version.new(self._api_key, self._zone_id) - records = self._api.domain.zone.record.list(self._api_key, self._zone_id, version, rec) + version = self._api.domain.zone.version.new( + self._api_key, self._zone_id) + records = self._api.domain.zone.record.list( + self._api_key, self._zone_id, version, rec) if len(records) != 1: raise self.GandiInternalError("expected one record") @@ -372,17 +395,21 @@ if name is not None: rec['name'] = self._relative_name(name) if content is not None: - rec['value'] = self._txt_encode(content) if rec['type'] == 'TXT' else content + rec['value'] = self._txt_encode( + content) if rec['type'] == 'TXT' else content records = self._api.domain.zone.record.update(self._api_key, - self._zone_id, - version, - {'id': records[0]['id']}, - rec) + self._zone_id, + version, + {'id': records[0] + ['id']}, + rec) if len(records) != 1: - raise self.GandiInternalError("expected one updated record") + raise self.GandiInternalError( + "expected one updated record") - self._api.domain.zone.version.set(self._api_key, self._zone_id, version) + self._api.domain.zone.version.set( + self._api_key, self._zone_id, version) ret = True except self.GandiInternalError: @@ -390,7 +417,8 @@ finally: if not ret and version is not None: - self._api.domain.zone.version.delete(self._api_key, self._zone_id, version) + self._api.domain.zone.version.delete( + self._api_key, self._zone_id, version) LOGGER.debug("update_record: %s", ret) return ret @@ -408,30 +436,37 @@ opts['id'] = identifier else: if not type and not name and not content: - raise ValueError('Error, at least one parameter from type, name or content must be set') + raise ValueError( + 'Error, at least one parameter from type, name or content must be set') if type: opts['type'] = type.upper() if name: opts['name'] = self._relative_name(name) if content: - opts['value'] = self._txt_encode(content) if opts['type'] == 'TXT' else content + opts['value'] = self._txt_encode( + content) if opts['type'] == 'TXT' else content - records = self._api.domain.zone.record.list(self._api_key, self._zone_id, 0, opts) + records = self._api.domain.zone.record.list( + self._api_key, self._zone_id, 0, opts) if len(records): try: - version = self._api.domain.zone.version.new(self._api_key, self._zone_id) + version = self._api.domain.zone.version.new( + self._api_key, self._zone_id) for record in records: del record['id'] - self._api.domain.zone.record.delete(self._api_key, self._zone_id, version, record) - self._api.domain.zone.version.set(self._api_key, self._zone_id, version) + self._api.domain.zone.record.delete( + self._api_key, self._zone_id, version, record) + self._api.domain.zone.version.set( + self._api_key, self._zone_id, version) ret = True finally: if not ret and version is not None: - self._api.domain.zone.version.delete(self._api_key, self._zone_id, version) + self._api.domain.zone.version.delete( + self._api_key, self._zone_id, version) LOGGER.debug("delete_record: %s", ret) - return ret + return ret @staticmethod def _txt_encode(val): @@ -444,7 +479,8 @@ if not val: return None if len(val) > 1 and val[0:1] == '"': - val = val[1:-1].replace('" "', '').replace('\\"', '"').replace('\\\\', '\\') + val = val[1:-1].replace('" "', '').replace('\\"', + '"').replace('\\\\', '\\') return val # This exception is for cleaner handling of internal errors @@ -452,4 +488,3 @@ class GandiInternalError(Exception): """Internal exception handling class for Gandi management errors""" pass - diff -Nru lexicon-2.7.12/lexicon/providers/gehirn.py lexicon-3.0.8/lexicon/providers/gehirn.py --- lexicon-2.7.12/lexicon/providers/gehirn.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/gehirn.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,20 +1,20 @@ from __future__ import absolute_import - +import base64 +import copy import json import logging import re -import base64 -import copy import requests +from lexicon.providers.base import Provider as BaseProvider from requests.auth import HTTPBasicAuth -from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['gehirn.jp'] + def ProviderParser(subparser): subparser.add_argument( "--auth-token", help="specify access token for authentication") @@ -33,30 +33,29 @@ } FORMAT_RE = { - "A": re.compile("(?P
.+)"), - "AAAA": re.compile("(?P
.+)"), - "CNAME": re.compile("(?P.+)"), - "TXT": re.compile("(?P.+)"), - "NS": re.compile("(?P.+)"), - "MX": re.compile("(?P\d+)\s+(?P.+)"), - "SRV": re.compile("(?P\d+)\s+(?P\d+)\s+(?P\d+)\s+(?P.+)"), + "A": re.compile(r"(?P
.+)"), + "AAAA": re.compile(r"(?P
.+)"), + "CNAME": re.compile(r"(?P.+)"), + "TXT": re.compile(r"(?P.+)"), + "NS": re.compile(r"(?P.+)"), + "MX": re.compile(r"(?P\d+)\s+(?P.+)"), + "SRV": re.compile(r"(?P\d+)\s+(?P\d+)\s+(?P\d+)\s+(?P.+)"), } class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None self.version_id = None - self.api_endpoint = self.engine_overrides.get( - 'api_endpoint', 'https://api.gis.gehirn.jp/dns/v1') + self.api_endpoint = 'https://api.gis.gehirn.jp/dns/v1' def authenticate(self): payload = self._get('/zones') domains = [item for item in payload if item['name'] - == self.options['domain']] + == self.domain] if not domains: raise Exception('No domain found') @@ -75,19 +74,19 @@ 'type': type, 'name': name, 'enable_alias': False, - 'ttl': self.options['ttl'], + 'ttl': self._get_lexicon_option('ttl'), 'records': [], } else: record = records[0] if r in record["records"]: - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True record["records"].append(r) self._update_record(record) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -115,7 +114,7 @@ records = [ record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -134,7 +133,7 @@ if not records: self.create_record(type=type, name=name, content=content) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True record = { @@ -142,7 +141,7 @@ 'type': type, 'name': name, 'enable_alias': False, - 'ttl': self.options['ttl'], + 'ttl': self._get_lexicon_option('ttl'), 'records': [self._parse_content(type, content)], } @@ -162,7 +161,7 @@ name=name or record["name"], content=content ) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True else: # update entire record @@ -170,13 +169,13 @@ record["type"] = type if name: record["name"] = name - record["ttl"] = self.options['ttl'] + record["ttl"] = self._get_lexicon_option('ttl') if content: record["records"] = [ self._parse_content(record["type"], content)] self._update_record(record) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -189,7 +188,7 @@ self.domain_id, self.version_id, identifier, ) self._delete(path) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True record_identifier = identifier.split(".")[1] @@ -215,7 +214,7 @@ else: self._update_record(record) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True else: raise Exception('Record identifier could not be found.') @@ -241,7 +240,7 @@ ) self._delete(path) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True # Helpers @@ -307,7 +306,7 @@ 'Content-Type': 'application/json', } default_auth = HTTPBasicAuth( - self.options['auth_token'], self.options['auth_secret']) + self._get_provider_option('auth_token'), self._get_provider_option('auth_secret')) query_string = "" if query_params: @@ -321,6 +320,6 @@ # if the request fails for any reason, throw an error. r.raise_for_status() except: - logger.error(r.text) + LOGGER.error(r.text) raise return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/glesys.py lexicon-3.0.8/lexicon/providers/glesys.py --- lexicon-2.7.12/lexicon/providers/glesys.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/glesys.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,35 +1,37 @@ from __future__ import absolute_import - import json import requests - from lexicon.providers.base import Provider as BaseProvider + NAMESERVER_DOMAINS = ['glesys.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username (CL12345)") + subparser.add_argument( + "--auth-username", help="specify username (CL12345)") subparser.add_argument("--auth-token", help="specify API key") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.glesys.com') + self.api_endpoint = 'https://api.glesys.com' def authenticate(self): payload = self._get('/domain/list') domains = payload['response']['domains'] for record in domains: - if record['domainname'] == self.options['domain']: + if record['domainname'] == self.domain: # Domain records do not have any id. # Since domain_id cannot be None, use domain name as id instead. self.domain_id = record['domainname'] break - if self.domain_id == None: + if self.domain_id is None: raise Exception('No domain found') # Create record. If record already exists with the same content, do nothing. @@ -40,7 +42,7 @@ return True request_data = { - 'domainname': self.options['domain'], + 'domainname': self.domain, 'host': self._full_name(name), 'type': type, 'data': content @@ -55,19 +57,23 @@ # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None): request_data = { - 'domainname': self.options['domain'] + 'domainname': self.domain } payload = self._post('/domain/listrecords', data=request_data) # Convert from Glesys record structure to Lexicon structure. - processed_records = [self._glesysrecord2lexiconrecord(r) for r in payload['response']['records']] + processed_records = [self._glesysrecord2lexiconrecord( + r) for r in payload['response']['records']] if type: - processed_records = [record for record in processed_records if record['type'] == type] + processed_records = [ + record for record in processed_records if record['type'] == type] if name: - processed_records = [record for record in processed_records if record['name'] == self._full_name(name)] + processed_records = [ + record for record in processed_records if record['name'] == self._full_name(name)] if content: - processed_records = [record for record in processed_records if record['content'].lower() == content.lower()] + processed_records = [ + record for record in processed_records if record['content'].lower() == content.lower()] return processed_records @@ -115,7 +121,8 @@ 'Content-Type': 'application/json' } - credentials = (self.options['auth_username'], self.options['auth_token']) + credentials = (self._get_provider_option('auth_username'), + self._get_provider_option('auth_token')) response = requests.request(action, self.api_endpoint + url, params=query_params, @@ -129,8 +136,8 @@ # Adds TTL parameter if passed as argument to lexicon. def _addttl(self, request_data): - if 'ttl'in self.options: - request_data['ttl'] = self.options['ttl'] + if self._get_lexicon_option('ttl'): + request_data['ttl'] = self._get_lexicon_option('ttl') # From Glesys record structure: [u'domainname', u'recordid', u'type', u'host', u'ttl', u'data'] def _glesysrecord2lexiconrecord(self, glesys_record): diff -Nru lexicon-2.7.12/lexicon/providers/godaddy.py lexicon-3.0.8/lexicon/providers/godaddy.py --- lexicon-2.7.12/lexicon/providers/godaddy.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/godaddy.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,50 +1,64 @@ from __future__ import absolute_import - -import logging -import requests -import json import hashlib +import json +import logging +import requests from lexicon.providers.base import Provider as BaseProvider from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry + LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['godaddy.com'] + def ProviderParser(subparser): - subparser.add_argument('--auth-key', help='specify the key to access the API') - subparser.add_argument('--auth-secret', help='specify the secret to access the API') + subparser.add_argument( + '--auth-key', help='specify the key to access the API') + subparser.add_argument( + '--auth-secret', help='specify the secret to access the API') + -# Implements the DNS GoDaddy provider. -# Some general remarks about this provider, because it uses a weirdly designed API. -# Indeed, there is no direct way to insert, update or delete a specific record. Furthermore, there is no unique identifier for a record. -# Instead GoDaddy use a replace approach: for a given set of records one can replace this set with a new set sent throught API. -# For the sake of simplicity and consistency accoss the provider edit methods, the set will be always all records in the DNS zone. -# With this approach: -# - adding a record consists in appending a record to the obtained set and call replace with the updated set, -# - updating a record consists in modifying a record in the obtained set and call replace with the updated set, -# - deleting a record consists in removing a record in the obtained set and call replace with the updated set. -# In parallel, as said before, there is no unique identifier. This provider then implement a pseudo-identifier, -# to allow an easy update or delete using the '--identifier' lexicon parameter. -# But you need to call the 'list' command just before executing and update/delete action, because identifier value -# is tied to the content of the record, and will change anytime something is changed in the record. class Provider(BaseProvider): + """ + Implements the DNS GoDaddy provider. + Some general remarks about this provider, because it uses a weirdly designed API. + Indeed, there is no direct way to insert, update or delete a specific record. + Furthermore, there is no unique identifier for a record. + Instead GoDaddy use a replace approach: for a given set of records one + can replace this set with a new set sent through API. + For the sake of simplicity and consistency across the provider edit methods, + the set will be always all records in the DNS zone. + With this approach: + - adding a record consists in appending a record to the obtained set and call + replace with the updated set, + - updating a record consists in modifying a record in the obtained set and call + replace with the updated set, + - deleting a record consists in removing a record in the obtained set and call + replace with the updated set. + In parallel, as said before, there is no unique identifier. + This provider then implement a pseudo-identifier, to allow an easy update or delete + using the '--identifier' lexicon parameter. + But you need to call the 'list' command just before executing and update/delete action, + because identifier value is tied to the content of the record, and will change anytime + something is changed in the record. + """ - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.godaddy.com/v1') + self.api_endpoint = 'https://api.godaddy.com/v1' def authenticate(self): - domain = self.options.get('domain') + domain = self.domain result = self._get('/domains/{0}'.format(domain)) self.domain_id = result['domainId'] def list_records(self, type=None, name=None, content=None): - domain = self.options.get('domain') + domain = self.domain url = '/domains/{0}/records'.format(domain) if type: @@ -65,24 +79,27 @@ }) if content: - records = [record for record in records if record['data'] == content] + records = [ + record for record in records if record['data'] == content] LOGGER.debug('list_records: %s', records) return records def create_record(self, type, name, content): - domain = self.options.get('domain') + domain = self.domain relative_name = self._relative_name(name) - ttl = self.options.get('ttl') + ttl = self._get_lexicon_option('ttl') # Retrieve existing data in DNS zone. records = self._get('/domains/{0}/records'.format(domain)) # Check if a record already matches given parameters for record in records: - if record['type'] == type and self._relative_name(record['name']) == relative_name and record['data'] == content: - LOGGER.debug('create_record (ignored, duplicate): %s %s %s', type, name, content) + if (record['type'] == type and self._relative_name(record['name']) == relative_name + and record['data'] == content): + LOGGER.debug( + 'create_record (ignored, duplicate): %s %s %s', type, name, content) return True # Append a new entry corresponding to given parameters. @@ -100,20 +117,21 @@ return True def update_record(self, identifier, type=None, name=None, content=None): - # No identifier is used with GoDaddy. + # No identifier is used with GoDaddy. # We can rely either: - # - only on type/name to get the relevant records, both of them are required or we will could update to much records ..., + # - only on type/name to get the relevant records, both of them are required + # or we will could update to much records ..., # - or by the pseudo-identifier provided - # Furthermore for type/name approach, we cannot update all matching records, as it would lead - # to an error (two entries of same type + name cannot have the same content). - # So for type/name approach, we search first matching record for type/name on which content is different, - # and we update it before synchronizing the DNS zone. + # Furthermore for type/name approach, we cannot update all matching records, as it + # would lead o an error (two entries of same type + name cannot have the same content). + # So for type/name approach, we search first matching record for type/name on which content + # is different, and we update it before synchronizing the DNS zone. if not identifier and not type: raise Exception('ERROR: type is required') if not identifier and not name: raise Exception('ERROR: name is required') - domain = self.options.get('domain') + domain = self.domain relative_name = None if name: relative_name = self._relative_name(name) @@ -121,15 +139,18 @@ # Retrieve existing data in DNS zone. records = self._get('/domains/{0}/records'.format(domain)) - # Get the record to update: - # - either explicitly by its identifier, - # - or the first matching by its type+name where content does not match (first match, see first method comment for explanation). + # Get the record to update: + # - either explicitly by its identifier, + # - or the first matching by its type+name where content does not match + # (first match, see first method comment for explanation). for record in records: if ((identifier and Provider._identifier(record) == identifier) or - (not identifier and record['type'] == type and self._relative_name(record['name']) == relative_name and record['data'] != content)): + (not identifier and record['type'] == type + and self._relative_name(record['name']) == relative_name + and record['data'] != content)): record['data'] = content break - + # Synchronize data with updated records into DNS zone. self._put('/domains/{0}/records'.format(domain), records) @@ -138,12 +159,15 @@ return True def delete_record(self, identifier=None, type=None, name=None, content=None): - # For the LOL. GoDaddy does not accept an empty array when updating a particular set of records. - # It means that you cannot request to remove all records matching a particular type and/or name. - # Instead, we get ALL records in the DNS zone, update the set, and replace EVERYTHING in the DNS zone. - # You will always have at minimal NS/SRV entries in the array, otherwise your DNS zone is broken, - # and updating the zone is the least of your problem ... - domain = self.options.get('domain') + # For the LOL. GoDaddy does not accept an empty array + # when updating a particular set of records. + # It means that you cannot request to remove all records + # matching a particular type and/or name. + # Instead, we get ALL records in the DNS zone, update the set, + # and replace EVERYTHING in the DNS zone. + # You will always have at minimal NS/SRV entries in the array, + # otherwise your DNS zone is broken, and updating the zone is the least of your problem ... + domain = self.domain # Retrieve all records in the DNS zone records = self._get('/domains/{0}/records'.format(domain)) @@ -152,20 +176,32 @@ if name: relative_name = self._relative_name(name) - # Filter out all records which matches the pattern (either identifier, or some combination of type/name/content). + # Filter out all records which matches the pattern (either identifier + # or some combination of type/name/content). filtered_records = [] if identifier: - filtered_records = [record for record in records if Provider._identifier(record) != identifier] + filtered_records = [ + record for record in records if Provider._identifier(record) != identifier] else: for record in records: - if ((not type and not relative_name and not content) or - (type and not relative_name and not content and record['type'] != type) or - (not type and relative_name and not content and self._relative_name(record['name']) != relative_name) or - (not type and not relative_name and content and record['data'] != content) or - (type and relative_name and not content and (record['type'] != type or self._relative_name(record['name']) != relative_name)) or - (type and not relative_name and content and (record['type'] != type or record['data'] != content)) or - (not type and relative_name and content and (self._relative_name(record['name']) != relative_name or record['data'] != content)) or - (type and relative_name and content and (record['type'] != type or self._relative_name(record['name']) != relative_name or record['data'] != content))): + if ((not type and not relative_name and not content) + or (type and not relative_name and not content and record['type'] != type) + or (not type and relative_name and not content + and self._relative_name(record['name']) != relative_name) + or (not type and not relative_name and content + and record['data'] != content) + or (type and relative_name and not content + and (record['type'] != type + or self._relative_name(record['name']) != relative_name)) + or (type and not relative_name and content + and (record['type'] != type or record['data'] != content)) + or (not type and relative_name and content + and (self._relative_name(record['name']) != relative_name + or record['data'] != content)) + or (type and relative_name and content + and (record['type'] != type + or self._relative_name(record['name']) != relative_name + or record['data'] != content))): filtered_records.append(record) # Synchronize data with expurged entries into DNS zone. @@ -175,11 +211,16 @@ return True - # GoDaddy provides no identifier for a record, which is a problem where identifiers can be used (delete and update). - # To circumvent this, we implement a pseudo-identifier, which is basically a hash of type+name+content of a given record. - # It is far from perfect, as the identifier will change each time we change something in the record ... - # But at least, one can use 'lexicon godaddy list ...' then 'lexicon godaddy update --identifier ...' to modify specific record. - # However, 'lexicon godaddy list ...' should be called each time DNS zone had been changed to calculate new identifiers. + # GoDaddy provides no identifier for a record, which is a problem + # where identifiers can be used (delete and update). + # To circumvent this, we implement a pseudo-identifier,which is basically + # a hash of type+name+content of a given record. + # It is far from perfect, as the identifier will change each time + # we change something in the record ... + # But at least, one can use 'lexicon godaddy list ...' then + # 'lexicon godaddy update --identifier ...' to modify specific record. + # However, 'lexicon godaddy list ...' should be called each time DNS + # zone had been changed to calculate new identifiers. @staticmethod def _identifier(record): sha256 = hashlib.sha256() @@ -194,30 +235,34 @@ if not query_params: query_params = {} - # When editing DNS zone, API is unavailable for few seconds (until modifications are propagated) + # When editing DNS zone, API is unavailable for few seconds + # (until modifications are propagated). # In this case, call to API will return 409 HTTP error. - # We use the Retry extension to retry the requests until we get a processable reponse (402 HTTP status, or an HTTP error != 409) + # We use the Retry extension to retry the requests until + # we get a processable reponse (402 HTTP status, or an HTTP error != 409) retries = Retry( total=10, backoff_factor=0.5, status_forcelist=[409], - method_whitelist=frozenset(['GET', 'PUT', 'POST', 'DELETE', 'PATCH']) + method_whitelist=frozenset( + ['GET', 'PUT', 'POST', 'DELETE', 'PATCH']) ) session = requests.Session() session.mount('https://', HTTPAdapter(max_retries=retries)) result = session.request(action, self.api_endpoint + url, - params=query_params, - data=json.dumps(data), - headers={ - 'Content-Type': 'application/json', - 'Accept': 'application/json', - # GoDaddy use a key/secret pair to authenticate - 'Authorization': 'sso-key {0}:{1}'.format( - self.options.get('auth_key'), - self.options.get('auth_secret')) - }) + params=query_params, + data=json.dumps(data), + headers={ + 'Content-Type': 'application/json', + 'Accept': 'application/json', + # GoDaddy use a key/secret pair to authenticate + 'Authorization': 'sso-key {0}:{1}'.format( + self._get_provider_option( + 'auth_key'), + self._get_provider_option('auth_secret')) + }) result.raise_for_status() @@ -225,5 +270,6 @@ # Return the JSON body response if exists. return result.json() except ValueError: - # For some requests command (eg. PUT), GoDaddy will not return any JSON, just an HTTP status without body. + # For some requests command (eg. PUT), GoDaddy will not + # return any JSON, just an HTTP status without body. return None diff -Nru lexicon-2.7.12/lexicon/providers/googleclouddns.py lexicon-3.0.8/lexicon/providers/googleclouddns.py --- lexicon-2.7.12/lexicon/providers/googleclouddns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/googleclouddns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,37 +1,43 @@ +""" +Implements the Google Cloud DNS provider. +This API is quite complicated to use, as it used some unique +concepts compared to other providers. +First of all, it uses a full-fledged OAuth2 authentication, +involving signing a JWT and retrieve a Bearer token. +This hard work is done in the authenticate() process, +using the strong and well known "cryptography" package. +Second, Google Cloud DNS API contains this really particular patterns: + - all records of the same type and name are stacked together in a RecordSet representation, + which contains in the rrdatas array all current values for this type/name pair, including + explicitly monovalued entries like A or CNAME. + - modifications can only done through a create/delete pattern: no way to update a record + - more importantly, this approach extends to all values of a given type/name pair: it means + that adding/removing a new value to a TXT entry requires to delete all values of this entry, + then recreate it with all values desired (the old ones plus the new one for adding, the old + ones minus the removed one for removing) +So all the hard work in this provider, apart from the authentication process, is to convert the +Lexicon monovalued entries representation to/from the Google multivalued and stacked representation +through create/update/list/delete processes. +""" from __future__ import absolute_import - +import binascii import json import logging import time -import requests -import binascii +from base64 import b64decode, urlsafe_b64encode +import requests from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import padding -from base64 import urlsafe_b64encode, b64decode - from lexicon.providers.base import Provider as BaseProvider + LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['googledomains.com'] -# Implements the Google Cloud DNS provider. -# This API is quite complicated to use, as it used some unique concepts compared to other providers. -# First of all, it uses a full-fledged OAuth2 authentication, involving signing a JWT and retrieve a Bearer token. -# This hard work is done in the authenticate() process, using the strong and well known "cryptography" package. -# Second, Google Cloud DNS API contains this really particular patterns: -# - all records of the same type and name are stacked together in a RecordSet representation, -# which contains in the rrdatas array all current values for this type/name pair, including -# explictly monovalued entries like A or CNAME. -# - modifications can only done through a create/delete pattern: there is no way to update a record -# - more importantly, this approach extends to all values of a given type/name pair: it means that adding/removing -# a new value to a TXT entry requires to delete all values of this entry, then recreate it with all -# values desired (the old ones plus the new one for adding, the old ones minus the removed one for removing) -# So all the hard work in this provider, appart from the authentication process, is to convert the Lexicon monovalued -# entries representation to/from the Google multivalued and stacked representation -# through create/update/list/delete processes. + def ProviderParser(subparser): subparser.description = ''' The Google Cloud DNS provider requires the JSON file which contains the service account info to connect to the API. @@ -43,106 +49,120 @@ can be either the path of a file prefixed by 'file::' (eg. file::/tmp/service_account_info.json) or the base64 encoded content of this file prefixed by 'base64::' (eg. base64::eyJhbGciOyJ...)''') + class Provider(BaseProvider): - # We need serveral parameters, which are available in the JSON file provided + # We need serveral parameters, which are available in the JSON file provided # by Google when associating a private key to the relevant service account. # So this JSON file is the natural input to configure the provider. # It can be provided as a path to the JSON file, or as its content encoded # in base64, which is a suitable portable way in particular for Docker containers. # In both cases the content is loaded as bytes, on loaded in a private instance variable. - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None self._token = None - if self.options['auth_service_account_info'].startswith('file::'): - with open(self.options['auth_service_account_info'].replace('file::', ''), 'rb') as file: + if self._get_provider_option('auth_service_account_info').startswith('file::'): + with open(self._get_provider_option('auth_service_account_info') + .replace('file::', ''), 'rb') as file: service_account_info_bytes = file.read() - elif self.options['auth_service_account_info'].startswith('base64::'): - service_account_info_bytes = b64decode(self.options['auth_service_account_info'].replace('base64::', '')) + elif self._get_provider_option('auth_service_account_info').startswith('base64::'): + service_account_info_bytes = b64decode(self._get_provider_option( + 'auth_service_account_info').replace('base64::', '')) else: - raise Exception('Invalid value passed to --auth-service-account-info, should be a path prefixed with \'file::\' or a base64 value prefixed by \'base64::\'.') + raise Exception('Invalid value for --auth-service-account-info, should be a path ' + 'prefixed with \'file::\' or a base64 value prefixed by \'base64::\'.') - self._service_account_info = json.loads(service_account_info_bytes.decode('utf-8')) + self._service_account_info = json.loads( + service_account_info_bytes.decode('utf-8')) - if not self._service_account_info['client_email'] or not self._service_account_info['private_key'] or not self._service_account_info['project_id']: - raise Exception('Invalid service account info (missing either client_email/private_key/project_id key).') - - # We have a real authentication here, which uses the OAuth protocol: - # - a JWT token is forged with the Google Cloud DNS access claims, using the service account info loaded by the constructor, - # - this JWT token is signed by a PKCS1v15 signature using the RSA private key associated to the service account, + if (not self._service_account_info['client_email'] + or not self._service_account_info['private_key'] + or not self._service_account_info['project_id']): + raise Exception('Invalid service account info (missing either client_email/private_' + 'key/project_id key).') + + # We have a real authentication here, that uses the OAuth protocol: + # - a JWT token is forged with the Google Cloud DNS access claims, + # using the service account info loaded by the constructor, + # - this JWT token is signed by a PKCS1v15 signature using + # the RSA private key associated to the service account, # - this JWT token is then submitted to the Google API, which returns an access token - # - this access token will be used for every future HTTP request to the Google Cloud DNS API to authenticate the user. - # - finally we make a first authenticated request to retrieve the managed zone id, which will also be used on future requests. - # This access token has a default lifetime of 10 minutes, but is used only for the current Lexicon operation, so it should be sufficient. + # - this access token will be used for every future HTTP request + # to the Google Cloud DNS API to authenticate the user. + # - finally we make a first authenticated request to retrieve + # the managed zone id, which will also be used on future requests. + # This access token has a default lifetime of 10 minutes, + # but is used only for the current Lexicon operation, so it should be sufficient. def authenticate(self): - jwt_header = { + jwt_header_bytes = urlsafe_b64encode(json.dumps({ 'alg': 'RS256', 'typ': 'JWT' - } - jwt_header_bytes = urlsafe_b64encode(json.dumps(jwt_header).encode('utf-8')) - + }).encode('utf-8')) + epoch_time = int(time.time()) - jwt_claims_set = { + jwt_claims_bytes = urlsafe_b64encode(json.dumps({ 'iss': self._service_account_info['client_email'], 'scope': 'https://www.googleapis.com/auth/ndev.clouddns.readwrite', 'aud': 'https://www.googleapis.com/oauth2/v4/token', 'exp': epoch_time + 60 * 10, 'iat': epoch_time - } - jwt_claims_set_bytes = urlsafe_b64encode(json.dumps(jwt_claims_set).encode('utf-8')) + }).encode('utf-8')) private_key = serialization.load_pem_private_key( self._service_account_info['private_key'].encode('utf-8'), password=None, backend=default_backend() ) - - jwt_sign = private_key.sign( - b'.'.join([jwt_header_bytes, jwt_claims_set_bytes]), + jwt_sign_bytes = urlsafe_b64encode(private_key.sign( + b'.'.join([jwt_header_bytes, jwt_claims_bytes]), padding.PKCS1v15(), hashes.SHA256() - ) - jwt_sign_bytes = urlsafe_b64encode(jwt_sign) + )) - jwt_bytes = b'.'.join([jwt_header_bytes, jwt_claims_set_bytes, jwt_sign_bytes]) - - post_data = { - 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', - 'assertion': jwt_bytes - } - post_header = { - 'Content-Type': 'application/x-www-form-urlencoded' - } + jwt_bytes = b'.'.join( + [jwt_header_bytes, jwt_claims_bytes, jwt_sign_bytes]) - auth_request = requests.request('POST', 'https://www.googleapis.com/oauth2/v4/token', data=post_data, headers=post_header) + auth_request = requests.request( + 'POST', 'https://www.googleapis.com/oauth2/v4/token', + data={ + 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', + 'assertion': jwt_bytes + }, + headers={ + 'Content-Type': 'application/x-www-form-urlencoded' + }) auth_request.raise_for_status() post_result = auth_request.json() if not post_result['access_token']: - raise Exception('Error, could not grant RW access on the Google Cloud DNS API for user: {0}'.format(self.options['auth_email'])) + raise Exception('Error, could not grant RW access on the ' + 'Google Cloud DNS API for user: {0}'.format( + self._get_provider_option('auth_email'))) self._token = post_result['access_token'] results = self._get('/managedZones') - targetedManagedZoneIds = [managedZone['id'] for managedZone in results['managedZones'] if managedZone['dnsName'] == '{0}.'.format(self.options['domain'])] + targeted_managed_zone_ids = [managedZone['id'] for managedZone in results['managedZones'] + if managedZone['dnsName'] == '{0}.'.format(self.domain)] - if not targetedManagedZoneIds: - raise Exception('Error, domain {0} is not registered for this project'.format(self.options['domain'])) + if not targeted_managed_zone_ids: + raise Exception( + 'Error, domain {0} is not registered for this project'.format(self.domain)) - self.domain_id = targetedManagedZoneIds[0] + self.domain_id = targeted_managed_zone_ids[0] # List all records for the given type/name/content. # It is quite straight forward to request data, the biggest operation is to convert - # the stacked multivalued RecordSets into Lexicon monovalued entries. - # Plese not that we could provide type and name to the API to make the filtering, - # but providing the type makes the name mandatory with the Google Cloud DNS API, and - # name is not always available (we can ask for every TXT record for example). So to stick to - # the most general case, its preferable to always get all records and be free to filter - # the way we want afterwards. + # the stacked multivalued RecordSets into Lexicon monovalued entries. + # Please note that we could provide type and name to the API to make the filtering, + # but providing the type makes the name mandatory with the Google Cloud DNS API, and + # name is not always available (we can ask for every TXT record for example). So to stick to + # the most general case, its preferable to always get all records and be free to filter + # the way we want afterwards. def list_records(self, type=None, name=None, content=None): results = self._get('/managedZones/{0}/rrsets'.format(self.domain_id)) @@ -163,9 +183,11 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] LOGGER.debug('list_records: %s', records) @@ -174,20 +196,23 @@ # Create the record with provided type, name and content. # Because of the way this API is constructed, it is quite complex in fact. # Indeed we need to know if there is already a RecordSet for the type/name pair, and update - # or create accordingly the RecordSet. Furthermore, we need first to delete the old RecordSet - # if it exists, to replace it with the RecordSet containing the new content we want. + # or create accordingly the RecordSet. Furthermore, we need first to delete the old RecordSet + # if it exists, to replace it with the RecordSet containing the new content we want. def create_record(self, type, name, content): if not type or not name or not content: - raise Exception('Error, type, name and content are mandatory to create a record.') + raise Exception( + 'Error, type, name and content are mandatory to create a record.') - identifier = Provider._identifier({'type': type, 'name': self._full_name(name), 'content': content}) + identifier = Provider._identifier( + {'type': type, 'name': self._full_name(name), 'content': content}) query_params = { 'type': type, 'name': self._fqdn_name(name) } - results = self._get('/managedZones/{0}/rrsets'.format(self.domain_id), query_params=query_params) + results = self._get( + '/managedZones/{0}/rrsets'.format(self.domain_id), query_params=query_params) rrdatas = [] changes = {} @@ -195,7 +220,8 @@ rrset = results['rrsets'][0] for rrdata in rrset['rrdatas']: if rrdata == Provider._normalize_content(rrset['type'], content): - LOGGER.debug('create_record (ignored, duplicate): %s', identifier) + LOGGER.debug( + 'create_record (ignored, duplicate): %s', identifier) return True changes['deletions'] = [{ @@ -206,45 +232,52 @@ }] rrdatas = rrset['rrdatas'][:] - + rrdatas.append(Provider._normalize_content(type, content)) changes['additions'] = [{ 'name': self._fqdn_name(name), 'type': type, - 'ttl': self.options.get('ttl'), + 'ttl': self._get_lexicon_option('ttl'), 'rrdatas': rrdatas }] - self._post('/managedZones/{0}/changes'.format(self.domain_id), data=changes) + self._post( + '/managedZones/{0}/changes'.format(self.domain_id), data=changes) LOGGER.debug('create_record: %s', identifier) return True - # Update a record for the given identifier or type/name pair with the given content if provided. - # Again because of the API specification, updating is even more complex than creating, as we need - # to take into account every RecordSet that should be destroyed then recreated. + # Update a record for the given identifier or type/name pair + # with the given content if provided. + # Again because of the API specification, updating is even more complex than creating, + # as we need to take into account every RecordSet that should be destroyed then recreated. # As all the hard work has been done on list_record, create_record and delete_record, we use a - # combination of these three methods to obtain the state we want. + # combination of these three methods to obtain the state we want. # Even if this make the operation very costly regarding the number of requests to do, it allows - # the implementation to be way more readable (without that, it would take grossly the size of - # the three quoted methods). + # the implementation to be way more readable (without that, it would take grossly the size of + # he three quoted methods). def update_record(self, identifier, type=None, name=None, content=None): if not identifier and (not type or not name): - raise Exception('Error, identifier or type+name parameters are required.') + raise Exception( + 'Error, identifier or type+name parameters are required.') if identifier: records = self.list_records() - records_to_update = [record for record in records if record['id'] == identifier] + records_to_update = [ + record for record in records if record['id'] == identifier] else: records_to_update = self.list_records(type=type, name=name) if not records_to_update: - raise Exception('Error, could not find a record for given identifier: {0}'.format(identifier)) + raise Exception( + 'Error, could not find a record for given identifier: {0}'.format(identifier)) if len(records_to_update) > 1: - LOGGER.warn('Warning, multiple records found for given parameters, only first one will be updated: %s', records_to_update) + LOGGER.warning( + 'Warning, multiple records found for given parameters, ' + 'only first one will be updated: %s', records_to_update) record_identifier = records_to_update[0]['id'] @@ -253,56 +286,65 @@ self.delete_record(record_identifier) new_record = { - 'type': type if type else records_to_update[0]['type'], - 'name': name if name else records_to_update[0]['name'], + 'type': type if type else records_to_update[0]['type'], + 'name': name if name else records_to_update[0]['name'], 'content': content if content else records_to_update[0]['content'] } - self.create_record(new_record['type'], new_record['name'], new_record['content']) + self.create_record( + new_record['type'], new_record['name'], new_record['content']) LOGGER.setLevel(original_level) - LOGGER.debug('update_record: %s => %s', record_identifier, Provider._identifier(new_record)) + LOGGER.debug('update_record: %s => %s', record_identifier, + Provider._identifier(new_record)) return True # Delete a record for the given identifier or the given type/name/content. # Really complex to do, because a lot of RecordSets can be updated (so destroyed and recreated) - # depending on the given condition (eg. with content alone, every record could be inspected). + # depending on the given condition (eg. with content alone, every record could be inspected). # There is mainly to cases: # - either an association of one or more between type, name and content is given - # - either an identifier is given, and we extract the type + name + content to process as the first case. - # Anyway, we will need to parse every RecordSet available, and for each of them which match the conditions: + # - either an identifier is given, and we extract the type + name + content + # to process as the first case. + # Anyway, we will need to parse every RecordSet available, and for each of them + # that matches the conditions: # - mark as deletion the existing RecordSet # - remove the targeted content from the RecordSet # - mark as addition the update RecordSet with the subset of rrdatas if rrdatas is not empty - # - do not mark as additions RecordSets whose rrdatas subset become empty: - # for this type/name pair, all RecordSet needs to go away. + # - do not mark as additions RecordSets whose rrdatas subset become empty: + # for this type/name pair, all RecordSet needs to go away. def delete_record(self, identifier=None, type=None, name=None, content=None): results = self._get('/managedZones/{0}/rrsets'.format(self.domain_id)) if identifier: - changes = self._process_records_to_delete_by_identifier(results, identifier) + changes = self._process_records_to_delete_by_identifier( + results, identifier) else: - changes = self._process_records_to_delete_by_parameters(results, type, name, content) + changes = self._process_records_to_delete_by_parameters( + results, type, name, content) if not changes: - raise Exception('Could not find existing record matching the given parameters.') + raise Exception( + 'Could not find existing record matching the given parameters.') - self._post('/managedZones/{0}/changes'.format(self.domain_id), data=changes) + self._post( + '/managedZones/{0}/changes'.format(self.domain_id), data=changes) - LOGGER.debug('delete_records: %s %s %s %s', identifier, type, name, content) + LOGGER.debug('delete_records: %s %s %s %s', + identifier, type, name, content) return True # Calculate the changes to do based on the record to remove identified by its identifier. # This implementation find the corresponding record, and use its type + name + value to - # delegate the processing to _process_records_to_delete_by_parameters. + # delegate the processing to _process_records_to_delete_by_parameters. def _process_records_to_delete_by_identifier(self, results, identifier): for rrset in results['rrsets']: for rrdata in rrset['rrdatas']: record = { - 'type': rrset['type'], - 'name': self._full_name(rrset['name']), + 'type': rrset['type'], + 'name': self._full_name(rrset['name']), 'content': rrdata } @@ -310,25 +352,31 @@ record_identifier = Provider._identifier(record) if identifier == record_identifier: - return self._process_records_to_delete_by_parameters(results, record['type'], record['name'], record['content']) + return self._process_records_to_delete_by_parameters( + results, record['type'], record['name'], record['content']) return None # Calculate the changes to do based on the records to remove identified by type/name/content. # Additions and deletions are registered accordingly in the changes, and RecordSet with empty - # rrdatas after its subset are not marked in additions to be completly removed from the DNS zone. - def _process_records_to_delete_by_parameters(self, results, type=None, name=None, content=None): + # rrdatas after its subset are not marked in additions to be completely removed + # from the DNS zone. + def _process_records_to_delete_by_parameters( + self, results, type=None, name=None, content=None): rrsets_to_modify = results['rrsets'] if type: - rrsets_to_modify = [rrset for rrset in rrsets_to_modify if rrset['type'] == type] + rrsets_to_modify = [ + rrset for rrset in rrsets_to_modify if rrset['type'] == type] if name: - rrsets_to_modify = [rrset for rrset in rrsets_to_modify if rrset['name'] == self._fqdn_name(name)] + rrsets_to_modify = [ + rrset for rrset in rrsets_to_modify if rrset['name'] == self._fqdn_name(name)] if content: - rrsets_to_modify = [rrset for rrset in rrsets_to_modify if ('"{0}"'.format(content) if rrset['type'] == 'TXT' else content) in rrset['rrdatas']] + rrsets_to_modify = [rrset for rrset in rrsets_to_modify if ('"{0}"'.format( + content) if rrset['type'] == 'TXT' else content) in rrset['rrdatas']] changes = { - 'additions': [], + 'additions': [], 'deletions': [] } @@ -342,7 +390,8 @@ if content: new_rrdatas = rrset_to_modify['rrdatas'][:] - new_rrdatas.remove('"{0}"'.format(content) if rrset_to_modify['type'] == 'TXT' else content) + new_rrdatas.remove('"{0}"'.format( + content) if rrset_to_modify['type'] == 'TXT' else content) if new_rrdatas: changes['additions'].append({ 'name': rrset_to_modify['name'], @@ -364,30 +413,34 @@ return '"{0}"'.format(content) if type == 'CNAME': return '{0}.'.format(content) if not content.endswith('.') else content - + return content # Google Cloud DNS API does not provide identifier for RecordSets. # So we need to calculate our own identifier at runtime. - # It is based on a SHA256 hash with the most relevant parameters of a record: type, name and content. - # Note that the identifier is calculated on a Lexicon monovalued entry, not a Google stacked multivalued RecordSet, - # to make it usable during Lexicon calls to updates and deletions. + # It is based on a SHA256 hash with the most relevant + # parameters of a record: type, name and content. + # Note that the identifier is calculated on a Lexicon monovalued entry, not a Google stacked + # multivalued RecordSet, to make it usable during Lexicon calls to updates and deletions. @staticmethod def _identifier(record): digest = hashes.Hash(hashes.SHA256(), backend=default_backend()) digest.update(('type=' + record.get('type', '') + ',').encode('utf-8')) digest.update(('name=' + record.get('name', '') + ',').encode('utf-8')) - digest.update(('content=' + record.get('content', '') + ',').encode('utf-8')) + digest.update( + ('content=' + record.get('content', '') + ',').encode('utf-8')) return binascii.hexlify(digest.finalize()).decode('utf-8')[0:7] # The request, when authenticated, is really standard: - # the request body is encoded as application/json for POST (so the use of 'json' config instead of 'data' in request), - # the body response is also encoded as application/json for GET and POST, - # and the request headers must contain the access token in the 'Authorization' field. - def _request(self, action='GET', url='/', data=None, query_params=None): - request = requests.request(action, - 'https://content.googleapis.com/dns/v1/projects/{0}{1}'.format(self._service_account_info['project_id'], url), + # - the request body is encoded as application/json for POST + # (so the use of 'json' config instead of 'data' in request), + # - the body response is also encoded as application/json for GET and POST, + # - and the request headers must contain the access token in the 'Authorization' field. + def _request(self, action='GET', url='/', data=None, query_params=None): + request = requests.request(action, + 'https://content.googleapis.com/dns/v1/projects/{0}{1}'.format( + self._service_account_info['project_id'], url), params=None if not query_params else query_params, json=None if not data else data, headers={'Authorization': 'Bearer {0}'.format(self._token)}) diff -Nru lexicon-2.7.12/lexicon/providers/henet.py lexicon-3.0.8/lexicon/providers/henet.py --- lexicon-2.7.12/lexicon/providers/henet.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/henet.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,22 +1,26 @@ from __future__ import absolute_import - -import re, logging -from sys import stderr +import logging +import re from os import environ +from sys import stderr from time import sleep + +from lexicon.providers.base import Provider as BaseProvider from requests import Session + + # Due to optional requirement try: from bs4 import BeautifulSoup except ImportError: - pass + pass -from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['he.net'] + def ProviderParser(subparser): subparser.description = """A provider for Hurricane Electric DNS. NOTE: THIS DOES NOT WORK WITH 2-FACTOR AUTHENTICATION. @@ -37,34 +41,33 @@ he.net provider """ - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) - self.options = options - self.domain = self.options['domain'] + def __init__(self, config): + super(Provider, self).__init__(config) + self.domain = self.domain self.domain_id = None def authenticate(self): """ """ # Create the session GET the login page to retrieve a session cookie - self.session = Session() + self.session = Session() self.session.get( "https://dns.he.net/" ) # Hit the login page with authentication info to login the session login_response = self.session.post( - "https://dns.he.net", + "https://dns.he.net", data={ - "email": self.options.get('auth_username',''), - "pass": self.options.get('auth_password','') + "email": self._get_provider_option('auth_username') or '', + "pass": self._get_provider_option('auth_password') or '' } ) # Parse in the HTML, if the div containing the error message is found, error html = BeautifulSoup(login_response.content, "html.parser") if html.find("div", {"id": "dns_err"}) is not None: - logger.warning("HE login failed, check HE_USER and HE_PASS") + LOGGER.warning("HE login failed, check HE_USER and HE_PASS") return False # Make an authenticated GET to the DNS management page @@ -73,26 +76,29 @@ ) html = BeautifulSoup(zones_response.content, "html.parser") - zone_img = html.find("img", {"name": self.options.get("domain",''), "alt": "delete"}) + zone_img = html.find("img", {"name": self.domain, "alt": "delete"}) # If the tag couldn't be found, error, otherwise, return the value of the tag if zone_img is None: - logger.warning("Domain {0} not found in account".format(self.options.get("domain",''))) - raise AssertionError("Domain {0} not found in account".format(self.options.get("domain",''))) + LOGGER.warning( + "Domain {0} not found in account".format(self.domain)) + raise AssertionError( + "Domain {0} not found in account".format(self.domain)) self.domain_id = zone_img["value"] - logger.debug("HENET domain ID: {}".format(self.domain_id)) + LOGGER.debug("HENET domain ID: {}".format(self.domain_id)) return True # Create record. If record already exists with the same content, do nothing def create_record(self, type, name, content): - logger.debug("Creating record for zone {0}".format(name)) + LOGGER.debug("Creating record for zone {0}".format(name)) # Pull a list of records and check for ours records = self.list_records(type=type, name=name, content=content) if len(records) >= 1: - logger.warning("Duplicate record {} {} {}, NOOP".format(type, name, content)) + LOGGER.warning( + "Duplicate record {} {} {}, NOOP".format(type, name, content)) return True - data={ + data = { "account": "", "menu": "edit_zone", "Type": type, @@ -105,15 +111,15 @@ "TTL": "3600", "hosted_dns_editrecord": "Submit" } - ttl = self.options.get('ttl') + ttl = self._get_lexicon_option('ttl') if ttl: - if ttl <= 0: + if ttl <= 0: data['TTL'] = "3600" else: data['TTL'] = str(ttl) - prio = self.options.get('priority') + prio = self._get_lexicon_option('priority') if prio: - if prio <= 0: + if prio <= 0: data['Priority'] = "10" else: data['Priority'] = str(prio) @@ -123,10 +129,10 @@ # Pull a list of records and check for ours records = self.list_records(name=name) if len(records) >= 1: - logger.info("Successfully added record {}".format(name)) + LOGGER.info("Successfully added record {}".format(name)) return True else: - logger.info("Failed to add record {}".format(name)) + LOGGER.info("Failed to add record {}".format(name)) return False # List all records. Return an empty list if no records found. @@ -137,18 +143,20 @@ records = [] # Make an authenticated GET to the DNS management page edit_response = self.session.get( - "https://dns.he.net/?hosted_dns_zoneid={0}&menu=edit_zone&hosted_dns_editzone".format(self.domain_id) + "https://dns.he.net/?hosted_dns_zoneid={0}&menu=edit_zone&hosted_dns_editzone".format( + self.domain_id) ) # Parse the HTML response, and list the table rows for DNS records html = BeautifulSoup(edit_response.content, "html.parser") + def is_dns_tr_type(klass): return klass and re.compile("dns_tr").search(klass) records = html.findAll("tr", class_=is_dns_tr_type) # If the tag couldn't be found, error, otherwise, return the value of the tag if records is None or len(records) == 0: - logger.warning("Domains not found in account") + LOGGER.warning("Domains not found in account") else: new_records = [] for dns_tr in records: @@ -176,20 +184,28 @@ new_records.append(rec) records = new_records if id: - logger.debug("Filtering {} records by id: {}".format(len(records), id)) + LOGGER.debug( + "Filtering {} records by id: {}".format(len(records), id)) records = [record for record in records if record['id'] == id] if type: - logger.debug("Filtering {} records by type: {}".format(len(records), type)) - records = [record for record in records if record['type'] == type] + LOGGER.debug("Filtering {} records by type: {}".format( + len(records), type)) + records = [ + record for record in records if record['type'] == type] if name: - logger.debug("Filtering {} records by name: {}".format(len(records), name)) + LOGGER.debug("Filtering {} records by name: {}".format( + len(records), name)) if name.endswith('.'): name = name[:-1] - records = [record for record in records if name in record['name'] ] + records = [ + record for record in records if name in record['name']] if content: - logger.debug("Filtering {} records by content: {}".format(len(records), content.lower())) - records = [record for record in records if record['content'].lower() == content.lower()] - logger.debug("Final records ({}): {}".format(len(records), records)) + LOGGER.debug("Filtering {} records by content: {}".format( + len(records), content.lower())) + records = [ + record for record in records if record['content'].lower() == content.lower()] + LOGGER.debug("Final records ({}): {}".format( + len(records), records)) return records # Create or update a record. @@ -207,7 +223,7 @@ delete_record_ids = [record['id'] for record in records] else: delete_record_ids.append(identifier) - logger.debug("Record IDs to delete: {}".format(delete_record_ids)) + LOGGER.debug("Record IDs to delete: {}".format(delete_record_ids)) for rec_id in delete_record_ids: # POST to the DNS management UI with form values to delete the record delete_response = self.session.post( @@ -225,6 +241,6 @@ # Parse the HTML response, if the
tag indicating success isn't found, error html = BeautifulSoup(delete_response.content, "html.parser") if html.find("div", {"id": "dns_status"}) is None: - logger.warning("Unable to delete record {}".format(rec_id)) + LOGGER.warning("Unable to delete record {}".format(rec_id)) return False return True diff -Nru lexicon-2.7.12/lexicon/providers/hetzner.py lexicon-3.0.8/lexicon/providers/hetzner.py --- lexicon-2.7.12/lexicon/providers/hetzner.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/hetzner.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,719 @@ +from __future__ import absolute_import +from __future__ import unicode_literals + +from contextlib import contextmanager +import hashlib +import logging +import re +import time +import requests +from six import string_types +from urllib3.util.retry import Retry + +# Due to optional requirement +try: + from bs4 import BeautifulSoup + import dns.resolver + import dns.zone +except ImportError: + pass + +from lexicon.providers.base import Provider as BaseProvider + +LOGGER = logging.getLogger(__name__) + +NAMESERVER_DOMAINS = [] + +def ProviderParser(subparser): + subparser.add_argument('--auth-account', + help='specify type of Hetzner account: by default Hetzner Robot ' + '(robot) or Hetzner konsoleH (konsoleh)') + subparser.add_argument('--auth-username', help='specify username of Hetzner account') + subparser.add_argument('--auth-password', help='specify password of Hetzner account') + subparser.add_argument('--linked', + help='if exists, uses linked CNAME as A|AAAA|TXT record name for edit ' + 'actions: by default (yes); Further restriction: Only enabled if ' + 'record name or raw FQDN record identifier \'type/name/content\' is ' + 'specified, and additionally for update actions the record name ' + 'remains the same', + default=str('yes'), + choices=['yes', 'no']) + subparser.add_argument('--propagated', + help='waits until record is publicly propagated after succeeded ' + 'create|update actions: by default (yes)', + default=str('yes'), + choices=['yes', 'no']) + subparser.add_argument('--latency', + help='specify latency, used during checks for publicly propagation ' + 'and additionally for Hetzner Robot after record edits: by default ' + '30s (30)', + default=int(30), + type=int) + +class Provider(BaseProvider): + """ + Implements the Hetzner DNS Provider. + There are two variants to manage DNS records on Hetzner: Hetzner Robot or + Hetzner konsoleH. Both do not provide a common API, therefore this provider + implements missing read and write methods in a generic way. For editing DNS + records on Hetzner, this provider manipulates and replaces the whole DNS zone. + Furthermore, there is no unique identifier to each record in the way that Lexicon + expects, why this provider implements a pseudo-identifer based on the record type, + name and content for use of the --identifier parameter. Supported identifier + formats are: + - hash generated|verified by 'list' command; e.g. '30fa112' + - raw concatenation of the record type, name (FQDN) and content (if possible + FQDN) with delimiter '/'; e.g. 'SRV/example.com./0 0 443 msx.example.com.' + or 'TXT/example.com./challengetoken' + Additional, this provider implements the option of replacing an A, AAAA or TXT record + name with an existent linked CNAME for edit actions via the --linked parameter and + the option of waiting until record is publicly propagated after succeeded create or + update actions via the --propagated parameter. As further restriction, the use of a + linked CNAME is only enabled if the record type & record name or the raw identifier are + specified, and additionally for the update action the record name remains the same. + """ + + def __init__(self, config): + super(Provider, self).__init__(config) + self.api = { + 'robot': { + 'endpoint': 'https://robot.your-server.de', + 'filter': [{'name': 'div', 'attrs': {'id': 'center_col'}}], + 'auth': { + 'endpoint': 'https://accounts.hetzner.com', + 'GET': {'url': '/login'}, + 'POST': {'url': '/login_check'}, + 'filter': [{'name': 'form', 'attrs': {'id': 'login-form'}}], + 'user': '_username', + 'pass': '_password' + }, + 'exit': { + 'GET': {'url': '/login/logout/r/true'} + }, + 'domain_id': { + 'GET': {'url': '/dns/index/page/'}, + 'filter': [ + {'name': 'div', 'attrs': {'id': 'center_col'}}, + {'name': 'table', 'attrs': {'class': 'box_title'}} + ], + 'domain': [{'name': 'td', 'attrs': {'class': 'title'}}], + 'id': {'attr': 'onclick', 'regex': r'\'(\d+)\''} + }, + 'zone': { + 'GET': [{'url': '/dns/update/id/'}], + 'POST': {'url': '/dns/update'}, + 'filter': [ + {'name': 'div', 'attrs': {'id': 'center_col'}}, + {'name': 'ul', 'attrs': {'class': 'error_list'}} + ], + 'file': 'zonefile' + } + }, + 'konsoleh': { + 'endpoint': 'https://konsoleh.your-server.de', + 'filter': [{'name': 'div', 'attrs': {'id': 'content'}}], + 'auth': { + 'GET': {}, + 'POST': {'url': '/login.php'}, + 'filter': [{'name': 'form', 'attrs': {'id': 'loginform'}}], + 'user': 'login_user_inputbox', + 'pass': 'login_pass_inputbox' + }, + 'exit': { + 'GET': {'url': '/logout.php'} + }, + 'domain_id': { + 'GET': {'params': {'page': ''}}, + 'filter': [ + {'name': 'div', 'attrs': {'id': 'domainlist'}}, + {'name': 'dl'}, + {'name': 'a'} + ], + 'domain': [{'name': 'strong'}], + 'id': {'attr': 'href', 'regex': r'=(D\d+)'} + }, + 'zone': { + 'GET': [ + {'params': {'domain_number': ''}}, + {'url': '/dns.php', 'params': {'dnsaction2': 'editintextarea'}} + ], + 'POST': {'url': '/dns.php'}, + 'filter': [ + {'name': 'div', 'attrs': {'id': 'content'}}, + {'name': 'div', 'attrs': {'class': 'error'}} + ], + 'file': 'zone_file1' + } + } + } + self.session = None + + self.account = self._get_provider_option('auth_account') + if self.account in (None, 'robot', 'konsoleh'): + self.account = self.account if self.account else 'robot' + else: + LOGGER.error('Hetzner => Argument for --auth-account is invalid: \'%s\' ' + '(choose from \'robot\' or \'konsoleh\')', self.account) + raise AssertionError + self.username = self._get_provider_option('auth_username') + assert self.username is not None + self.password = self._get_provider_option('auth_password') + assert self.password is not None + + def authenticate(self): + """ + Connects to Hetzner account and returns, if authentification was + successful and the domain or CNAME target is managed by this account. + """ + with self._session(self.domain, get_zone=False): + return True + + def create_record(self, type, name, content): + """ + Connects to Hetzner account, adds a new record to the zone and returns a + boolean, if creation was successful or not. Needed record type, name and + content for record to create. + """ + with self._session(self.domain, self.domain_id) as ddata: + # Validate method parameters + if not type or not name or not content: + LOGGER.warning('Hetzner => Record has no type|name|content specified') + return False + + # Add record to zone + name = ddata['cname'] if ddata['cname'] else self._fqdn_name(name) + rrset = ddata['zone']['data'].get_rdataset(name, rdtype=type, create=True) + for rdata in rrset: + if self._convert_content(type, content) == rdata.to_text(): + LOGGER.info('Hetzner => Record with content \'%s\' already exists', + content) + return True + + ttl = (rrset.ttl if rrset.ttl > 0 + and rrset.ttl < self._get_lexicon_option('ttl') + else self._get_lexicon_option('ttl')) + rdataset = dns.rdataset.from_text(rrset.rdclass, rrset.rdtype, + ttl, self._convert_content(type, content)) + rrset.update(rdataset) + # Post zone to Hetzner + synced_change = self._post_zone(ddata['zone']) + if synced_change: + self._propagated_record(type, name, self._convert_content(type, content), + ddata['nameservers']) + return synced_change + + def list_records(self, type=None, name=None, content=None): + """ + Connects to Hetzner account and returns a list of records filtered by record + type, name and content. The list is empty if no records found. + """ + with self._session(self.domain, self.domain_id) as ddata: + name = self._fqdn_name(name) if name else None + return self._list_records(ddata['zone']['data'], type, name, content) + + def update_record(self, identifier=None, type=None, name=None, content=None): + """ + Connects to Hetzner account, changes an existing record and returns a boolean, + if update was successful or not. Needed identifier or type & name to lookup + over all records of the zone for exactly one record to update. + """ + with self._session(self.domain, self.domain_id) as ddata: + # Validate method parameters + if identifier: + dtype, dname, dcontent = self._parse_identifier(identifier, ddata['zone']['data']) + if dtype and dname and dcontent: + type = type if type else dtype + name = name if name else dname + content = content if content else dcontent + else: + LOGGER.warning('Hetzner => Record with identifier \'%s\' does not exist', + identifier) + return False + + elif type and name and content: + dtype, dname, dcontent = type, name, None + else: + LOGGER.warning('Hetzner => Record has no type|name|content specified') + return False + + dname = ddata['cname'] if ddata['cname'] else self._fqdn_name(dname) + records = self._list_records(ddata['zone']['data'], dtype, dname, dcontent) + if len(records) == 1: + # Remove record from zone + rrset = ddata['zone']['data'].get_rdataset(records[0]['name']+'.', + rdtype=records[0]['type']) + rdatas = [] + for rdata in rrset: + if self._convert_content(records[0]['type'], + records[0]['content']) != rdata.to_text(): + rdatas.append(rdata.to_text()) + if rdatas: + rdataset = dns.rdataset.from_text_list(rrset.rdclass, rrset.rdtype, + records[0]['ttl'], rdatas) + ddata['zone']['data'].replace_rdataset(records[0]['name']+'.', rdataset) + else: + ddata['zone']['data'].delete_rdataset(records[0]['name']+'.', + records[0]['type']) + # Add record to zone + name = ddata['cname'] if ddata['cname'] else self._fqdn_name(name) + rrset = ddata['zone']['data'].get_rdataset(name, rdtype=type, create=True) + synced_change = False + for rdata in rrset: + if self._convert_content(type, content) == rdata.to_text(): + LOGGER.info('Hetzner => Record with content \'%s\' already exists', + content) + synced_change = True + break + if not synced_change: + ttl = (rrset.ttl if rrset.ttl > 0 + and rrset.ttl < self._get_lexicon_option('ttl') + else self._get_lexicon_option('ttl')) + rdataset = dns.rdataset.from_text(rrset.rdclass, rrset.rdtype, ttl, + self._convert_content(type, content)) + rrset.update(rdataset) + # Post zone to Hetzner + synced_change = self._post_zone(ddata['zone']) + if synced_change: + self._propagated_record(type, name, self._convert_content(type, content), + ddata['nameservers']) + return synced_change + + LOGGER.warning('Hetzner => Record lookup has not only one match') + return False + + def delete_record(self, identifier=None, type=None, name=None, content=None): + """ + Connects to Hetzner account, removes an existing record from the zone and returns a + boolean, if deletion was successful or not. Uses identifier or type, name & content to + lookup over all records of the zone for one or more records to delete. + """ + with self._session(self.domain, self.domain_id) as ddata: + # Validate method parameters + if identifier: + type, name, content = self._parse_identifier(identifier, ddata['zone']['data']) + if type is None or name is None or content is None: + LOGGER.info('Hetzner => Record with identifier \'%s\' does not exist', + identifier) + return True + + name = ddata['cname'] if ddata['cname'] else (self._fqdn_name(name) if name else None) + records = self._list_records(ddata['zone']['data'], type, name, content) + if records: + # Remove records from zone + for record in records: + rrset = ddata['zone']['data'].get_rdataset(record['name']+'.', + rdtype=record['type']) + rdatas = [] + for rdata in rrset: + if self._convert_content(record['type'], + record['content']) != rdata.to_text(): + rdatas.append(rdata.to_text()) + if rdatas: + rdataset = dns.rdataset.from_text_list(rrset.rdclass, rrset.rdtype, + record['ttl'], rdatas) + ddata['zone']['data'].replace_rdataset(record['name']+'.', rdataset) + else: + ddata['zone']['data'].delete_rdataset(record['name']+'.', record['type']) + # Post zone to Hetzner + synced_change = self._post_zone(ddata['zone']) + return synced_change + + LOGGER.info('Hetzner => Record lookup has no matches') + return True + + ############################################################################### + # Provider base helpers + ############################################################################### + + @staticmethod + def _create_identifier(rdtype, name, content): + """ + Creates hashed identifier based on full qualified record type, name & content + and returns hash. + """ + sha256 = hashlib.sha256() + sha256.update((rdtype + '/').encode('UTF-8')) + sha256.update((name + '/').encode('UTF-8')) + sha256.update(content.encode('UTF-8')) + return sha256.hexdigest()[0:7] + + def _parse_identifier(self, identifier, zone=None): + """ + Parses the record identifier and returns type, name & content of the associated record + as tuple. The tuple is empty if no associated record found. + """ + rdtype, name, content = None, None, None + if len(identifier) > 7: + parts = identifier.split('/') + rdtype, name, content = parts[0], parts[1], '/'.join(parts[2:]) + else: + records = self._list_records(zone) + for record in records: + if record['id'] == identifier: + rdtype, name, content = record['type'], record['name']+'.', record['content'] + return rdtype, name, content + + def _convert_content(self, rdtype, content): + """ + Converts type dependent record content into well formed and fully qualified + content for domain zone and returns content. + """ + if rdtype == 'TXT': + if content[0] != '"': + content = '"' + content + if content[-1] != '"': + content += '"' + if rdtype in ('CNAME', 'MX', 'NS', 'SRV'): + if content[-1] != '.': + content = self._fqdn_name(content) + return content + + def _list_records(self, zone, rdtype=None, name=None, content=None): + """ + Iterates over all records of the zone and returns a list of records filtered + by record type, name and content. The list is empty if no records found. + """ + records = [] + rrsets = zone.iterate_rdatasets() if zone else [] + for rname, rdataset in rrsets: + rtype = dns.rdatatype.to_text(rdataset.rdtype) + if ((not rdtype or rdtype == rtype) + and (not name or name == rname.to_text())): + for rdata in rdataset: + rdata = rdata.to_text() + if (not content or self._convert_content(rtype, content) == rdata): + raw_rdata = self._clean_TXT_record({'type': rtype, + 'content': rdata})['content'] + data = { + 'type': rtype, + 'name': rname.to_text(True), + 'ttl': int(rdataset.ttl), + 'content': raw_rdata, + 'id': Provider._create_identifier(rtype, rname.to_text(), raw_rdata) + } + records.append(data) + return records + + def _request(self, action='GET', url='/', data=None, query_params=None): + """ + Requests to Hetzner by current session and returns the response. + """ + if data is None: + data = {} + if query_params is None: + query_params = {} + response = self.session.request(action, self.api[self.account]['endpoint'] + url, + params=query_params, data=data) + response.raise_for_status() + return response + + ############################################################################### + # Provider option helpers + ############################################################################### + + @staticmethod + def _dns_lookup(name, rdtype, nameservers=None): + """ + Looks on specified or default system domain nameservers to resolve record type + & name and returns record set. The record set is empty if no propagated + record found. + """ + rrset = dns.rrset.from_text(name, 0, 1, rdtype) + try: + resolver = dns.resolver.Resolver() + resolver.lifetime = 1 + if nameservers: + resolver.nameservers = nameservers + rrset = resolver.query(name, rdtype) + for rdata in rrset: + LOGGER.debug('DNS Lookup => %s %s %s %s', + rrset.name.to_text(), dns.rdataclass.to_text(rrset.rdclass), + dns.rdatatype.to_text(rrset.rdtype), rdata.to_text()) + except dns.exception.DNSException as error: + LOGGER.debug('DNS Lookup => %s', error) + return rrset + + @staticmethod + def _get_nameservers(domain): + """ + Looks for domain nameservers and returns the IPs of the nameservers as a list. + The list is empty, if no nameservers were found. Needed associated domain zone + name for lookup. + """ + nameservers = [] + rdtypes_ns = ['SOA', 'NS'] + rdtypes_ip = ['A', 'AAAA'] + for rdtype_ns in rdtypes_ns: + for rdata_ns in Provider._dns_lookup(domain, rdtype_ns): + for rdtype_ip in rdtypes_ip: + for rdata_ip in Provider._dns_lookup(rdata_ns.to_text().split(' ')[0], + rdtype_ip): + if rdata_ip.to_text() not in nameservers: + nameservers.append(rdata_ip.to_text()) + LOGGER.debug('DNS Lookup => %s IN NS %s', domain, ' '.join(nameservers)) + return nameservers + + @staticmethod + def _get_dns_cname(name, link=False): + """ + Looks for associated domain zone, nameservers and linked record name until no + more linked record name was found for the given fully qualified record name or + the CNAME lookup was disabled, and then returns the parameters as a tuple. + """ + resolver = dns.resolver.Resolver() + resolver.lifetime = 1 + domain = dns.resolver.zone_for_name(name, resolver=resolver).to_text(True) + nameservers = Provider._get_nameservers(domain) + cname = None + links, max_links = 0, 5 + while link: + if links >= max_links: + LOGGER.error('Hetzner => Record %s has more than %d linked CNAME ' + 'records. Reduce the amount of CNAME links!', + name, max_links) + raise AssertionError + qname = cname if cname else name + rrset = Provider._dns_lookup(qname, 'CNAME', nameservers) + if rrset: + links += 1 + cname = rrset[0].to_text() + qdomain = dns.resolver.zone_for_name(cname, resolver=resolver).to_text(True) + if domain != qdomain: + domain = qdomain + nameservers = Provider._get_nameservers(qdomain) + else: + link = False + if cname: + LOGGER.info('Hetzner => Record %s has CNAME %s', name, cname) + return domain, nameservers, cname + + def _link_record(self): + """ + Checks restrictions for use of CNAME lookup and returns a tuple of the + fully qualified record name to lookup and a boolean, if a CNAME lookup + should be done or not. The fully qualified record name is empty if no + record name is specified by this provider. + """ + action = self._get_lexicon_option('action') + identifier = self._get_lexicon_option('identifier') + rdtype = self._get_lexicon_option('type') + name = (self._fqdn_name(self._get_lexicon_option('name')) + if self._get_lexicon_option('name') else None) + link = True if self._get_provider_option('linked') == 'yes' else False + qname = name + if identifier: + rdtype, name, _ = self._parse_identifier(identifier) + if action != 'list' and rdtype in ('A', 'AAAA', 'TXT') and name and link: + if action != 'update' or name == qname or not qname: + LOGGER.info('Hetzner => Enable CNAME lookup ' + '(see --linked parameter)') + return name, True + LOGGER.info('Hetzner => Disable CNAME lookup ' + '(see --linked parameter)') + return name, False + + def _propagated_record(self, rdtype, name, content, nameservers=None): + """ + If the publicly propagation check should be done, waits until the domain nameservers + responses with the propagated record type, name & content and returns a boolean, + if the publicly propagation was successful or not. + """ + latency = self._get_provider_option('latency') + propagated = True if self._get_provider_option('propagated') == 'yes' else False + if propagated: + retry, max_retry = 0, 20 + while retry < max_retry: + for rdata in Provider._dns_lookup(name, rdtype, nameservers): + if content == rdata.to_text(): + LOGGER.info('Hetzner => Record %s has %s %s', name, rdtype, content) + return True + retry += 1 + retry_log = (', retry ({}/{}) in {}s...'.format((retry + 1), max_retry, latency) + if retry < max_retry else '') + LOGGER.info('Hetzner => Record is not propagated%s', retry_log) + time.sleep(latency) + return False + + ############################################################################### + # Hetzner API helpers + ############################################################################### + + @staticmethod + def _filter_dom(dom, filters, last_find_all=False): + """ + If not exists, creates an DOM from a given session response, then filters the DOM + via given API filters and returns the filtered DOM. The DOM is empty if the filters + have no match. + """ + if isinstance(dom, string_types): + dom = BeautifulSoup(dom, 'html.parser') + for idx, find in enumerate(filters, start=1): + if not dom: + break + name, attrs = find.get('name'), find.get('attrs', {}) + if len(filters) == idx and last_find_all: + dom = dom.find_all(name, attrs=attrs) if name else dom.find_all(attrs=attrs) + else: + dom = dom.find(name, attrs=attrs) if name else dom.find(attrs=attrs) + return dom + + @staticmethod + def _extract_hidden_data(dom): + """ + Extracts hidden input data from DOM and returns the data as dictionary. + """ + input_tags = dom.find_all('input', attrs={'type': 'hidden'}) + data = {} + for input_tag in input_tags: + data[input_tag['name']] = input_tag['value'] + return data + + @staticmethod + def _extract_domain_id(string, regex): + """ + Extracts domain ID from given string and returns the domain ID. + """ + regex = re.compile(regex) + match = regex.search(string) + if not match: + return False + return str(match.group(1)) + + @contextmanager + def _session(self, domain, domain_id=None, get_zone=True): + """ + Generates, authenticates and exits session to Hetzner account, and + provides tuple of additional needed domain data (domain nameservers, + zone and linked record name) to public methods. The tuple parameters + are empty if not existent or specified. Exits session and raises error + if provider fails during session. + """ + name, link = self._link_record() + qdomain, nameservers, cname = Provider._get_dns_cname((name if name else domain+'.'), link) + qdomain_id, zone = domain_id, None + self.session = self._auth_session(self.username, self.password) + try: + if not domain_id or qdomain != domain: + qdomain_id = self._get_domain_id(qdomain) + if qdomain == domain: + self.domain_id = qdomain_id + if get_zone: + zone = self._get_zone(qdomain, qdomain_id) + yield {'nameservers': nameservers, 'zone': zone, 'cname': cname} + except Exception as exc: + raise exc + finally: + self._exit_session() + + def _auth_session(self, username, password): + """ + Creates session to Hetzner account, authenticates with given credentials and + returns the session, if authentication was successful. Otherwise raises error. + """ + api = self.api[self.account]['auth'] + endpoint = api.get('endpoint', self.api[self.account]['endpoint']) + session = requests.Session() + session_retries = Retry(total=10, backoff_factor=0.5) + session_adapter = requests.adapters.HTTPAdapter(max_retries=session_retries) + session.mount('https://', session_adapter) + response = session.request('GET', endpoint + api['GET'].get('url', '/')) + dom = Provider._filter_dom(response.text, api['filter']) + data = Provider._extract_hidden_data(dom) + data[api['user']], data[api['pass']] = username, password + response = session.request('POST', endpoint + api['POST']['url'], data=data) + if Provider._filter_dom(response.text, api['filter']): + LOGGER.error('Hetzner => Unable to authenticate session with %s account \'%s\': ' + 'Invalid credentials', + self.account, username) + raise AssertionError + LOGGER.info('Hetzner => Authenticate session with %s account \'%s\'', + self.account, username) + return session + + def _exit_session(self): + """ + Exits session to Hetzner account and returns. + """ + api = self.api[self.account] + response = self._get(api['exit']['GET']['url']) + if not Provider._filter_dom(response.text, api['filter']): + LOGGER.info('Hetzner => Exit session') + else: + LOGGER.warning('Hetzner => Unable to exit session') + self.session = None + return True + + def _get_domain_id(self, domain): + """ + Pulls all domains managed by authenticated Hetzner account, extracts their IDs + and returns the ID for the current domain, if exists. Otherwise raises error. + """ + api = self.api[self.account]['domain_id'] + qdomain = dns.name.from_text(domain).to_unicode(True) + domains, last_count, page = {}, -1, 0 + while last_count != len(domains): + last_count = len(domains) + page += 1 + url = (api['GET'].copy()).get('url', '/').replace('', str(page)) + params = api['GET'].get('params', {}).copy() + for param in params: + params[param] = params[param].replace('', str(page)) + response = self._get(url, query_params=params) + domain_tags = Provider._filter_dom(response.text, api['filter'], True) + for domain_tag in domain_tags: + domain_id = Provider._extract_domain_id(dict(domain_tag.attrs)[api['id']['attr']], + api['id']['regex']) + domain = (Provider._filter_dom(domain_tag, api['domain']) + .renderContents().decode('UTF-8')) + domains[domain] = domain_id + if domain == qdomain: + LOGGER.info('Hetzner => Get ID %s for domain %s', domain_id, qdomain) + return domain_id + LOGGER.error('Hetzner => ID for domain %s does not exists', qdomain) + raise AssertionError + + def _get_zone(self, domain, domain_id): + """ + Pulls the zone for the current domain from authenticated Hetzner account and + returns it as an zone object. + """ + api = self.api[self.account] + for request in api['zone']['GET']: + url = (request.copy()).get('url', '/').replace('', domain_id) + params = request.get('params', {}).copy() + for param in params: + params[param] = params[param].replace('', domain_id) + response = self._get(url, query_params=params) + dom = Provider._filter_dom(response.text, api['filter']) + zone_file_filter = [{'name': 'textarea', 'attrs': {'name': api['zone']['file']}}] + zone_file = Provider._filter_dom(dom, zone_file_filter).renderContents().decode('UTF-8') + hidden = Provider._extract_hidden_data(dom) + zone = {'data': dns.zone.from_text(zone_file, origin=domain, relativize=False), + 'hidden': hidden} + LOGGER.info('Hetzner => Get zone for domain %s', domain) + return zone + + def _post_zone(self, zone): + """ + Pushes updated zone for current domain to authenticated Hetzner account and + returns a boolean, if update was successful or not. Furthermore, waits until + the zone has been taken over, if it is a Hetzner Robot account. + """ + api = self.api[self.account]['zone'] + data = zone['hidden'] + data[api['file']] = zone['data'].to_text(relativize=True) + response = self._post(api['POST']['url'], data=data) + if Provider._filter_dom(response.text, api['filter']): + LOGGER.error('Hetzner => Unable to update zone for domain %s: Syntax error\n\n%s', + zone['data'].origin.to_unicode(True), + zone['data'].to_text(relativize=True).decode('UTF-8')) + return False + + LOGGER.info('Hetzner => Update zone for domain %s', + zone['data'].origin.to_unicode(True)) + if self.account == 'robot': + latency = self._get_provider_option('latency') + LOGGER.info('Hetzner => Wait %ds until Hetzner Robot has taken over zone...', + latency) + time.sleep(latency) + return True diff -Nru lexicon-2.7.12/lexicon/providers/__init__.py lexicon-3.0.8/lexicon/providers/__init__.py --- lexicon-2.7.12/lexicon/providers/__init__.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/__init__.py 2019-01-03 16:26:53.000000000 +0000 @@ -1 +1 @@ -__author__ = 'Jason Kulatunga' \ No newline at end of file +__author__ = 'Jason Kulatunga' diff -Nru lexicon-2.7.12/lexicon/providers/internetbs.py lexicon-3.0.8/lexicon/providers/internetbs.py --- lexicon-2.7.12/lexicon/providers/internetbs.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/internetbs.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,184 @@ +# The internetbs api has an undocumented rate-limit ; here is what the support could tell me about +# it: "Please note that our API is intended mainly for domain name registrations and that's why we +# offer it for free and your registration volume has to stay in phase with the requests you perform. +# If you keep a reasonable ratio between check and successful registrations, you should never hit +# the limits. Here are the limits: +# - per minute = 60+N +# - per hour = 500+N +# - per day = 1000+2*N +# - per week = 2000+2.5*N +# - per month = 3000+3*N +# Where N is the number of registered domains in your account (so excluding pending +# transfers/trades)." + +from __future__ import absolute_import +import hashlib +import json +import logging + +import requests +from lexicon.providers.base import Provider as BaseProvider + + +LOGGER = logging.getLogger(__name__) + +NAMESERVER_DOMAINS = ['topdns.com'] + + +def ProviderParser(subparser): + subparser.add_argument( + "--auth-key", help="specify API key for authentication") + subparser.add_argument( + "--auth-password", help="specify password for authentication") + + +class Provider(BaseProvider): + + def __init__(self, config): + super(Provider, self).__init__(config) + self.domain_id = None + self.api_endpoint = 'https://api.internet.bs' + + def authenticate(self): + payload = self._get('/Domain/List', { + 'searchTermFilter': self.domain + }) + + LOGGER.debug('authenticate debug: %s', payload) + if not payload['status']: + raise Exception('Internal error. This should not happen') + if payload['status'] != 'SUCCESS': + raise Exception('Api error: {0}'.format(payload['message'])) + if self.domain not in payload['domain']: + raise Exception('Domain not found') + self.domain_id = self.domain + + # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): + # Skip execution if such a record already exists + existing_records = self.list_records(type, name, content) + if len(existing_records) > 0: + return True + + query = {'Type': type, 'FullRecordName': self._full_name( + name), 'Value': content} + ttl = self._get_lexicon_option('ttl') + if ttl: + query['Ttl'] = ttl + + # for MX records, query['Priority'] could be set (default is 10) + + payload = self._post('/Domain/DnsRecord/Add', None, query) + LOGGER.debug('authenticate debug: %s', payload) + if not payload['status']: + raise Exception('Internal error. This should not happen') + if payload['status'] != 'SUCCESS': + raise Exception('Api error: {0}'.format(payload['message'])) + return True + + # List all records. Return an empty list if no records found + # type, name and content are used to filter records. + # If possible filter during the query, otherwise filter after response is received. + def list_records(self, type=None, name=None, content=None): + query = {'Domain': self.domain} + if type: + query['FilterType'] = type + + payload = self._get('/Domain/DnsRecord/List', query) + + record_list = payload['records'] + if name: + cmp_name = self._relative_name(name.lower()) + record_list = [record for record in record_list + if self._relative_name(record['name']) == cmp_name] + if content: + record_list = [ + record for record in record_list if record['value'] == content] + + records = [] + for record in record_list: + processed_record = { + 'type': record['type'], + 'name': record['name'], + 'ttl': record['ttl'], + 'content': record['value'], + # internetbs api does not provide id + 'id': hashlib.sha1('/'.join([record['type'], + record['name'], + record['value']]).encode('utf-8')).hexdigest() + } + records.append(processed_record) + + LOGGER.debug('list_records: %s', records) + return records + + # Update a record. + def update_record(self, identifier=None, type=None, name=None, content=None): + if identifier: + records = self.list_records() + to_update = next( + (r for r in records if r['id'] == identifier), None) + query = {'Type': to_update['type'], + 'FullRecordName': to_update['name'], + 'NewValue': content} + else: + query = {'Type': type, 'FullRecordName': self._full_name( + name), 'NewValue': content} + LOGGER.debug('update_record query: %s', query) + payload = self._post('/Domain/DnsRecord/Update', None, query) + LOGGER.debug('update_record payload: %s', payload) + + if not payload['status']: + raise Exception('Internal error. This should not happen') + if payload['status'] != 'SUCCESS': + raise Exception('Api error: {0}'.format(payload['message'])) + return True + + # Delete an existing record. + # If record does not exist, do nothing. + def delete_record(self, identifier=None, type=None, name=None, content=None): + if identifier: + records = self.list_records() + to_update = next( + (r for r in records if r['id'] == identifier), None) + if not to_update: + return True + query = {'Type': to_update['type'], + 'FullRecordName': to_update['name'], + 'NewValue': content} + else: + query = {'Type': type, + 'FullRecordName': self._full_name(name)} + if content: + query['Value'] = content + if not self.list_records(type, name, content): + return True + else: + if not self.list_records(type, name): + return True + + LOGGER.debug('delete_record query: %s', query) + payload = self._post('/Domain/DnsRecord/Remove', None, query) + LOGGER.debug('delete_record payload: %s', payload) + + if not payload['status']: + raise Exception('Internal error. This should not happen') + if payload['status'] != 'SUCCESS': + raise Exception('Api error: {0}'.format(payload['message'])) + return True + + # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): + if data is None: + data = {} + if query_params is None: + query_params = {} + query_params['ResponseFormat'] = 'json' + query_params['ApiKey'] = self._get_provider_option('auth_key') + query_params['Password'] = self._get_provider_option('auth_password') + request = requests.request(action, self.api_endpoint + url, params=query_params, + data=json.dumps(data), + headers={'Content-Type': 'application/json'}) + # if the request fails for any reason, throw an error. + request.raise_for_status() + return request.json() diff -Nru lexicon-2.7.12/lexicon/providers/inwx.py lexicon-3.0.8/lexicon/providers/inwx.py --- lexicon-2.7.12/lexicon/providers/inwx.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/inwx.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,18 +1,19 @@ from __future__ import absolute_import - import logging from lexicon.providers.base import Provider as BaseProvider + try: import xmlrpclib except ImportError: import xmlrpc.client as xmlrpclib -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['inwx.com'] + def ProviderParser(subparser): subparser.add_argument("--auth-username", help="specify username for authentication") @@ -25,23 +26,20 @@ INWX offers a free testing system on https://ote.inwx.com see https://www.inwx.de/en/offer/api for details about ote and the api """ - def __init__(self, options, engine_overrides=None): + + def __init__(self, config): """ - :param dict options: command line options - :param engine_overrides: + :param config: command line options """ - super(Provider, self).__init__(options) + super(Provider, self).__init__(config) - self._auth = {'user': self.options['auth_username'], - 'pass': self.options['auth_password']} - self._domain = self.options['domain'].lower() + self._auth = {'user': self._get_provider_option('auth_username'), + 'pass': self._get_provider_option('auth_password')} + self._domain = self.domain.lower() self.domain_id = None - endpoint = 'https://api.domrobot.com/xmlrpc/' - - # allow tests to override endpoint to point to inwx ote - if 'endpoint' in self.options: - endpoint = self.options['endpoint'] + endpoint = self._get_provider_option( + 'endpoint') or 'https://api.domrobot.com/xmlrpc/' self._api = xmlrpclib.ServerProxy(endpoint, allow_none=True) @@ -96,8 +94,8 @@ """ opts = {'domain': self._domain, 'type': type.upper(), 'name': self._full_name(name), 'content': content} - if self.options.get('ttl'): - opts['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + opts['ttl'] = self._get_lexicon_option('ttl') opts.update(self._auth) response = self._api.nameserver.createRecord(opts) diff -Nru lexicon-2.7.12/lexicon/providers/linode4.py lexicon-3.0.8/lexicon/providers/linode4.py --- lexicon-2.7.12/lexicon/providers/linode4.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/linode4.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,43 +1,45 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['linode.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify api key for authentication") + subparser.add_argument( + "--auth-token", help="specify api key for authentication") + class Provider(BaseProvider): - - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.linode.com/v4/') + self.api_endpoint = 'https://api.linode.com/v4/' def authenticate(self): self.domain_id = None payload = self._get('domains', query_params={ 'filter': { - 'domain': self.options['domain'] + 'domain': self.domain } }) if len(payload['data']) > 0: self.domain_id = payload['data'][0]['id'] - if self.domain_id == None: + if self.domain_id is None: raise Exception('Domain not found') def create_record(self, type, name, content): if len(self.list_records(type, name, content)) == 0: if name: name = self._relative_name(name) - + self._post('domains/{0}/records'.format(self.domain_id), data={ 'name': name, 'type': type, @@ -46,33 +48,36 @@ }) return True - + # List all records. Return an empty list if no records found # type, name and content are used to filter records. # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None): resources_url = "domains/{0}/records".format(self.domain_id) - + if name: name = self._relative_name(name) - + processed_records = [] - + payload = self._get(resources_url) for page in range(1, payload['pages'] + 1, 1): if page > 1: payload = self._get(resources_url, query_params={ 'page': page }) - + resource_list = payload['data'] if type: - resource_list = [resource for resource in resource_list if resource['type'] == type] + resource_list = [ + resource for resource in resource_list if resource['type'] == type] if name: - resource_list = [resource for resource in resource_list if self._relative_name(resource['name']) == name] + resource_list = [resource for resource in resource_list if self._relative_name( + resource['name']) == name] if content: - resource_list = [resource for resource in resource_list if resource['target'] == content] - + resource_list = [ + resource for resource in resource_list if resource['target'] == content] + for resource in resource_list: processed_records.append({ 'id': resource['id'], @@ -81,30 +86,30 @@ 'ttl': resource['ttl_sec'], 'content': resource['target'] }) - - logger.debug('list_records: %s', processed_records) + + LOGGER.debug('list_records: %s', processed_records) return processed_records - + # Create or update a record. def update_record(self, identifier, type=None, name=None, content=None): if not identifier: resources = self.list_records(type, name, None) identifier = resources[0]['id'] if len(resources) > 0 else None - - logger.debug('update_record: %s', identifier) - + + LOGGER.debug('update_record: %s', identifier) + if name: name = self._relative_name(name) - + url = 'domains/{0}/records/{1}'.format(self.domain_id, identifier) self._put(url, data={ 'name': name.lower() if name else None, 'type': type if type else None, 'target': content if content else None }) - + return True - + # Delete an existing record. # If record does not exist, do nothing. def delete_record(self, identifier=None, type=None, name=None, content=None): @@ -114,15 +119,15 @@ delete_resource_id = [resource['id'] for resource in resources] else: delete_resource_id.append(identifier) - - logger.debug('delete_records: %s', delete_resource_id) - + + LOGGER.debug('delete_records: %s', delete_resource_id) + for resource_id in delete_resource_id: self._delete('domains/{0}/records/{1}'.format( self.domain_id, resource_id )) - + return True # Helpers @@ -134,23 +139,23 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'Authorization': 'Bearer {0}'.format(self.options.get('auth_token')) + 'Authorization': 'Bearer {0}'.format(self._get_provider_option('auth_token')) } - + request_filter = query_params['filter'] if 'filter' in query_params else None if request_filter is not None: default_headers['X-Filter'] = json.dumps(request_filter) del query_params['filter'] - + request_url = "{0}{1}".format(self.api_endpoint, url) - + r = requests.request(action, request_url, params=query_params, data=json.dumps(data), headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() if action == 'DELETE': return '' else: result = r.json() return result - diff -Nru lexicon-2.7.12/lexicon/providers/linode.py lexicon-3.0.8/lexicon/providers/linode.py --- lexicon-2.7.12/lexicon/providers/linode.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/linode.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,33 +1,35 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['linode.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify api key for authentication") + subparser.add_argument( + "--auth-token", help="specify api key for authentication") + class Provider(BaseProvider): - - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.linode.com/api/') + self.api_endpoint = 'https://api.linode.com/api/' def authenticate(self): self.domain_id = None payload = self._get('domain.list') for domain in payload['DATA']: - if domain['DOMAIN'] == self.options['domain']: + if domain['DOMAIN'] == self.domain: self.domain_id = domain['DOMAINID'] - if self.domain_id == None: + if self.domain_id is None: raise Exception('Domain not found') def create_record(self, type, name, content): @@ -41,21 +43,25 @@ }) return True - + # List all records. Return an empty list if no records found # type, name and content are used to filter records. # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None): - payload = self._get('domain.resource.list', query_params={ 'DomainID': self.domain_id }) + payload = self._get('domain.resource.list', query_params={ + 'DomainID': self.domain_id}) resource_list = payload['DATA'] if type: - resource_list = [resource for resource in resource_list if resource['TYPE'] == type] + resource_list = [ + resource for resource in resource_list if resource['TYPE'] == type] if name: cmp_name = self._relative_name(name.lower()) - resource_list = [resource for resource in resource_list if resource['NAME'] == cmp_name] + resource_list = [ + resource for resource in resource_list if resource['NAME'] == cmp_name] if content: - resource_list = [resource for resource in resource_list if resource['TARGET'] == content] - + resource_list = [ + resource for resource in resource_list if resource['TARGET'] == content] + processed_records = [] for resource in resource_list: processed_records.append({ @@ -65,17 +71,17 @@ 'ttl': resource['TTL_SEC'], 'content': resource['TARGET'] }) - logger.debug('list_records: %s', processed_records) + LOGGER.debug('list_records: %s', processed_records) return processed_records - + # Create or update a record. def update_record(self, identifier, type=None, name=None, content=None): if not identifier: resources = self.list_records(type, name, None) identifier = resources[0]['id'] if len(resources) > 0 else None - - logger.debug('update_record: %s', identifier) - + + LOGGER.debug('update_record: %s', identifier) + self._get('domain.resource.update', query_params={ 'DomainID': self.domain_id, 'ResourceID': identifier, @@ -83,9 +89,9 @@ 'Type': type if type else None, 'Target': content if content else None }) - + return True - + # Delete an existing record. # If record does not exist, do nothing. def delete_record(self, identifier=None, type=None, name=None, content=None): @@ -95,15 +101,15 @@ delete_resource_id = [resource['id'] for resource in resources] else: delete_resource_id.append(identifier) - - logger.debug('delete_records: %s', delete_resource_id) - + + LOGGER.debug('delete_records: %s', delete_resource_id) + for resource_id in delete_resource_id: self._get('domain.resource.delete', query_params={ 'DomainID': self.domain_id, 'ResourceID': resource_id }) - + return True # Helpers @@ -116,20 +122,21 @@ 'Accept': 'application/json', 'Content-Type': 'application/json' } - - query_params['api_key'] = self.options.get('auth_token') + + query_params['api_key'] = self._get_provider_option('auth_token') query_params['resultFormat'] = 'JSON' query_params['api_action'] = url - + r = requests.request(action, self.api_endpoint, params=query_params, data=json.dumps(data), headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() if action == 'DELETE': return '' else: result = r.json() if len(result['ERRORARRAY']) > 0: - raise Exception('Linode api error: {0}'.format(result['ERRORARRAY'])) + raise Exception( + 'Linode api error: {0}'.format(result['ERRORARRAY'])) return result - diff -Nru lexicon-2.7.12/lexicon/providers/localzone.py lexicon-3.0.8/lexicon/providers/localzone.py --- lexicon-2.7.12/lexicon/providers/localzone.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/localzone.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,140 @@ +from __future__ import absolute_import, print_function +import logging + +from .base import Provider as BaseProvider + + +# localzone is an optional dependency of lexicon; do not throw an ImportError if +# the dependency is unmet. +try: + import localzone +except ImportError: + pass + + +LOGGER = logging.getLogger(__name__) + +NAMESERVER_DOMAINS = [] + + +def ProviderParser(subparser): + subparser.add_argument( + "--filename", help="specify location of zone master file") + + +class Provider(BaseProvider): + def __init__(self, config): + super(Provider, self).__init__(config) + self.ttl = self._get_lexicon_option("ttl") + self.domain = self._get_lexicon_option("domain") + self.origin = self.domain + "." + self.filename = self._get_provider_option("filename") + + def authenticate(self): + """Authentication is not required for localzone.""" + pass + + def create_record(self, type, name, content): + """ + Create a resource record. If a record already exists with the same + content, do nothing. + """ + result = False + name = self._relative_name(name) + ttl = None + + # TODO: shoud assert that this is an int + if self.ttl: + ttl = self.ttl + + with localzone.manage(self.filename, self.origin, autosave=True) as z: + if z.add_record(name, type, content, ttl=ttl): # pylint: disable=no-member + result = True + + LOGGER.debug("create_record: %s", result) + return result + + def list_records(self, type=None, name=None, content=None): + """ + Return a list of records matching the supplied params. If no params are + provided, then return all zone records. If no records are found, return + an empty list. + """ + if name: + name = self._relative_name(name) + if not type: + type = "ANY" + + filter = {"rdtype": type, "name": name, "content": content} + + with localzone.manage(self.filename, self.origin, autosave=True) as z: + records = z.find_record(**filter) # pylint: disable=no-member + + result = [] + for record in records: + rdict = { + "type": record.rdtype, + "name": self._full_name(record.name), + "ttl": record.ttl, + "content": record.content, + "id": record.hashid, + } + + if rdict["type"] == "TXT": + rdict["content"] = rdict["content"].replace('"', "") + + result.append(rdict) + + LOGGER.debug("list_records: %s", result) + return result + + def update_record(self, identifier, type=None, name=None, content=None): + """ + Update a record. Returns `False` if no matching record is found. + """ + result = False + + # TODO: some providers allow content-based updates without supplying an + # ID, and therefore `identifier` is here optional. If we don't receive + # an ID, look it up. + if not identifier and type and name: + records = self.list_records(type, name) + if len(records) == 1: + identifier = records[0]["id"] + + if identifier and content: + with localzone.manage(self.filename, self.origin, autosave=True) as z: + if z.update_record(identifier, content): # pylint: disable=no-member + result = True + + LOGGER.debug("update_record: %s", result) + return result + + def delete_record(self, identifier=None, type=None, name=None, content=None): + """ + Delete record(s) matching the provided params. If there is no match, do + nothing. + """ + ids = [] + + if identifier: + ids.append(identifier) + elif not identifier and type and name: + records = self.list_records(type, name, content) + if len(records) > 0: + ids = [record["id"] for record in records] + + if len(ids) > 0: + LOGGER.debug("delete_records: %s", ids) + with localzone.manage(self.filename, self.origin, autosave=True) as z: + for hashid in ids: + z.remove_record(hashid) # pylint: disable=no-member + LOGGER.debug("delete_record: %s", hashid) + + return True + + def _request(self, **kwargs): + """ + Not required. + """ + pass diff -Nru lexicon-2.7.12/lexicon/providers/luadns.py lexicon-3.0.8/lexicon/providers/luadns.py --- lexicon-2.7.12/lexicon/providers/luadns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/luadns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,49 +1,54 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['luadns.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify email address for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify email address for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.luadns.com/v1') + self.api_endpoint = 'https://api.luadns.com/v1' def authenticate(self): payload = self._get('/zones') - domain_info = next((domain for domain in payload if domain['name'] == self.options['domain']), None) + domain_info = next( + (domain for domain in payload if domain['name'] == self.domain), None) if not domain_info: raise Exception('No domain found') self.domain_id = domain_info['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): # check if record already exists existing_records = self.list_records(type, name, content) if len(existing_records) == 1: return True - payload = self._post('/zones/{0}/records'.format(self.domain_id), {'type': type, 'name': self._fqdn_name(name), 'content': content, 'ttl': self.options['ttl']}) + payload = self._post('/zones/{0}/records'.format(self.domain_id), {'type': type, + 'name': self._fqdn_name(name), 'content': content, 'ttl': self._get_lexicon_option('ttl')}) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -66,18 +71,20 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. def update_record(self, identifier, type=None, name=None, content=None): data = { - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } if type: data['type'] = type @@ -86,10 +93,10 @@ if content: data['content'] = content + payload = self._put( + '/zones/{0}/records/{1}'.format(self.domain_id, identifier), data) - payload = self._put('/zones/{0}/records/{1}'.format(self.domain_id, identifier), data) - - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -101,17 +108,18 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._delete('/zones/{0}/records/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/zones/{0}/records/{1}'.format(self.domain_id, record_id)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -119,10 +127,12 @@ query_params = {} r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), - auth=requests.auth.HTTPBasicAuth(self.options['auth_username'], self.options['auth_token']), + auth=requests.auth.HTTPBasicAuth(self._get_provider_option( + 'auth_username'), self._get_provider_option('auth_token')), headers={ 'Content-Type': 'application/json', 'Accept': 'application/json' }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/memset.py lexicon-3.0.8/lexicon/providers/memset.py --- lexicon-2.7.12/lexicon/providers/memset.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/memset.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,29 +1,30 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['memset.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify API key for authentication") + subparser.add_argument( + "--auth-token", help="specify API key for authentication") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.memset.com/v1/json') + self.api_endpoint = 'https://api.memset.com/v1/json' def authenticate(self): payload = self._get('/dns.zone_domain_info', { - 'domain': self.options['domain'] + 'domain': self.domain }) if not payload['zone_id']: raise Exception('No domain found') @@ -31,16 +32,17 @@ # Create record. If record already exists with the same content, do nothing' def create_record(self, type, name, content): - data = {'type': type, 'record': self._relative_name(name), 'address': content} - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + data = {'type': type, 'record': self._relative_name( + name), 'address': content} + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') data['zone_id'] = self.domain_id check_exists = self.list_records(type=type, name=name, content=content) if not len(check_exists) > 0: payload = self._get('/dns.zone_record_create', data) if payload['id']: self._get('/dns.reload') - logger.debug('create_record: %s', payload['id']) + LOGGER.debug('create_record: %s', payload['id']) return payload['id'] else: return check_exists @@ -51,7 +53,7 @@ def list_records(self, type=None, name=None, content=None): payload = self._get('/dns.zone_info', { 'id': self.domain_id - }) + }) records = [] for record in payload['records']: processed_record = { @@ -76,7 +78,7 @@ else: records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -94,15 +96,15 @@ data['record'] = self._relative_name(name) if content: data['address'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') data['id'] = identifier data['zone_id'] = self.domain_id payload = self._get('/dns.zone_record_update', data) if payload['id']: self._get('/dns.reload') - logger.debug('update_record: %s', payload['id']) + LOGGER.debug('update_record: %s', payload['id']) return payload['id'] # Delete an existing record. @@ -110,12 +112,13 @@ def delete_record(self, identifier=None, type=None, name=None, content=None): delete_record_id = [] if not identifier: - records = self.list_records(type, self._relative_name(name), content) + records = self.list_records( + type, self._relative_name(name), content) delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) + + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: payload = self._get('/dns.zone_record_delete', {'id': record_id}) @@ -123,7 +126,7 @@ if len(record_id) > 0: self._get('/dns.reload') - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True # Helpers @@ -134,8 +137,9 @@ query_params = {} r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), - auth=(self.options['auth_token'], 'x'), + auth=(self._get_provider_option( + 'auth_token'), 'x'), headers={'Content-Type': 'application/json'}) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() - diff -Nru lexicon-2.7.12/lexicon/providers/namecheap.py lexicon-3.0.8/lexicon/providers/namecheap.py --- lexicon-2.7.12/lexicon/providers/namecheap.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/namecheap.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,26 @@ from __future__ import absolute_import - import logging - from lexicon.providers.base import Provider as BaseProvider + try: # this module uses the optional `PyNamecheap` library from PyPi - import namecheap # optional dep + import namecheap # optional dep except ImportError: pass -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['namecheap.com'] + def ProviderParser(subparser): subparser.add_argument( '--auth-token', help='specify api token for authentication' ) - + # earlier versions of the API expected the email address here # now they appear to want the username. subparser.add_argument( @@ -60,18 +60,17 @@ `A + DDNS` on their control panel will be downgrated to `A` records. """ - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) - self.options = options + def __init__(self, config): + super(Provider, self).__init__(config) self.client = namecheap.Api( - ApiUser=options.get('auth_username',''), - ApiKey=options.get('auth_token',''), - UserName=options.get('auth_username',''), - ClientIP=options.get('auth_client_ip',''), - sandbox=options.get('auth_sandbox', False), + ApiUser=self._get_provider_option('auth_username') or '', + ApiKey=self._get_provider_option('auth_token') or '', + UserName=self._get_provider_option('auth_username') or '', + ClientIP=self._get_provider_option('auth_client_ip') or '', + sandbox=self._get_provider_option('auth_sandbox') or False, debug=False, ) - self.domain = self.options['domain'] + self.domain = self.domain self.domain_id = None def authenticate(self): @@ -125,7 +124,8 @@ # we should print the error, so people know how to correct it. raise Exception('Authentication failed: `%s`' % str(err)) - xpath = './/{%(ns)s}CommandResponse/{%(ns)s}DomainGetInfoResult' % {'ns': namecheap.NAMESPACE} + xpath = './/{%(ns)s}CommandResponse/{%(ns)s}DomainGetInfoResult' % { + 'ns': namecheap.NAMESPACE} domain_info = xml.find(xpath) def _check_hosts_permission(): @@ -138,7 +138,8 @@ return True # look for rights - xpath_alt = './/{%(ns)s}CommandResponse/{%(ns)s}DomainGetInfoResult/{%(ns)s}Modificationrights' % {'ns': namecheap.NAMESPACE} + xpath_alt = './/{%(ns)s}CommandResponse/{%(ns)s}DomainGetInfoResult/{%(ns)s}Modificationrights' % { + 'ns': namecheap.NAMESPACE} rights_info = xml.find(xpath_alt) if rights_info is None: return False @@ -182,8 +183,8 @@ short TTL of 60 seconds, it may take 120 seconds for their DNS to propagate. """ - return self.options.get('ttl', None) - + return self._get_lexicon_option('ttl') + # Create record. If record already exists with the same content, do nothing def create_record(self, type, name, content): record = { @@ -196,7 +197,7 @@ option_ttl = self.option_ttl() if option_ttl: record['TTL'] = option_ttl - # logger.debug('create_record: %s', 'id' in payload) + # LOGGER.debug('create_record: %s', 'id' in payload) # return 'id' in payload self.client.domains_dns_addHost(self.domain, record) return True @@ -218,11 +219,12 @@ if name: if name.endswith('.'): name = name[:-1] - records = [record for record in records if name in record['name'] ] + records = [record for record in records if name in record['name']] if content: - records = [record for record in records if record['content'].lower() == content.lower()] + records = [ + record for record in records if record['content'].lower() == content.lower()] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -234,9 +236,11 @@ # Delete an existing record. # If record does not exist, do nothing. def delete_record(self, identifier=None, type=None, name=None, content=None): - records = self.list_records(type=type, name=name, content=content, id=identifier) + records = self.list_records( + type=type, name=name, content=content, id=identifier) for record in records: - self.client.domains_dns_delHost(self.domain, self._convert_to_namecheap(record)) + self.client.domains_dns_delHost( + self.domain, self._convert_to_namecheap(record)) return True def _convert_to_namecheap(self, record): @@ -264,7 +268,7 @@ name = record['Name'] if self.domain not in name: - name = "{}.{}".format(name,self.domain) + name = "{}.{}".format(name, self.domain) processed_record = { 'type': record['Type'], diff -Nru lexicon-2.7.12/lexicon/providers/namesilo.py lexicon-3.0.8/lexicon/providers/namesilo.py --- lexicon-2.7.12/lexicon/providers/namesilo.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/namesilo.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,34 +1,36 @@ from __future__ import absolute_import - import logging from xml.etree import ElementTree import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['namesilo.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify key for authentication") + subparser.add_argument( + "--auth-token", help="specify key for authentication") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://www.namesilo.com/api') + self.api_endpoint = self._get_provider_option( + 'api_endpoint') or 'https://www.namesilo.com/api' def authenticate(self): - payload = self._get('/getDomainInfo', {'domain': self.options['domain']}) - self.domain_id = self.options['domain'] - + payload = self._get('/getDomainInfo', {'domain': self.domain}) + self.domain_id = self.domain # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'domain': self.domain_id, @@ -36,15 +38,15 @@ 'rrtype': type, 'rrvalue': content } - if self.options.get('ttl'): - record['rrttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['rrttl'] = self._get_lexicon_option('ttl') try: payload = self._get('/dnsAddRecord', record) except ValueError as err: # noop if attempting to create record that already exists. - logger.debug('Ignoring error: {0}'.format(err)) + LOGGER.debug('Ignoring error: {0}'.format(err)) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -68,11 +70,13 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -88,12 +92,12 @@ data['rrhost'] = self._relative_name(name) if content: data['rrvalue'] = content - if self.options.get('ttl'): - data['rrttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['rrttl'] = self._get_lexicon_option('ttl') payload = self._get('/dnsUpdateRecord', data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -102,7 +106,7 @@ data = { 'domain': self.domain_id } - + delete_record_id = [] if not identifier: records = self.list_records(type, name, content) @@ -110,17 +114,17 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) - + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: data['rrid'] = record_id payload = self._get('/dnsDeleteRecord', data) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -128,17 +132,20 @@ query_params = {} query_params['version'] = 1 query_params['type'] = 'xml' - query_params['key'] = self.options['auth_token'] - r = requests.request(action, self.api_endpoint + url, params=query_params) - #data=json.dumps(data)) - r.raise_for_status() # if the request fails for any reason, throw an error. + query_params['key'] = self._get_provider_option('auth_token') + r = requests.request(action, self.api_endpoint + + url, params=query_params) + # data=json.dumps(data)) + # if the request fails for any reason, throw an error. + r.raise_for_status() # TODO: check if the response is an error using tree = ElementTree.ElementTree(ElementTree.fromstring(r.content)) root = tree.getroot() if root.find('reply').find('code').text == '280': - raise ValueError('An error occurred: {0}, {1}'.format(root.find('reply').find('detail').text, root.find('reply').find('code').text)) + raise ValueError('An error occurred: {0}, {1}'.format( + root.find('reply').find('detail').text, root.find('reply').find('code').text)) elif root.find('reply').find('code').text != '300': - raise Exception('An error occurred: {0}, {1}'.format(root.find('reply').find('detail').text, root.find('reply').find('code').text)) - + raise Exception('An error occurred: {0}, {1}'.format( + root.find('reply').find('detail').text, root.find('reply').find('code').text)) return root diff -Nru lexicon-2.7.12/lexicon/providers/nfsn.py lexicon-3.0.8/lexicon/providers/nfsn.py --- lexicon-2.7.12/lexicon/providers/nfsn.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/nfsn.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,172 @@ +from __future__ import absolute_import, print_function +import hashlib +import json +import logging +import random +import string +import time +from urllib.parse import urlencode + +import requests +from lexicon.providers.base import Provider as BaseProvider + + +LOGGER = logging.getLogger(__name__) + +NAMESERVER_DOMAINS = ['nearlyfreespeech.net'] + + +def ProviderParser(subparser): + subparser.add_argument( + "--auth-username", help="specify username used to authenticate") + subparser.add_argument( + "--auth-token", help="specify token used to authenticate") + + +SALT_SHAKER = string.ascii_letters + string.digits + + +class Provider(BaseProvider): + + def __init__(self, config): + super(Provider, self).__init__(config) + self.domain_id = None + self.api_endpoint = 'https://api.nearlyfreespeech.net' + self.shortname = None + + def authenticate(self): + self._post('/dns/{0}/listRRs'.format(self.domain)) + self.domain_id = self.domain + + # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): + existing_record = self.list_records(type, name, content) + if len(existing_record) > 0: + # Do nothing if the record already exists. + # The creation call can fail for a variety of reasons, so + # the safest thing to do is check if the record already exists + return True + + self._do_create(type, name, content) + LOGGER.debug('create_record: %s', True) + return True + + # List all records. Return an empty list if no records found + # type, name and content are used to filter records. + # If possible filter during the query, otherwise filter after response is received. + def list_records(self, type=None, name=None, content=None): + params = {} + if type is not None: + params['type'] = type + if name is not None: + params['name'] = self._relative_name(name) + if content is not None: + params['data'] = content + + url = '/dns/{0}/listRRs'.format(self.domain_id) + records = self._post(url, params) + records = [{ + 'type': r['type'], + 'name': self._full_name(r['name']), + 'ttl': r['ttl'], + 'content': r['data'], + 'id': hashlib.sha1(''.join([r['type'], r['name'], r['data']]).encode('utf-8')).hexdigest() + } for r in records] + + LOGGER.debug('list_records: %s', records) + return records + + # Create or update a record. + + def update_record(self, identifier, type=None, name=None, content=None): + if identifier is not None: + records = self.list_records() + to_delete = next( + (r for r in records if r['id'] == identifier), None) + if to_delete is None: + raise ValueError('No record with that identifier.') + else: + # Check name and type + matching_records = self.list_records(type=type, name=name) + if len(matching_records) > 1: + raise ValueError( + 'More than one record exists with that type and name. Try specifying an identifier.') + to_delete = matching_records[0] + + self._do_delete(to_delete['type'], + to_delete['name'], to_delete['content']) + self._do_create(type, name, content) + LOGGER.debug('update_record: %s', True) + return True + + # Delete an existing record + # If record does not exist, do nothing. + def delete_record(self, identifier=None, type=None, name=None, content=None): + matching_records = self.list_records(type, name, content) + if identifier is not None: + to_delete = next( + (r for r in matching_records if r['id'] == identifier), None) + if to_delete is None: + raise ValueError('No record with that identifier.') + to_delete = [to_delete] + else: + to_delete = matching_records + + for d in to_delete: + self._do_delete(d['type'], d['name'], d['content']) + + LOGGER.debug('delete_record: %s', True) + return True + + def _do_create(self, type, name, content): + record = { + 'name': self._relative_name(name), + 'type': type, + 'data': content + } + + ttl = self._get_lexicon_option('ttl') + if ttl: + record['ttl'] = ttl + + self._post('/dns/{0}/addRR'.format(self.domain_id), record) + return True + + def _do_delete(self, type=None, name=None, content=None): + url = '/dns/{0}/removeRR'.format(self.domain_id) + record = { + 'name': self._relative_name(name), + 'type': type, + 'data': content + } + self._post(url, record) + return True + + # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): + if data is not None: + body = urlencode(data) + hashed_body = hashlib.sha1(body.encode('utf-8')).hexdigest() + else: + hashed_body = hashlib.sha1().hexdigest() + + timestamp = str(int(time.time())) + salt = ''.join(random.choice(SALT_SHAKER) for _ in range(16)) + hash_items = [self._get_provider_option( + 'auth_username'), timestamp, salt, self._get_provider_option('auth_token'), url, hashed_body] + auth_hash = hashlib.sha1( + ';'.join(hash_items).encode('utf-8')).hexdigest() + auth_value = ';'.join([self._get_provider_option( + 'auth_username'), timestamp, salt, auth_hash]) + auth_header = { + 'X-NFSN-Authentication': auth_value + } + + r = requests.request(action, ''.join([self.api_endpoint, url]), + data=data, + headers=auth_header) + r.raise_for_status() + if r.content: + return r.json() + else: + return {} diff -Nru lexicon-2.7.12/lexicon/providers/nsone.py lexicon-3.0.8/lexicon/providers/nsone.py --- lexicon-2.7.12/lexicon/providers/nsone.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/nsone.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,38 +1,41 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['nsone.net'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.nsone.net/v1') + self.api_endpoint = 'https://api.nsone.net/v1' def authenticate(self): - payload = self._get('/zones/{0}'.format(self.options['domain'])) + payload = self._get('/zones/{0}'.format(self.domain)) if not payload['id']: raise Exception('No domain found') - self.domain_id = self.options['domain'] + self.domain_id = self.domain def _get_record_set(self, name, type): try: - payload = self._get('/zones/{0}/{1}/{2}'.format(self.domain_id, name, type)) + payload = self._get( + '/zones/{0}/{1}/{2}'.format(self.domain_id, name, type)) except requests.exceptions.HTTPError as e: if e.response.status_code == 404: return None @@ -61,26 +64,28 @@ existing_record_set['answers'].append({ 'answer': [content] }) - self._post('/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), existing_record_set) + self._post( + '/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), existing_record_set) else: record = { 'type': type, 'domain': name, - 'ttl': self.options.get('ttl'), + 'ttl': self._get_lexicon_option('ttl'), 'zone': self.domain_id, - 'answers':[ + 'answers': [ {"answer": [content]} ] } payload = {} try: - payload = self._put('/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), record) + payload = self._put( + '/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), record) except requests.exceptions.HTTPError as e: # http 400 is ok here, because the record probably already exists if e.response.status_code == 400: payload = {} - logger.debug('create_record: %s', 'id' in payload) + LOGGER.debug('create_record: %s', 'id' in payload) return True @@ -105,10 +110,11 @@ # no such domain on ns1 return None - record = self._get('/zones/{0}/{1}/{2}'.format(match['zone'], match['domain'], match['type'])) + record = self._get( + '/zones/{0}/{1}/{2}'.format(match['zone'], match['domain'], match['type'])) if record.get('message', None): - return None # {"message":"record not found"} - short_answers = [ x['answer'][0] for x in record['answers'] ] + return None # {"message":"record not found"} + short_answers = [x['answer'][0] for x in record['answers']] # ensure a compatibility level with self.list_records record['short_answers'] = short_answers @@ -165,12 +171,12 @@ 'name': record['domain'], 'ttl': record['ttl'], 'content': answer, - #this id is useless unless your doing record linking. Lets return the original record identifier. + # this id is useless unless your doing record linking. Lets return the original record identifier. 'id': '{0}/{1}/{2}'.format(self.domain_id, record['domain'], record['type']) } records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -178,7 +184,8 @@ data = {} payload = None - new_identifier = "{0}/{1}/{2}".format(self.domain_id, self._full_name(name),type) + new_identifier = "{0}/{1}/{2}".format( + self.domain_id, self._full_name(name), type) if(new_identifier == identifier or (type is None and name is None)): # the identifier hasnt changed, or type and name are both unspecified, only update the content. @@ -191,10 +198,11 @@ # identifiers are different # get the old record, create a new one with updated data, delete the old record. old_record = self._get('/zones/{0}'.format(identifier)) - self.create_record(type or old_record['type'], name or old_record['domain'], content or old_record['answers'][0]['answer'][0]) + self.create_record( + type or old_record['type'], name or old_record['domain'], content or old_record['answers'][0]['answer'][0]) self.delete_record(identifier) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -202,7 +210,7 @@ def delete_record(self, identifier=None, type=None, name=None, content=None): if not identifier: name = self._full_name(name) - + record_set = self._get_record_set(name, type) if record_set: record_set_new = { @@ -218,13 +226,15 @@ record_set_new['answers'].append(answer) if len(record_set_new['answers']) > 0: - self._post('/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), record_set_new) + self._post( + '/zones/{0}/{1}/{2}'.format(self.domain_id, name, type), record_set_new) else: - self._delete('/zones/{0}/{1}/{2}'.format(self.domain_id, name, type)) + self._delete( + '/zones/{0}/{1}/{2}'.format(self.domain_id, name, type)) else: self._delete('/zones/{0}'.format(identifier)) - - logger.debug('delete_record: %s', True) + + LOGGER.debug('delete_record: %s', True) return True # Helpers @@ -236,7 +246,7 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'X-NSONE-Key': self.options['auth_token'] + 'X-NSONE-Key': self._get_provider_option('auth_token') } default_auth = None @@ -244,5 +254,6 @@ data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/onapp.py lexicon-3.0.8/lexicon/providers/onapp.py --- lexicon-2.7.12/lexicon/providers/onapp.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/onapp.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,53 +1,58 @@ from __future__ import absolute_import - import json import logging import requests +from lexicon.providers.base import Provider as BaseProvider from requests.auth import HTTPBasicAuth -from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = [] + def ProviderParser(subparser): subparser.description = ''' The OnApp provider requires your OnApp account\'s email address and API token, which can be found on your /profile page on the Control Panel interface. The server is your dashboard URL, in the format of e.g. https://dashboard.youronapphost.org''' - subparser.add_argument('--auth-username', help='specify email address of the OnApp account') - subparser.add_argument('--auth-token', help='specify API Key for the OnApp account') - subparser.add_argument('--auth-server', help='specify URL to the OnApp Control Panel Server') + subparser.add_argument( + '--auth-username', help='specify email address of the OnApp account') + subparser.add_argument( + '--auth-token', help='specify API Key for the OnApp account') + subparser.add_argument( + '--auth-server', help='specify URL to the OnApp Control Panel Server') + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - if not self.options.get('auth_username'): + if not self._get_provider_option('auth_username'): raise Exception('Error, OnApp Email Address is not defined') - if not self.options.get('auth_token'): + if not self._get_provider_option('auth_token'): raise Exception('Error, OnApp API Key is not defined') - if not self.options.get('auth_server'): + if not self._get_provider_option('auth_server'): raise Exception('Error, OnApp Control Panel URL is not defined') self.session = requests.Session() - + def authenticate(self): - domain = self.options.get('domain') - + domain = self.domain + zones = self._get('/dns_zones.json') for zone in zones: if zone['dns_zone']['name'] == domain: self.domain_id = zone['dns_zone']['id'] break - - if self.domain_id == None: - raise Exception('Could not find {0} in OnApp DNS Zones'.format(domain)) + + if self.domain_id is None: + raise Exception( + 'Could not find {0} in OnApp DNS Zones'.format(domain)) def create_record(self, type, name, content): data = { @@ -56,23 +61,25 @@ self._key_for_record_type(type): content } - ttl = self.options.get('ttl') + ttl = self._get_lexicon_option('ttl') if ttl: data['ttl'] = "{0}".format(ttl) - result = self._post('/dns_zones/{0}/records.json'.format(self.domain_id), { 'dns_record': data }) - logger.debug('create_record: %s', result) + result = self._post( + '/dns_zones/{0}/records.json'.format(self.domain_id), {'dns_record': data}) + LOGGER.debug('create_record: %s', result) return True def list_records(self, type=None, name=None, content=None): records = [] - - response = self._get('/dns_zones/{0}/records.json'.format(self.domain_id)) + + response = self._get( + '/dns_zones/{0}/records.json'.format(self.domain_id)) for recordType in response['dns_zone']['records']: - # For now we do not support other RR types so we ignore them, also see _key_for_record_type - if recordType not in ('A','AAAA','CNAME','TXT'): + # For now we do not support other RR types so we ignore them, also see _key_for_record_type + if recordType not in ('A', 'AAAA', 'CNAME', 'TXT'): continue if type and recordType != type: @@ -96,7 +103,7 @@ 'content': recordContent }) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records @@ -105,11 +112,12 @@ existing = self._guess_record(type, name) identifier = existing['id'] - ttl = self.options.get('ttl') + ttl = self._get_lexicon_option('ttl') if not name or not ttl: if not existing: - existing = self._get('/dns_zones/{0}/records/{1}.json'.format(self.domain_id, identifier)) + existing = self._get( + '/dns_zones/{0}/records/{1}.json'.format(self.domain_id, identifier)) if not name: name = existing['name'] if not ttl: @@ -121,8 +129,9 @@ self._key_for_record_type(type): content } - result = self._put('/dns_zones/{0}/records/{1}.json'.format(self.domain_id, identifier), { 'dns_record': request }) - logger.debug('update_record: %s', result) + result = self._put('/dns_zones/{0}/records/{1}.json'.format( + self.domain_id, identifier), {'dns_record': request}) + LOGGER.debug('update_record: %s', result) return True @@ -131,14 +140,15 @@ if not identifier: records = self.list_records(type, name, content) - deletion_ids = [ record['id'] for record in records ] + deletion_ids = [record['id'] for record in records] else: deletion_ids.append(identifier) for id in deletion_ids: - self._delete('/dns_zones/{0}/records/{1}.json'.format(self.domain_id, id)) + self._delete( + '/dns_zones/{0}/records/{1}.json'.format(self.domain_id, id)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True @@ -147,15 +157,17 @@ 'Content-Type': 'application/json', 'Accept': 'application/json' } - target = self.options['auth_server'] + url - + target = self._get_provider_option('auth_server') + url + body = '' if data is not None: body = json.dumps(data) - auth = HTTPBasicAuth(self.options['auth_username'], self.options['auth_token']) + auth = HTTPBasicAuth(self._get_provider_option( + 'auth_username'), self._get_provider_option('auth_token')) - request = requests.Request(action, target, data=body, headers=headers, params=query_params, auth=auth) + request = requests.Request( + action, target, data=body, headers=headers, params=query_params, auth=auth) prepared_request = self.session.prepare_request(request) result = self.session.send(prepared_request) @@ -167,20 +179,23 @@ return None def _key_for_record_type(self, record_type): - if record_type in ('A','AAAA'): + if record_type in ('A', 'AAAA'): return 'ip' elif record_type == 'CNAME': return 'hostname' elif record_type == 'TXT': return 'txt' - elif record_type in ('MX','NS', 'SOA', 'SRV', 'LOC'): - raise Exception('{0} record type is not supported in the OnApp Provider'.format(record_type)) + elif record_type in ('MX', 'NS', 'SOA', 'SRV', 'LOC'): + raise Exception( + '{0} record type is not supported in the OnApp Provider'.format(record_type)) def _guess_record(self, type, name=None, content=None): records = self.list_records(type=type, name=name, content=content) if len(records) == 1: return records[0] elif len(records) > 1: - raise Exception('Identifier was not provided and several existing records match the request for {0}/{1}'.format(type,name)) + raise Exception( + 'Identifier was not provided and several existing records match the request for {0}/{1}'.format(type, name)) elif len(records) == 0: - raise Exception('Identifier was not provided and no existing records match the request for {0}/{1}'.format(type,name)) \ No newline at end of file + raise Exception( + 'Identifier was not provided and no existing records match the request for {0}/{1}'.format(type, name)) diff -Nru lexicon-2.7.12/lexicon/providers/online.py lexicon-3.0.8/lexicon/providers/online.py --- lexicon-2.7.12/lexicon/providers/online.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/online.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,34 +1,36 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['online.net'] + def ProviderParser(subparser): subparser.add_argument("--auth-token", help="specify private api token") + def to_data(type, content): if type == "TXT": return '"{0}"'.format(content) else: return content + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.zone_name = 'Zone Automatic Lexicon ' self.passive_zone = None self.active_zone = None - self.domain_id = self.options['domain'] - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.online.net/api/v1') + self.domain_id = self.domain + self.api_endpoint = 'https://api.online.net/api/v1' def authenticate(self): self.init_zones() @@ -57,7 +59,6 @@ self.passive_zone = passive_row['uuid_ref'] self.update_passive_zone() - def update_passive_zone(self): self._put( '/domain/{0}/version/{1}/zone_from_bind'.format( @@ -69,7 +70,7 @@ def get_bind_zone(self): records = self.list_zone_records(self.active_zone) - # then convert records to bind format + # then convert records to bind format bindStr = '' for record in records: bindStr = bindStr + '{0} {1} IN {2} {3}{4}\n'.format( @@ -93,8 +94,8 @@ self.active_zone = zone self.update_passive_zone() - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): try: record = self.find_record(type, name, content) @@ -105,8 +106,8 @@ 'name': self._fqdn_name(name), 'type': type, 'data': to_data(type, content), - 'priority': self.options['priority'] or '', - 'ttl': self.options['ttl'] or '' + 'priority': self._get_lexicon_option('priority') or '', + 'ttl': self._get_lexicon_option('ttl') or '' } payload = self._post( @@ -117,11 +118,11 @@ record ) except Exception as e: - logger.debug(e) + LOGGER.debug(e) return False self.enable_zone() - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True def find_zone_records(self, zone, type=None, name=None, content=None): @@ -141,11 +142,13 @@ records = [record for record in records if record['type'] == type] if name: fullName = self._full_name(name) - records = [record for record in records if record['name'] == fullName] + records = [ + record for record in records if record['name'] == fullName] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records def list_zone_records(self, zone_id): @@ -162,12 +165,13 @@ else: return records[0] - # Create or update a record. + def update_record(self, id, type=None, name=None, content=None): record = self.find_record(type, name) if record is None: - logger.debug("cannot find record to update: %s %s %s", id, type, name) + LOGGER.debug("cannot find record to update: %s %s %s", + id, type, name) return True if type: record['type'] = type @@ -175,11 +179,11 @@ record['name'] = self._fqdn_name(name) if content: record['data'] = to_data(type, content) - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') # it is weird that 'aux' becomes 'priority' in online's api - if self.options['priority']: - record['priority'] = self.options['priority'] + if self._get_lexicon_option('priority'): + record['priority'] = self._get_lexicon_option('priority') if id is None: id = record['id'] @@ -194,12 +198,12 @@ ), record) except Exception as e: - logger.debug(e) + LOGGER.debug(e) return False self.enable_zone() # If it didn't raise from the http status code, then we're good - logger.debug('update_record: %s', id) + LOGGER.debug('update_record: %s', id) return True # Delete an existing record. @@ -207,9 +211,9 @@ def delete_record(self, id=None, type=None, name=None, content=None): records = self.list_records(type, name, content) if len(records) == 0: - logger.debug("Cannot find records %s %s %s", type, name, content) + LOGGER.debug("Cannot find records %s %s %s", type, name, content) return False - logger.debug('delete_records: %s records found', len(records)) + LOGGER.debug('delete_records: %s records found', len(records)) try: for record in records: payload = self._delete('/domain/{0}/version/{1}/zone/{2}'.format( @@ -218,12 +222,12 @@ record['id'] )) except Exception as e: - logger.debug(e) + LOGGER.debug(e) return False self.enable_zone() # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True def _patch(self, url='/', data=None, query_params=None): @@ -236,13 +240,13 @@ headers = { 'Accept': 'application/json', - 'Authorization': 'Bearer {0}'.format(self.options['auth_token']) + 'Authorization': 'Bearer {0}'.format(self._get_provider_option('auth_token')) } if data is not None: if type(data) is str: - headers['Content-Type'] = 'text/plain'; + headers['Content-Type'] = 'text/plain' else: - headers['Content-Type'] = 'application/json'; + headers['Content-Type'] = 'application/json' data = json.dumps(data) r = requests.request( @@ -252,6 +256,7 @@ data=data, headers=headers ) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.text and r.json() or '' diff -Nru lexicon-2.7.12/lexicon/providers/ovh.py lexicon-3.0.8/lexicon/providers/ovh.py --- lexicon-2.7.12/lexicon/providers/ovh.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/ovh.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,13 +1,13 @@ from __future__ import absolute_import - -import json import hashlib -import time +import json import logging -import requests +import time +import requests from lexicon.providers.base import Provider as BaseProvider + LOGGER = logging.getLogger(__name__) ENDPOINTS = { @@ -22,6 +22,7 @@ NAMESERVER_DOMAINS = ['ovh.net', 'anycast.me'] + def ProviderParser(subparser): subparser.description = ''' OVH Provider requires a token with full rights on /domain/*. @@ -29,40 +30,46 @@ https://api.ovh.com/createToken/index.cgi?GET=/domain/*&PUT=/domain/*&POST=/domain/*&DELETE=/domain/*''' subparser.add_argument('--auth-entrypoint', help='specify the OVH entrypoint', choices=[ 'ovh-eu', 'ovh-ca', 'soyoustart-eu', 'soyoustart-ca', 'kimsufi-eu', 'kimsufi-ca' - ]) - subparser.add_argument('--auth-application-key', help='specify the application key') - subparser.add_argument('--auth-application-secret', help='specify the application secret') - subparser.add_argument('--auth-consumer-key', help='specify the consumer key') + ]) + subparser.add_argument('--auth-application-key', + help='specify the application key') + subparser.add_argument('--auth-application-secret', + help='specify the application secret') + subparser.add_argument('--auth-consumer-key', + help='specify the consumer key') + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) # Handling missing required parameters - if not self.options.get('auth_entrypoint'): + if not self._get_provider_option('auth_entrypoint'): raise Exception('Error, entrypoint is not defined') - if not self.options.get('auth_application_key'): + if not self._get_provider_option('auth_application_key'): raise Exception('Error, application key is not defined') - if not self.options.get('auth_application_secret'): + if not self._get_provider_option('auth_application_secret'): raise Exception('Error, application secret is not defined') - if not self.options.get('auth_consumer_key'): + if not self._get_provider_option('auth_consumer_key'): raise Exception('Error, consumer key is not defined') # Construct DNS OVH environment self.domain_id = None - self.endpoint_api = ENDPOINTS.get(self.options.get('auth_entrypoint')) + self.endpoint_api = ENDPOINTS.get( + self._get_provider_option('auth_entrypoint')) def authenticate(self): # All requests will be done in one HTTPS session self.session = requests.Session() # Calculate delta time between local and OVH to avoid requests rejection - server_time = self.session.get('{0}/auth/time'.format(self.endpoint_api)).json() + server_time = self.session.get( + '{0}/auth/time'.format(self.endpoint_api)).json() self.time_delta = server_time - int(time.time()) # Get domain and status - domain = self.options.get('domain') + domain = self.domain domains = self._get('/domain/zone/') if domain not in domains: @@ -75,13 +82,16 @@ self.domain_id = domain def create_record(self, type, name, content): - domain = self.options.get('domain') - ttl = self.options.get('ttl') + domain = self.domain + ttl = self._get_lexicon_option('ttl') records = self.list_records(type, name, content) for record in records: - if record['type'] == type and self._relative_name(record['name']) == self._relative_name(name) and record['content'] == content: - LOGGER.debug('create_record (ignored, duplicate): %s %s %s', type, name, content) + if (record['type'] == type + and self._relative_name(record['name']) == self._relative_name(name) + and record['content'] == content): + LOGGER.debug( + 'create_record (ignored, duplicate): %s %s %s', type, name, content) return True data = { @@ -101,7 +111,7 @@ return True def list_records(self, type=None, name=None, content=None): - domain = self.options.get('domain') + domain = self.domain records = [] params = {} @@ -110,10 +120,12 @@ if name: params['subDomain'] = self._relative_name(name) - record_ids = self._get('/domain/zone/{0}/record'.format(domain), params) + record_ids = self._get( + '/domain/zone/{0}/record'.format(domain), params) for record_id in record_ids: - raw = self._get('/domain/zone/{0}/record/{1}'.format(domain, record_id)) + raw = self._get( + '/domain/zone/{0}/record/{1}'.format(domain, record_id)) records.append({ 'type': raw['fieldType'], 'name': self._full_name(raw['subDomain']), @@ -123,14 +135,15 @@ }) if content: - records = [record for record in records if record['content'].lower() == content.lower()] + records = [ + record for record in records if record['content'].lower() == content.lower()] LOGGER.debug('list_records: %s', records) return records def update_record(self, identifier, type=None, name=None, content=None): - domain = self.options.get('domain') + domain = self.domain if not identifier: records = self.list_records(type, name) @@ -147,7 +160,8 @@ if content: data['target'] = content - self._put('/domain/zone/{0}/record/{1}'.format(domain, identifier), data) + self._put( + '/domain/zone/{0}/record/{1}'.format(domain, identifier), data) self._post('/domain/zone/{0}/refresh'.format(domain)) LOGGER.debug('update_record: %s', identifier) @@ -155,7 +169,7 @@ return True def delete_record(self, identifier=None, type=None, name=None, content=None): - domain = self.options.get('domain') + domain = self.domain delete_record_id = [] if not identifier: @@ -165,9 +179,10 @@ delete_record_id.append(identifier) LOGGER.debug('delete_records: %s', delete_record_id) - + for record_id in delete_record_id: - self._delete('/domain/zone/{0}/record/{1}'.format(domain, record_id)) + self._delete( + '/domain/zone/{0}/record/{1}'.format(domain, record_id)) self._post('/domain/zone/{0}/refresh'.format(domain)) @@ -187,18 +202,21 @@ # Get correctly sync time now = str(int(time.time()) + self.time_delta) - headers['X-Ovh-Application'] = self.options.get('auth_application_key') - headers['X-Ovh-Consumer'] = self.options.get('auth_consumer_key') + headers['X-Ovh-Application'] = self._get_provider_option( + 'auth_application_key') + headers['X-Ovh-Consumer'] = self._get_provider_option( + 'auth_consumer_key') headers['X-Ovh-Timestamp'] = now - request = requests.Request(action, target, data=body, params=query_params, headers=headers) + request = requests.Request( + action, target, data=body, params=query_params, headers=headers) prepared_request = self.session.prepare_request(request) # Build OVH API signature for the current request signature = hashlib.sha1() signature.update('+'.join([ - self.options.get('auth_application_secret'), - self.options.get('auth_consumer_key'), + self._get_provider_option('auth_application_secret'), + self._get_provider_option('auth_consumer_key'), action.upper(), prepared_request.url, body, @@ -206,9 +224,15 @@ ]).encode('utf-8')) # Sign the request - prepared_request.headers['X-Ovh-Signature'] = '$1$' + signature.hexdigest() + headers['X-Ovh-Signature'] = '$1$' + signature.hexdigest() - result = self.session.send(prepared_request) + result = self.session.request( + method=action, + url=target, + params=query_params, + data=body, + headers=headers + ) result.raise_for_status() return result.json() diff -Nru lexicon-2.7.12/lexicon/providers/plesk.py lexicon-3.0.8/lexicon/providers/plesk.py --- lexicon-2.7.12/lexicon/providers/plesk.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/plesk.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,18 +1,18 @@ from __future__ import absolute_import - import logging +from collections import OrderedDict import requests -from collections import OrderedDict +from lexicon.providers.base import Provider as BaseProvider + try: - import xmltodict # optional dependency + import xmltodict # optional dependency except ImportError: pass -from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) # Lexicon Plesk Provider # @@ -25,17 +25,22 @@ NAMESERVER_DOMAINS = [] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-password", help="specify password for authentication") - subparser.add_argument('--plesk-server', help="specify URL to the Plesk Web UI, including the port") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-password", help="specify password for authentication") + subparser.add_argument( + '--plesk-server', help="specify URL to the Plesk Web UI, including the port") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) - self.api_endpoint = self.options.get('plesk_server') + self.api_endpoint = self._get_provider_option('plesk_server') if self.api_endpoint.endswith('/'): self.api_endpoint = self.api_endpoint[:-1] @@ -43,36 +48,37 @@ if not self.api_endpoint.endswith(plesk_url_suffix): self.api_endpoint += plesk_url_suffix - self.site_name = self.options.get('domain') + self.site_name = self.domain assert self.site_name is not None self.domain_id = None - self.username = self.options.get('auth_username') + self.username = self._get_provider_option('auth_username') assert self.username is not None - self.password = self.options.get('auth_password') + self.password = self._get_provider_option('auth_password') assert self.password is not None def __simple_request(self, type, operation, req): - + response = self.__plesk_request({ type: { operation: req } })[type][operation] - + result = response["result"] - + if isinstance(result, list): for r in result: if r["status"] == "error": - raise Exception("API returned at least one error: %s" % r["errtext"] ) + raise Exception( + "API returned at least one error: %s" % r["errtext"]) elif response["result"]["status"] == "error": errcode = response["result"]["errcode"] errtext = response["result"]["errtext"] - raise Exception("API returned error: %s (%s)" % ( errcode, errtext ) ) - + raise Exception("API returned error: %s (%s)" % (errcode, errtext)) + return response def __plesk_request(self, request): @@ -84,17 +90,18 @@ headers["HTTP_AUTH_PASSWD"] = self.password xml = xmltodict.unparse({ - "packet": request - }, pretty=True) + "packet": request + }, pretty=True) - logger.debug ( "Request: %s", xml) + LOGGER.debug("Request: %s", xml) - r = requests.post(self.api_endpoint, headers=headers, data=xml, auth=(self.username, self.password)) + r = requests.post(self.api_endpoint, headers=headers, + data=xml, auth=(self.username, self.password)) data = r.text - logger.debug ( "Response: %s", data ) - result = xmltodict.parse(data ) + LOGGER.debug("Response: %s", data) + result = xmltodict.parse(data) return result["packet"] def __find_site(self): @@ -105,8 +112,8 @@ def authenticate(self): self.domain_id = self.__find_site() - - if self.domain_id == None: + + if self.domain_id is None: raise Exception('Domain not found') def create_record(self, type, name, content): @@ -114,35 +121,35 @@ def list_records(self, type=None, name=None, content=None): entries = self.__find_dns_entries(type, name, content) - logger.debug("list_records: %s" % entries) + LOGGER.debug("list_records: %s" % entries) return entries def update_record(self, identifier, type=None, name=None, content=None): - + if identifier is None: entries = self.__find_dns_entries(type, name, None) - logger.debug("Entries found: %s", entries) - + LOGGER.debug("Entries found: %s", entries) + if len(entries) < 1: raise Exception("No entry found for updating") - + identifier = entries[0]["id"] entry = self.__get_dns_entry(identifier) - + ids = [] for e in entries: ids.append(e["id"]) - + self.__delete_dns_records_by_id(ids) - + else: - + entry = self.__get_dns_entry(identifier) self.__delete_dns_records_by_id([identifier]) assert entry is not None - logger.debug("Updating: %s", entry) + LOGGER.debug("Updating: %s", entry) if type: entry["type"] = type @@ -150,41 +157,41 @@ entry["host"] = name if content: entry["value"] = content - + return self.__create_entry(entry["type"], entry["host"], entry["value"], entry["opt"]) def __create_entry(self, type, host, value, opt): entries = self.__find_dns_entries(type, self._fqdn_name(host), value) - + if entries: - return True # already exists + return True # already exists - self.__simple_request('dns','add_rec',OrderedDict([ + self.__simple_request('dns', 'add_rec', OrderedDict([ ('site-id', self.domain_id), ('type', type), ('host', self._relative_name(host)), ('value', value), ('opt', opt) ])) - - return True + return True def delete_record(self, identifier=None, type=None, name=None, content=None): - + if identifier: - + self.__delete_dns_records_by_id([identifier]) return True - + else: - - entries = self.__find_dns_entries ( type, self._fqdn_name(name), content ) + + entries = self.__find_dns_entries( + type, self._fqdn_name(name), content) ids = [] - + for entry in entries: ids.append(entry["id"]) - + self.__delete_dns_records_by_id(ids) return len(ids) > 0 @@ -195,18 +202,18 @@ } })["result"]["data"] - def __find_dns_entries(self, type = None, host = None, value = None): - logger.debug("Searching for: %s, %s, %s", type, host, value ) + def __find_dns_entries(self, type=None, host=None, value=None): + LOGGER.debug("Searching for: %s, %s, %s", type, host, value) if value and type and type in ["CNAME"]: - logger.debug("CNAME transformation") + LOGGER.debug("CNAME transformation") value = value.rstrip('.') + "." if host: host = self._fqdn_name(host) result = self.__simple_request('dns', 'get_rec', { - 'filter': { + 'filter': { 'site-id': self.domain_id } }) @@ -215,18 +222,21 @@ for r in result["result"]: - logger.debug("Record: %s", r) + LOGGER.debug("Record: %s", r) - if ( type is not None ) and ( r["data"]["type"] != type ): - logger.debug("\tType doesn't match - expected: '%s', found: '%s'", type, r["data"]["type"]) + if (type is not None) and (r["data"]["type"] != type): + LOGGER.debug( + "\tType doesn't match - expected: '%s', found: '%s'", type, r["data"]["type"]) continue - - if ( host is not None ) and ( r["data"]["host"] != host ): - logger.debug("\tHost doesn't match - expected: '%s', found: '%s'", host, r["data"]["host"]) + + if (host is not None) and (r["data"]["host"] != host): + LOGGER.debug( + "\tHost doesn't match - expected: '%s', found: '%s'", host, r["data"]["host"]) continue - - if ( value is not None ) and ( r["data"]["value"] != value ): - logger.debug("\tValue doesn't match - expected: '%s', found: '%s'", value, r["data"]["value"]) + + if (value is not None) and (r["data"]["value"] != value): + LOGGER.debug( + "\tValue doesn't match - expected: '%s', found: '%s'", value, r["data"]["value"]) continue entry = { @@ -236,7 +246,7 @@ 'ttl': None, 'options': {} } - + if r["data"]["type"] in ("CNAME"): entry['content'] = r["data"]["value"].rstrip('.') else: diff -Nru lexicon-2.7.12/lexicon/providers/pointhq.py lexicon-3.0.8/lexicon/providers/pointhq.py --- lexicon-2.7.12/lexicon/providers/pointhq.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/pointhq.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,30 +1,33 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['pointhq.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify email address for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify email address for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://pointhq.com') + self.api_endpoint = 'https://pointhq.com' def authenticate(self): - payload = self._get('/zones/{0}'.format(self.options['domain'])) + payload = self._get('/zones/{0}'.format(self.domain)) if not payload['zone']: raise Exception('No domain found') @@ -38,9 +41,10 @@ if len(existing_records) == 1: return True - payload = self._post('/zones/{0}/records'.format(self.domain_id), {'zone_record': {'record_type': type, 'name': self._relative_name(name), 'data': content}}) + payload = self._post('/zones/{0}/records'.format(self.domain_id), {'zone_record': { + 'record_type': type, 'name': self._relative_name(name), 'data': content}}) - logger.debug('create_record: %s', payload['zone_record']) + LOGGER.debug('create_record: %s', payload['zone_record']) return bool(payload['zone_record']) # List all records. Return an empty list if no records found @@ -53,7 +57,8 @@ if name: filter['name'] = self._relative_name(name) - payload = self._get('/zones/{0}/records'.format(self.domain_id), filter) + payload = self._get( + '/zones/{0}/records'.format(self.domain_id), filter) records = [] for record in payload: @@ -68,9 +73,10 @@ records.append(processed_record) if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -84,9 +90,10 @@ if content: data['data'] = content - payload = self._put('/zones/{0}/records/{1}'.format(self.domain_id, identifier), {'zone_record': data}) + payload = self._put( + '/zones/{0}/records/{1}'.format(self.domain_id, identifier), {'zone_record': data}) - logger.debug('update_record: %s', payload) + LOGGER.debug('update_record: %s', payload) return bool(payload['zone_record']) # Delete an existing record. @@ -98,17 +105,18 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) + + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: - payload = self._delete('/zones/{0}/records/{1}'.format(self.domain_id, record_id)) + payload = self._delete( + '/zones/{0}/records/{1}'.format(self.domain_id, record_id)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -116,10 +124,12 @@ query_params = {} r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), - auth=requests.auth.HTTPBasicAuth(self.options['auth_username'], self.options['auth_token']), + auth=requests.auth.HTTPBasicAuth(self._get_provider_option( + 'auth_username'), self._get_provider_option('auth_token')), headers={ 'Content-Type': 'application/json', 'Accept': 'application/json' }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/powerdns.py lexicon-3.0.8/lexicon/providers/powerdns.py --- lexicon-2.7.12/lexicon/providers/powerdns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/powerdns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,13 +1,12 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) # Lexicon PowerDNS Provider @@ -33,18 +32,21 @@ NAMESERVER_DOMAINS = [] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") subparser.add_argument("--pdns-server", help="URI for PowerDNS server") - subparser.add_argument("--pdns-server-id", help="Server ID to interact with") + subparser.add_argument( + "--pdns-server-id", help="Server ID to interact with") class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) - self.api_endpoint = self.options.get('pdns_server') + self.api_endpoint = self._get_provider_option('pdns_server') if self.api_endpoint.endswith('/'): self.api_endpoint = self.api_endpoint[:-1] @@ -52,25 +54,25 @@ if not self.api_endpoint.endswith("/api/v1"): self.api_endpoint += "/api/v1" - self.server_id = self.options.get('pdns_server_id') + self.server_id = self._get_provider_option('pdns_server_id') if self.server_id is None: self.server_id = 'localhost' self.api_endpoint += "/servers/" + self.server_id - self.api_key = self.options.get('auth_token') + self.api_key = self._get_provider_option('auth_token') assert self.api_key is not None self._zone_data = None def zone_data(self): if self._zone_data is None: - self._zone_data = self._get('/zones/' + self.options['domain']).json() + self._zone_data = self._get('/zones/' + self.domain).json() return self._zone_data def authenticate(self): self.zone_data() - self.domain_id = self.options['domain'] + self.domain_id = self.domain def _make_identifier(self, type, name, content): return "{}/{}={}".format(type, name, content) @@ -96,7 +98,7 @@ 'content': self._unclean_content(rrset['type'], record['content']), 'id': self._make_identifier(rrset['type'], rrset['name'], record['content']) }) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records def _clean_content(self, type, content): @@ -130,7 +132,7 @@ 'name': name, 'type': type, 'records': [], - 'ttl': self.options.get('ttl', 600), + 'ttl': self._get_lexicon_option('ttl') or 600, 'changetype': 'REPLACE' } @@ -146,9 +148,9 @@ update_data['name'] = self._fqdn_name(update_data['name']) request = {'rrsets': [update_data]} - logger.debug('request: %s', request) + LOGGER.debug('request: %s', request) - self._patch('/zones/' + self.options['domain'], data=request) + self._patch('/zones/' + self.domain, data=request) self._zone_data = None return True @@ -156,7 +158,7 @@ if identifier is not None: type, name, content = self._parse_identifier(identifier) - logger.debug("delete %s %s %s", type, name, content) + LOGGER.debug("delete %s %s %s", type, name, content) if type is None or name is None: raise Exception("Must specify at least both type and name") @@ -179,9 +181,9 @@ update_data['records'] = new_records request = {'rrsets': [update_data]} - logger.debug('request: %s', request) + LOGGER.debug('request: %s', request) - self._patch('/zones/' + self.options['domain'], data=request) + self._patch('/zones/' + self.domain, data=request) self._zone_data = None return True @@ -203,6 +205,6 @@ 'X-API-Key': self.api_key, 'Content-Type': 'application/json' }) - logger.debug('response: %s', r.text) + LOGGER.debug('response: %s', r.text) r.raise_for_status() return r diff -Nru lexicon-2.7.12/lexicon/providers/rackspace.py lexicon-3.0.8/lexicon/providers/rackspace.py --- lexicon-2.7.12/lexicon/providers/rackspace.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/rackspace.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,19 +1,19 @@ """Rackspace provider implementation""" from __future__ import absolute_import - import json import logging import time import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['rackspacecloud.com'] + def _async_request_completed(payload): """Looks into an async response payload to see if the requested job has finished.""" if payload['status'] == 'COMPLETED': @@ -22,41 +22,43 @@ return True return False + def ProviderParser(subparser): - subparser.add_argument("--auth-account", help="specify account number for authentication") - subparser.add_argument("--auth-username", help="specify username for authentication. Only used if --auth-token is empty.") - subparser.add_argument("--auth-api-key", help="specify api key for authentication. Only used if --auth-token is empty.") - subparser.add_argument("--auth-token", help="specify token for authentication. If empty, the username and api key will be used to create a token.") - subparser.add_argument("--sleep-time", type=float, default=1, help="number of seconds to wait between update requests.") + subparser.add_argument( + "--auth-account", help="specify account number for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication. Only used if --auth-token is empty.") + subparser.add_argument( + "--auth-api-key", help="specify api key for authentication. Only used if --auth-token is empty.") + subparser.add_argument( + "--auth-token", help="specify token for authentication. If empty, the username and api key will be used to create a token.") + subparser.add_argument("--sleep-time", type=float, default=1, + help="number of seconds to wait between update requests.") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get( - 'api_endpoint', - 'https://dns.api.rackspacecloud.com/v1.0' - ) - self.auth_api_endpoint = self.engine_overrides.get( - 'auth_api_endpoint', - 'https://identity.api.rackspacecloud.com/v2.0' - ) + self.api_endpoint = 'https://dns.api.rackspacecloud.com/v1.0' + self.auth_api_endpoint = 'https://identity.api.rackspacecloud.com/v2.0' def authenticate(self): - if not self.options['auth_token']: + self._auth_token = self._get_provider_option('auth_token') + if not self._auth_token: auth_response = self._auth_request('POST', '/tokens', { 'auth': { 'RAX-KSKEY:apiKeyCredentials': { - 'username': self.options['auth_username'], - 'apiKey': self.options['auth_api_key'] + 'username': self._get_provider_option('auth_username'), + 'apiKey': self._get_provider_option('auth_api_key') } } }) - self.options['auth_token'] = auth_response['access']['token']['id'] + self._auth_token = auth_response['access']['token']['id'] payload = self._get('/domains', { - 'name': self.options['domain'] + 'name': self.domain }) if not payload['domains']: @@ -66,22 +68,24 @@ self.domain_id = payload['domains'][0]['id'] - # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): - data = {'records': [{'type': type, 'name': self._full_name(name), 'data': content}]} - if self.options.get('ttl'): - data['records'][0]['ttl'] = self.options.get('ttl') + data = {'records': [ + {'type': type, 'name': self._full_name(name), 'data': content}]} + if self._get_lexicon_option('ttl'): + data['records'][0]['ttl'] = self._get_lexicon_option('ttl') try: - payload = self._post_and_wait('/domains/{0}/records'.format(self.domain_id), data) + payload = self._post_and_wait( + '/domains/{0}/records'.format(self.domain_id), data) except Exception as e: if str(e).startswith('Record is a duplicate of another record'): return self.update_record(None, type, name, content) raise e success = len(payload['records']) > 0 - logger.debug('create_record: %s', success) + LOGGER.debug('create_record: %s', success) return success # List all records. Return an empty list if no records found @@ -97,11 +101,13 @@ # if content: # params['data'] = content - payload = self._get('/domains/{0}/records'.format(self.domain_id), params) + payload = self._get( + '/domains/{0}/records'.format(self.domain_id), params) records = list(payload['records']) if content: - records = [record for record in records if record['data'] == content] + records = [ + record for record in records if record['data'] == content] records = [{ 'type': record['type'], 'name': record['name'], @@ -110,7 +116,7 @@ 'id': record['id'] } for record in records] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -122,8 +128,8 @@ data['name'] = self._full_name(name) if content: data['data'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') if identifier is None: records = self.list_records(type, name) @@ -131,10 +137,11 @@ raise Exception('Unable to find record to modify: ' + name) identifier = records[0]['id'] - self._put_and_wait('/domains/{0}/records/{1}'.format(self.domain_id, identifier), data) + self._put_and_wait( + '/domains/{0}/records/{1}'.format(self.domain_id, identifier), data) # If it didn't raise from the http status code, then we're good - logger.debug('update_record: %s', identifier) + LOGGER.debug('update_record: %s', identifier) return True # Delete an existing record. @@ -147,7 +154,7 @@ else: delete_record_id.append(identifier) - logger.debug('delete_records: %s', delete_record_id) + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: payload = self._delete_and_wait( @@ -156,33 +163,33 @@ # If it didn't raise from the http status code, then we're good success = True - logger.debug('delete_record: %s', success) + LOGGER.debug('delete_record: %s', success) return success - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} if query_params is None: query_params = {} - full_url = (self.api_endpoint + '/{0}' + url).format(self.options.get('auth_account')) + full_url = (self.api_endpoint + + '/{0}' + url).format(self._get_provider_option('auth_account')) r = requests.request(action, full_url, params=query_params, data=json.dumps(data), headers={ - 'X-Auth-Token': self.options.get('auth_token'), + 'X-Auth-Token': self._get_provider_option('auth_token'), 'Content-Type': 'application/json' }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() # Non-GET requests to the Rackspace CloudDNS API are asynchronous def _request_and_wait(self, action='POST', url='/', data=None, query_params=None): result = self._request(action, url, data, query_params) - sleep_time = self.options.get('sleep_time') - if sleep_time == "": - sleep_time = "1" + sleep_time = self._get_provider_option('sleep_time') or '1' sleep_time = float(sleep_time) while not _async_request_completed(result): @@ -210,11 +217,12 @@ r = requests.request('GET', payload['callbackUrl'], params={'showDetails': 'true'}, data={}, headers={ - 'X-Auth-Token': self.options.get('auth_token'), + 'X-Auth-Token': self._get_provider_option('auth_token'), 'Content-Type': 'application/json' - }) + }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() def _auth_request(self, action='GET', url='/', data=None, query_params=None): @@ -226,5 +234,6 @@ headers={ 'Content-Type': 'application/json' }) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/rage4.py lexicon-3.0.8/lexicon/providers/rage4.py --- lexicon-2.7.12/lexicon/providers/rage4.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/rage4.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,30 +1,33 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['rage4.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify email address for authentication") - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-username", help="specify email address for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://rage4.com/rapi') + self.api_endpoint = 'https://rage4.com/rapi' def authenticate(self): - payload = self._get('/getdomainbyname/', {'name': self.options['domain']}) + payload = self._get('/getdomainbyname/', {'name': self.domain}) if not payload['id']: raise Exception('No domain found') @@ -44,18 +47,18 @@ 'content': content, 'type': type } - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') payload = {} try: - payload = self._post('/createrecord/',{},record) + payload = self._post('/createrecord/', {}, record) except requests.exceptions.HTTPError as e: if e.response.status_code == 400: payload = {} # http 400 is ok here, because the record probably already exists - logger.debug('create_record: %s', payload['status']) + LOGGER.debug('create_record: %s', payload['status']) return payload['status'] # List all records. Return an empty list if no records found @@ -83,9 +86,10 @@ if type: records = [record for record in records if record['type'] == type] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -99,14 +103,14 @@ data['name'] = self._full_name(name) if content: data['content'] = content - if self.options.get('ttl'): - data['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + data['ttl'] = self._get_lexicon_option('ttl') # if type: # raise 'Type updating is not supported by this provider.' payload = self._put('/updaterecord/', {}, data) - logger.debug('update_record: %s', payload['status']) + LOGGER.debug('update_record: %s', payload['status']) return payload['status'] # Delete an existing record. @@ -118,18 +122,18 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) + + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: payload = self._post('/deleterecord/', {'id': record_id}) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -140,11 +144,13 @@ 'Accept': 'application/json', 'Content-Type': 'application/json', } - default_auth = requests.auth.HTTPBasicAuth(self.options['auth_username'], self.options['auth_token']) + default_auth = requests.auth.HTTPBasicAuth(self._get_provider_option( + 'auth_username'), self._get_provider_option('auth_token')) r = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), headers=default_headers, auth=default_auth) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/route53.py lexicon-3.0.8/lexicon/providers/route53.py --- lexicon-2.7.12/lexicon/providers/route53.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/route53.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,31 +1,37 @@ """Provide support to Lexicon for AWS Route 53 DNS changes.""" from __future__ import absolute_import - import logging import re from lexicon.providers.base import Provider as BaseProvider + try: - import boto3 #optional dep - import botocore #optional dep + import boto3 # optional dep + import botocore # optional dep except ImportError: pass -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = [re.compile(r'^awsdns-\d+\.\w+$')] + def ProviderParser(subparser): """Specify arguments for AWS Route 53 Lexicon Provider.""" - subparser.add_argument("--auth-access-key", help="specify ACCESS_KEY for authentication") - subparser.add_argument("--auth-access-secret", help="specify ACCESS_SECRET for authentication") - subparser.add_argument("--private-zone", help="indicates what kind of hosted zone to use. If true, use only private zones. If false, use only public zones") + subparser.add_argument("--auth-access-key", + help="specify ACCESS_KEY for authentication") + subparser.add_argument("--auth-access-secret", + help="specify ACCESS_SECRET for authentication") + subparser.add_argument( + "--private-zone", help="indicates what kind of hosted zone to use. If true, use only private zones. If false, use only public zones") - #TODO: these are only required for testing, we should figure out a way to remove them & update the integration tests + # TODO: these are only required for testing, we should figure out a way to remove them & update the integration tests # to dynamically populate the auth credentials that are required. - subparser.add_argument("--auth-username", help="alternative way to specify the ACCESS_KEY for authentication") - subparser.add_argument("--auth-token", help="alternative way to specify the ACCESS_SECRET for authentication") + subparser.add_argument( + "--auth-username", help="alternative way to specify the ACCESS_KEY for authentication") + subparser.add_argument( + "--auth-token", help="alternative way to specify the ACCESS_SECRET for authentication") class RecordSetPaginator(object): @@ -80,16 +86,18 @@ class Provider(BaseProvider): """Provide AWS Route 53 implementation of Lexicon Provider interface.""" - def __init__(self, options, engine_overrides=None): + def __init__(self, config): """Initialize AWS Route 53 DNS provider.""" - super(Provider, self).__init__(options, engine_overrides) + super(Provider, self).__init__(config) self.domain_id = None - self.private_zone = options.get('private_zone', None) + self.private_zone = self._get_provider_option('private_zone') # instantiate the client self.r53_client = boto3.client( 'route53', - aws_access_key_id=self.options.get('auth_access_key', self.options.get('auth_username')), - aws_secret_access_key=self.options.get('auth_access_secret', self.options.get('auth_token')) + aws_access_key_id=self._get_provider_option( + 'auth_access_key') or self._get_provider_option('auth_username'), + aws_secret_access_key=self._get_provider_option( + 'auth_access_secret') or self._get_provider_option('auth_token') ) def filter_zone(self, hz): @@ -97,7 +105,7 @@ if hz['Config']['PrivateZone'] != self.str2bool(self.private_zone): return False - if hz['Name'] != '{0}.'.format(self.options['domain']): + if hz['Name'] != '{0}.'.format(self.domain): return False return True @@ -121,7 +129,7 @@ raise Exception('No domain found') def _change_record_sets(self, action, type, name, content): - ttl = self.options['ttl'] + ttl = self._get_lexicon_option('ttl') value = '"{0}"'.format(content) if type in ['TXT', 'SPF'] else content try: self.r53_client.change_resource_record_sets( @@ -149,7 +157,7 @@ ) return True except botocore.exceptions.ClientError as e: - logger.debug(e.message, exc_info=True) + LOGGER.debug(str(e), exc_info=True) def create_record(self, type, name, content): """Create a record in the hosted zone.""" @@ -182,12 +190,12 @@ in record['ResourceRecords']] if content is not None and content not in record_content: continue - logger.debug('record: %s', record) + LOGGER.debug('record: %s', record) records.append({ 'type': record['Type'], 'name': self._full_name(record['Name']), 'ttl': record.get('TTL', None), 'content': record_content[0] if len(record_content) == 1 else record_content, }) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records diff -Nru lexicon-2.7.12/lexicon/providers/sakuracloud.py lexicon-3.0.8/lexicon/providers/sakuracloud.py --- lexicon-2.7.12/lexicon/providers/sakuracloud.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/sakuracloud.py 2019-01-03 16:26:53.000000000 +0000 @@ -3,14 +3,15 @@ import logging import requests +from lexicon.providers.base import Provider as BaseProvider from requests.auth import HTTPBasicAuth -from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['sakura.ne.jp'] + def ProviderParser(subparser): subparser.add_argument( "--auth-token", help="specify access token for authentication") @@ -20,24 +21,23 @@ class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get( - 'api_endpoint', 'https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1') + self.api_endpoint = 'https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1' def authenticate(self): query_params = { "Filter": { "Provider.Class": "dns", - "Name": self.options['domain'] + "Name": self.domain } } payload = self._get('/commonserviceitem', query_params=query_params) for item in payload["CommonServiceItems"]: - if item["Status"]["Zone"] == self.options['domain']: + if item["Status"]["Zone"] == self.domain: self.domain_id = item["ID"] return @@ -50,7 +50,7 @@ index = self._find_resource_record_set( resource_record_sets, type=type, name=name, content=content) if index >= 0: - logger.debug('create_record: %s', False) + LOGGER.debug('create_record: %s', False) return resource_record_sets.append( @@ -58,12 +58,12 @@ "Name": name, "Type": type, "RData": self._bind_format_target(type, content), - "TTL": self.options["ttl"], + "TTL": self._get_lexicon_option('ttl'), } ) payload = self._update_resource_record_sets(resource_record_sets) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -92,7 +92,7 @@ records = [ record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -111,21 +111,22 @@ resource_record_sets[index]["Name"] = name resource_record_sets[index]["RData"] = self._bind_format_target( type, content) - resource_record_sets[index]["TTL"] = self.options["ttl"] + resource_record_sets[index]["TTL"] = self._get_lexicon_option( + 'ttl') else: resource_record_sets.append( { "Name": name, "Type": type, "RData": self._bind_format_target(type, content), - "TTL": self.options["ttl"], + "TTL": self._get_lexicon_option('ttl'), } ) payload = self._update_resource_record_sets(resource_record_sets) - logger.debug('create_record') + LOGGER.debug('create_record') - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -149,20 +150,20 @@ filtered_records.append(record) if len(filtered_records) == 0: - logger.debug('delete_record: %s', False) + LOGGER.debug('delete_record: %s', False) return False for record in filtered_records: resource_record_sets.remove(record) self._update_resource_record_sets(resource_record_sets) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True # Helpers def _full_name(self, record_name): if record_name == "@": - record_name = self.options['domain'] + record_name = self.domain return super(Provider, self)._full_name(record_name) def _relative_name(self, record_name): @@ -213,7 +214,7 @@ 'Content-Type': 'application/json', } default_auth = HTTPBasicAuth( - self.options['auth_token'], self.options['auth_secret']) + self._get_provider_option('auth_token'), self._get_provider_option('auth_secret')) query_string = "" if query_params: @@ -227,6 +228,6 @@ # if the request fails for any reason, throw an error. r.raise_for_status() except: - logger.error(r.json().get("error_msg")) + LOGGER.error(r.json().get("error_msg")) raise return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/softlayer.py lexicon-3.0.8/lexicon/providers/softlayer.py --- lexicon-2.7.12/lexicon/providers/softlayer.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/softlayer.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,43 +1,48 @@ from __future__ import absolute_import - import logging from lexicon.providers.base import Provider as BaseProvider + try: import SoftLayer except ImportError: pass -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['softlayer.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-api-key", help="specify API private key for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-api-key", help="specify API private key for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - username = self.options.get('auth_username') - api_key = self.options.get('auth_api_key') + username = self._get_provider_option('auth_username') + api_key = self._get_provider_option('auth_api_key') if not username or not api_key: raise Exception("No username and/or api key was specified") - sl_client = SoftLayer.create_client_from_env(username=username, api_key=api_key) + sl_client = SoftLayer.create_client_from_env( + username=username, api_key=api_key) self.sl_dns = SoftLayer.managers.dns.DNSManager(sl_client) - # Authenticate against provider, # Make any requests required to get the domain's id for this provider, so it can be used in subsequent calls. # Should throw an error if authentication fails for any reason, of if the domain does not exist. + def authenticate(self): - domain = self.options.get('domain') + domain = self.domain payload = self.sl_dns.resolve_ids(domain) @@ -46,35 +51,37 @@ if len(payload) > 1: raise Exception('Too many domains found. This should not happen') - logger.debug('domain id: %s', payload[0]) + LOGGER.debug('domain id: %s', payload[0]) self.domain_id = payload[0] - # Create record. If record already exists with the same content, do nothing + def create_record(self, type, name, content): - records = self.list_records(type,name,content) + records = self.list_records(type, name, content) if len(records) > 0: # Nothing to do, record already exists - logger.debug('create_record: already exists') + LOGGER.debug('create_record: already exists') return True name = self._relative_name(name) - ttl = self.options.get('ttl') - payload = self.sl_dns.create_record(self.domain_id,name,type,content,ttl) + ttl = self._get_lexicon_option('ttl') + payload = self.sl_dns.create_record( + self.domain_id, name, type, content, ttl) - logger.debug('create_record: %s', payload) + LOGGER.debug('create_record: %s', payload) return True - # List all records. Return an empty list if no records found # type, name and content are used to filter records. # If possible filter during the query, otherwise filter after response is received. + def list_records(self, type=None, name=None, content=None): - ttl=None + ttl = None if name: name = self._relative_name(name) - payload = self.sl_dns.get_records(self.domain_id,ttl,content,name,type) + payload = self.sl_dns.get_records( + self.domain_id, ttl, content, name, type) records = [] for record in payload: @@ -87,12 +94,12 @@ } records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records - # Update a record. # If an identifier is specified, use it, otherwise do a lookup using type and name. + def update_record(self, identifier=None, type=None, name=None, content=None): if not identifier: records = self.list_records(type, name) @@ -101,25 +108,25 @@ else: raise Exception('Record identifier could not be found.') - record = { 'id': identifier } + record = {'id': identifier} if type: record['type'] = type if name: record['host'] = self._relative_name(name) if content: record['data'] = content - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') - payload = self.sl_dns.edit_record(record) + self.sl_dns.edit_record(record) - logger.debug('update_record: %s', payload) + LOGGER.debug('update_record: %s', record) return True - # Delete an existing record. # If record does not exist, do nothing. # If an identifier is specified, use it, otherwise do a lookup using type, name and content. + def delete_record(self, identifier=None, type=None, name=None, content=None): delete_record_id = [] if not identifier: @@ -127,12 +134,11 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self.sl_dns.delete_record(record_id) + self.sl_dns.delete_record(record_id) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - diff -Nru lexicon-2.7.12/lexicon/providers/subreg.py lexicon-3.0.8/lexicon/providers/subreg.py --- lexicon-2.7.12/lexicon/providers/subreg.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/subreg.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,29 +1,32 @@ """Provide support to Lexicon for Subreg.cz DNS changes.""" from __future__ import absolute_import - -import logging - import collections +import logging from lexicon.providers.base import Provider as BaseProvider + try: - import zeep # Optional dependency + import zeep # Optional dependency except: pass -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['subreg.cz'] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-password", help="specify password for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-password", help="specify password for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None self.ssid = None @@ -35,17 +38,18 @@ # Should throw an error if authentication fails for any reason, of if the domain does not exist. def authenticate(self): """Logs-in the user and checks the domain name""" - if not self.options['auth_username'] or not self.options['auth_password']: - raise Exception('No valid authentication data passed, expected: auth-username and auth-password') - response = self._request_login(self.options['auth_username'], - self.options['auth_password']) + if not self._get_provider_option('auth_username') or not self._get_provider_option('auth_password'): + raise Exception( + 'No valid authentication data passed, expected: auth-username and auth-password') + response = self._request_login(self._get_provider_option('auth_username'), + self._get_provider_option('auth_password')) if 'ssid' in response: self.ssid = response['ssid'] domains = self.domains_list() - if any((domain['name'] == self.options['domain'] for domain in domains)): - self.domain_id = self.options['domain'] + if any((domain['name'] == self.domain for domain in domains)): + self.domain_id = self.domain else: - raise Exception("Unknown domain {}".format(self.options['domain'])) + raise Exception("Unknown domain {}".format(self.domain)) else: raise Exception("No SSID provided by server") @@ -57,8 +61,8 @@ return True record = self._create_request_record(None, type, name, content, - self.options['ttl'] if 'ttl' in self.options else None, - self.options['priority'] if 'priority' in self.options else None) + self._get_lexicon_option('ttl'), + self._get_lexicon_option('priority')) self._request_add_dns_record(record) return True @@ -78,7 +82,8 @@ records = self._list_records(identifier=identifier) if len(records) == 1 and records[0]['name'] != self._full_name(name): # API does not allow us to update name directly - self._update_record_with_name(records[0], type, name, content) + self._update_record_with_name( + records[0], type, name, content) else: self._update_record(identifier, type, content) else: @@ -91,8 +96,8 @@ def _update_record(self, identifier, type, content): """Updates existing record with no sub-domain name changes""" record = self._create_request_record(identifier, type, None, content, - self.options['ttl'] if 'ttl' in self.options else None, - self.options['priority'] if 'priority' in self.options else None) + self._get_lexicon_option('ttl'), + self._get_lexicon_option('priority')) self._request_modify_dns_record(record) @@ -100,11 +105,11 @@ """Updates existing record and changes it's sub-domain name""" new_type = type if type else old_record['type'] - new_ttl = self.options['ttl'] if 'ttl' in self.options else None + new_ttl = self._get_lexicon_option('ttl') if new_ttl is None and 'ttl' in old_record: new_ttl = old_record['ttl'] - new_priority = self.options['priority'] if 'priority' in self.options else None + new_priority = self._get_lexicon_option('priority') if new_priority is None and 'priority' in old_record: new_priority = old_record['priority'] @@ -189,7 +194,7 @@ """Returns full domain name of a sub-domain name""" # Handle None and empty strings if not name: - return self.options['domain'] + return self.domain else: return super(Provider, self)._full_name(name) @@ -213,27 +218,32 @@ name_check = self._relative_name(name) # Stringize the identifier to prevent any type differences - identifier_check = str(identifier) if identifier is not None else None + identifier_check = str( + identifier) if identifier is not None else None filtered_records = [record for record in response['records'] if - (identifier is None or str(record['id']) == identifier_check) and - (type is None or record['type'] == type) and - (name is None or record['name'] == name_check) and - (content is None or ('content' in record and record['content'] == content_check))] - records = [self._create_response_record(filtered_record) for filtered_record in filtered_records] + (identifier is None or str(record['id']) == identifier_check) and + (type is None or record['type'] == type) and + (name is None or record['name'] == name_check) and + (content is None or ('content' in record and record['content'] == content_check))] + records = [self._create_response_record( + filtered_record) for filtered_record in filtered_records] else: records = [] return records def _guess_record(self, type, name=None, content=None): """Tries to find existing unique record by type, name and content""" - records = self._list_records(identifier=None, type=type, name=name, content=content) + records = self._list_records( + identifier=None, type=type, name=name, content=content) if len(records) == 1: return records[0] elif len(records) > 1: - raise Exception('Identifier was not provided and several existing records match the request for {0}/{1}'.format(type,name)) + raise Exception( + 'Identifier was not provided and several existing records match the request for {0}/{1}'.format(type, name)) else: - raise Exception('Identifier was not provided and no existing records match the request for {0}/{1}'.format(type,name)) + raise Exception( + 'Identifier was not provided and no existing records match the request for {0}/{1}'.format(type, name)) def _request_login(self, login, password): """Sends Login request""" @@ -248,25 +258,25 @@ def _request_get_dns_zone(self): """Sends Get_DNS_Zone request""" return self._request("Get_DNS_Zone", - domain=self.options['domain']) + domain=self.domain) def _request_add_dns_record(self, record): """Sends Add_DNS_Record request""" return self._request("Add_DNS_Record", - domain=self.options['domain'], + domain=self.domain, record=record) def _request_modify_dns_record(self, record): """Sends Modify_DNS_Record request""" return self._request("Modify_DNS_Record", - domain=self.options['domain'], + domain=self.domain, record=record) def _request_delete_dns_record_by_id(self, identifier): """Sends Delete_DNS_Record request""" return self._request("Delete_DNS_Record", - domain=self.options['domain'], - record={ 'id': identifier }) + domain=self.domain, + record={'id': identifier}) def _request(self, command, **kwargs): """Make request parse response""" @@ -289,6 +299,7 @@ raise Exception("Invalid status found in SOAP response") raise Exception('Invalid response') + class SubregError(Exception): def __init__(self, major, minor, message): self.major = int(major) diff -Nru lexicon-2.7.12/lexicon/providers/transip.py lexicon-3.0.8/lexicon/providers/transip.py --- lexicon-2.7.12/lexicon/providers/transip.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/transip.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,13 +1,13 @@ from __future__ import absolute_import - import logging from lexicon.providers.base import Provider as BaseProvider + try: from transip.service.objects import DnsEntry except ImportError: - try: + try: from transip.service.dns import DnsEntry except ImportError: pass @@ -17,13 +17,16 @@ except ImportError: pass -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = [] + def ProviderParser(subparser): - subparser.add_argument("--auth-username", help="specify username for authentication") - subparser.add_argument("--auth-api-key", help="specify API private key for authentication") + subparser.add_argument( + "--auth-username", help="specify username for authentication") + subparser.add_argument( + "--auth-api-key", help="specify API private key for authentication") class Provider(BaseProvider): @@ -34,16 +37,17 @@ order is: """ + def provider_options(self): return {'ttl': 86400} - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.provider_name = 'transip' self.domain_id = None - username = self.options.get('auth_username') - key_file = self.options.get('auth_api_key') + username = self._get_provider_option('auth_username') + key_file = self._get_provider_option('auth_api_key') if not username or not key_file: raise Exception("No username and/or keyfile was specified") @@ -57,43 +61,45 @@ # Make any requests required to get the domain's id for this provider, so it can be used in subsequent calls. # Should throw an error if authentication fails for any reason, of if the domain does not exist. def authenticate(self): - ## This request will fail when the domain does not exist, - ## allowing us to check for existence - domain = self.options.get('domain') + # This request will fail when the domain does not exist, + # allowing us to check for existence + domain = self.domain try: self.client.get_info(domain) except: raise raise Exception("Could not retrieve information about {0}, " - "is this domain yours?".format(domain)) + "is this domain yours?".format(domain)) self.domain_id = domain # Create record. If record already exists with the same content, do nothing' def create_record(self, type, name, content): - records = self.client.get_info(self.options.get('domain')).dnsEntries + records = self.client.get_info(self.domain).dnsEntries if self._filter_records(records, type, name, content): # Nothing to do, record already exists - logger.debug('create_record: already exists') + LOGGER.debug('create_record: already exists') return True records.append(DnsEntry(**{ "name": self._relative_name(name), "record_type": type, "content": self._bind_format_target(type, content), - "expire": self.options.get('ttl') + "expire": self._get_lexicon_option('ttl') })) - self.client.set_dns_entries(self.options.get('domain'), records) - status = len(self.list_records(type, name, content, show_output=False)) >= 1 - logger.debug('create_record: %s', status) + self.client.set_dns_entries(self.domain, records) + status = len(self.list_records( + type, name, content, show_output=False)) >= 1 + LOGGER.debug('create_record: %s', status) return status # List all records. Return an empty list if no records found # type, name and content are used to filter records. # If possible filter during the query, otherwise filter after response is received. def list_records(self, type=None, name=None, content=None, show_output=True): - all_records = self._convert_records(self.client.get_info(self.options.get('domain')).dnsEntries) + all_records = self._convert_records( + self.client.get_info(self.domain).dnsEntries) records = self._filter_records( records=all_records, type=type, @@ -102,13 +108,14 @@ ) if show_output: - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Update a record. Identifier must be specified. def update_record(self, identifier=None, type=None, name=None, content=None): if not (type or name or content): - raise Exception("At least one of type, name or content must be specified.") + raise Exception( + "At least one of type, name or content must be specified.") all_records = self.list_records(show_output=False) filtered_records = self._filter_records(all_records, type, name) @@ -119,12 +126,14 @@ "name": name, "type": type, "content": self._bind_format_target(type, content), - "ttl": self.options.get('ttl') + "ttl": self._get_lexicon_option('ttl') }) - self.client.set_dns_entries(self.options.get('domain'), self._convert_records_back(all_records)) - status = len(self.list_records(type, name, content, show_output=False)) >= 1 - logger.debug('update_record: %s', status) + self.client.set_dns_entries( + self.domain, self._convert_records_back(all_records)) + status = len(self.list_records( + type, name, content, show_output=False)) >= 1 + LOGGER.debug('update_record: %s', status) return status # Delete an existing record. @@ -132,22 +141,26 @@ # If an identifier is specified, use it, otherwise do a lookup using type, name and content. def delete_record(self, identifier=None, type=None, name=None, content=None): if not (type or name or content): - raise Exception("At least one of type, name or content must be specified.") + raise Exception( + "At least one of type, name or content must be specified.") all_records = self.list_records(show_output=False) - filtered_records = self._filter_records(all_records, type, name, content) + filtered_records = self._filter_records( + all_records, type, name, content) for record in filtered_records: all_records.remove(record) - self.client.set_dns_entries(self.options.get('domain'), self._convert_records_back(all_records)) - status = len(self.list_records(type, name, content, show_output=False)) == 0 - logger.debug('delete_record: %s', status) + self.client.set_dns_entries( + self.domain, self._convert_records_back(all_records)) + status = len(self.list_records( + type, name, content, show_output=False)) == 0 + LOGGER.debug('delete_record: %s', status) return status def _full_name(self, record_name): if record_name == "@": - record_name = self.options['domain'] + record_name = self.domain return super(Provider, self)._full_name(record_name) def _relative_name(self, record_name): diff -Nru lexicon-2.7.12/lexicon/providers/vultr.py lexicon-3.0.8/lexicon/providers/vultr.py --- lexicon-2.7.12/lexicon/providers/vultr.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/vultr.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,36 +1,38 @@ from __future__ import absolute_import - import logging import requests - from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['vultr.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://api.vultr.com/v1') + self.api_endpoint = 'https://api.vultr.com/v1' def authenticate(self): payload = self._get('/dns/list') - if not [item for item in payload if item['domain'] == self.options['domain']]: + if not [item for item in payload if item['domain'] == self.domain]: raise Exception('No domain found') - self.domain_id = self.options['domain'] - + self.domain_id = self.domain # Create record. If record already exists with the same content, do nothing' + def create_record(self, type, name, content): record = { 'type': type, @@ -42,11 +44,11 @@ record['data'] = "\"{0}\"".format(content) else: record['data'] = content - if self.options.get('ttl'): - record['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + record['ttl'] = self._get_lexicon_option('ttl') payload = self._post('/dns/create_record', record) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True # List all records. Return an empty list if no records found @@ -61,7 +63,7 @@ processed_record = { 'type': record['type'], 'name': "{0}.{1}".format(record['name'], self.domain_id), - 'ttl': record.get('ttl', self.options['ttl']), + 'ttl': record.get('ttl', self._get_lexicon_option('ttl')), 'content': record['data'], 'id': record['RECORDID'] } @@ -71,11 +73,13 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'] == content] + records = [ + record for record in records if record['content'] == content] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Create or update a record. @@ -84,7 +88,7 @@ data = { 'domain': self.domain_id, 'RECORDID': identifier, - 'ttl': self.options['ttl'] + 'ttl': self._get_lexicon_option('ttl') } # if type: # data['type'] = type @@ -98,7 +102,7 @@ payload = self._post('/dns/update_record', data) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True # Delete an existing record. @@ -110,8 +114,8 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) + + LOGGER.debug('delete_records: %s', delete_record_id) for record_id in delete_record_id: data = { @@ -121,11 +125,11 @@ payload = self._post('/dns/delete_record', data) # is always True at this point, if a non 200 response is returned an error is raised. - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - # Helpers + def _request(self, action='GET', url='/', data=None, query_params=None): if data is None: data = {} @@ -135,14 +139,16 @@ default_headers = { 'Accept': 'application/json', # 'Content-Type': 'application/json', - 'API-Key': self.options['auth_token'] + 'API-Key': self._get_provider_option('auth_token') } r = requests.request(action, self.api_endpoint + url, params=query_params, data=data, headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() if action == 'DELETE' or action == 'PUT' or action == 'POST': - return r.text # vultr handles succss/failure via HTTP Codes, Only GET returns a response. + # vultr handles succss/failure via HTTP Codes, Only GET returns a response. + return r.text return r.json() diff -Nru lexicon-2.7.12/lexicon/providers/yandex.py lexicon-3.0.8/lexicon/providers/yandex.py --- lexicon-2.7.12/lexicon/providers/yandex.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/yandex.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,45 +1,49 @@ from __future__ import absolute_import - import json import logging import requests - from lexicon.providers.base import Provider as BaseProvider + __author__ = 'Aliaksandr Kharkevich' __license__ = 'MIT' __contact__ = 'https://github.com/kharkevich' -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['yandex.com'] + def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify PDD token (https://tech.yandex.com/domain/doc/concepts/access-docpage/)") + subparser.add_argument( + "--auth-token", help="specify PDD token (https://tech.yandex.com/domain/doc/concepts/access-docpage/)") + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - self.api_endpoint = self.engine_overrides.get('api_endpoint', 'https://pddimp.yandex.ru/api2/admin/dns') + self.api_endpoint = 'https://pddimp.yandex.ru/api2/admin/dns' def authenticate(self): - payload = self._get('/list?domain={0}'.format(self.options['domain'])) + payload = self._get('/list?domain={0}'.format(self.domain)) if payload['success'] != "ok": raise Exception('No domain found') - self.domain_id = self.options['domain'] + self.domain_id = self.domain def create_record(self, type, name, content): if (type == 'CNAME') or (type == 'MX') or (type == 'NS'): - content = content.rstrip('.') + '.' # make sure a the data is always a FQDN for CNAMe. + # make sure a the data is always a FQDN for CNAMe. + content = content.rstrip('.') + '.' - querystring = 'domain={0}&type={1}&subdomain={2}&content={3}'.format(self.domain_id, type, self._relative_name(name), content) - if self.options.get('ttl'): - querystring += "&ttl={0}".format(self.options.get('ttl')) + querystring = 'domain={0}&type={1}&subdomain={2}&content={3}'.format( + self.domain_id, type, self._relative_name(name), content) + if self._get_lexicon_option('ttl'): + querystring += "&ttl={0}".format(self._get_lexicon_option('ttl')) - payload = self._post('/add', {},querystring) + payload = self._post('/add', {}, querystring) return self._check_exitcode(payload, 'create_record') @@ -74,20 +78,23 @@ if type: records = [record for record in records if record['type'] == type] if name: - records = [record for record in records if record['name'] == self._full_name(name)] + records = [record for record in records if record['name'] + == self._full_name(name)] if content: - records = [record for record in records if record['content'].lower() == content.lower()] + records = [ + record for record in records if record['content'].lower() == content.lower()] - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records # Just update existing record. Domain ID (domain) and Identifier (record_id) is mandatory def update_record(self, identifier, type=None, name=None, content=None): if not identifier: - logger.debug('Domain ID (domain) and Identifier (record_id) is mandatory parameters for this case') + LOGGER.debug( + 'Domain ID (domain) and Identifier (record_id) is mandatory parameters for this case') return False - + data = '' if type: data += '&type={0}'.format(type) @@ -96,7 +103,8 @@ if content: data += '&content={0}'.format(content) - payload = self._post('/edit', {}, 'domain={0}&record_id={1}'.format(self.domain_id, identifier) + data) + payload = self._post( + '/edit', {}, 'domain={0}&record_id={1}'.format(self.domain_id, identifier) + data) return self._check_exitcode(payload, 'update_record') @@ -109,13 +117,14 @@ delete_record_id = [record['id'] for record in records] else: delete_record_id.append(identifier) - - logger.debug('delete_records: %s', delete_record_id) - + + LOGGER.debug('delete_records: %s', delete_record_id) + for record_id in delete_record_id: - payload = self._post('/del', {}, 'domain={0}&record_id={1}'.format(self.domain_id, record_id)) + payload = self._post( + '/del', {}, 'domain={0}&record_id={1}'.format(self.domain_id, record_id)) - #return self._check_exitcode(payload, 'delete_record') + # return self._check_exitcode(payload, 'delete_record') return True # Helpers @@ -127,7 +136,7 @@ default_headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'PddToken': self.options.get('auth_token') + 'PddToken': self._get_provider_option('auth_token') } if not url.startswith(self.api_endpoint): @@ -136,7 +145,8 @@ r = requests.request(action, url, params=query_params, data=json.dumps(data), headers=default_headers) - r.raise_for_status() # if the request fails for any reason, throw an error. + # if the request fails for any reason, throw an error. + r.raise_for_status() if action == 'DELETE': return '' else: @@ -144,11 +154,11 @@ def _check_exitcode(self, payload, title): if payload['success'] == 'ok': - logger.debug('%s: %s', title, payload['success']) + LOGGER.debug('%s: %s', title, payload['success']) return True elif payload['error'] == 'record_exists': - logger.debug('%s: %s', title, True) + LOGGER.debug('%s: %s', title, True) return True else: - logger.debug('%s: %s', title, payload['error']) + LOGGER.debug('%s: %s', title, payload['error']) return False diff -Nru lexicon-2.7.12/lexicon/providers/zeit.py lexicon-3.0.8/lexicon/providers/zeit.py --- lexicon-2.7.12/lexicon/providers/zeit.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/zeit.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,15 +1,16 @@ from __future__ import absolute_import - -import requests import json import logging +import requests from lexicon.providers.base import Provider as BaseProvider + LOGGER = logging.getLogger(__name__) NAMESERVER_DOMAINS = ['zeit.world'] + def ProviderParser(subparser): subparser.description = ''' Zeit Provider requires a token to access its API. @@ -17,38 +18,46 @@ https://zeit.co/account/tokens''' subparser.add_argument('--auth-token', help='specify your API token') -# Implements the DNS Zeit provider. -# The API is quite simple: you can list all records, add one record or delete one record. -# - list is pretty straightforward: we get all records then filter for given parameters, -# - add uses directly the API to add a new record without any added complexity, -# - delete uses list + delete: we get the list of all records, filter on the given parameters and delete record by id, -# - update uses list + delete + add: we get the list of all records, find record for given identifier, then insert a new record and delete the old record. + class Provider(BaseProvider): + """ + Implements the DNS Zeit provider. + The API is quite simple: you can list all records, add one record or delete one record. + - list is pretty straightforward: we get all records then filter for given parameters, + - add uses directly the API to add a new record without any added complexity, + - delete uses list + delete: we get the list of all records, + filter on the given parameters and delete record by id, + - update uses list + delete + add: we get the list of all records, + find record for given identifier, then insert a new record and delete the old record. + """ - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None self.api_endpoint = 'https://api.zeit.co/v2/domains' def authenticate(self): - result = self._get('/{0}'.format(self.options['domain'])) + result = self._get('/{0}'.format(self.domain)) if not result['uid']: - raise Exception('Error, domain {0} not found'.format(self.options['domain'])) + raise Exception('Error, domain {0} not found'.format(self.domain)) self.domain_id = result['uid'] def list_records(self, type=None, name=None, content=None): - result = self._get('/{0}/records'.format(self.options['domain'])) + result = self._get('/{0}/records'.format(self.domain)) raw_records = result['records'] if type: - raw_records = [raw_record for raw_record in raw_records if raw_record['type'] == type] + raw_records = [ + raw_record for raw_record in raw_records if raw_record['type'] == type] if name: - raw_records = [raw_record for raw_record in raw_records if raw_record['name'] == self._relative_name(name)] + raw_records = [ + raw_record for raw_record in raw_records if raw_record['name'] == self._relative_name(name)] if content: - raw_records = [raw_record for raw_record in raw_records if raw_record['value'] == content] - + raw_records = [ + raw_record for raw_record in raw_records if raw_record['value'] == content] + records = [] for raw_record in raw_records: records.append({ @@ -66,16 +75,17 @@ # We ignore creation if a record already exists for given type/name/content records = self.list_records(type, name, content) if records: - LOGGER.debug('create_record (ignored, duplicate): %s', records[0]['id']) + LOGGER.debug('create_record (ignored, duplicate): %s', + records[0]['id']) return True - + data = { 'type': type, 'name': self._relative_name(name), 'value': content } - result = self._post('/{0}/records'.format(self.options['domain']), data) + result = self._post('/{0}/records'.format(self.domain), data) if not result['uid']: raise Exception('Error occured when inserting the new record.') @@ -91,15 +101,18 @@ records = [] if identifier: records = self.list_records() - records = [record for record in records if record['id'] == identifier] + records = [ + record for record in records if record['id'] == identifier] else: records = self.list_records(type, name) - + if not records: - raise Exception('No record found for identifer: {0}'.format(identifier)) + raise Exception( + 'No record found for identifer: {0}'.format(identifier)) if len(records) > 1: - LOGGER.warn('Multiple records have been found for given parameters. Only first one will be updated (id: {0})'.format(records[0]['id'])) + LOGGER.warn('Multiple records have been found for given parameters. Only first one will be updated (id: {0})'.format( + records[0]['id'])) data = { 'type': type, @@ -114,10 +127,11 @@ if not content: data['value'] = records[0]['content'] - result = self._post('/{0}/records'.format(self.options['domain']), data) - self._delete('/{0}/records/{1}'.format(self.options['domain'], records[0]['id'])) + result = self._post('/{0}/records'.format(self.domain), data) + self._delete('/{0}/records/{1}'.format(self.domain, records[0]['id'])) - LOGGER.debug('update_record: %s => %s', records[0]['id'], result['uid']) + LOGGER.debug('update_record: %s => %s', + records[0]['id'], result['uid']) return True @@ -132,7 +146,8 @@ LOGGER.debug('delete_records: %s', delete_record_ids) for delete_record_id in delete_record_ids: - self._delete('/{0}/records/{1}'.format(self.options['domain'], delete_record_id)) + self._delete( + '/{0}/records/{1}'.format(self.domain, delete_record_id)) LOGGER.debug('delete_record: %s', True) @@ -143,11 +158,11 @@ data = {} if query_params is None: query_params = {} - - request = requests.request(action, self.api_endpoint + url, + + request = requests.request(action, self.api_endpoint + url, params=query_params, data=json.dumps(data), - headers={'Authorization': 'Bearer {0}'.format(self.options.get('auth_token'))}) + headers={'Authorization': 'Bearer {0}'.format(self._get_provider_option('auth_token'))}) request.raise_for_status() return request.json() diff -Nru lexicon-2.7.12/lexicon/providers/zonomi.py lexicon-3.0.8/lexicon/providers/zonomi.py --- lexicon-2.7.12/lexicon/providers/zonomi.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/lexicon/providers/zonomi.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,16 +1,16 @@ from __future__ import absolute_import - import logging from xml.etree import ElementTree -import requests +import requests from lexicon.providers.base import Provider as BaseProvider -logger = logging.getLogger(__name__) + +LOGGER = logging.getLogger(__name__) APIENTRYPOINT = { - 'zonomi': 'https://zonomi.com/app', - 'rimuhosting' : 'https://rimuhosting.com' + 'zonomi': 'https://zonomi.com/app', + 'rimuhosting': 'https://rimuhosting.com' } NAMESERVER_DOMAINS = ['zonomi.com'] @@ -35,43 +35,43 @@ def ProviderParser(subparser): - subparser.add_argument("--auth-token", help="specify token for authentication") + subparser.add_argument( + "--auth-token", help="specify token for authentication") subparser.add_argument("--auth-entrypoint", help="use Zonomi or Rimuhosting API", choices=[ - 'zonomi', 'rimuhosting' ]) + 'zonomi', 'rimuhosting']) class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) self.domain_id = None - if not self.options.get('auth_token'): + if not self._get_provider_option('auth_token'): raise Exception('Error, application key is not defined') - self.api_endpoint = self.engine_overrides.get('api_endpoint', APIENTRYPOINT.get('zonomi')) - - if self.options.get('auth_entrypoint'): - self.api_endpoint = self.engine_overrides.get('api_endpoint', APIENTRYPOINT.get(self.options.get('auth_entrypoint'))) + self.api_endpoint = APIENTRYPOINT.get('zonomi') + if self._get_provider_option('auth_entrypoint'): + self.api_endpoint = APIENTRYPOINT.get( + self._get_provider_option('auth_entrypoint')) def authenticate(self): - + payload = self._get('/dns/dyndns.jsp', { - 'action' : 'QUERY', - 'name' : "**." + self.options['domain'], - 'type' : 'SOA' + 'action': 'QUERY', + 'name': "**." + self.domain, + 'type': 'SOA' }) if payload.find('is_ok').text != 'OK:': - raise Exception('Error with api {0}'.format(payload.find('is_ok').text)) - - self.domain_id = self.options['domain'] + raise Exception('Error with api {0}'.format( + payload.find('is_ok').text)) + self.domain_id = self.domain def _make_identifier(self, type, name, content): return "{}/{}={}".format(type, self._full_name(name), content) - def _parse_identifier(self, identifier): parts = identifier.split('/') type = parts[0] @@ -80,39 +80,38 @@ content = "=".join(parts[1:]) return type, name, content - def create_record(self, type, name, content): request = { - 'action': 'SET', - 'type': type, - 'name': self.options['domain'], - 'value': content + 'action': 'SET', + 'type': type, + 'name': self.domain, + 'value': content } if name is not None: request['name'] = self._full_name(name) - if self.options.get('ttl'): - request['ttl'] = self.options.get('ttl') + if self._get_lexicon_option('ttl'): + request['ttl'] = self._get_lexicon_option('ttl') - if self.options.get('priority'): - request['prio'] = self.options.get('priority') + if self._get_lexicon_option('priority'): + request['prio'] = self._get_lexicon_option('priority') payload = self._get('/dns/dyndns.jsp', request) if payload.find('is_ok').text != 'OK:': - raise Exception('An error occurred: {0}'.format(payload.find('is_ok').text)) + raise Exception('An error occurred: {0}'.format( + payload.find('is_ok').text)) - logger.debug('create_record: %s', True) + LOGGER.debug('create_record: %s', True) return True - def list_records(self, type=None, name=None, content=None): records = [] request = { - 'action' : 'QUERY', - 'name': "**." + self.options['domain'] + 'action': 'QUERY', + 'name': "**." + self.domain } if type is not None: @@ -128,23 +127,22 @@ 'type': rxml.attrib['type'], 'name': rxml.attrib['name'], 'content': rxml.attrib['content'], - 'id': self._make_identifier(rxml.attrib['type'],rxml.attrib['name'],rxml.attrib['content']), + 'id': self._make_identifier(rxml.attrib['type'], rxml.attrib['name'], rxml.attrib['content']), 'ttl': rxml.attrib['ttl'].split()[0] } records.append(processed_record) - logger.debug('list_records: %s', records) + LOGGER.debug('list_records: %s', records) return records - def delete_record(self, identifier=None, type=None, name=None, content=None): if identifier is not None: type, name, content = self._parse_identifier(identifier) request = { - 'action' : 'DELETE', - 'name': self.options['domain'] + 'action': 'DELETE', + 'name': self.domain } - + if type is not None: request['type'] = type if name is not None: @@ -155,20 +153,20 @@ payload = self._get('/dns/dyndns.jsp', request) if payload.find('is_ok').text != 'OK:': - raise Exception('An error occurred: {0}'.format(payload.find('is_ok').text)) + raise Exception('An error occurred: {0}'.format( + payload.find('is_ok').text)) - logger.debug('delete_record: %s', True) + LOGGER.debug('delete_record: %s', True) return True - def update_record(self, identifier, type=None, name=None, content=None): self.delete_record(identifier) ttype, tname, tcontent = self._parse_identifier(identifier) request = { - 'action': 'SET', - 'type': ttype, - 'name': self._full_name(tname), - 'value': tcontent + 'action': 'SET', + 'type': ttype, + 'name': self._full_name(tname), + 'value': tcontent } if type is not None: @@ -177,17 +175,18 @@ request['name'] = self._full_name(name) if content is not None: request['value'] = content - if self.options.get('ttl'): - request['ttl'] = self.options.get('ttl') - if self.options.get('priority'): - request['prio'] = self.options.get('priority') + if self._get_lexicon_option('ttl'): + request['ttl'] = self._get_lexicon_option('ttl') + if self._get_lexicon_option('priority'): + request['prio'] = self._get_lexicon_option('priority') payload = self._get('/dns/dyndns.jsp', request) if payload.find('is_ok').text != 'OK:': - raise Exception('An error occurred: {0}'.format(payload.find('is_ok').text)) + raise Exception('An error occurred: {0}'.format( + payload.find('is_ok').text)) - logger.debug('update_record: %s', True) + LOGGER.debug('update_record: %s', True) return True def _request(self, action='GET', url='/', data=None, query_params=None): @@ -196,9 +195,10 @@ if query_params is None: query_params = {} else: - query_params['api_key'] = self.options.get('auth_token') + query_params['api_key'] = self._get_provider_option('auth_token') - r = requests.request(action, self.api_endpoint + url, params=query_params) + r = requests.request(action, self.api_endpoint + + url, params=query_params) tree = ElementTree.ElementTree(ElementTree.fromstring(r.content)) root = tree.getroot() if root.tag == 'error': diff -Nru lexicon-2.7.12/optional-requirements.txt lexicon-3.0.8/optional-requirements.txt --- lexicon-2.7.12/optional-requirements.txt 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/optional-requirements.txt 2019-01-03 16:26:53.000000000 +0000 @@ -15,10 +15,13 @@ ############################################################################### --process-dependency-links -.[namecheap] -.[route53] -.[softlayer] -.[subreg] -.[transip] -.[plesk] -.[henet] +-e .[namecheap] +-e .[route53] +-e .[softlayer] +-e .[subreg] +-e .[transip] +-e .[plesk] +-e .[henet] +-e .[hetzner] +-e .[easyname] +-e .[localzone] diff -Nru lexicon-2.7.12/.pylintrc lexicon-3.0.8/.pylintrc --- lexicon-2.7.12/.pylintrc 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/.pylintrc 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,559 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + deprecated-operator-function, + deprecated-urllib-function, + xreadlines-attribute, + deprecated-sys-function, + exception-escape, + comprehension-escape, + duplicate-code + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. +#class-attribute-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. +#variable-rgx= + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package.. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls + + +[DESIGN] + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement. +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled). +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled). +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception". +overgeneral-exceptions=Exception diff -Nru lexicon-2.7.12/README.md lexicon-3.0.8/README.md --- lexicon-2.7.12/README.md 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/README.md 2019-01-03 16:26:53.000000000 +0000 @@ -42,13 +42,16 @@ - DNSPark ([docs](https://dnspark.zendesk.com/entries/31210577-REST-API-DNS-Documentation)) - DNSPod ([docs](https://support.dnspod.cn/Support/api)) - EasyDNS ([docs](http://docs.sandbox.rest.easydns.net/)) -- ExoScale +- Easyname ([docs](https://www.easyname.com/en)) +- ExoScale ([docs](https://community.exoscale.com/documentation/dns/api/)) - Gandi (docs: [RPC (old)](http://doc.rpc.gandi.net/) / [LiveAPI](http://doc.livedns.gandi.net/)) -- Gehirn +- Gehirn ([docs](https://support.gehirn.jp/apidocs/gis/dns/index.html)) - Glesys ([docs](https://github.com/glesys/API/wiki/)) - GoDaddy ([docs](https://developer.godaddy.com/getstarted#access)) - Google Cloud DNS ([docs](https://cloud.google.com/dns/api/v1/)) -- Hurricane Electric DNS +- 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)) - Linode v4 ([docs](https://developers.linode.com/v4)) @@ -56,6 +59,7 @@ - Memset ([docs](https://www.memset.com/apidocs/methods_dns.html)) - Namecheap ([docs](https://www.namecheap.com/support/api/methods.aspx)) - Namesilo ([docs](https://www.namesilo.com/api_reference.php)) +- NFSN (NearlyFreeSpeech) - NS1 ([docs](https://ns1.com/api/)) - OnApp ([docs](https://docs.onapp.com/display/55API/OnApp+5.5+API+Guide)) - Online diff -Nru lexicon-2.7.12/requirements.txt lexicon-3.0.8/requirements.txt --- lexicon-2.7.12/requirements.txt 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/requirements.txt 2019-01-03 16:26:53.000000000 +0000 @@ -7,4 +7,4 @@ ############################################################################### --process-dependency-links -. +-e . diff -Nru lexicon-2.7.12/setup.py lexicon-3.0.8/setup.py --- lexicon-2.7.12/setup.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/setup.py 2019-01-03 16:26:53.000000000 +0000 @@ -81,7 +81,13 @@ # your project is installed. For an analysis of "install_requires" vs pip's # requirements files see: # https://packaging.python.org/en/latest/requirements.html - install_requires=['requests[security]', 'tldextract', 'future', 'cryptography'], + install_requires=[ + 'requests[security]', + 'tldextract', + 'future', + 'cryptography', + 'pyyaml', + ], # Each dependency group in extras_require should match a provider name # When adding a new depenency group here, please ensure that it has been @@ -94,6 +100,9 @@ 'transip': ['transip>=0.3.0'], 'plesk': ['xmltodict'], 'henet': ['beautifulsoup4'], + 'hetzner': ['dnspython>=1.15.0','beautifulsoup4'], + 'easyname': ['beautifulsoup4'], + 'localzone': ['localzone'], }, # To provide executable scripts, use entry points in preference to the @@ -101,7 +110,7 @@ # pip to create the appropriate form of executable for the target platform. entry_points={ 'console_scripts': [ - 'lexicon=lexicon.__main__:main', + 'lexicon=lexicon.cli:main', ], }, test_suite='tests' diff -Nru lexicon-2.7.12/test-requirements.txt lexicon-3.0.8/test-requirements.txt --- lexicon-2.7.12/test-requirements.txt 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/test-requirements.txt 2019-01-03 16:26:53.000000000 +0000 @@ -11,4 +11,4 @@ pytest-xdist==1.23.0 python-coveralls==2.9.1 vcrpy==1.13.0 -mock==2.0.0 \ No newline at end of file +mock==2.0.0 diff -Nru lexicon-2.7.12/tests/common/test_options_handler.py lexicon-3.0.8/tests/common/test_options_handler.py --- lexicon-2.7.12/tests/common/test_options_handler.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/common/test_options_handler.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -from lexicon.common.options_handler import * - -def test_env_auth_options_reads_only_specified_env(monkeypatch): - monkeypatch.setenv('LEXICON_FOO_USERNAME','test_username') - env_auth_options('foo')['auth_username'] == 'test_username' - - -def test_SafeOptions_update_shouldnt_override_when_None(): - options = SafeOptions() - options['test'] = 'test' - assert options['test'] == 'test' - options.update({'test':None}) - assert options['test'] == 'test' - -def test_SafeOptions_update_should_handle_empty_update(): - options = SafeOptions() - options['test'] = 'test' - assert options['test'] == 'test' - options.update({}) - assert options['test'] == 'test' - -def test_OptionsWithFallback_returns_none_when_no_fallbackFn_set(): - options = SafeOptionsWithFallback() - assert options['test'] == None - -def test_OptionsWithFallback_with_only_data_should_return(): - options = SafeOptionsWithFallback({'foo': 'bar'}) - assert options['test'] == None - assert options['foo'] == 'bar' - - -def test_OptionsWithFallback_returns_placeholder_when_fallbackFn_set(): - options = SafeOptionsWithFallback({}, lambda x: 'placeholder_' + x) - options['exists'] = 'test_value' - assert options['test_key1'] == 'placeholder_test_key1' - assert options.get('test_key2') == 'placeholder_test_key2' - assert options['exists'] == 'test_value' - assert options.get('exists') == 'test_value' - - -def test_OptionsWithFallback_chain(monkeypatch): - base_options = SafeOptionsWithFallback({}, lambda x: 'placeholder_' + x) - base_options['test1'] = 'base' - base_options['test2'] = 'base' - base_options['test3'] = 'base' - base_options['auth_test3'] = 'base' - base_options['auth_test4'] = 'base' - - provider_options = SafeOptions() - provider_options['test2'] = 'provider' - provider_options['test3'] = 'provider' - provider_options['auth_test3'] = 'provider' - provider_options['auth_test4'] = 'provider' - - - monkeypatch.setenv('LEXICON_FOO_TEST3','env') - monkeypatch.setenv('LEXICON_FOO_TEST4','env') - env_options = env_auth_options('foo') - - cli_options = SafeOptions() - cli_options['auth_test4'] = 'cli' - - - #merge them together - base_options.update(provider_options) - base_options.update(env_options) - base_options.update(cli_options) - - - assert base_options['test0'] == 'placeholder_test0' - assert base_options['test1'] == 'base' - assert base_options['test2'] == 'provider' - assert base_options['test3'] == 'provider' - assert base_options['auth_test3'] == 'env' - assert base_options['auth_test4'] == 'cli' diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,127 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=d10bb960a1de50aa06895fe5cd59b087 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_authenticate.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,127 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=7f58405d81c2b8f82ffa618b8b2d28a1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=ffd0fa19a5334a2ce9020cc580778947 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=cc152545ce1f3fbac803568e8d267407 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=643bd0e60bee8e4a251458605130bb29 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:38 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:38 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:39 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:39 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:40 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=c57ed336b6d6d5166400029b4ec53dac + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:41 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:42 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:42 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:43 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:43 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=fd62220d72834c0885474f17de64ca1e + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:44 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:45 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:45 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:46 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:47 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=cfd951882ad685bc0ef1836d78643e7a + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:48 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:48 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:49 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:50 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:50 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=e7641d64b6922bdd4ef78155f4d9ea65 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:51 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:52 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:52 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:53 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,2948 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:54 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=4b4197551a5a16377269a353da1429c1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:55 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:56 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:56 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810196110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:57 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken&name=delete.testfilt&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['93'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:06:58 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfilt.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49202'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:58 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfilt.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48540'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:58 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159484 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:06:59 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:06:59 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:00 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,2948 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:01 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=16247ecef4cef0f7fecbd078ed1f53a2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:02 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:02 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:03 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230110800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:04 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken&name=delete.testfqdn&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['93'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:05 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230210800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49202'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:05 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230210800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48540'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:06 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159485 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:06 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230210800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:07 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230210800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:07 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,2948 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:08 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=a55f096acc214069675ef7c835928b1b + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:09 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:10 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:10 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230210800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:11 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken&name=delete.testfull&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['93'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:12 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230310800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfull.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49202'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:12 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230310800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testfull.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48540'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:13 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159486 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:13 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230310800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:13 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230310800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:14 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,2948 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:15 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=a228ae0a793fdc624e35336823be3f65 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:16 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:16 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:17 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230310800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:18 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken&name=delete.testid&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['91'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:18 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230410800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testid.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49200'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:19 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230410800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
delete.testid.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48538'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:19 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159488 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:20 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230410800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:20 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230410800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:21 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,2948 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:22 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=b670f657185bb6505ccd63452365bd5d + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:22 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230410800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken1&name=_acme-challenge.deleterecordinset&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['112'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230510800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49221'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230510800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48559'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159491 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230510800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230510800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,4729 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=0436c0a97d35222802cbd1861d4b85f3 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230510800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken1&name=_acme-challenge.deleterecordset&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['110'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=507'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230610800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49219'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=506'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230610800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48557'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=505'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode content=challengetoken2&name=_acme-challenge.deleterecordset&prio=10&ttl=3600&action=save&commit=&type=TXT&id= + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['110'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/domains/settings/form.php?domain=452641 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=504'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['50414'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=503'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49752'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=502'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159492 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=501'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['49219'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=500'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/delete_record.php?domain=452641&confirm=1&id=5159493 + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=UTF-8] + date: ['Tue, 23 Oct 2018 11:07:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=499'] + location: ['/domains/settings/dns.php?domain=452641'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['48024'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=498'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=497'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:38 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=fd0c08be501ba6b006d9d76318e6dc75 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:39 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:39 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:40 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:41 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:42 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=fbc77c938fc7fce3368836e624727e95 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:43 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:43 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:44 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:44 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:45 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=0a878fea7aa1f75cf6df0ec23b8b5107 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:46 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:47 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:47 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:48 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:49 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=8ca2d0e349a16bf48e055ae43251b074 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:49 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:50 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:50 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:51 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:52 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=a56410049ee92684f4cf853c3ddf3b2e + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:53 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:53 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:54 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:54 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:55 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=a1af9334bb7fbb724312b22d28241639 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:56 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:57 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:57 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:58 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:58 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=0d477f00acb155e70f5c99d89af96975 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:07:59 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:00 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:00 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:01 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:05 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=486d0b8f81411b873b7e22b8a9af84be + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:06 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:06 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:07 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:08 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:02 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=69b928bcf0cf0df9f67247bbddd5b99e + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:03 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:03 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:04 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:04 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:08 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=7478c76804fe97d3e0f20ef20f9ade96 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:09 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:10 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:10 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:11 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/easyname/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,674 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/en/login + response: + body: {string: "
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\_\n\n
"} + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['96691'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:11 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=512'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode submit=&loginxtoken=80cf9fcffca81f01e043fa9aecc27a0c + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['154'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://my.easyname.com/en/login + response: + body: {string: !!python/unicode } + headers: + cache-control: [nocache] + connection: [Keep-Alive] + content-length: ['0'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:12 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=511'] + location: ['https://my.easyname.com/hosting/view-user.php'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/hosting/view-user.php + response: + body: {string: !!python/unicode } + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['16114'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:13 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=510'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains + response: + body: {string: !!python/unicode '
lexicontest.astzweig.de
Subdomains + |Email + |DNSExternal domain
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['28409'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:13 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=509'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: https://my.easyname.com/domains/settings/dns.php?domain=452641 + response: + body: {string: !!python/unicode ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeContentPriorityTTLOptions
lexicontest.astzweig.de SOAns1.easyname.eu hostmaster@easyname.eu 201810230710800
lexicontest.astzweig.de NSns1.easyname.eu3600
lexicontest.astzweig.de NSns2.easyname.eu3600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.createrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.deleterecordinset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.fqdn.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.full.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken1103600
_acme-challenge.listrecordset.lexicontest.astzweig.de TXTchallengetoken2103600
_acme-challenge.noop.lexicontest.astzweig.de TXTchallengetoken103600
_acme-challenge.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.nameonly.test.lexicontest.astzweig.de TXTupdated103600
orig.test.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
orig.testfull.lexicontest.astzweig.de TXTchallengetoken103600
random.fqdntest.lexicontest.astzweig.de TXTchallengetoken103600
random.fulltest.lexicontest.astzweig.de TXTchallengetoken103600
random.test.lexicontest.astzweig.de TXTchallengetoken103600
ttl.fqdn.lexicontest.astzweig.de TXTttlshouldbe3600103600
updated.test.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfqdn.lexicontest.astzweig.de TXTchallengetoken103600
updated.testfull.lexicontest.astzweig.de TXTchallengetoken103600
*.lexicontest.astzweig.de A185.51.8.523600
docs.lexicontest.astzweig.de CNAMEdocs.example.com103600
lexicontest.astzweig.de A185.51.8.523600
localhost.lexicontest.astzweig.de A127.0.0.1103600
www.lexicontest.astzweig.de A185.51.8.523600
'} + headers: + cache-control: ['no-store, no-cache, must-revalidate'] + connection: [Keep-Alive] + content-length: ['47362'] + content-type: [text/html; charset=utf-8] + date: ['Tue, 23 Oct 2018 11:08:14 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + keep-alive: ['timeout=3, max=508'] + pragma: [no-cache] + server: [Apache] + strict-transport-security: [max-age=2592000] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,328 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_authenticate.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,273 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,613 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:52 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10355'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:52 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,681 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10357'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121000+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0Adocs+3600+IN+CNAME+docs.example.com%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['544'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10257'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:56 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:56 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6619'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,682 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10409'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121001+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['600'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\ + \n\ + \n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10315'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,684 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10476'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121002+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['657'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10376'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,685 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\ + \n\ + \n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10539'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121003+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['713'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10437'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1099 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6790'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10606'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121004+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['781'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10508'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10683'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121005+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['849'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10579'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1379 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:16 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10759'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121006+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['905'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:16 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10640'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1454 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6790'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10825'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121007+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfilt+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['956'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10695'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10886'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121008+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['903'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10641'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:28 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:28 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:28 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1454 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:29 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10825'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121009+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['956'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10696'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10887'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121010+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['905'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10640'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10823'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1454 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:37 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121011+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['956'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10695'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10887'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121012+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['905'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10641'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10823'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1800 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121013+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testid+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['954'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:49 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10694'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:51 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:52 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10888'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:53 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10888'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121014+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['905'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:54 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10639'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6619'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:55 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:56 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:56 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6619'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1877 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:34:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10824'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121015+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['974'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10714'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10902'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121016+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1043'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10788'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10983'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121017+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['975'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10715'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10904'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1882 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10902'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121018+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1042'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10786'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10979'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121019+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1110'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:16 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10857'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11057'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121020+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['975'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10713'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10902'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1040 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10904'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121021+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1020'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10764'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10967'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1467 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10967'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121022+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1086'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10832'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11043'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121023+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1152'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:37 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10904'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11118'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1047 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6619'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11116'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121024+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1202'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['10958'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11180'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1049 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6790'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:48 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11180'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121025+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1253'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:57 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11012'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:58 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:35:59 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11242'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:00 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,623 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:01 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:02 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11243'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:03 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1051 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:04 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:05 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11243'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121026+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1300'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:06 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11063'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:07 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:08 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11305'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:09 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,624 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:10 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:11 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11307'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:12 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1134 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:22 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:23 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:24 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11369'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121029+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1403'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:25 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11173'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:26 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11431'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121030+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1395'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:27 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11168'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:28 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:28 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1484 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:13 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:14 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11306'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121027+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1346'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\ + \n\ + \n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:15 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11114'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:16 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:16 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:17 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11369'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:18 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:19 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11369'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121028+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1349'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\ + \n\ + \n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:20 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11117'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:21 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1489 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:29 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:30 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6790'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:31 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:32 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11425'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121031+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aorig.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1445'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11221'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:33 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6790'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:34 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11488'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:35 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:36 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:37 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11488'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121032+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1448'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:37 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11224'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:38 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/KonsoleH-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1494 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:39 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?page=1 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:40 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n\ +

\n\n\ +

\n
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:41 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11489'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121033+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0Aorig.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1497'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11276'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:42 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6791'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['240'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:43 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11552'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:44 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6620'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\ + \n\n\n\ + \n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n
Welchen Zugang m\xF6chten Sie\ + \ nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826\ +
Webmail-
zugang
\_
Login
Passwort
\_
\_\ +
Passwort vergessen?
\n\ +
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: ['Upgrade, Keep-Alive'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Pragma: [no-cache] + Server: [Apache] + Upgrade: [h2] + Vary: [Accept-Encoding] + content-length: ['6792'] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['241'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/login.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://konsoleh.your-server.de/'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/ + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6148'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?domain_number=D1279684218 + response: + body: {string: "
\n
\nDomain suchen:\n\n\n\n\n\n\nIn K\xFCndigung\n\n\ + \n\n\_\n
\n\ +
\n\n
\n

Herzlich Willkommen bei der Hetzner Online GmbH. F\xFCr neue\ + \ Bestellungen klicken Sie bitte auf Neue Bestellung

\ + \

Domains (1)

bettilaila.com
Domainregistrierung
\n\ +
\n

\nStatus:\n\ + \_\uE800\_\_\ + Fertiggestellt\_|\n \_\_\uE802\_\_In Bearbeitung\_|\n \_\_\uE803\_\_\ + In K\xFCndigung\_|\n \_\_\uE801\_\_Gesperrt|\n \_\_\uE804\_\_\ + Gek\xFCndigt

\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['9705'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/dns.php?dnsaction2=editintextarea + response: + body: {string: "
Bitte beachten Sie,\ + \ dass es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso\ + \ sollten Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw.\ + \ Ihrer E-Mail-Konten negativ\n beeintr\xE4\ + chtigen k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n\ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\ + \n

\n\ +
\n
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:45 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11552'] + status: {code: 200, message: OK} +- request: + body: dnsaction2=zonereplace&domain_to_use=bettilaila.com&zone_file1=%40+7200+IN+SOA+ns1.your-server.de.+postmaster.your-server.de.+2018121034+86400+10800+3600000+86400%0A%40+7200+IN+NS+ns3.second-ns.de.%0A%40+7200+IN+NS+ns.second-ns.com.%0A%40+7200+IN+NS+ns1.your-server.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+7200+IN+A+127.0.0.1%0Aloopback+7200+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1500'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://konsoleh.your-server.de/dns.php + response: + body: {string: "
Das DNS-Zonefile wurde\ + \ erfolgreich ersetzt
Bitte beachten Sie, dass\ + \ es bis zu 24 Stunden dauern kann, bis die \xC4nderungen f\xFCr\n \ + \ Sie wirksam werden.

\nEbenso sollten\ + \ Sie in Betracht ziehen, dass fehlerhafte \xC4nderungen der\n \ + \ DNS-Eintr\xE4ge den Betrieb Ihrer Webseite bzw. Ihrer\ + \ E-Mail-Konten negativ\n beeintr\xE4chtigen\ + \ k\xF6nnen. Wir \xFCbernehmen f\xFCr evtl. entstandene Sch\xE4den\n \ + \ keine Haftung.

\n \ + \ Falls Sie f\xFCr die Domain andere DNS-Server verwenden\ + \ m\xF6chten, ist es zwingend\n notwendig ein\ + \ Update der Domain beim Registrar durchzuf\xFChren.\n \ + \ Die \xC4nderung der DNS-Servernamen hier im Zonefile\ + \ reicht\n daf\xFCr nicht aus!

DNS:\ + \ bettilaila.com

\n
\n
\n
\n\n\n Normale Ansicht\nErweiterte Ansicht\n\ + Record hinzuf\xFCgen\n \_\_|\_\_\ + \n \n\n\n
\n
\n\ +
\n\n\n
\n\n\n\n
\n

\n\n

\n
\n\ +
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:46 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['11279'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/logout.php + response: + body: {string: None} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=94'] + Location: ['https://konsoleh.your-server.de/?err=logout'] + Pragma: [no-cache] + Server: [Apache] + status: {code: 302, message: Moved Temporarily} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://konsoleh.your-server.de/?err=logout + response: + body: {string: "
\n\n\n\"konsoleH\"\n
\"de\"\\_
Sie wurden abgemeldet.
\n
\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n
Welchen Zugang m\xF6chten Sie nutzen?
\_
\uE824
konsoleH
Kundenaccount
\uE825
konsoleH
Domainzugang
\uE826
Webmail-
zugang
\_
Login
Passwort
\_\ +
\_
Passwort vergessen?
\n
"} + headers: + Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:36:47 GMT'] + Expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + Keep-Alive: ['timeout=15, max=93'] + Pragma: [no-cache] + Server: [Apache] + Vary: [Accept-Encoding] + content-length: ['6621'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,617 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:38 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:38 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:39 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:39 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:39 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f34f9bc7142024fa0816970999a0dbe8'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f34f9bc7142024fa0816970999a0dbe8 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:39 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=fdf941f52b33e7f0d24563044ed1930a1380c403&state=f34f9bc7142024fa0816970999a0dbe8'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=fdf941f52b33e7f0d24563044ed1930a1380c403&state=f34f9bc7142024fa0816970999a0dbe8 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:40 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:40 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/2 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:41 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:41 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:41 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_authenticate.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,433 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:34 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:35 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:35 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:35 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a512b9523f5fe899d9dd2e6721fded2f'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a512b9523f5fe899d9dd2e6721fded2f + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:36 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=6eab00714ba5364b5d9aad3c4b52df332f68d27f&state=a512b9523f5fe899d9dd2e6721fded2f'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=6eab00714ba5364b5d9aad3c4b52df332f68d27f&state=a512b9523f5fe899d9dd2e6721fded2f + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:36 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:37 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:37 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:37 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,727 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:42 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:42 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:42 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:43 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:43 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a3117de75367e230d627a1f44e998e48'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a3117de75367e230d627a1f44e998e48 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:43 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=dc2bcd2eba5089e1310e8dfab284a6cacef3ec95&state=a3117de75367e230d627a1f44e998e48'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=dc2bcd2eba5089e1310e8dfab284a6cacef3ec95&state=a3117de75367e230d627a1f44e998e48 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:43 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:44 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:44 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:45 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:45 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:45 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:46 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:46 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:46 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3c57f9177f256415d2531244326f4f4d'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3c57f9177f256415d2531244326f4f4d + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:46 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b53a69a03330066f55624a68f36cbe30c1fc64e6&state=3c57f9177f256415d2531244326f4f4d'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b53a69a03330066f55624a68f36cbe30c1fc64e6&state=3c57f9177f256415d2531244326f4f4d + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:47 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n\ + \
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:47 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:47 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:47 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,748 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:48 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:48 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:49 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:49 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:49 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=5b635f70f9a304af22c85101d3ba4f49'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=5b635f70f9a304af22c85101d3ba4f49 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:50 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=60bb7046014ba00fa406fc04df030f903803803b&state=5b635f70f9a304af22c85101d3ba4f49'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=60bb7046014ba00fa406fc04df030f903803803b&state=5b635f70f9a304af22c85101d3ba4f49 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:50 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:50 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:51 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:51 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:52 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:52 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:12:52 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:53 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9296ccbf641d32ba6e5187b7d8e0e4cc'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9296ccbf641d32ba6e5187b7d8e0e4cc + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:12:53 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=247dc3f2a3d0529c10399083725fb595ad1769fd&state=9296ccbf641d32ba6e5187b7d8e0e4cc'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=247dc3f2a3d0529c10399083725fb595ad1769fd&state=9296ccbf641d32ba6e5187b7d8e0e4cc + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:53 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n\ + \
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:53 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121041+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0Adocs+3600+IN+CNAME+docs.example.com%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['388'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:12:54 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,749 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:23 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:23 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:23 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:24 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:24 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a6fd8d4b4eae07d9dd6c4edb6d7d494a'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a6fd8d4b4eae07d9dd6c4edb6d7d494a + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:13:24 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=55bca90c0460fdc41c80d90afef1adffd6ef8479&state=a6fd8d4b4eae07d9dd6c4edb6d7d494a'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=55bca90c0460fdc41c80d90afef1adffd6ef8479&state=a6fd8d4b4eae07d9dd6c4edb6d7d494a + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:24 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:25 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:25 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:25 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:26 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:26 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:26 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:26 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:27 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=df4082ed851477f32d6ca3568a937b4f'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=df4082ed851477f32d6ca3568a937b4f + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:13:27 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=31d1c40470ab908fb6bed23f4e30b653fcf36b08&state=df4082ed851477f32d6ca3568a937b4f'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=31d1c40470ab908fb6bed23f4e30b653fcf36b08&state=df4082ed851477f32d6ca3568a937b4f + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:27 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\ + \n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:28 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121042+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['444'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:28 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:57 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:57 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,750 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:58 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:58 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:58 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:13:58 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c64b53b8375c53ec11aa75988249af3b'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c64b53b8375c53ec11aa75988249af3b + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:13:59 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=8b40134b9b2c0121dbb8e382f273d403ef9c69e9&state=c64b53b8375c53ec11aa75988249af3b'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=8b40134b9b2c0121dbb8e382f273d403ef9c69e9&state=c64b53b8375c53ec11aa75988249af3b + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:13:59 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:00 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:01 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:01 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:01 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:02 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=35978422950d511d302eea7a91d2681d'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=35978422950d511d302eea7a91d2681d + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:14:02 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4f448224b330d1bf27aad81ba78f27eeeeb4934e&state=35978422950d511d302eea7a91d2681d'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4f448224b330d1bf27aad81ba78f27eeeeb4934e&state=35978422950d511d302eea7a91d2681d + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:03 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:03 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121043+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['500'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:03 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:32 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:32 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,751 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:33 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:33 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:33 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:33 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:34 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8ee4cb6309e2f4825c5546bf949fcac5'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8ee4cb6309e2f4825c5546bf949fcac5 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:14:34 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4cb6d2c85d1a5ad00d34cf5c1181efa9864489dc&state=8ee4cb6309e2f4825c5546bf949fcac5'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4cb6d2c85d1a5ad00d34cf5c1181efa9864489dc&state=8ee4cb6309e2f4825c5546bf949fcac5 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:34 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:35 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:35 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:36 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:36 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:36 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:14:37 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:37 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a02664670170819587ac2d6f06549f13'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a02664670170819587ac2d6f06549f13 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:14:37 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4e6ed1743a57e6a3b00b73d76e608b6979f43941&state=a02664670170819587ac2d6f06549f13'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4e6ed1743a57e6a3b00b73d76e608b6979f43941&state=a02664670170819587ac2d6f06549f13 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:38 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n \n\n
\n
\n* \n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:38 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121044+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['556'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:14:38 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1070 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:09 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:09 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:09 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:09 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:10 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3e273f9a5a96fb32c3d02dd32d714edc'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3e273f9a5a96fb32c3d02dd32d714edc + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:15:10 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=cdc78feadc5a3add7cfe4495ede5a6c2daf2a70f&state=3e273f9a5a96fb32c3d02dd32d714edc'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=cdc78feadc5a3add7cfe4495ede5a6c2daf2a70f&state=3e273f9a5a96fb32c3d02dd32d714edc + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:10 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:11 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:11 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:12 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:12 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:13 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:13 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:13 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=49b45f7421f94036e5e79a16c1b5ed67'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=49b45f7421f94036e5e79a16c1b5ed67 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:15:13 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=01b8b8365e06d9ee2f37445d1a20861cbd009b08&state=49b45f7421f94036e5e79a16c1b5ed67'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=01b8b8365e06d9ee2f37445d1a20861cbd009b08&state=49b45f7421f94036e5e79a16c1b5ed67 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:14 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:14 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121045+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['624'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:15 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:43 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:43 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:44 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:44 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:44 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:15:44 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:45 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=41885f9ab5f00d9b8a89e9aa3edf8857'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=41885f9ab5f00d9b8a89e9aa3edf8857 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:15:45 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=782349bd98a263cfce65f15bed7516fd8769f19e&state=41885f9ab5f00d9b8a89e9aa3edf8857'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=782349bd98a263cfce65f15bed7516fd8769f19e&state=41885f9ab5f00d9b8a89e9aa3edf8857 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:45 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:46 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121046+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['692'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:15:46 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:15 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:15 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1353 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:16 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:16 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:16 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:16 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:17 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=33326a72b48707a2a5cdd497426c7955'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=33326a72b48707a2a5cdd497426c7955 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:16:17 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=25bc4e04879ef92b657ecbdffbe80c3da697b60b&state=33326a72b48707a2a5cdd497426c7955'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=25bc4e04879ef92b657ecbdffbe80c3da697b60b&state=33326a72b48707a2a5cdd497426c7955 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:17 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:18 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:18 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:18 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:19 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:19 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:19 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:20 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=0bc69081eaeb22b758448855915665a7'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=0bc69081eaeb22b758448855915665a7 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:16:20 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=91c2d3fd6592e4126a9ab867c7f4d3f6966b9dc8&state=0bc69081eaeb22b758448855915665a7'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=91c2d3fd6592e4126a9ab867c7f4d3f6966b9dc8&state=0bc69081eaeb22b758448855915665a7 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:20 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:21 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121047+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['748'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:21 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:49 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:50 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:50 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:50 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:51 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:51 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c60fda86438a596e127c7f9f326149b6'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c60fda86438a596e127c7f9f326149b6 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:16:51 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=a7e1316a3fa23cbed6ad43e7b288d62a78413262&state=c60fda86438a596e127c7f9f326149b6'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=a7e1316a3fa23cbed6ad43e7b288d62a78413262&state=c60fda86438a596e127c7f9f326149b6 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:52 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:52 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:52 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:52 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:53 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:53 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:53 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:53 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:54 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=05b3f1b3b497beda8300a1ec6fdda24d'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=05b3f1b3b497beda8300a1ec6fdda24d + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:16:54 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=e0ece837a747045554dd22061643c88c307ee10f&state=05b3f1b3b497beda8300a1ec6fdda24d'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=e0ece837a747045554dd22061643c88c307ee10f&state=05b3f1b3b497beda8300a1ec6fdda24d + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:54 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:55 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:55 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:55 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1376 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:56 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:57 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:57 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:57 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:58 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=0b5a385f247aea2783615532defda2e1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=0b5a385f247aea2783615532defda2e1 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:16:58 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=02f8b17215e223fe89b293358279bcef91017cf5&state=0b5a385f247aea2783615532defda2e1'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=02f8b17215e223fe89b293358279bcef91017cf5&state=0b5a385f247aea2783615532defda2e1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:58 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:58 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:16:59 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:16:59 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:01 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b5b30b085abfe9de003077e82ff77e4d'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b5b30b085abfe9de003077e82ff77e4d + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:17:01 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b441319b1132f8ca4568f2f50a16af1af3516d15&state=b5b30b085abfe9de003077e82ff77e4d'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b441319b1132f8ca4568f2f50a16af1af3516d15&state=b5b30b085abfe9de003077e82ff77e4d + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:01 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:02 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121048+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfilt+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['799'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:02 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:30 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:31 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:31 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:32 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:32 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:17:32 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:33 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1a5de451369e2a8d6c5619b82bc8eda5'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1a5de451369e2a8d6c5619b82bc8eda5 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:17:33 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=272a9ae9e759b6f6c5b978e753046d79aa2842bd&state=1a5de451369e2a8d6c5619b82bc8eda5'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=272a9ae9e759b6f6c5b978e753046d79aa2842bd&state=1a5de451369e2a8d6c5619b82bc8eda5 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:33 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:33 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121049+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['748'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:17:34 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:03 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:03 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:03 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:04 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:04 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f9c18f7f8eba5ff529f6f234c9c22544'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f9c18f7f8eba5ff529f6f234c9c22544 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:18:04 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=9e77fba7d792cc0896aeced580c8e3fcd4ffb20a&state=f9c18f7f8eba5ff529f6f234c9c22544'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=9e77fba7d792cc0896aeced580c8e3fcd4ffb20a&state=f9c18f7f8eba5ff529f6f234c9c22544 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:04 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:05 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:05 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:05 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1376 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:06 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:07 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:07 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:07 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:08 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=70b8c88b16564eba6f6af3a87832de50'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=70b8c88b16564eba6f6af3a87832de50 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:18:08 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=1698d470608568ba59f12597ba6abe4107dc76ca&state=70b8c88b16564eba6f6af3a87832de50'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=1698d470608568ba59f12597ba6abe4107dc76ca&state=70b8c88b16564eba6f6af3a87832de50 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:08 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:08 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:09 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:09 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:09 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:10 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:10 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:10 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:11 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=50a42fa494683a2a33a83507213a04c6'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=50a42fa494683a2a33a83507213a04c6 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:18:11 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=738284930b84dbef9a5c928d428f1366a735ae79&state=50a42fa494683a2a33a83507213a04c6'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=738284930b84dbef9a5c928d428f1366a735ae79&state=50a42fa494683a2a33a83507213a04c6 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:11 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:11 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121050+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['799'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:12 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:41 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:41 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:41 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:18:42 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:42 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8baa5ba5b1e6e5c1c2da68e48c2eb279'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8baa5ba5b1e6e5c1c2da68e48c2eb279 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:18:42 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=6310eb5aa6d51897c3e4fab0ea562f5a49b86735&state=8baa5ba5b1e6e5c1c2da68e48c2eb279'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=6310eb5aa6d51897c3e4fab0ea562f5a49b86735&state=8baa5ba5b1e6e5c1c2da68e48c2eb279 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:42 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:43 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121051+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['748'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:18:43 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:13 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:13 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:13 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:14 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ff538b9a10da53c8a75d046650196899'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ff538b9a10da53c8a75d046650196899 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:19:14 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4c08a68f9df22a1813e3110118057220fe03e03d&state=ff538b9a10da53c8a75d046650196899'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4c08a68f9df22a1813e3110118057220fe03e03d&state=ff538b9a10da53c8a75d046650196899 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:14 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:15 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:15 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:15 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1376 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:16 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:16 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:17 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:17 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:18 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=79744542652723e83e9afd48aab67c55'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=79744542652723e83e9afd48aab67c55 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:19:18 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=f9f47f1412a122d1825cf069c625926764f64d20&state=79744542652723e83e9afd48aab67c55'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=f9f47f1412a122d1825cf069c625926764f64d20&state=79744542652723e83e9afd48aab67c55 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:18 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:19 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:19 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:19 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:20 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:20 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:20 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:21 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=846afdb57d704a0227fb3a4915b0e477'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=846afdb57d704a0227fb3a4915b0e477 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:19:21 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=aa646852325a4a3b81c52db3cc0a0ee36edf6f30&state=846afdb57d704a0227fb3a4915b0e477'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=aa646852325a4a3b81c52db3cc0a0ee36edf6f30&state=846afdb57d704a0227fb3a4915b0e477 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:21 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:21 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121052+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['799'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:22 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:50 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:51 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:52 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:19:52 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:52 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=aa097cb5ae10f025a9b18a585f1184a8'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=aa097cb5ae10f025a9b18a585f1184a8 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:19:53 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=0af0d39952614d2aacd0efd4ec235213012bdb53&state=aa097cb5ae10f025a9b18a585f1184a8'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=0af0d39952614d2aacd0efd4ec235213012bdb53&state=aa097cb5ae10f025a9b18a585f1184a8 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:53 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:53 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121053+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['748'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:19:54 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:23 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:23 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:23 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:23 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:24 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2d2f98df03b6ed697f533a803702efc6'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2d2f98df03b6ed697f533a803702efc6 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:20:24 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=741776311834bb7e1359d5e49555c3ece7c94efe&state=2d2f98df03b6ed697f533a803702efc6'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=741776311834bb7e1359d5e49555c3ece7c94efe&state=2d2f98df03b6ed697f533a803702efc6 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:24 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:25 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:25 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:25 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1677 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:26 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:27 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:27 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:27 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:28 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b38de98afa2f0b55e067a18770da4973'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b38de98afa2f0b55e067a18770da4973 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:20:28 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=7d62d1f2ccef20e64f5b707e872a40dd0ad8e268&state=b38de98afa2f0b55e067a18770da4973'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=7d62d1f2ccef20e64f5b707e872a40dd0ad8e268&state=b38de98afa2f0b55e067a18770da4973 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:28 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:28 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:29 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:29 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:29 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:30 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:20:30 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:32 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9a3b326078efda156a5183b34f4884b5'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9a3b326078efda156a5183b34f4884b5 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:20:32 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=7bb62a5392e6d669efc1467803c79dae9c60a831&state=9a3b326078efda156a5183b34f4884b5'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=7bb62a5392e6d669efc1467803c79dae9c60a831&state=9a3b326078efda156a5183b34f4884b5 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:32 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:32 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121054+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Adelete.testid+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['797'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:20:33 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:01 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:03 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:03 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:03 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:03 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:04 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8dc28f19763c700b071867bb0eb0604e'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=8dc28f19763c700b071867bb0eb0604e + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:21:04 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=d4167963e80cd339fc554b4291c4dbd01c0890f7&state=8dc28f19763c700b071867bb0eb0604e'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=d4167963e80cd339fc554b4291c4dbd01c0890f7&state=8dc28f19763c700b071867bb0eb0604e + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:04 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:05 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:05 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:05 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:05 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:06 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:06 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:06 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=674284a74e9eeab2eaf4b611c6c97f4f'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=674284a74e9eeab2eaf4b611c6c97f4f + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:21:07 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=3b2e490c2bd659d4f9725ae86a04652e3f0066b7&state=674284a74e9eeab2eaf4b611c6c97f4f'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=3b2e490c2bd659d4f9725ae86a04652e3f0066b7&state=674284a74e9eeab2eaf4b611c6c97f4f + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:07 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:08 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121055+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['748'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:08 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:37 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:37 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:38 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:38 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:38 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:39 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=143bc8ff94ddc12345c67ec10ca78ebc'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=143bc8ff94ddc12345c67ec10ca78ebc + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:21:39 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=7a0f7977b680c5367ddfc5fc3678f75ba30bd110&state=143bc8ff94ddc12345c67ec10ca78ebc'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=7a0f7977b680c5367ddfc5fc3678f75ba30bd110&state=143bc8ff94ddc12345c67ec10ca78ebc + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:39 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:40 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:40 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:40 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1700 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:42 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:42 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:43 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:43 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:43 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d3d91ae88f4203d4eb563475790926f9'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d3d91ae88f4203d4eb563475790926f9 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:21:44 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=a784aec2198d26f07e08a3eb8f3bb4763c671322&state=d3d91ae88f4203d4eb563475790926f9'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=a784aec2198d26f07e08a3eb8f3bb4763c671322&state=d3d91ae88f4203d4eb563475790926f9 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:44 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:44 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:45 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:45 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:45 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:46 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:46 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:21:46 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:47 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d18db4955a7f616a93250c56987e61c8'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d18db4955a7f616a93250c56987e61c8 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:21:47 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=64f388bf839c0e89796d6dc209cd5c298713ad54&state=d18db4955a7f616a93250c56987e61c8'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=64f388bf839c0e89796d6dc209cd5c298713ad54&state=d18db4955a7f616a93250c56987e61c8 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:47 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:47 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121056+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['818'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:21:48 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:16 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:17 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:17 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:17 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:18 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:18 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:18 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=dc5082d9b4fedf58e34e7f4301d72336'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=dc5082d9b4fedf58e34e7f4301d72336 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:22:19 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=9172bdb89adcaf3b8429e3ef8901287d16adf13f&state=dc5082d9b4fedf58e34e7f4301d72336'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=9172bdb89adcaf3b8429e3ef8901287d16adf13f&state=dc5082d9b4fedf58e34e7f4301d72336 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:19 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:19 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121057+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['888'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:20 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:48 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:48 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:49 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:49 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:50 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:22:50 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:50 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ae00a0398d09b1d7c8ff5573024ac9e1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ae00a0398d09b1d7c8ff5573024ac9e1 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:22:51 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4827619f69893225e6f54d63320b63d2010728c2&state=ae00a0398d09b1d7c8ff5573024ac9e1'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4827619f69893225e6f54d63320b63d2010728c2&state=ae00a0398d09b1d7c8ff5573024ac9e1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:51 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:51 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121058+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['818'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:22:52 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:20 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:20 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:21 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:21 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:21 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:21 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b1ee782ca397d05ad369e039263e6b7b'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b1ee782ca397d05ad369e039263e6b7b + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:23:22 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=59c9310f48089bf10270cd693b9d38571c6ac206&state=b1ee782ca397d05ad369e039263e6b7b'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=59c9310f48089bf10270cd693b9d38571c6ac206&state=b1ee782ca397d05ad369e039263e6b7b + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:22 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:23 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:23 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:24 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1703 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:25 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:25 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:25 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:25 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:26 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3e8b76bef8fbeb2e79a91d2bc2e57dda'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=3e8b76bef8fbeb2e79a91d2bc2e57dda + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:23:26 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=0993cea3fa4270351c58e69660e125e2da9504ab&state=3e8b76bef8fbeb2e79a91d2bc2e57dda'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=0993cea3fa4270351c58e69660e125e2da9504ab&state=3e8b76bef8fbeb2e79a91d2bc2e57dda + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:26 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:27 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:27 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:27 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:28 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:28 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:28 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:29 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=604d6fe90d30c370b0182ca7ecdf6847'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=604d6fe90d30c370b0182ca7ecdf6847 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:23:29 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b473b587d81d563879f2a155b666f667a03025b2&state=604d6fe90d30c370b0182ca7ecdf6847'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b473b587d81d563879f2a155b666f667a03025b2&state=604d6fe90d30c370b0182ca7ecdf6847 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:29 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:30 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121059+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken1%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['886'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:30 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:23:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:23:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:01 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a725cfa4abdee84914aafd176ecd9566'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a725cfa4abdee84914aafd176ecd9566 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:24:01 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b780983006423377535c41dd0cb26a3ac9bb5639&state=a725cfa4abdee84914aafd176ecd9566'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b780983006423377535c41dd0cb26a3ac9bb5639&state=a725cfa4abdee84914aafd176ecd9566 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:01 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:01 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121060+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['954'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:02 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:30 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:30 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:31 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:31 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:31 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:24:31 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:32 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c04a8b94b1f53c3f193b2b9f9cffd748'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c04a8b94b1f53c3f193b2b9f9cffd748 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:24:32 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=f89a6782f462095c5d0ed2f03aba91bbc2b70ac4&state=c04a8b94b1f53c3f193b2b9f9cffd748'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=f89a6782f462095c5d0ed2f03aba91bbc2b70ac4&state=c04a8b94b1f53c3f193b2b9f9cffd748 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:32 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:33 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121061+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['818'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:24:33 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:02 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:03 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:03 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:03 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1c5a0cba6d6328564d7e7322771f321c'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1c5a0cba6d6328564d7e7322771f321c + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:03 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=6ca6361cf470c3a4b8237ee657c8e064fcafda95&state=1c5a0cba6d6328564d7e7322771f321c'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=6ca6361cf470c3a4b8237ee657c8e064fcafda95&state=1c5a0cba6d6328564d7e7322771f321c + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:04 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:04 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:04 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:04 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1057 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:06 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:06 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:06 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:06 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a329473bc2c9c9472c170ab489a634f4'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a329473bc2c9c9472c170ab489a634f4 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:07 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=7ac4a5f6575d936bdbf53939c21d5067108c3810&state=a329473bc2c9c9472c170ab489a634f4'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=7ac4a5f6575d936bdbf53939c21d5067108c3810&state=a329473bc2c9c9472c170ab489a634f4 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:07 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:08 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:08 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:08 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:09 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:09 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:09 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:09 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:10 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9a363e4f09c882a7f141b312f214fe7c'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9a363e4f09c882a7f141b312f214fe7c + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:10 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=94a0681fac47127b93b8d01a79ee113e840554b5&state=9a363e4f09c882a7f141b312f214fe7c'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=94a0681fac47127b93b8d01a79ee113e840554b5&state=9a363e4f09c882a7f141b312f214fe7c + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:11 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:11 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121062+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['863'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:11 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:41 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:41 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:41 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:42 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:42 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1b22fe36a11a2a0f282260ea10dc4814'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1b22fe36a11a2a0f282260ea10dc4814 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:43 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=62fd6f2ca887e10b1300762995b74e36b01ea2f0&state=1b22fe36a11a2a0f282260ea10dc4814'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=62fd6f2ca887e10b1300762995b74e36b01ea2f0&state=1b22fe36a11a2a0f282260ea10dc4814 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:43 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:43 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:43 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:44 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1382 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:45 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:45 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:45 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:45 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:46 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2f5ce90516368173eec424dbcb376018'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2f5ce90516368173eec424dbcb376018 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:46 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4db4d5f0f4bb1a1534a126d36e0ce7b888180773&state=2f5ce90516368173eec424dbcb376018'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4db4d5f0f4bb1a1534a126d36e0ce7b888180773&state=2f5ce90516368173eec424dbcb376018 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:46 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:47 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:47 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:47 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:48 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:48 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:48 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:25:48 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:49 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=6d5014dc3a14abcfd4d6e8e29c5ab8ec'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=6d5014dc3a14abcfd4d6e8e29c5ab8ec + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:25:49 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=a9b2a8713b1fb3f5734a22f09adc1a78bb4a02d7&state=6d5014dc3a14abcfd4d6e8e29c5ab8ec'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=a9b2a8713b1fb3f5734a22f09adc1a78bb4a02d7&state=6d5014dc3a14abcfd4d6e8e29c5ab8ec + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:49 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:50 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121063+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['929'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:25:50 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:20 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:20 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:20 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:21 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=e996c95390c517da38f1bde115e4e2ee'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=e996c95390c517da38f1bde115e4e2ee + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:26:21 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=e1b91367f7e222f4e0041d30d50944f7f6822f70&state=e996c95390c517da38f1bde115e4e2ee'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=e1b91367f7e222f4e0041d30d50944f7f6822f70&state=e996c95390c517da38f1bde115e4e2ee + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:21 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:22 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121064+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['995'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:22 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:51 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:52 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:52 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:52 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:53 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d37b5f010e10f3074fbe050a13d4bead'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d37b5f010e10f3074fbe050a13d4bead + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:26:53 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=dd47df0a80281c9bf535b5537b7bb9b062f0ead0&state=d37b5f010e10f3074fbe050a13d4bead'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=dd47df0a80281c9bf535b5537b7bb9b062f0ead0&state=d37b5f010e10f3074fbe050a13d4bead + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:53 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:53 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:54 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:54 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1061 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:55 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:55 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:55 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:56 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:56 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b405a7b2c4228990bf1bcc52c94eed51'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b405a7b2c4228990bf1bcc52c94eed51 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:26:56 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=cfa7a2fbc0b1d8912a215062b22eb925cfa9fcee&state=b405a7b2c4228990bf1bcc52c94eed51'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=cfa7a2fbc0b1d8912a215062b22eb925cfa9fcee&state=b405a7b2c4228990bf1bcc52c94eed51 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:57 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:57 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:26:58 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:58 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:58 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:58 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:59 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:26:59 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ae2794b5511d4d20ee77e952b05d088a'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ae2794b5511d4d20ee77e952b05d088a + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:27:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=9fe9f9d889755d021c2a494a62b71551240e0ae8&state=ae2794b5511d4d20ee77e952b05d088a'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=9fe9f9d889755d021c2a494a62b71551240e0ae8&state=ae2794b5511d4d20ee77e952b05d088a + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121065+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1046'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:01 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:30 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:30 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:30 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:30 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:31 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=941ee3622a4416067c0d1c3acc5c07f9'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=941ee3622a4416067c0d1c3acc5c07f9 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:27:31 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b67ee795619acbaf23084ebe143907c4fcb548e9&state=941ee3622a4416067c0d1c3acc5c07f9'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b67ee795619acbaf23084ebe143907c4fcb548e9&state=941ee3622a4416067c0d1c3acc5c07f9 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:31 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:32 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:32 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:32 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1063 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:33 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:33 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:34 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:34 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:34 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ba5852180b4142994d46fbc74b38ebbf'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=ba5852180b4142994d46fbc74b38ebbf + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:27:34 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=13362cdabdf9bbeef15f4fa0e51448ff8a0638e7&state=ba5852180b4142994d46fbc74b38ebbf'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=13362cdabdf9bbeef15f4fa0e51448ff8a0638e7&state=ba5852180b4142994d46fbc74b38ebbf + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:35 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:35 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:36 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:36 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:36 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:37 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:27:37 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:38 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c5ab47d3aa8729c46af4c9b8c683bd80'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c5ab47d3aa8729c46af4c9b8c683bd80 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:27:38 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=09f82d5c70eff89d33cbaf6a59f08ee009bb6e43&state=c5ab47d3aa8729c46af4c9b8c683bd80'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=09f82d5c70eff89d33cbaf6a59f08ee009bb6e43&state=c5ab47d3aa8729c46af4c9b8c683bd80 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:38 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:38 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121066+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1097'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:27:39 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:08 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:08 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:08 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:09 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:09 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=96061e63e0a21dc7864694bbb6273cd7'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=96061e63e0a21dc7864694bbb6273cd7 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:09 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=14b474689efb3cf692e557e815c184a3a1f0d2f9&state=96061e63e0a21dc7864694bbb6273cd7'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=14b474689efb3cf692e557e815c184a3a1f0d2f9&state=96061e63e0a21dc7864694bbb6273cd7 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:09 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:10 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:10 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:10 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,738 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:11 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:11 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:12 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:12 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=7bd7cf4019e02844f65f226cdf34bd0e'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=7bd7cf4019e02844f65f226cdf34bd0e + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:12 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=21fe886fe95d1feea26fe6cfddf65096dffce517&state=7bd7cf4019e02844f65f226cdf34bd0e'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=21fe886fe95d1feea26fe6cfddf65096dffce517&state=7bd7cf4019e02844f65f226cdf34bd0e + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:13 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:13 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:14 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:14 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:14 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:15 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:15 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:15 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:16 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=00b34cc0727c851ae2997034737207ec'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=00b34cc0727c851ae2997034737207ec + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:16 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=df1d1452ff723f02f7677bc2f57f3dba196a7592&state=00b34cc0727c851ae2997034737207ec'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=df1d1452ff723f02f7677bc2f57f3dba196a7592&state=00b34cc0727c851ae2997034737207ec + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:16 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:16 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:17 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:17 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1064 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:18 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:18 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:18 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:18 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b30eea97ba4a2ba3ec6123e733be3a8c'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=b30eea97ba4a2ba3ec6123e733be3a8c + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:19 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=292ebdc67efcdc0b391ed897b977fc3102e5f9d0&state=b30eea97ba4a2ba3ec6123e733be3a8c'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=292ebdc67efcdc0b391ed897b977fc3102e5f9d0&state=b30eea97ba4a2ba3ec6123e733be3a8c + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:19 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:20 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:20 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:20 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:21 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:21 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:21 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:22 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:22 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fb103b0792b61c62e881898fee484332'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fb103b0792b61c62e881898fee484332 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:22 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=5bc39ceb45039c80191ccebf376beb05d22a2cba&state=fb103b0792b61c62e881898fee484332'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=5bc39ceb45039c80191ccebf376beb05d22a2cba&state=fb103b0792b61c62e881898fee484332 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:22 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:23 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121067+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1144'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:23 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:52 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:52 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:52 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:53 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:53 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:53 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:54 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1f6b1d36b50c85c6eda0980599d0f05f'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1f6b1d36b50c85c6eda0980599d0f05f + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:54 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=490045f99468b7466a11b4752d5336891c03d1d1&state=1f6b1d36b50c85c6eda0980599d0f05f'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=490045f99468b7466a11b4752d5336891c03d1d1&state=1f6b1d36b50c85c6eda0980599d0f05f + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:54 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:55 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:55 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:55 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,738 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:56 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:56 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:56 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:57 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:57 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=df50066cf635ce54cf8e2b3de7176543'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=df50066cf635ce54cf8e2b3de7176543 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:28:57 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=f017b5068dc0e0241ed4d9a9e1b3aed73b8b41d0&state=df50066cf635ce54cf8e2b3de7176543'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=f017b5068dc0e0241ed4d9a9e1b3aed73b8b41d0&state=df50066cf635ce54cf8e2b3de7176543 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:58 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:58 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:28:59 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:59 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:28:59 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:00 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:00 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=5fbbb4856e5512e25d1d3cba492ce62d'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=5fbbb4856e5512e25d1d3cba492ce62d + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:29:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=5b3609d33e963ae42c2407bdcc59a260dcd53b50&state=5fbbb4856e5512e25d1d3cba492ce62d'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=5b3609d33e963ae42c2407bdcc59a260dcd53b50&state=5fbbb4856e5512e25d1d3cba492ce62d + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:01 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:01 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:01 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:02 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1088 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:12 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:13 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:13 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:13 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:14 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=dc31318f954898e47f4711ff4c2c5a71'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=dc31318f954898e47f4711ff4c2c5a71 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:30:14 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=cca4c1d4ab9c9000b18eb56e4a2fff3d4b50ee26&state=dc31318f954898e47f4711ff4c2c5a71'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=cca4c1d4ab9c9000b18eb56e4a2fff3d4b50ee26&state=dc31318f954898e47f4711ff4c2c5a71 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:14 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:15 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:15 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:15 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:16 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:16 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:16 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:16 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:17 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a3880107ce49d9cf75676b6aaeac0814'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=a3880107ce49d9cf75676b6aaeac0814 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:30:17 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=ced009777bd71fbeabadf2e28f3cee31c19253d1&state=a3880107ce49d9cf75676b6aaeac0814'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=ced009777bd71fbeabadf2e28f3cee31c19253d1&state=a3880107ce49d9cf75676b6aaeac0814 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:17 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:18 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121070+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1246'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:18 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:46 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:47 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:47 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:48 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:48 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:48 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:49 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9e3b38a6056f4cace69d0123844b9a68'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=9e3b38a6056f4cace69d0123844b9a68 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:30:49 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=ec4f4b301990c2698d4b273b5df093400101510d&state=9e3b38a6056f4cace69d0123844b9a68'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=ec4f4b301990c2698d4b273b5df093400101510d&state=9e3b38a6056f4cace69d0123844b9a68 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:49 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:50 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121071+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1239'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:50 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:18 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:19 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1392 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:02 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:03 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:03 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:03 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:04 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fdb42e8364a58b4a624c513c8f61a58c'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fdb42e8364a58b4a624c513c8f61a58c + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:29:04 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=bdc8ef3c6a2de2b92c1a1026ecef76244dd4841f&state=fdb42e8364a58b4a624c513c8f61a58c'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=bdc8ef3c6a2de2b92c1a1026ecef76244dd4841f&state=fdb42e8364a58b4a624c513c8f61a58c + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:04 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:04 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:05 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:05 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:05 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:06 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:06 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:06 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d47824c13f4c30182396edccd2a76601'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d47824c13f4c30182396edccd2a76601 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:29:07 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=6e987a0888dd2c686141a316382f622620b21ee5&state=d47824c13f4c30182396edccd2a76601'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=6e987a0888dd2c686141a316382f622620b21ee5&state=d47824c13f4c30182396edccd2a76601 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:07 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:07 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121068+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1189'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:08 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:37 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:37 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:37 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:38 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:38 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1c38670c51b0a6951378fb35b6e8e5c0'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=1c38670c51b0a6951378fb35b6e8e5c0 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:29:38 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=7ee6fdd06cc1993099fe1dfacfd3b94200a037e7&state=1c38670c51b0a6951378fb35b6e8e5c0'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=7ee6fdd06cc1993099fe1dfacfd3b94200a037e7&state=1c38670c51b0a6951378fb35b6e8e5c0 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:39 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:39 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:40 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:40 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:40 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:41 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:29:41 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:41 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2eba90f09503773ca9806f41e69f6316'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=2eba90f09503773ca9806f41e69f6316 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:29:42 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b4e904a50b7d49033bc6a75808163d5c2a76ba65&state=2eba90f09503773ca9806f41e69f6316'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b4e904a50b7d49033bc6a75808163d5c2a76ba65&state=2eba90f09503773ca9806f41e69f6316 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:42 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\ + \n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:42 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121069+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1192'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:29:43 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:30:11 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:30:11 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1398 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:20 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:20 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:20 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:20 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:21 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=36a7c72ec8bd68b22a3f9e1239171ff3'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=36a7c72ec8bd68b22a3f9e1239171ff3 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:31:21 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=78555923cdfacd6b38452150d29dfc057f2da87c&state=36a7c72ec8bd68b22a3f9e1239171ff3'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=78555923cdfacd6b38452150d29dfc057f2da87c&state=36a7c72ec8bd68b22a3f9e1239171ff3 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:21 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:22 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:22 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:23 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:23 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:23 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:24 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:24 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:24 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=42633cd37634cda354bcacec022512b4'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=42633cd37634cda354bcacec022512b4 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:31:25 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=4a1d020282021659ed1ad3e1b2bd446e8e641934&state=42633cd37634cda354bcacec022512b4'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=4a1d020282021659ed1ad3e1b2bd446e8e641934&state=42633cd37634cda354bcacec022512b4 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:25 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\ + \n
\n
\n* \n
\n
\n
\n\n
\n\ + \ \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n Preise\ + \ inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:25 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121072+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aorig.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1288'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:26 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:54 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:54 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:55 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:55 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:55 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:56 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:56 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d6b037e3b84d5a726815d96d4220619e'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=d6b037e3b84d5a726815d96d4220619e + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:31:56 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=b172e5e475d9c73b2131f41253a291eaeb7c0a34&state=d6b037e3b84d5a726815d96d4220619e'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=b172e5e475d9c73b2131f41253a291eaeb7c0a34&state=d6b037e3b84d5a726815d96d4220619e + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:56 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:57 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:57 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:58 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:58 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:58 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:59 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:31:59 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:31:59 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=faff99ea1e994609d94b76e1325e9e84'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=faff99ea1e994609d94b76e1325e9e84 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:32:00 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=2e2f2a0d3598c76e0d3400492afd855f916566e0&state=faff99ea1e994609d94b76e1325e9e84'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=2e2f2a0d3598c76e0d3400492afd855f916566e0&state=faff99ea1e994609d94b76e1325e9e84 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:00 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:00 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121073+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1291'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:01 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:29 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/hetzner/Robot-IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,1399 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:30 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:31 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:31 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:31 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:33 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c31267204fa1fc55ff41f5994559d884'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=c31267204fa1fc55ff41f5994559d884 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:32:33 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=93cbda5b0fd6340bc46526982996d93dd23ceeb7&state=c31267204fa1fc55ff41f5994559d884'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=93cbda5b0fd6340bc46526982996d93dd23ceeb7&state=c31267204fa1fc55ff41f5994559d884 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:33 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/index/page/1'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/index/page/1 + response: + body: {string: "
\n
\n
\n
\n
\n\ +
\n\n
\n\n\n\n7\n\ + \n\n
\n
aranox.deprimary13.06.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

bettilaila.deprimary02.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ferienwohnung-kubis.deprimary24.02.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

rimek.infoprimary24.01.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

toni-schoenberger.deprimary27.03.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.comprimary17.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

ulock-justice.deprimary21.04.19
  • DNS-Daten
  • DNS-Eintrag k\xFCndigen
  • \_\ +

\n\n\n\n\n\n
7
\n\n
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:34 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:34 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:34 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:35 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:35 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:35 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:32:35 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:36 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f8bac9f2accfb3cbf14a5eea5b862102'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f8bac9f2accfb3cbf14a5eea5b862102 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:32:36 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=70a7b18a0d233258a9ddfcbb592268f38e6cd21d&state=f8bac9f2accfb3cbf14a5eea5b862102'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=70a7b18a0d233258a9ddfcbb592268f38e6cd21d&state=f8bac9f2accfb3cbf14a5eea5b862102 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:36 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n\ +
\n\n
\n \xA9 2018 Hetzner\ + \ Online GmbH. Alle Rechte vorbehalten.
\n Preise inkl. 19 % USt\ + \
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:37 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121074+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0Aorig.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1340'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:32:37 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:06 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:06 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:07 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:07 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:07 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:07 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:08 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f6fb3e007422fcf7c7db563d603f728e'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=f6fb3e007422fcf7c7db563d603f728e + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:33:08 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=ca5fbd0e966fb600eea2d80289a6c9da8b5b7e41&state=f6fb3e007422fcf7c7db563d603f728e'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=ca5fbd0e966fb600eea2d80289a6c9da8b5b7e41&state=f6fb3e007422fcf7c7db563d603f728e + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:08 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:09 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:09 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:09 GMT'] + Keep-Alive: ['timeout=15, max=95'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/login + response: + body: {string: ''} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:10 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: '' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://accounts.hetzner.com/login_check + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:10 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://accounts.hetzner.com/'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:10 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Location: [/account/masterdata] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/account/masterdata + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:10 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:11 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fccadc8e078e41a9a4995ebcd0345895'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/oauth/authorize?client_id=robot_418&redirect_uri=https%3A%2F%2Frobot.your-server.de%2Flogin%2Fcheck&response_type=code&scope=openid&state=fccadc8e078e41a9a4995ebcd0345895 + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [application/json] + Date: ['Mon, 10 Dec 2018 17:33:11 GMT'] + Keep-Alive: ['timeout=15, max=96'] + Location: ['https://robot.your-server.de/login/check?code=5309d3699d6d84c80814792545d90ddfcd012fd5&state=fccadc8e078e41a9a4995ebcd0345895'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/check?code=5309d3699d6d84c80814792545d90ddfcd012fd5&state=fccadc8e078e41a9a4995ebcd0345895 + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:11 GMT'] + Keep-Alive: ['timeout=15, max=99'] + Location: ['https://robot.your-server.de/dns/update/id/556218'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/dns/update/id/556218 + response: + body: {string: "
\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n* \n
\n
\n
\n\n\ +
\n \xA9 2018 Hetzner Online GmbH. Alle Rechte vorbehalten.
\n\ + \ Preise inkl. 19 % USt
\nImpressum\ + \ |\n Datenschutz\ + \ |\n System\ + \ Policies |\n AGB
\n\ +
"} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:12 GMT'] + Keep-Alive: ['timeout=15, max=98'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: id=556218&zonefile=%40+3600+IN+SOA+ns1.first-ns.de.+postmaster.robot.first-ns.de.+2018121075+14400+1800+604800+86400%0A%40+86400+IN+NS+robotns3.second-ns.com.%0A%40+86400+IN+NS+robotns2.second-ns.de.%0A%40+86400+IN+NS+ns1.first-ns.de.%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken2%22%0A_acme-challenge.createrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.deleterecordinset+3600+IN+TXT+%22challengetoken2%22%0Adocs+3600+IN+CNAME+docs.example.com%0A_acme-challenge.fqdn+3600+IN+TXT+%22challengetoken%22%0Attl.fqdn+3600+IN+TXT+%22ttlshouldbe3600%22%0Arandom.fqdntest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.full+3600+IN+TXT+%22challengetoken%22%0Arandom.fulltest+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken1%22%0A_acme-challenge.listrecordset+3600+IN+TXT+%22challengetoken2%22%0Alocalhost+86400+IN+A+127.0.0.1%0Aloopback+3600+IN+CNAME+localhost%0A_acme-challenge.noop+3600+IN+TXT+%22challengetoken%22%0A_acme-challenge.test+3600+IN+TXT+%22challengetoken%22%0Aorig.nameonly.test+3600+IN+TXT+%22updated%22%0Arandom.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.test+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfqdn+3600+IN+TXT+%22challengetoken%22%0Aupdated.testfull+3600+IN+TXT+%22challengetoken%22%0A + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['1343'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.20.1] + method: POST + uri: https://robot.your-server.de/dns/update + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:12 GMT'] + Keep-Alive: ['timeout=15, max=97'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://robot.your-server.de/login/logout/r/true + response: + body: {string: None} + headers: + Connection: [Keep-Alive] + Content-Type: [text/html; charset=utf-8] + Date: ['Mon, 10 Dec 2018 17:33:40 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Location: ['https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/'] + Server: [Apache] + Transfer-Encoding: [chunked] + status: {code: 302, message: Found} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.20.1] + method: GET + uri: https://accounts.hetzner.com/logout?post_logout_redirect_uri=https://robot.your-server.de/ + response: + body: {string: None} + headers: + Cache-Control: ['max-age=0, must-revalidate, private'] + Connection: [Keep-Alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Mon, 10 Dec 2018 17:33:41 GMT'] + Keep-Alive: ['timeout=15, max=100'] + Referrer-Policy: [same-origin] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + Transfer-Encoding: [chunked] + Vary: [Host] + X-Frame-Options: [SAMEORIGIN] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,29 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=thisisadomainidonotown.com + response: + body: {string: !!python/unicode '{"transactid":"5530a66667e2fe2ee143e0a6295a0661","status":"SUCCESS","domaincount":0,"domain":[]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['96'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:22 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ks83qcnlkqja5oic774npfob24; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_authenticate.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,29 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"22ee83f101a2a6716ee3360a73dcd597","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:22 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=t1lkm969nboc7lfr6des6qlt82; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,83 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"574768b8b431844a0be6a9ceb6cdfb21","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:22 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=o0c2ergg8r0ud9slvf5ci151t2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:22 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=A&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"31733fc96a22892c38bb4b9562de51f9","status":"SUCCESS","total_records":2,"records":[{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['250'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=n8sjvlto4dbt3fs2qvftbckue6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=localhost.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=A&Value=127.0.0.1 + response: + body: {string: !!python/unicode '{"transactid":"aa295d6b7fb14820c3e9e9d92d3b03fa","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=cbrjt3o05upbu2p14389d2g4h5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,83 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"ac45a2b0b7be8a651741066c9a4bc07d","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mi7t8gppohi0ho137kbdgc8mp6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=CNAME&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"097d9895593ddf72743e8f3aeca97e38","status":"SUCCESS","total_records":3,"records":[{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['584'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ns9830puf2u13a2jb22fbnqej2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=docs.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=CNAME&Value=docs.example.com + response: + body: {string: !!python/unicode '{"transactid":"69e56ce0da6c0108dfea158b5199da90","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=nq0usoigvd2j3dijf423kfefc1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,83 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"951f28964e205cb62849e22393f0eabe","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=63nj10ikh7jcr7beg5p9ufocm1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"f7a52de5aec08c071c5f0fbec1ff6d37","status":"SUCCESS","total_records":1,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['218'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=2gnkcasul8rrn1dslum26460b7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.fqdn.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"4e13e0a743a4654d13135f5c0bc81ad6","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:23 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=9k0asgok3cb7pi0k7kv9ttk955; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:23 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,83 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"4517c4433a515b13bdb028531f59d43b","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=l7s9fk30356scq32fqbliuib53; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"518a631ba693436fc1e11b8372599683","status":"SUCCESS","total_records":2,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['318'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=26emlf37ncashm3g7lcesl50l2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.full.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"c12e88aa93d47912db91e14e851795d0","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=2suscq9ph45tokk3m4h0se9t86; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,83 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"e33c7392087cb3b5ba43938bfde5893f","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ga644cddno8igapb5j8n08alt0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"7ba4941c696f103ff35e5acae0023387","status":"SUCCESS","total_records":3,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['418'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=rva4sjvd5gjchkaorf9vmb7500; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.test.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"b48b7718a89078d658d2a09419e0f45a","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qpnjso216ck2ukqtvqgsh5lo67; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,137 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"e5f6f44a441616e057ed3f9254ab44f7","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=o5p6pgb79nt9pk0mcq0vihf8u0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"3c3c11e55dca3493996707b78f1a410d","status":"SUCCESS","total_records":4,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['518'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:24 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ddfb93gakom4eahglim571oae3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:24 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.createrecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken1 + response: + body: {string: !!python/unicode '{"transactid":"243ff9e10023291e47f1c589c404a5da","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=b0ei0pkrdroud77f57a4432ul1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"3aaabcc2424b422031df023e850095c0","status":"SUCCESS","total_records":5,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['630'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=647q2np54q0okgpdr34ftuec21; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.createrecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken2 + response: + body: {string: !!python/unicode '{"transactid":"e67c5290f17c6f00fd954ef6a3696565","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=osfjevsfl36rb3fo3ngoch1fn3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,137 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"053b7fc41cdf98f2ea50e776911efba9","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=idt4pclbvqmrs3781d5uj4ev16; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"83a458cd7a23db1934643390057114ab","status":"SUCCESS","total_records":6,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['742'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qnk5b4ut35vau8das4leql00a7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.noop.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"6eae0df618280da2b8de6787c44d33dc","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=r9gtb4ikr79hssc7gn3o6qu176; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"3f1cef100906a64d2750ac00039aca9e","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:25 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ihbhqtus0rp5sajdcp5i9f9na5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:25 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"4fdb4a4cb2fab072f508901c63efce32","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=q546t1qt2cin5re1qjm6adaos2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"3be4f03092fcc0ea1552f425b68243a4","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=adsor5uv6q80jmodpcb32qhal4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"38b834ec803a7fe36e037cb36f2cb1cc","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=h6a2svd8h3oef0ud2kjoaavnk1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=delete.testfilt.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"d0da84b0e153e6ce9547fbaae659f3f4","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=7b90jga6e0g5c1h3oifh796qv6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"960629c3fd96c2a473c268ccf4563e62","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"delete.testfilt.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['937'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=jr0frcesr2v4pvrn9vljue5kv4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=delete.testfilt.world-of-ysera.com&ResponseFormat=json&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"427cbe95149c108edfc2af8d07b2b5f5","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qua6a0umoja7d2fp5stbtkg273; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"73fa775eab91ac564bd8cdb238a97b2a","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:26 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=giirej0qrjr1b7b537obpko9e1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:26 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"405e0fe5028e5e895f7c3ed40c3c6176","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=uk6tak8itbtnq00b9jhmom6eu3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"593087946dca6ea0576a08f1efe50f3c","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=pck3stf3dt415leuvcfhncd883; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=delete.testfqdn.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"62b5a22a979a1c571d7a96b322c432a9","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vllcqmqg0njol80kkou7vifd96; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"9942fd68a5a9437a4894c477d2049689","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"delete.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['937'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mibnh6no57bcg8i8gu8ud75cp5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=delete.testfqdn.world-of-ysera.com&ResponseFormat=json&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"a44ce0c768aa9c19768cd08b50cb977a","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=kbbe3od98em9q7q38kfh3e0cm0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"537cb71f0e31712c3991e4d3ed28617f","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=50hn8gk3q40slf2h3h1dmpvto4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"7b4e9882ef41092fb118ee6f9d2067ff","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vhhu2skiga3lmoph260m57ngj2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"2cfd05efb6f6f8b1109f5ea55abd6f24","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:27 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=sadcv1hist50631uqnfdssrru2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:27 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=delete.testfull.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"ccbfa742966baa9eb9e2c63fd51a8212","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=2nub9sr2ts22k1932tvvbevdl5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"604d6d1d6a2d5811dabe1467c1790dea","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"delete.testfull.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['937'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=m46nlveupae575jsdleh3vb2u4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=delete.testfull.world-of-ysera.com&ResponseFormat=json&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"e1b8cd0b96b57a4e2d8d11b3382a2e0c","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=l7v4la8ejv2q0gb1lr1k4i90n0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"71bdc6f2aee66141f2bc6029ed145755","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=o7vp4qsp8vmvmsh3ul6n9ffbo4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,191 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"ccf90e76796d0f80d1822f6ed40c9f53","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vqtbpn0sm8u5lt7tuf45mgl2j0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"7e7fb527de257c6332be43d07cd7dd4f","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=cvn0i6hqdj0skck3v1vutsal22; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=delete.testid.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"c780dcd66696cd0d969013855467274c","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:28 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=n0u5oahkebciisua25k4o2ps61; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:28 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"2eed25202ea2aca4cca9f7bc00508092","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"delete.testid.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['935'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=6usq5lop13f4tl2hp030oiabl2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"fe8a16e68a55a6b7a7d311110c4cac01","status":"SUCCESS","total_records":20,"records":[{"name":"world-of-ysera.com","value":"ns-canada.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-usa.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-uk.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"localhost.world-of-ysera.com","value":"127.0.0.1","ttl":3600,"type":"A"},{"name":"world-of-ysera.com","value":"d.deleti.net","ttl":3600,"priority":1,"type":"MX"},{"name":"tmp.world-of-ysera.com","value":"smtp.yopmail.com","ttl":3600,"priority":1,"type":"MX"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"docs.world-of-ysera.com","value":"docs.example.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"delete.testid.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['2175'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qdpcimaikj86ep8ippna1f43o2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=delete.testid.world-of-ysera.com&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"feff601335df108b1d01551460fa7940","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=46efjcgjb54ujpjqhi79tmg9m6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"8ba73a96e500f826961b2a6b43edec38","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=kucalv6kbt1sskufp7mr6ehkp1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,218 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"e129df504e7621ac24003067e7e98957","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=tjkb4oqi2mcdr9vl9et9kohfl7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"64f5cb18ae2d5437d0871c3d524aa7c5","status":"SUCCESS","total_records":7,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['842'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=fsvlvahp0jmvuk8v64lv9abl06; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.deleterecordinset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken1 + response: + body: {string: !!python/unicode '{"transactid":"166bea86428f21b54dcada7b7a52465d","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:29 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=flasnjchoue7an6a039hq8q1f3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:29 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"36fb43c6a19c34fb0b42daf7b9683007","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['956'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qa7quhh9rpjab2trm16ittak25; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.deleterecordinset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken2 + response: + body: {string: !!python/unicode '{"transactid":"cd7f9eb5e5bdb4ace11e527d30d048df","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=idot29m754d51f2u7vts8q3si6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"b0147dc2c6c760429ba496df8195a4e7","status":"SUCCESS","total_records":9,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1070'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=capc50sd9o05susmn1j3cltbb0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=_acme-challenge.deleterecordinset.world-of-ysera.com&ResponseFormat=json&Type=TXT&Value=challengetoken1 + response: + body: {string: !!python/unicode '{"transactid":"2c09b1778c57846b1c42ba6986c361fa","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vh90u08sr9qvl1etq7akt6v024; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"120f581c4dec33f3300d0bc962122be5","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['956'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=3r69190rk44ml7gof4050od803; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,218 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"362d9d3181ae3bbf4ee73c5edb443e02","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=0tjvitdno7c8rgg80te74gl5i7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"2e68064672744cb78b27b5e70155cfd8","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['956'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:30 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=oepc72h6lng0nd077mvosqe833; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:30 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.deleterecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken1 + response: + body: {string: !!python/unicode '{"transactid":"d8e941a18fd1a03ef6fd9dd6a379e352","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=uhmqebf9qqkh09f5n7t2fp57b0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"4f8f3efcbe12234a7146e5f0777fdc9f","status":"SUCCESS","total_records":9,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1068'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=97sp3culi10bmuvsqttcrriac7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.deleterecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken2 + response: + body: {string: !!python/unicode '{"transactid":"08d5f474c66a65a2dfdc10e0a6d1d446","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=evi9bl2medt8445jcvidt14ob1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"117f1b431d83b9e3925363b5e02833bf","status":"SUCCESS","total_records":10,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1181'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=rmiqv0htcsr5t4r6n5mhvijgc6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Remove?FullRecordName=_acme-challenge.deleterecordset.world-of-ysera.com&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"6b84997a0a56c2fc8c7fe605ab530f41","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vi7i8nrppf35io7mkgc4sp50o1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"26cb45cfae610e6cd3a91aa6d57b75ed","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['956'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mp5kblhqv96ru0bqedhrer9fe3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,110 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"41db8d8847071066fdbb9233d41bbf6c","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:31 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=8fhe5np2qkvec2hte1i6kpbeh4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:31 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"3e6d38defbda743b81c59aa70c7a2b6d","status":"SUCCESS","total_records":8,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['956'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=t5uqn7kgle9q9pllo5pvj9jet3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=ttl.fqdn.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=ttlshouldbe3600 + response: + body: {string: !!python/unicode '{"transactid":"4c7e6b650081f77eaa51174ad2842249","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=0c1ismcnbd3kkjo6jh37gj4v72; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"7543c184663b2afa4f3ae27bc0778865","status":"SUCCESS","total_records":9,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1045'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=cnhg7lutj4tv2blkhs421fpuv2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"831f44e91e11ff565c74f7728e1b8075","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mouupuj0t812q4ugetcutik2s3; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"8e45c5d8cc80f323c54903cd95811ba7","status":"SUCCESS","total_records":9,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1045'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=qbgmp4agv184t6iqau49o2cqo4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.listrecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken1 + response: + body: {string: !!python/unicode '{"transactid":"42fb6e8eacd58acf0d9af911a0e4d6cf","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=guhf922o41h73h5v56m27ngv35; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"1cbcb51a68c12393e76f15a9cd8c434d","status":"SUCCESS","total_records":10,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1156'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:32 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ukqcidi15u19pfuthdmh0st070; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:32 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=_acme-challenge.listrecordset.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken2 + response: + body: {string: !!python/unicode '{"transactid":"8575e3b7044a62a6607de1e699fc9529","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=m9sut6fb0ft9br8lmcn7hbjd32; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"35cafc42b3106bc6bbd6dc866f7c97cc","status":"SUCCESS","total_records":11,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1266'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=hplgqre2pb6pjiahric8l8hl42; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,110 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"87d6e106b363a4e65116c2c22a4a4048","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=r02bunj948h27l7ki4eh09cum4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"f958087f98b464d85e4b7d8aa19ebe13","status":"SUCCESS","total_records":11,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1266'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=4p3air1vfbl843jqtubg33mo26; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=random.fqdntest.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"e8c746167b5cb6c2dc1af8b75dbc2936","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=9b59254pg9q80cqm11751rpe33; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"e046fed8a3a0e09cbc8cd3da93968b96","status":"SUCCESS","total_records":12,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1361'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ol2n3fqtu8vvbctomh31graf40; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,110 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"c12abeea6821bc201f466b9f0e28b2af","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=pqk29ur7dmgr1qs5mnsr6rjoj7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"497be71bd6ef56082055bc703c583ba3","status":"SUCCESS","total_records":12,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1361'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:33 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=vjnubamj07tfkc2gl8l556f0e0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:33 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=random.fulltest.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"d9e4c417e3a5bf3b0eb7a760b7470703","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mml9ee33l38a2dovvrb4qd4055; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"e0211e02b220ae4a89725dabbcf581ca","status":"SUCCESS","total_records":13,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1456'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ce9dbb9cl4sc2fb6hnqs93iot1; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,56 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"39deb5b9bb7e7a93992fd6913b38fa11","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=1hfs1msgi9l8gul6hdciv3nti5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"afa5beae3ad52d448c9c7cac4e030b88","status":"SUCCESS","total_records":13,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1456'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=4lqqd2rne5ph9h5ig132l336b7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,110 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"8dcc439c13e86dfef9594945de58df65","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=gh25p212pdac9vhrhtd3jah743; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"486d58f04b3a647ab538b2104e5147be","status":"SUCCESS","total_records":13,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1456'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ik7meie1l02uf9e4le156vkpv0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=random.test.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"959d43c01f6875eedec7a530f29b2a7b","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:34 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=0en64oaaq0sb70q7kern9e0o44; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:34 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"a668d4d42dc45a77e85a4ef32a6b9332","status":"SUCCESS","total_records":14,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1547'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=n322q2t0lkendk0uga0kb6o3t6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,56 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"de082afcacc8d9448003774e0fefd260","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=322c2gfs3qgi7vbtushob68721; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"1735885c32a66d418f8c3c1a2bc407aa","status":"SUCCESS","total_records":26,"records":[{"name":"world-of-ysera.com","value":"ns-canada.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-usa.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-uk.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"localhost.world-of-ysera.com","value":"127.0.0.1","ttl":3600,"type":"A"},{"name":"world-of-ysera.com","value":"d.deleti.net","ttl":3600,"priority":1,"type":"MX"},{"name":"tmp.world-of-ysera.com","value":"smtp.yopmail.com","ttl":3600,"priority":1,"type":"MX"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"docs.world-of-ysera.com","value":"docs.example.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['2786'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=8fss6jlj64om6l099fr0ms82p6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,110 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"607403149d11c4729d148002d65a74de","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=75c7nkpah3oht6ktrs6d60to95; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"17e9a292667d7070a8df4948bf2efc02","status":"SUCCESS","total_records":15,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1636'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=a5pdu2fm5n41ts07hliqo3ne37; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=orig.nameonly.test.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"69135fc91ee6c4db0be2af8533dcceae","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=n7a11rmqqb38d5ojuade6be4a0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Update?FullRecordName=orig.nameonly.test.world-of-ysera.com&NewValue=updated&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"7065441f0f28f171ca79d6cab7cf3219","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=ar3gid9cd3pg8e0qlnoa3h7tf7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"d722d4c4f8c5cd9c329b4349d49502ea","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=4g1tp1p2nb9nvudl07ongmp7j2; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"ba1957373a7a0b5c3619a45ee93485c9","status":"SUCCESS","total_records":14,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1547'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=oj0f2jhhkub26v2o5q9g3bafp5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=orig.test.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"88dd4969b3d88ed99492f58b37708c81","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=fn0th9hgpl4isd1rqvud0e80l0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"ea1d28d8716f6d01f8b0d63bf54b3a94","status":"SUCCESS","total_records":15,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1636'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=m5svrmg7tflfgj8jmhsrm0f4n4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"0241ae5bb6271363e4dadb02862a0825","status":"SUCCESS","total_records":27,"records":[{"name":"world-of-ysera.com","value":"ns-canada.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-usa.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-uk.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"localhost.world-of-ysera.com","value":"127.0.0.1","ttl":3600,"type":"A"},{"name":"world-of-ysera.com","value":"d.deleti.net","ttl":3600,"priority":1,"type":"MX"},{"name":"tmp.world-of-ysera.com","value":"smtp.yopmail.com","ttl":3600,"priority":1,"type":"MX"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"docs.world-of-ysera.com","value":"docs.example.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['2875'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:35 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=6c1nq5mui7rvgtav6bcfomf2a7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:35 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Update?FullRecordName=orig.test.world-of-ysera.com&NewValue=challengetoken&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"85a674bdb60e33f6cfd20caaaafd0f21","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=hj0qofluoijfa88cjm3ukfjl34; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"ff8e2129d864a553a7b4f2c55a8d1f3b","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=og8o2stqph92eo2q81bk681mp5; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"21fdf8f8af071adf75f3c2dbde7eb482","status":"SUCCESS","total_records":16,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1727'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:36 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=h28r3ge9vpbq408ia49j3svk75; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:36 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=orig.testfqdn.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"85a9d1ddcea4079077a480be01af50aa","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=58487b0eutn77s7l8l219fk365; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"395bddcfb1b3b670fe27046dfdf16c7a","status":"SUCCESS","total_records":17,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"},{"name":"orig.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1820'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=mi4ph84f7kpgc2trl5irinr7g0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"b547a84e1bb42a2c651d68dfa2611e94","status":"SUCCESS","total_records":29,"records":[{"name":"world-of-ysera.com","value":"ns-canada.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-usa.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-uk.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"localhost.world-of-ysera.com","value":"127.0.0.1","ttl":3600,"type":"A"},{"name":"world-of-ysera.com","value":"d.deleti.net","ttl":3600,"priority":1,"type":"MX"},{"name":"tmp.world-of-ysera.com","value":"smtp.yopmail.com","ttl":3600,"priority":1,"type":"MX"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"docs.world-of-ysera.com","value":"docs.example.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['3059'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=edl3bm7hcj87ftn0v53vdeklj6; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Update?FullRecordName=orig.testfqdn.world-of-ysera.com&NewValue=challengetoken&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"0e13260620e1b69434c4d8cea539ba94","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=etkbejeiqqlb8n596einp3tfm4; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/internetbs/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,164 @@ +interactions: +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/List?ResponseFormat=json&searchTermFilter=world-of-ysera.com + response: + body: {string: !!python/unicode '{"transactid":"48566b66025aee93402283330cf9ae27","status":"SUCCESS","domaincount":1,"domain":["world-of-ysera.com"]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['116'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=cr9etp89k8fiuiod6ol177fnh7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"b0d48049cf3393ff06afdedc4976176e","status":"SUCCESS","total_records":17,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"},{"name":"orig.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1820'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=pptb2duhifr5vbcdp0js52ps61; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Add?FullRecordName=orig.testfull.world-of-ysera.com&ResponseFormat=json&Ttl=3600&Type=TXT&Value=challengetoken + response: + body: {string: !!python/unicode '{"transactid":"73d576080d16cfff5d46713aa1981d25","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=tmbia18oofcsbprhlt7bdjcdl7; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&FilterType=TXT&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"c525ab003a6ffdf2797d0a6d63b4edce","status":"SUCCESS","total_records":18,"records":[{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"},{"name":"orig.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.testfull.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['1913'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:37 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=50mg39v3u87gq9akkbfl365r74; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:37 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: https://api.internet.bs/Domain/DnsRecord/List?Domain=world-of-ysera.com&ResponseFormat=json + response: + body: {string: !!python/unicode '{"transactid":"8db646b36b89fa636ff4e80aa636b341","status":"SUCCESS","total_records":30,"records":[{"name":"world-of-ysera.com","value":"ns-canada.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-usa.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"ns-uk.topdns.com","ttl":3600,"type":"NS"},{"name":"world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"*.world-of-ysera.com","value":"91.121.92.27","ttl":3600,"type":"A"},{"name":"localhost.world-of-ysera.com","value":"127.0.0.1","ttl":3600,"type":"A"},{"name":"world-of-ysera.com","value":"d.deleti.net","ttl":3600,"priority":1,"type":"MX"},{"name":"tmp.world-of-ysera.com","value":"smtp.yopmail.com","ttl":3600,"priority":1,"type":"MX"},{"name":"3eymkudjprv6jm3lwmqykuoxvau3mnng._domainkey.world-of-ysera.com","value":"3eymkudjprv6jm3lwmqykuoxvau3mnng.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"docs.world-of-ysera.com","value":"docs.example.com","ttl":3600,"type":"CNAME"},{"name":"imgle7j2p2mqptirfslrf3neahbqhsfk._domainkey.world-of-ysera.com","value":"imgle7j2p2mqptirfslrf3neahbqhsfk.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"zz4f642wjh2ad33ni3uknryd6o3n7bil._domainkey.world-of-ysera.com","value":"zz4f642wjh2ad33ni3uknryd6o3n7bil.dkim.amazonses.com","ttl":3600,"type":"CNAME"},{"name":"orig.nameonly.test.world-of-ysera.com","value":"updated","ttl":3600,"type":"TXT"},{"name":"orig.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.testfqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"orig.testfull.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fqdntest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.fulltest.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"random.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"ttl.fqdn.world-of-ysera.com","value":"ttlshouldbe3600","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.createrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.deleterecordinset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.fqdn.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.full.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken1","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.listrecordset.world-of-ysera.com","value":"challengetoken2","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.noop.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_acme-challenge.test.world-of-ysera.com","value":"challengetoken","ttl":3600,"type":"TXT"},{"name":"_amazonses.world-of-ysera.com","value":"PzgAAEOkx5B0XyMk16yC9S4UsBvJcW94ST+YtTte+ng=","ttl":3600,"type":"TXT"}]}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['3152'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:38 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=m3i5d25ohgcbdvua2oi0v59rg0; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:38 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:38 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +- request: + body: !!python/unicode '{}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: https://api.internet.bs/Domain/DnsRecord/Update?FullRecordName=orig.testfull.world-of-ysera.com&NewValue=challengetoken&ResponseFormat=json&Type=TXT + response: + body: {string: !!python/unicode '{"transactid":"8e51535f2ba38ad3e1cea97a140128ee","status":"SUCCESS"}'} + headers: + cache-control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0'] + connection: [close] + content-length: ['68'] + content-type: [text/javascript; charset=utf-8] + date: ['Sun, 18 Nov 2018 16:19:38 GMT'] + expires: ['Thu, 19 Nov 1981 08:52:00 GMT'] + pragma: [no-cache] + server: [Apache] + set-cookie: [INTBSSEID=7akfnv73vis723jku154vpbd43; path=/; domain=internetbs.net; + secure; HttpOnly, 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:38 GMT; path=/; secure; httponly', 'IBS=NIqpub1d0HIyQhTzAaHhPl2%2BLL%2Bzd%2FlNqH%2FMRap5DJh24tpSNbD4E6X%2BBixtjV1lfcyS9m%2BxWG3%2B02Hj6TL9vZemlyj6l%2B%2BmwCJBbQUSm6odZWnj5ujg8a59aCxQBchWYmwHMVxlQNPnLWW%2BcGSjwxOSBMV2W%2BJQ3WkD%2FEPmoZUjcSZlWkT6La60gXwVImAFo3%2BJD4MoEoQpU%2FXsjqyYL4UaQNKT8BUSY%2Bgr2HaDYFA%3D; + expires=Wed, 15-Nov-2028 16:19:38 GMT; path=/; secure; httponly'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate_with_unmanaged_domain_should_fail.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,26 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/thisisadomainidonotown.com/listRRs + response: + body: {string: '{"error":"The API request was not valid.","debug":"The requested + object instance does not exist or cannot be accessed."}'} + headers: + Connection: [Keep-Alive] + Content-Length: ['120'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:18 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663798'] + status: {code: 404, message: Not Found} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_authenticate.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,25 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['185'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:18 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663798'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,73 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['185'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663799'] + status: {code: 200, message: OK} +- request: + body: type=A&name=localhost&data=127.0.0.1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['36'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663799'] + status: {code: 200, message: OK} +- request: + body: name=localhost&type=A&data=127.0.0.1&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['45'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663799'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,73 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['264'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:22 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663802'] + status: {code: 200, message: OK} +- request: + body: type=CNAME&name=docs&data=docs.example.com + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['42'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:23 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663803'] + status: {code: 200, message: OK} +- request: + body: name=docs&type=CNAME&data=docs.example.com&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['51'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:23 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663803'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,73 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['349'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:26 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663806'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.fqdn&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:26 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663806'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.fqdn&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['63'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:27 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663807'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,73 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['446'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:29 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663809'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.full&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:30 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663810'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.full&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['63'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:30 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663810'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,73 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['543'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:33 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663813'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.test&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:33 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663813'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.test&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['63'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:34 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663814'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_multiple_times_should_create_record_set.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,121 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['640'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:36 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663816'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.createrecordset&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:37 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663817'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.createrecordset&type=TXT&data=challengetoken1&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['75'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:37 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663817'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.createrecordset&data=challengetoken2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:40 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663820'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.createrecordset&type=TXT&data=challengetoken2&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['75'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:40 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663820'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,121 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['858'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:43 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663823'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.noop&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:44 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663824'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.noop&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['63'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:44 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663824'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.noop&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['98'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:47 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663827'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.noop + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['34'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['98'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:47 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663827'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['955'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:48 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663828'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfilt&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:48 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663828'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfilt&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['58'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:49 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663829'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfilt&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"delete.testfilt","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['93'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:51 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663831'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfilt&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:52 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663832'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfilt + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['29'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:54 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663834'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['955'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:55 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663835'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfqdn&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:55 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663835'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfqdn&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['58'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:56 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663836'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfqdn&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"delete.testfqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['93'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:59 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663839'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfqdn&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:23:59 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663839'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfqdn + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['29'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:02 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663842'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['955'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:02 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663842'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfull&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:03 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663843'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfull&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['58'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:03 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663843'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfull&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"delete.testfull","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['93'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:07 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663847'] + status: {code: 200, message: OK} +- request: + body: name=delete.testfull&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:08 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663848'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testfull + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['29'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:10 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663850'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,168 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['955'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:11 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663851'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testid&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:11 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663851'] + status: {code: 200, message: OK} +- request: + body: name=delete.testid&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['56'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:12 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663852'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testid + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['27'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"delete.testid","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['91'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:14 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663854'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"delete.testid","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1045'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:15 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663855'] + status: {code: 200, message: OK} +- request: + body: name=delete.testid&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:15 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663855'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=delete.testid + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['27'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:18 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663858'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,193 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['955'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663859'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordinset&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['68'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663859'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordinset&type=TXT&data=challengetoken1&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['77'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:20 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663860'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordinset&data=challengetoken2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['68'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:22 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663862'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordinset&type=TXT&data=challengetoken2&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['77'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:23 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663863'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordinset&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['68'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['112'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:25 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663865'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordinset&type=TXT&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['68'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:26 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663866'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordinset + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['112'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:28 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663868'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_delete_record_with_record_set_name_remove_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,217 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1066'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:29 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663869'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordset&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:29 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663869'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordset&type=TXT&data=challengetoken1&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['75'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:30 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663870'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordset&data=challengetoken2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:32 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663872'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordset&type=TXT&data=challengetoken2&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['75'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:33 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663873'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordset + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['45'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.deleterecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['219'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:36 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663876'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordset&type=TXT&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:36 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663876'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.deleterecordset&type=TXT&data=challengetoken2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['66'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:39 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663879'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.deleterecordset + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['45'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:42 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663882'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,97 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1066'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:42 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663882'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=ttl.fqdn&data=ttlshouldbe3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['43'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:43 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663883'] + status: {code: 200, message: OK} +- request: + body: name=ttl.fqdn&type=TXT&data=ttlshouldbe3600&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['52'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:43 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663883'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=ttl.fqdn + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['22'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['87'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:46 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663886'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_should_handle_record_sets.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1152'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:46 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663886'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.listrecordset&data=challengetoken1 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['64'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:47 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663887'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.listrecordset&type=TXT&data=challengetoken1&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['73'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:47 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663887'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.listrecordset&data=challengetoken2 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['64'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:50 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663890'] + status: {code: 200, message: OK} +- request: + body: name=_acme-challenge.listrecordset&type=TXT&data=challengetoken2&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['73'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:50 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663890'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=_acme-challenge.listrecordset + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['43'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['215'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:53 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663893'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,97 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1366'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:54 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663894'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.fqdntest&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:54 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663894'] + status: {code: 200, message: OK} +- request: + body: name=random.fqdntest&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['58'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:55 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663895'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.fqdntest + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['29'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['93'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:57 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663897'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,97 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1458'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:58 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663898'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.fulltest&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['49'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:58 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663898'] + status: {code: 200, message: OK} +- request: + body: name=random.fulltest&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['58'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:24:59 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663899'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.fulltest + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['29'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['93'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:02 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663902'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,49 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1550'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:02 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663902'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=filter.thisdoesnotexist + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['37'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:03 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663903'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,97 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1550'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:03 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663903'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.test&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['45'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:04 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663904'] + status: {code: 200, message: OK} +- request: + body: name=random.test&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:04 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663904'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=random.test + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['25'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['89'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:07 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663907'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_list_records_with_no_arguments_should_list_all.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1638'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:07 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663907'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1638'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:08 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663908'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record_name_specified.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"updated.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1727'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663919'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.nameonly.test&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['52'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:19 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663919'] + status: {code: 200, message: OK} +- request: + body: name=orig.nameonly.test&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['61'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:20 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663920'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.nameonly.test + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['32'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"orig.nameonly.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['96'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:23 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663923'] + status: {code: 200, message: OK} +- request: + body: name=orig.nameonly.test&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['52'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:23 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663923'] + status: {code: 200, message: OK} +- request: + body: name=orig.nameonly.test&type=TXT&data=updated&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['54'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:26 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663926'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,168 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1638'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:09 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663909'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.test&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['43'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:09 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663909'] + status: {code: 200, message: OK} +- request: + body: name=orig.test&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['52'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:10 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663910'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.test + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['23'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"orig.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['87'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:12 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663912'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"orig.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1724'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:13 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663913'] + status: {code: 200, message: OK} +- request: + body: name=orig.test&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['43'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:13 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663913'] + status: {code: 200, message: OK} +- request: + body: name=updated.test&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['55'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:16 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663916'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,168 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"orig.nameonly.test","type":"TXT","data":"updated","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"updated.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1815'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:29 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663929'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.testfqdn&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:29 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663929'] + status: {code: 200, message: OK} +- request: + body: name=orig.testfqdn&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['56'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:30 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663930'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.testfqdn + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['27'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"orig.testfqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['91'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:32 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663932'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"orig.nameonly.test","type":"TXT","data":"updated","ttl":3600,"scope":"member"},{"name":"orig.testfqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"updated.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1905'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:33 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663933'] + status: {code: 200, message: OK} +- request: + body: name=orig.testfqdn&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:33 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663933'] + status: {code: 200, message: OK} +- request: + body: name=updated.testfqdn&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['59'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:36 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663936'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/nfsn/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,168 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"orig.nameonly.test","type":"TXT","data":"updated","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"updated.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"updated.testfqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1908'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:39 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663939'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.testfull&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['2'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:39 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663939'] + status: {code: 200, message: OK} +- request: + body: name=orig.testfull&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['56'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:40 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663940'] + status: {code: 200, message: OK} +- request: + body: type=TXT&name=orig.testfull + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['27'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"orig.testfull","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['91'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:42 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663942'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/listRRs + response: + body: {string: '[{"name":"","type":"NS","data":"ns.phx5.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"","type":"NS","data":"ns.phx7.nearlyfreespeech.net.","ttl":86400,"scope":"system"},{"name":"docs","type":"CNAME","data":"docs.example.com","ttl":3600,"scope":"member"},{"name":"localhost","type":"A","data":"127.0.0.1","ttl":3600,"scope":"member"},{"name":"orig.nameonly.test","type":"TXT","data":"updated","ttl":3600,"scope":"member"},{"name":"orig.testfull","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fqdntest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.fulltest","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"random.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"ttl.fqdn","type":"TXT","data":"ttlshouldbe3600","ttl":3600,"scope":"member"},{"name":"updated.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"updated.testfqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.createrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.deleterecordinset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.fqdn","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.full","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken1","ttl":3600,"scope":"member"},{"name":"_acme-challenge.listrecordset","type":"TXT","data":"challengetoken2","ttl":3600,"scope":"member"},{"name":"_acme-challenge.noop","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"},{"name":"_acme-challenge.test","type":"TXT","data":"challengetoken","ttl":3600,"scope":"member"}]'} + headers: + Connection: [Keep-Alive] + Content-Length: ['1998'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:43 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663943'] + status: {code: 200, message: OK} +- request: + body: name=orig.testfull&type=TXT&data=challengetoken + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/removeRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:43 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663943'] + status: {code: 200, message: OK} +- request: + body: name=updated.testfull&type=TXT&data=challengetoken&ttl=3600 + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['59'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.19.1] + method: POST + uri: https://api.nearlyfreespeech.net/dns/koupia.xyz/addRR + response: + body: {string: ''} + headers: + Connection: [Keep-Alive] + Content-Length: ['0'] + Content-Type: [application/x-nfsn-api] + Date: ['Tue, 16 Oct 2018 04:25:46 GMT'] + Keep-Alive: ['timeout=1, max=100'] + Server: [Apache] + Strict-Transport-Security: [max-age=31536000] + X-Frame-Options: [DENY] + X-NFSN-Timestamp: ['1539663946'] + status: {code: 200, message: OK} +version: 1 diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_A_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=localhost.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=A&value=127.0.0.1 + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=localhost.pcekper.com.ar&ttl=3600&type=A&value=127.0.0.1 response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=docs.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=CNAME&value=docs.example.com + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=docs.pcekper.com.ar&ttl=3600&type=CNAME&value=docs.example.com response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.fqdn.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.fqdn.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.full.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.full.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.test.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=_acme-challenge.test.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfilt.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfilt.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfqdn.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfqdn.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfull.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testfull.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_delete_record_by_identifier_should_remove_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testid.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=delete.testid.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_after_setting_ttl.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=ttl.fqdn.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=ttlshouldbe3600 + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=ttl.fqdn.pcekper.com.ar&ttl=3600&type=TXT&value=ttlshouldbe3600 response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.fqdntest.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.fqdntest.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_full_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.fulltest.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.fulltest.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_list_records_with_name_filter_should_return_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.test.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=random.test.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.test.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.test.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ @@ -126,7 +126,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.test.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.test.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.testfqdn.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.testfqdn.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ @@ -127,7 +127,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.testfqdn.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.testfqdn.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml --- lexicon-2.7.12/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/fixtures/cassettes/zonomi/IntegrationTests/test_Provider_when_calling_update_record_with_full_name_should_modify_record.yaml 2019-01-03 16:26:53.000000000 +0000 @@ -37,7 +37,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.testfull.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=orig.testfull.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ @@ -127,7 +127,7 @@ Connection: [keep-alive] User-Agent: [python-requests/2.18.4] method: GET - uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.testfull.pcekper.com.ar&prio=placeholder_priority&ttl=3600&type=TXT&value=challengetoken + uri: https://zonomi.com/app/dns/dyndns.jsp?action=SET&name=updated.testfull.pcekper.com.ar&ttl=3600&type=TXT&value=challengetoken response: body: {string: !!python/unicode "]>OK:\n\ diff -Nru lexicon-2.7.12/tests/providers/integration_tests.py lexicon-3.0.8/tests/providers/integration_tests.py --- lexicon-2.7.12/tests/providers/integration_tests.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/integration_tests.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,34 +1,66 @@ import contextlib - +import os from builtins import object from functools import wraps -from lexicon.common.options_handler import SafeOptions, env_auth_options +from importlib import import_module import pytest import vcr -import os +from lexicon.config import ConfigResolver, ConfigSource, DictConfigSource +from lexicon.providers.base import Provider as BaseProvider + # Configure VCR. Parameter record_mode depends on the LEXICON_LIVE_TESTS environment variable value. -record_mode = 'new_episodes' if os.environ.get('LEXICON_LIVE_TESTS', 'false') == 'true' else 'none' +record_mode = 'new_episodes' if os.environ.get( + 'LEXICON_LIVE_TESTS', 'false') == 'true' else 'none' provider_vcr = vcr.VCR( - cassette_library_dir='tests/fixtures/cassettes', - record_mode=record_mode, - decode_compressed_response=True + cassette_library_dir='tests/fixtures/cassettes', + record_mode=record_mode, + decode_compressed_response=True ) -# Prepare custom decorator: it will start a casette in relevant folder for current provider, +# Prepare custom decorator: it will start a casette in relevant folder for current provider, # and using the name of the test method as the cassette's name. + + def _vcr_integration_test(decorated): @wraps(decorated) def wrapper(self): with provider_vcr.use_cassette(self._cassette_path('IntegrationTests/{0}.yaml'.format(decorated.__name__)), - filter_headers=self._filter_headers(), - before_record_response=self._filter_response, - filter_query_parameters=self._filter_query_parameters(), - filter_post_data_parameters=self._filter_post_data_parameters()): + filter_headers=self._filter_headers(), + before_record_response=self._filter_response, + filter_query_parameters=self._filter_query_parameters(), + filter_post_data_parameters=self._filter_post_data_parameters()): decorated(self) return wrapper + +class EngineOverrideConfigSource(ConfigSource): + + def __init__(self, overrides): + super(EngineOverrideConfigSource, self).__init__() + self.overrides = overrides + + def resolve(self, config_parameter): + # We extract the key from existing namespace. + config_parameter = config_parameter.split(':')[-1] + return self.overrides.get(config_parameter) + + +class FallbackConfigSource(ConfigSource): + + def __init__(self, fallback_fn): + super(FallbackConfigSource, self).__init__() + self.fallback_fn = fallback_fn + + def resolve(self, config_parameter): + config_parameter = config_parameter.split(':') + if not config_parameter[-2] == 'lexicon': + return self.fallback_fn(config_parameter[-1]) + + return None + + """ https://stackoverflow.com/questions/26266481/pytest-reusable-tests-for-different-implementations-of-the-same-interface Single, reusable definition of tests for the interface. Authors of @@ -53,7 +85,33 @@ pytest.skip('Skipping extended suite') """ + + class IntegrationTests(object): + + def __init__(self): + self.Provider = BaseProvider + self.domain = None + self.provider_name = None + + ########################################################################### + # Provider module shape + ########################################################################### + def test_provider_module_shape(self): + module = import_module( + 'lexicon.providers.{0}'.format( + self.provider_name)) + + assert hasattr(module, 'ProviderParser') + assert hasattr(module, 'Provider') + if self.provider_name != 'auto': + assert hasattr(module, 'NAMESERVER_DOMAINS') + + assert callable(module.ProviderParser) + assert callable(module.Provider) + if self.provider_name != 'auto': + assert isinstance(module.NAMESERVER_DOMAINS, list) + ########################################################################### # Provider.authenticate() ########################################################################### @@ -64,9 +122,10 @@ @_vcr_integration_test def test_Provider_authenticate_with_unmanaged_domain_should_fail(self): - options = self._test_options() - options['domain'] = 'thisisadomainidonotown.com' - provider = self.Provider(options, self._test_engine_overrides()) + config = self._test_config() + config.add_config_source(DictConfigSource( + {'domain': 'thisisadomainidonotown.com'}), 0) + provider = self.Provider(config) with pytest.raises(Exception): provider.authenticate() @@ -76,27 +135,30 @@ @_vcr_integration_test def test_Provider_when_calling_create_record_for_A_with_valid_name_and_content(self): provider = self._construct_authenticated_provider() - assert provider.create_record('A','localhost','127.0.0.1') + assert provider.create_record('A', 'localhost', '127.0.0.1') @_vcr_integration_test def test_Provider_when_calling_create_record_for_CNAME_with_valid_name_and_content(self): provider = self._construct_authenticated_provider() - assert provider.create_record('CNAME','docs','docs.example.com') + assert provider.create_record('CNAME', 'docs', 'docs.example.com') @_vcr_integration_test def test_Provider_when_calling_create_record_for_TXT_with_valid_name_and_content(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','_acme-challenge.test','challengetoken') + assert provider.create_record( + 'TXT', '_acme-challenge.test', 'challengetoken') @_vcr_integration_test def test_Provider_when_calling_create_record_for_TXT_with_full_name_and_content(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.full.{0}".format(self.domain),'challengetoken') + assert provider.create_record( + 'TXT', "_acme-challenge.full.{0}".format(self.domain), 'challengetoken') @_vcr_integration_test def test_Provider_when_calling_create_record_for_TXT_with_fqdn_name_and_content(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.fqdn.{0}.".format(self.domain),'challengetoken') + assert provider.create_record( + 'TXT', "_acme-challenge.fqdn.{0}.".format(self.domain), 'challengetoken') ########################################################################### # Provider.list_records() @@ -109,8 +171,8 @@ @_vcr_integration_test def test_Provider_when_calling_list_records_with_name_filter_should_return_record(self): provider = self._construct_authenticated_provider() - provider.create_record('TXT','random.test','challengetoken') - records = provider.list_records('TXT','random.test') + provider.create_record('TXT', 'random.test', 'challengetoken') + records = provider.list_records('TXT', 'random.test') assert len(records) == 1 assert records[0]['content'] == 'challengetoken' assert records[0]['type'] == 'TXT' @@ -119,8 +181,10 @@ @_vcr_integration_test def test_Provider_when_calling_list_records_with_full_name_filter_should_return_record(self): provider = self._construct_authenticated_provider() - provider.create_record('TXT','random.fulltest.{0}'.format(self.domain),'challengetoken') - records = provider.list_records('TXT','random.fulltest.{0}'.format(self.domain)) + provider.create_record('TXT', 'random.fulltest.{0}'.format( + self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'random.fulltest.{0}'.format(self.domain)) assert len(records) == 1 assert records[0]['content'] == 'challengetoken' assert records[0]['type'] == 'TXT' @@ -129,8 +193,10 @@ @_vcr_integration_test def test_Provider_when_calling_list_records_with_fqdn_name_filter_should_return_record(self): provider = self._construct_authenticated_provider() - provider.create_record('TXT','random.fqdntest.{0}.'.format(self.domain),'challengetoken') - records = provider.list_records('TXT','random.fqdntest.{0}.'.format(self.domain)) + provider.create_record('TXT', 'random.fqdntest.{0}.'.format( + self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'random.fqdntest.{0}.'.format(self.domain)) assert len(records) == 1 assert records[0]['content'] == 'challengetoken' assert records[0]['type'] == 'TXT' @@ -139,8 +205,10 @@ @_vcr_integration_test def test_Provider_when_calling_list_records_after_setting_ttl(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"ttl.fqdn.{0}.".format(self.domain),'ttlshouldbe3600') - records = provider.list_records('TXT','ttl.fqdn.{0}'.format(self.domain)) + assert provider.create_record( + 'TXT', "ttl.fqdn.{0}.".format(self.domain), 'ttlshouldbe3600') + records = provider.list_records( + 'TXT', 'ttl.fqdn.{0}'.format(self.domain)) assert len(records) == 1 assert str(records[0]['ttl']) == str(3600) @@ -162,29 +230,38 @@ @_vcr_integration_test def test_Provider_when_calling_update_record_should_modify_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','orig.test','challengetoken') - records = provider.list_records('TXT','orig.test') - assert provider.update_record(records[0].get('id', None),'TXT','updated.test','challengetoken') + assert provider.create_record('TXT', 'orig.test', 'challengetoken') + records = provider.list_records('TXT', 'orig.test') + assert provider.update_record(records[0].get( + 'id', None), 'TXT', 'updated.test', 'challengetoken') @_vcr_integration_test def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','orig.nameonly.test','challengetoken') - assert provider.update_record(None,'TXT','orig.nameonly.test','updated') + assert provider.create_record( + 'TXT', 'orig.nameonly.test', 'challengetoken') + assert provider.update_record( + None, 'TXT', 'orig.nameonly.test', 'updated') @_vcr_integration_test def test_Provider_when_calling_update_record_with_full_name_should_modify_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','orig.testfull.{0}'.format(self.domain),'challengetoken') - records = provider.list_records('TXT','orig.testfull.{0}'.format(self.domain)) - assert provider.update_record(records[0].get('id', None),'TXT','updated.testfull.{0}'.format(self.domain),'challengetoken') + assert provider.create_record( + 'TXT', 'orig.testfull.{0}'.format(self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'orig.testfull.{0}'.format(self.domain)) + assert provider.update_record(records[0].get( + 'id', None), 'TXT', 'updated.testfull.{0}'.format(self.domain), 'challengetoken') @_vcr_integration_test def test_Provider_when_calling_update_record_with_fqdn_name_should_modify_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','orig.testfqdn.{0}.'.format(self.domain),'challengetoken') - records = provider.list_records('TXT','orig.testfqdn.{0}.'.format(self.domain)) - assert provider.update_record(records[0].get('id', None),'TXT','updated.testfqdn.{0}.'.format(self.domain),'challengetoken') + assert provider.create_record( + 'TXT', 'orig.testfqdn.{0}.'.format(self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'orig.testfqdn.{0}.'.format(self.domain)) + assert provider.update_record(records[0].get( + 'id', None), 'TXT', 'updated.testfqdn.{0}.'.format(self.domain), 'challengetoken') ########################################################################### # Provider.delete_record() @@ -192,34 +269,42 @@ @_vcr_integration_test def test_Provider_when_calling_delete_record_by_identifier_should_remove_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','delete.testid','challengetoken') - records = provider.list_records('TXT','delete.testid') + assert provider.create_record('TXT', 'delete.testid', 'challengetoken') + records = provider.list_records('TXT', 'delete.testid') assert provider.delete_record(records[0]['id']) - records = provider.list_records('TXT','delete.testid') + records = provider.list_records('TXT', 'delete.testid') assert len(records) == 0 @_vcr_integration_test def test_Provider_when_calling_delete_record_by_filter_should_remove_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT','delete.testfilt','challengetoken') - assert provider.delete_record(None, 'TXT','delete.testfilt','challengetoken') - records = provider.list_records('TXT','delete.testfilt') + assert provider.create_record( + 'TXT', 'delete.testfilt', 'challengetoken') + assert provider.delete_record( + None, 'TXT', 'delete.testfilt', 'challengetoken') + records = provider.list_records('TXT', 'delete.testfilt') assert len(records) == 0 @_vcr_integration_test def test_Provider_when_calling_delete_record_by_filter_with_full_name_should_remove_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT', 'delete.testfull.{0}'.format(self.domain),'challengetoken') - assert provider.delete_record(None, 'TXT', 'delete.testfull.{0}'.format(self.domain),'challengetoken') - records = provider.list_records('TXT', 'delete.testfull.{0}'.format(self.domain)) + assert provider.create_record( + 'TXT', 'delete.testfull.{0}'.format(self.domain), 'challengetoken') + assert provider.delete_record( + None, 'TXT', 'delete.testfull.{0}'.format(self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'delete.testfull.{0}'.format(self.domain)) assert len(records) == 0 @_vcr_integration_test def test_Provider_when_calling_delete_record_by_filter_with_fqdn_name_should_remove_record(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT', 'delete.testfqdn.{0}.'.format(self.domain),'challengetoken') - assert provider.delete_record(None, 'TXT', 'delete.testfqdn.{0}.'.format(self.domain),'challengetoken') - records = provider.list_records('TXT', 'delete.testfqdn.{0}.'.format(self.domain)) + assert provider.create_record( + 'TXT', 'delete.testfqdn.{0}.'.format(self.domain), 'challengetoken') + assert provider.delete_record( + None, 'TXT', 'delete.testfqdn.{0}.'.format(self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', 'delete.testfqdn.{0}.'.format(self.domain)) assert len(records) == 0 ########################################################################### @@ -230,112 +315,152 @@ @_vcr_integration_test def test_Provider_when_calling_create_record_with_duplicate_records_should_be_noop(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.noop.{0}.".format(self.domain),'challengetoken') - assert provider.create_record('TXT',"_acme-challenge.noop.{0}.".format(self.domain),'challengetoken') - records = provider.list_records('TXT',"_acme-challenge.noop.{0}.".format(self.domain)) + assert provider.create_record( + 'TXT', "_acme-challenge.noop.{0}.".format(self.domain), 'challengetoken') + assert provider.create_record( + 'TXT', "_acme-challenge.noop.{0}.".format(self.domain), 'challengetoken') + records = provider.list_records( + 'TXT', "_acme-challenge.noop.{0}.".format(self.domain)) assert len(records) == 1 @pytest.mark.ext_suite_1 @_vcr_integration_test def test_Provider_when_calling_create_record_multiple_times_should_create_record_set(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.createrecordset.{0}.".format(self.domain),'challengetoken1') - assert provider.create_record('TXT',"_acme-challenge.createrecordset.{0}.".format(self.domain),'challengetoken2') + assert provider.create_record( + 'TXT', "_acme-challenge.createrecordset.{0}.".format(self.domain), 'challengetoken1') + assert provider.create_record( + 'TXT', "_acme-challenge.createrecordset.{0}.".format(self.domain), 'challengetoken2') @pytest.mark.ext_suite_1 @_vcr_integration_test def test_Provider_when_calling_list_records_with_invalid_filter_should_be_empty_list(self): provider = self._construct_authenticated_provider() - records = provider.list_records('TXT','filter.thisdoesnotexist.{0}'.format(self.domain)) + records = provider.list_records( + 'TXT', 'filter.thisdoesnotexist.{0}'.format(self.domain)) assert len(records) == 0 @pytest.mark.ext_suite_1 @_vcr_integration_test def test_Provider_when_calling_list_records_should_handle_record_sets(self): provider = self._construct_authenticated_provider() - provider.create_record('TXT',"_acme-challenge.listrecordset.{0}.".format(self.domain),'challengetoken1') - provider.create_record('TXT',"_acme-challenge.listrecordset.{0}.".format(self.domain),'challengetoken2') - records = provider.list_records('TXT','_acme-challenge.listrecordset.{0}.'.format(self.domain)) + provider.create_record( + 'TXT', "_acme-challenge.listrecordset.{0}.".format(self.domain), 'challengetoken1') + provider.create_record( + 'TXT', "_acme-challenge.listrecordset.{0}.".format(self.domain), 'challengetoken2') + records = provider.list_records( + 'TXT', '_acme-challenge.listrecordset.{0}.'.format(self.domain)) assert len(records) == 2 @pytest.mark.ext_suite_1 @_vcr_integration_test def test_Provider_when_calling_delete_record_with_record_set_name_remove_all(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.deleterecordset.{0}.".format(self.domain),'challengetoken1') - assert provider.create_record('TXT',"_acme-challenge.deleterecordset.{0}.".format(self.domain),'challengetoken2') - - assert provider.delete_record(None, 'TXT', '_acme-challenge.deleterecordset.{0}.'.format(self.domain)) - records = provider.list_records('TXT', '_acme-challenge.deleterecordset.{0}.'.format(self.domain)) + assert provider.create_record( + 'TXT', "_acme-challenge.deleterecordset.{0}.".format(self.domain), 'challengetoken1') + assert provider.create_record( + 'TXT', "_acme-challenge.deleterecordset.{0}.".format(self.domain), 'challengetoken2') + + assert provider.delete_record( + None, 'TXT', '_acme-challenge.deleterecordset.{0}.'.format(self.domain)) + records = provider.list_records( + 'TXT', '_acme-challenge.deleterecordset.{0}.'.format(self.domain)) assert len(records) == 0 @pytest.mark.ext_suite_1 @_vcr_integration_test def test_Provider_when_calling_delete_record_with_record_set_by_content_should_leave_others_untouched(self): provider = self._construct_authenticated_provider() - assert provider.create_record('TXT',"_acme-challenge.deleterecordinset.{0}.".format(self.domain),'challengetoken1') - assert provider.create_record('TXT',"_acme-challenge.deleterecordinset.{0}.".format(self.domain),'challengetoken2') - - assert provider.delete_record(None, 'TXT', '_acme-challenge.deleterecordinset.{0}.'.format(self.domain),'challengetoken1') - records = provider.list_records('TXT', '_acme-challenge.deleterecordinset.{0}.'.format(self.domain)) + assert provider.create_record( + 'TXT', "_acme-challenge.deleterecordinset.{0}.".format(self.domain), 'challengetoken1') + assert provider.create_record( + 'TXT', "_acme-challenge.deleterecordinset.{0}.".format(self.domain), 'challengetoken2') + + assert provider.delete_record( + None, 'TXT', '_acme-challenge.deleterecordinset.{0}.'.format(self.domain), 'challengetoken1') + records = provider.list_records( + 'TXT', '_acme-challenge.deleterecordinset.{0}.'.format(self.domain)) assert len(records) == 1 # Private helpers, mimicing the auth_* options provided by the Client # http://stackoverflow.com/questions/6229073/how-to-make-a-python-dictionary-that-returns-key-for-keys-missing-from-the-dicti - """ - This method lets you set options that are passed into the Provider. see lexicon/providers/base.py for a full list - of options available. In general you should not need to override this method. Just override `self.domain` - - Any parameters that you expect to be passed to the provider via the cli, like --auth_username and --auth_token, will - be present during the tests, with a 'placeholder_' prefix. - - options['auth_password'] == 'placeholder_auth_password' - options['auth_username'] == 'placeholder_auth_username' - options['unique_provider_option'] == 'placeholder_unique_provider_option' - - """ - def _test_options(self): - cmd_options = SafeOptions() - cmd_options['domain'] = self.domain - cmd_options.update(env_auth_options(self.provider_name)) - return cmd_options - - """ - This method lets you override engine options. You must ensure the `fallbackFn` is defined, so your override might look like: - - def _test_engine_overrides(self): - overrides = super(DnsmadeeasyProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'http://api.sandbox.dnsmadeeasy.com/V2.0'}) - return overrides - - In general you should not need to override this method unless you need to override a provider setting only during testing. - Like `api_endpoint`. - """ - def _test_engine_overrides(self): - overrides = { - 'fallbackFn': (lambda x: 'placeholder_' + x) - } - return overrides - - """ - A path customized for the provider's fixture. - The default path is, for example: - {provider}/IntegrationTests - but if the test is a `provider_variant`, the path is customized to the variant: - {provider}/{variant_name}-IntegrationTests - """ + def _test_config(self): + """ + This method construct a ConfigResolver suitable for tests. + This will resolve any parameters required by Lexicon or the provider in the following order: + * parameters that matches the ones provided by _test_parameters_overrides + * parameters that matches existing environment variables at the time of test execution + * parameters processed throught the lambda provided by _test_fallback_fn. + + See lexicon/providers/base.py for a full list of parameters available. + You should not override this method. Just override `self.domain`, or use _test_parameters_overrides() + to configure specific parameters for the tests. + + Any parameters that you expect to be passed to the provider via the cli, like --auth_username and --auth_token, will + be present during the tests, with a 'placeholder_' prefix. + + options['auth_password'] == 'placeholder_auth_password' + options['auth_username'] == 'placeholder_auth_username' + options['unique_provider_option'] == 'placeholder_unique_provider_option' + + You can change this behavior by overriding _test_fallback_fn(). + + """ + config = ConfigResolver() + # First we load the overrides + overrides = self._test_parameters_overrides() + overrides['domain'] = self.domain + overrides['provider_name'] = self.provider_name + config.with_config_source(EngineOverrideConfigSource(overrides)) + + # Then we get environment variables + config.with_env() + + # And finally we provide the fallback function + config.with_config_source( + FallbackConfigSource(self._test_fallback_fn())) + + return config + + def _test_parameters_overrides(self): + """ + This method gives an object whose keys are some provider or lexicon parameters expected during a test. + If a parameter match on of the key during a test, the associated value will be used authoritatively. + + Example: + {'auth_token': 'AUTH_TOKEN'} => if the provider require to use auth_token, its value will be always AUTH_TOKEN. + + By default no value is overriden. + """ + return {} + + def _test_fallback_fn(self): + """ + This method gives a fallback lambda for any provider parameter that have not been resolved. + By default it will return 'placeholder_[parameter_name]' for a particular parameter + (eg. placeholder_auth_token for auth_token). + """ + return lambda x: 'placeholder_' + x + def _cassette_path(self, fixture_subpath): + """ + A path customized for the provider's fixture. + The default path is, for example: + {provider}/IntegrationTests + but if the test is a `provider_variant`, the path is customized to the variant: + {provider}/{variant_name}-IntegrationTests + """ if self.provider_variant: return "{0}/{1}-{2}".format(self.provider_name, self.provider_variant, fixture_subpath) else: return "{0}/{1}".format(self.provider_name, fixture_subpath) - """ - Construct a new provider, and authenticate it against the target DNS provider API. - """ def _construct_authenticated_provider(self): - provider = self.Provider(self._test_options(), self._test_engine_overrides()) + """ + Construct a new provider, and authenticate it against the target DNS provider API. + """ + provider = self.Provider(self._test_config()) provider.authenticate() return provider @@ -344,10 +469,13 @@ def _filter_headers(self): return [] + def _filter_query_parameters(self): return [] + def _filter_post_data_parameters(self): return [] + def _filter_response(self, response): """Filter any sensitive data out of the providers response. `response` is a Python object with the same structure as all the response sections diff -Nru lexicon-2.7.12/tests/providers/test_aurora.py lexicon-3.0.8/tests/providers/test_aurora.py --- lexicon-2.7.12/tests/providers/test_aurora.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_aurora.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,16 +1,21 @@ # Test for one implementation of the interface -from lexicon.providers.aurora import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.aurora import Provider + # 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 define_tests.TheTests + + class AuroraProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'aurora' domain = 'example.nl' + def _filter_headers(self): return ['Authorization'] diff -Nru lexicon-2.7.12/tests/providers/test_auto.py lexicon-3.0.8/tests/providers/test_auto.py --- lexicon-2.7.12/tests/providers/test_auto.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_auto.py 2019-01-03 16:26:53.000000000 +0000 @@ -4,14 +4,15 @@ import mock import pytest - -from lexicon.providers.auto import Provider -from lexicon.providers.auto import _get_ns_records_domains_for_domain from integration_tests import IntegrationTests +from lexicon.providers.auto import Provider, _get_ns_records_domains_for_domain + -# This fixture ensures to mock _get_ns_records_domains_for_domain, in order to not rely +# This fixture ensures to mock _get_ns_records_domains_for_domain, in order to not rely # on the machine on which the test is done, as this function call nslookup. # Then it will prevent errors where there is no network or tested domain do not exists anymore. + + @pytest.fixture(autouse=True) def nslookup_mock(request): _ignore_nslookup_mock = request.node.get_marker('ignore_nslookup_mock') @@ -25,6 +26,8 @@ yield fixture # Guys, are we online ? + + def there_is_no_network(): try: socket.create_connection(("www.google.com", 80)) @@ -36,7 +39,9 @@ # 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 OvhProviderTests(TestCase, IntegrationTests): + + +class AutoProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'auto' @@ -45,11 +50,11 @@ def _filter_headers(self): return ['X-Ovh-Application', 'X-Ovh-Consumer', 'X-Ovh-Signature'] - # Override _test_options to call env_auth_options and then import auth config from env variables - def _test_options(self): - cmd_options = super(OvhProviderTests, self)._test_options() - cmd_options.update({'auth_entrypoint':'ovh-eu'}) - return cmd_options + def _test_parameters_overrides(self): + return {'auth_entrypoint': 'ovh-eu'} + + def _test_fallback_fn(self): + return lambda x: 'placeholder_' + x if x != 'mapping_override' else None # Here we do not mock the function _get_ns_records_domains_for_domain # to effectively test the nslookup call and processing.\ diff -Nru lexicon-2.7.12/tests/providers/test_cloudflare.py lexicon-3.0.8/tests/providers/test_cloudflare.py --- lexicon-2.7.12/tests/providers/test_cloudflare.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_cloudflare.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,20 +1,25 @@ # Test for one implementation of the interface -from lexicon.providers.cloudflare import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.cloudflare import Provider + # 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 define_tests.TheTests + + class CloudflareProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'cloudflare' domain = 'capsulecd.com' + def _filter_headers(self): - return ['X-Auth-Email', 'X-Auth-Key','set-cookie'] + return ['X-Auth-Email', 'X-Auth-Key', 'set-cookie'] @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_cloudns.py lexicon-3.0.8/tests/providers/test_cloudns.py --- lexicon-2.7.12/tests/providers/test_cloudns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_cloudns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,8 +1,9 @@ # Test for one implementation of the interface -from lexicon.providers.cloudns import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.cloudns import Provider # Hook into testing framework by inheriting unittest.TestCase and reuse diff -Nru lexicon-2.7.12/tests/providers/test_cloudxns.py lexicon-3.0.8/tests/providers/test_cloudxns.py --- lexicon-2.7.12/tests/providers/test_cloudxns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_cloudxns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,21 +1,29 @@ # Test for one implementation of the interface -from lexicon.providers.cloudxns import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.cloudxns import Provider + # 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 define_tests.TheTests + + class CloudXNSProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'cloudxns' domain = 'capsulecd.com' + def _filter_post_data_parameters(self): return ['login_token'] # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return + + def _test_parameters_overrides(self): + return {'api_endpoint': 'https://www.cloudxns.net/api2'} diff -Nru lexicon-2.7.12/tests/providers/test_conoha.py lexicon-3.0.8/tests/providers/test_conoha.py --- lexicon-2.7.12/tests/providers/test_conoha.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_conoha.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,22 +1,27 @@ # Test for one implementation of the interface -from lexicon.providers.conoha import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.conoha import Provider + # 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 define_tests.TheTests + + class ConohaProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'conoha' domain = 'narusejun.com' - def _test_engine_overrides(self): - overrides = super(ConohaProviderTests, self)._test_engine_overrides() - overrides['fallbackFn'] = (lambda x: 'placeholder_' + x if x != 'priority' else '') - return overrides + def _test_parameters_overrides(self): + return {'region': 'tyo1'} + + def _test_fallback_fn(self): + return lambda x: None if x in ('priority') else 'placeholder_' + x def _filter_post_data_parameters(self): return ['auth'] diff -Nru lexicon-2.7.12/tests/providers/test_constellix.py lexicon-3.0.8/tests/providers/test_constellix.py --- lexicon-2.7.12/tests/providers/test_constellix.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_constellix.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,11 +1,15 @@ -from lexicon.providers.constellix import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.constellix import Provider + # Constellix does not currently have a sandbox and they enforce domain # uniqueness across the service. You'll need your own production credentials # and a unique domain name if you want to run these tests natively. + + class ConstellixProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'constellix' @@ -13,4 +17,3 @@ def _filter_headers(self): return ['x-cnsdns-apiKey', 'x-cnsdns-hmac', 'x-cnsdns-requestDate'] - diff -Nru lexicon-2.7.12/tests/providers/test_digitalocean.py lexicon-3.0.8/tests/providers/test_digitalocean.py --- lexicon-2.7.12/tests/providers/test_digitalocean.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_digitalocean.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.digitalocean import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.digitalocean import Provider + # 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 define_tests.TheTests + + class DigitalOceanProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'digitalocean' domain = 'capsulecd.com' + def _filter_headers(self): return ['Authorization'] @@ -21,4 +26,4 @@ @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_dnsimple.py lexicon-3.0.8/tests/providers/test_dnsimple.py --- lexicon-2.7.12/tests/providers/test_dnsimple.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_dnsimple.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,28 +1,27 @@ # Test for one implementation of the interface -from lexicon.providers.dnsimple import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.dnsimple import Provider + # 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 define_tests.TheTests + + class DnsimpleProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'dnsimple' domain = 'lexicontest.us' - def _test_engine_overrides(self): - overrides = super(DnsimpleProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'https://api.sandbox.dnsimple.com/v2'}) - return overrides - - # Override _test_options to call env_auth_options and then import auth config from env variables - def _test_options(self): - cmd_options = super(DnsimpleProviderTests, self)._test_options() - cmd_options['regions'] = ['global'] - return cmd_options + def _test_parameters_overrides(self): + return { + 'api_endpoint': 'https://api.sandbox.dnsimple.com/v2', + 'region': 'global' + } def _filter_headers(self): - return ['Authorization','set-cookie','X-Dnsimple-OTP'] + return ['Authorization', 'set-cookie', 'X-Dnsimple-OTP'] diff -Nru lexicon-2.7.12/tests/providers/test_dnsmadeeasy.py lexicon-3.0.8/tests/providers/test_dnsmadeeasy.py --- lexicon-2.7.12/tests/providers/test_dnsmadeeasy.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_dnsmadeeasy.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,28 @@ # Test for one implementation of the interface -from lexicon.providers.dnsmadeeasy import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.dnsmadeeasy import Provider + # 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 define_tests.TheTests + + class DnsmadeeasyProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'dnsmadeeasy' domain = 'capsulecd.com' - def _test_engine_overrides(self): - overrides = super(DnsmadeeasyProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'http://api.sandbox.dnsmadeeasy.com/V2.0'}) - return overrides + def _test_parameters_overrides(self): + return {'api_endpoint': 'http://api.sandbox.dnsmadeeasy.com/V2.0'} def _filter_headers(self): return ['x-dnsme-apiKey', 'x-dnsme-hmac', 'Authorization'] @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_dnspark.py lexicon-3.0.8/tests/providers/test_dnspark.py --- lexicon-2.7.12/tests/providers/test_dnspark.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_dnspark.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.dnspark import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.dnspark import Provider + # 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 define_tests.TheTests + + class DnsParkProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'dnspark' domain = 'capsulecd.com' + def _filter_headers(self): return ['Authorization'] @@ -27,4 +32,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_dnspod.py lexicon-3.0.8/tests/providers/test_dnspod.py --- lexicon-2.7.12/tests/providers/test_dnspod.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_dnspod.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.dnspod import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.dnspod import Provider + # 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 define_tests.TheTests + + class DnsPodProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'dnspod' domain = 'capsulecd.com' + def _filter_post_data_parameters(self): return ['login_token'] @@ -27,4 +32,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_easydns.py lexicon-3.0.8/tests/providers/test_easydns.py --- lexicon-2.7.12/tests/providers/test_easydns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_easydns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,28 @@ # Test for one implementation of the interface -from lexicon.providers.easydns import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.easydns import Provider + # 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 define_tests.TheTests + + class EasyDnsProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'easydns' domain = 'easydnstemp.com' - - def _test_engine_overrides(self): - overrides = super(EasyDnsProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'http://sandbox.rest.easydns.net'}) - return overrides + def _test_parameters_overrides(self): + return {'api_endpoint': 'http://sandbox.rest.easydns.net'} def _filter_headers(self): return ['Authorization'] + def _filter_query_parameters(self): return ['_key', '_user'] @@ -32,4 +34,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_easyname.py lexicon-3.0.8/tests/providers/test_easyname.py --- lexicon-2.7.12/tests/providers/test_easyname.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_easyname.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,22 @@ +# Test for one implementation of the interface +from unittest import TestCase + +from bs4 import BeautifulSoup +from integration_tests import IntegrationTests +from lexicon.providers.easyname import Provider + + +class EasynameProviderTests(TestCase, IntegrationTests): + + Provider = Provider + provider_name = 'easyname' + domain = 'lexicontest.astzweig.de' + + def _filter_post_data_parameters(self): + return ['username', 'password'] + + def _filter_headers(self): + return ['Cookie'] + + def _test_fallback_fn(self): + return lambda x: 'placeholder_' + x if x != 'priority' else '' diff -Nru lexicon-2.7.12/tests/providers/test_exoscale.py lexicon-3.0.8/tests/providers/test_exoscale.py --- lexicon-2.7.12/tests/providers/test_exoscale.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_exoscale.py 2019-01-03 16:26:53.000000000 +0000 @@ -3,9 +3,9 @@ from unittest import TestCase import pytest +from integration_tests import IntegrationTests from lexicon.providers.exoscale import Provider -from integration_tests import IntegrationTests """ To set enable live testing against the Exoscale API. @@ -31,15 +31,5 @@ provider_name = "exoscale" domain = "lexicontest.com" - def _test_engine_overrides(self): - overrides = super(ExoscaleProviderTests, self)._test_engine_overrides() - env_endpoint = os.getenv("EXOSCALE_DNS_ENDPOINT") - if env_endpoint: - overrides.update({"api_endpoint": env_endpoint}) - overrides["fallbackFn"] = ( - lambda x: "placeholder_" + x if x != "prio" else "" - ) - return overrides - def _filter_headers(self): return ["X-DNS-Token", "x-request-id"] diff -Nru lexicon-2.7.12/tests/providers/test_gandi.py lexicon-3.0.8/tests/providers/test_gandi.py --- lexicon-2.7.12/tests/providers/test_gandi.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_gandi.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,14 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.gandi import Provider -from lexicon.common.options_handler import env_auth_options -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.gandi import Provider + # 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 define_tests.TheTests + class GandiRPCProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -16,10 +18,9 @@ domain = 'reachlike.ca' provider_variant = 'RPC' - def _test_options(self): - cmd_options = super(GandiRPCProviderTests, self)._test_options() - cmd_options['api_protocol'] = 'rpc' - return cmd_options + def _test_parameters_overrides(self): + return {'api_protocol': 'rpc'} + class GandiRESTProviderTests(TestCase, IntegrationTests): @@ -31,8 +32,5 @@ def _filter_headers(self): return ['X-Api-Key'] - def _test_options(self): - cmd_options = super(GandiRESTProviderTests, self)._test_options() - cmd_options['api_protocol'] = 'rest' - return cmd_options - + def _test_parameters_overrides(self): + return {'api_protocol': 'rest'} diff -Nru lexicon-2.7.12/tests/providers/test_gehirn.py lexicon-3.0.8/tests/providers/test_gehirn.py --- lexicon-2.7.12/tests/providers/test_gehirn.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_gehirn.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,8 +1,10 @@ # Test for one implementation of the interface -from lexicon.providers.gehirn import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.gehirn import Provider + # Hook into testing framework by inheriting unittest.TestCase and reuse # the tests which *each and every* implementation of the interface must @@ -22,4 +24,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_glesys.py lexicon-3.0.8/tests/providers/test_glesys.py --- lexicon-2.7.12/tests/providers/test_glesys.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_glesys.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.glesys import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.glesys import Provider + # 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 define_tests.TheTests + + class GlesysProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -24,4 +28,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_godaddy.py lexicon-3.0.8/tests/providers/test_godaddy.py --- lexicon-2.7.12/tests/providers/test_godaddy.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_godaddy.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,13 +1,16 @@ # Test for one implementation of the interface from unittest import TestCase -from lexicon.providers.godaddy import Provider -from integration_tests import IntegrationTests import pytest +from integration_tests import IntegrationTests +from lexicon.providers.godaddy import Provider + # 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 GoDaddyProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -15,4 +18,4 @@ domain = 'fullm3tal.online' def _filter_headers(self): - return ['Authorization'] \ No newline at end of file + return ['Authorization'] diff -Nru lexicon-2.7.12/tests/providers/test_googleclouddns.py lexicon-3.0.8/tests/providers/test_googleclouddns.py --- lexicon-2.7.12/tests/providers/test_googleclouddns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_googleclouddns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,9 +1,10 @@ # Test for one implementation of the interface from unittest import TestCase -from lexicon.providers.googleclouddns import Provider -from integration_tests import IntegrationTests import pytest +from integration_tests import IntegrationTests +from lexicon.providers.googleclouddns import Provider + # All data in the following service_account base64-encoded file have been invalidated service_account_info_base64 = 'ew0KICAidHlwZSI6ICJzZXJ2aWNlX2FjY291bnQiLA0KICAicHJvamVjdF9pZCI6ICJuYW1lZC1hcmNod2F5LTIwOTQxOCIsDQogICJwcml2YXRlX2tleV9pZCI6ICIyMmI1ZDAyZWM2MDA4OTQ3OTg2NzljYzlhYzdiNDJlZGExMDBiODg2IiwNCiAgInByaXZhdGVfa2V5IjogIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuTUlJRXZBSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS1l3Z2dTaUFnRUFBb0lCQVFEQU9ZUUdOcTZsN2tCT1xuNDMwQjZPWExtQzZUcEVuRDdzL2pqZFI0UFhFSnZkenBkQm5OT3h5cktXcm9Sa0ZheFJCY1BNMUJBODJsMVBkZFxuWUtYdWkrTmpKUVdqc3hoTkNNSGN5Uzl5T3NDYmZvMWxrRFpWU3dQRitXbnB3aDMydTVGSGFSUlpacnVaM29FNFxucjUrbzd4NS9NWWl2RlBiZlZSeEZNNi9lYkgwNFZ6NytjUms0ZjdZQktZNXYzTHFob2JnVW5nZGlHd29BTEs2TVxuS1hDKzF6SXRTVGdETHdCblRTU0xvSVRVNXNhZEY0L2dqVmNKTkxNM1RaQmU0djV3MGtPOU9ieTFsOVZVcHh3ZFxuZDlyRHBFR2o0Y3FnWWZ3QkZZai9wNE13L1p1Rksra2VlZDBrQjgyZEQ0M21jeDk5WWptTXBmd2FOWEp3L09XblxuanRnWWhyWk5BZ01CQUFFQ2dnRUFDd3JTeVh1WExVdUNNTFh6UHFxWEZzcTdkRHBHRFlZWXRhRDJZV0RnTHpmVFxucXFxRGQrMXJJRzc4NS9Kdk95eGlXL1lYTVdLclM5a3Z5NUtyZlloV0srSWEwSlJQYzA5ck9ZaHFIQlVCYnYxR1xuV0p6LzdnYms1TmpHeTRtZDZJaE9XR3lTSVcrY0c4THpKK000MS83Q2dQcUN1RklMTzNtYmFlTkYrVkJBb2oyUlxuUzhGZjlQUWRCejdGUFF5bENsODJmeUVRN2I0eGhwMGtoNEdiZ0JHMTJKc1FMQlFPUC9nK1lJdkp0SmVrVDJOWlxuckYxVXZybWZRc1N2UFdaYXFkVW81MGhiVEQyZUdvTlM4R2pGcFh5WTc5SXFZTmh3MTVaYlNVQXVoWGVndWRKelxueWtRYUgyUUY5am9YTjV6TkNJalhxL1U3aUhCK2QxOGRwcEkxOEFoWUVRS0JnUURuVzJPWGNsVUwxbVBSdE5XV1xuLzJxUzJidWpBVUlmR1pERjhURk0yZGJ0RFk4L04rejVkQWNMYndIWTNEYmt5djBVZlRRY0hlaXhyRFBlZkwrTlxudCtnK3BwWG1rWVVYbHNUZ0p0THRrZmlGWU5IbHJKeGNESVF5KzFPSzVlYjdCVUxsZEFzOXozT1FUOXVQS0U3SVxuWDNscDF6eXZzc0tQcjhGSXF6K2puYlgzVVFLQmdRRFVzeEpzSlI5dDJDckVwZEh3MGZOYjhqUzMzRDJXME44dlxuSUp6SWFCYlZvbjYrSGpmc2grZE05VitBR21RYWg2ODFoWE1xRmVQemdreFdNcHZ1UEhRZ2tHUlIyOTBpWjlwSVxuRmVBaUVCUmtNUWtNQUFIVFN2YlZXdWtCY2pIZFQ3UWpKc3NCd24xbTJWem1nUlBTMWVnZUNsQ1pMalZuWlhxM1xuQ0plNXZkeElQUUtCZ0FZREN2QjVpUm80cFBsakVKWE81MDhQbDEraC9iemZKakx1bEpCaHJNTVdNaDI3YjA0QVxuSk5xNE5MMFU0OXhJSmhGdE8zaHJrb3RqWlNtbjVqWmhqQWhzdmNKekQ1bFFVcWRjZXVpdmZWekI2bEprak4rYlxuZDZmM2ZmRkREaUNCdjM1RTZMSGZmU3BIMlBXOFgyZTNpMmtqcmJFSEhTVXN0UUlWYVI3d1R6VXhBb0dBWG9JeVxuN1ZxUlhIMXdnM0FxbUpheFMybVRneDZaUHlvUUFTQzhpVSsyMWJZZUd0dlNmWWJsZjR5SG9xUVhWckp6WjVTa1xuVjA3aXVwQnEydUloNXZsMW9BS0lrTmJncXlqNkZJMmp5WDdia0trNUc5dms4NzJiYjdHMVZxOG0rTzh4VzIwaFxuUnVia1VZN0RlS2hoNW95bFZyTytuRkdyNlFWdVFXWFFCUGdYcVFFQ2dZQXU5dkw0aGhvb2pjS1lFdXdhUDA1bFxuNHVGVGVoZEpSQTRXdU9TK1RYeG9WM1VXWUI3cDBjdnNUaWs3N1BITy9rU1pKQzZDMWZpTEM1aG5NT05FaFg0OVxuZCtFbkNaL2dyL3pGQ1BoV0VwbmZ4WFF0WkpWRVBnQW1CK01tcDNQSXdlWG9jQkhpMFFza1VJVzJrRGhtdTdmcFxuMEg1M1FadlpHaTd6MktuUnovcDRJdz09XG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iLA0KICAiY2xpZW50X2VtYWlsIjogInNlcnZpY2UtZG5zQG5hbWVkLWFyY2h3YXktMjA5NDE4LmlhbS5nc2VydmljZWFjY291bnQuY29tIiwNCiAgImNsaWVudF9pZCI6ICIxMTY2MDYxNjkyODU0MDQyMDUxNTAiLA0KICAiYXV0aF91cmkiOiAiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL2F1dGgiLA0KICAidG9rZW5fdXJpIjogImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsDQogICJhdXRoX3Byb3ZpZGVyX3g1MDlfY2VydF91cmwiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YxL2NlcnRzIiwNCiAgImNsaWVudF94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3JvYm90L3YxL21ldGFkYXRhL3g1MDkvc2VydmljZS1kbnMlNDBuYW1lZC1hcmNod2F5LTIwOTQxOC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSINCn0NCg==' @@ -11,6 +12,8 @@ # 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 GoogleCloudDnsTests(TestCase, IntegrationTests): Provider = Provider @@ -20,17 +23,14 @@ def _filter_headers(self): return ['Authorization'] - # WARNING ! + # WARNING ! # The body parameters 'access_token' and 'assertion' must be removed from the authentication phase. # However the body is not JSON encoded, so _filter_headers and _filter_query_parameters methods are of no use. # You will need to replace manually theses parameters from the cassettes by placeholders. - # Typically, + # Typically, # - for assertion with regex replace: assertion=[\w-%]+\.[\w-%]+\.[\w-%]+ => assertion=assertion_placeholder # - for access_token with regex replace: ya29\.c\.[\w-]+ => access_token_placeholder # Override _test_options to call env_auth_options and then import auth config from env variables - def _test_options(self): - cmd_options = super(GoogleCloudDnsTests, self)._test_options() - - cmd_options.update({'auth_service_account_info': 'base64::{0}'.format(service_account_info_base64)}) - return cmd_options \ No newline at end of file + def _test_parameters_overrides(self): + return {'auth_service_account_info': 'base64::{0}'.format(service_account_info_base64)} diff -Nru lexicon-2.7.12/tests/providers/test_henet.py lexicon-3.0.8/tests/providers/test_henet.py --- lexicon-2.7.12/tests/providers/test_henet.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_henet.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.henet import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.henet import Provider + # 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 FooProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'henet' domain = 'lexicontest.com' + def _filter_post_data_parameters(self): return ['email', 'pass'] diff -Nru lexicon-2.7.12/tests/providers/test_hetzner.py lexicon-3.0.8/tests/providers/test_hetzner.py --- lexicon-2.7.12/tests/providers/test_hetzner.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_hetzner.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,115 @@ +from unittest import TestCase +import os +import mock +import pytest +from bs4 import BeautifulSoup +import dns.resolver +from lexicon.providers.hetzner import Provider +from integration_tests import IntegrationTests + +def _no_dns_lookup(): + _domains = ['rimek.info', 'bettilaila.com'] + _resolver = dns.resolver.Resolver() + _resolver.lifetime = 1 + try: + for _domain in _domains: + _ = dns.resolver.zone_for_name(_domain, resolver=_resolver) + return False + except dns.exception.DNSException: + pass + return True + +class HetznerIntegrationTests(IntegrationTests): + + @pytest.fixture(autouse=True) + def dns_cname_mock(self, request): + _ignore_mock = request.node.get_marker('ignore_dns_cname_mock') + _domain_mock = self.domain + if request.node.name == 'test_Provider_authenticate_with_unmanaged_domain_should_fail': + _domain_mock = 'thisisadomainidonotown.com' + if _ignore_mock: + yield + else: + with mock.patch('lexicon.providers.hetzner.Provider._get_dns_cname', + return_value=(_domain_mock, [], None)) as fixture: + yield fixture + + @pytest.mark.skipif(_no_dns_lookup(), reason='No DNS resolution possible.') + @pytest.mark.ignore_dns_cname_mock + def test_get_dns_cname(self): + """Ensure that zone for name can be resolved through dns.resolver call.""" + _domain, _nameservers, _cname = Provider._get_dns_cname(('_acme-challenge.fqdn.{}.' + .format(self.domain)), False) + assert _domain == self.domain + assert _nameservers + assert not _cname + +class HetznerRobotProviderTests(TestCase, HetznerIntegrationTests): + + 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, HetznerIntegrationTests): + + 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', 'placeholder_username') + env_password = os.environ.get('LEXICON_HETZNER_KONSOLEH_PASSWORD', 'placeholder_password') + options = {'auth_account': 'konsoleh', + 'auth_username': env_username, + 'auth_password': env_password, + 'concatenate': 'no', + 'propagated': 'no', + 'latency': 1} + return options diff -Nru lexicon-2.7.12/tests/providers/test_internetbs.py lexicon-3.0.8/tests/providers/test_internetbs.py --- lexicon-2.7.12/tests/providers/test_internetbs.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_internetbs.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,28 @@ +# Test for one implementation of the interface +import os +from unittest import TestCase + +import pytest +from integration_tests import IntegrationTests +from lexicon.providers.internetbs import Provider + + +# 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 InternetbsProviderTests(TestCase, IntegrationTests): + + Provider = Provider + provider_name = 'internetbs' + domain = 'world-of-ysera.com' + + def _filter_query_parameters(self): + return ['ApiKey', 'Password'] + + def _test_parameters_overrides(self): + # workaround ENV problems during testing + env_key = os.environ.get('LEXICON_INTERNETBS_AUTH_KEY') + env_password = os.environ.get('LEXICON_INTERNETBS_AUTH_PASSWORD') + return {'auth_key': env_key, 'auth_password': env_password} diff -Nru lexicon-2.7.12/tests/providers/test_inwx.py lexicon-3.0.8/tests/providers/test_inwx.py --- lexicon-2.7.12/tests/providers/test_inwx.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_inwx.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,7 +1,7 @@ from unittest import TestCase -from lexicon.providers.inwx import Provider from integration_tests import IntegrationTests +from lexicon.providers.inwx import Provider class InwxProviderTests(TestCase, IntegrationTests): @@ -10,8 +10,7 @@ provider_name = 'inwx' domain = 'lexicon-testrunner.com' - def _test_options(self): - cmd_options = super(InwxProviderTests, self)._test_options() - # set testing endpoint to inwx ote service - cmd_options['endpoint'] = 'https://api.ote.domrobot.com/xmlrpc/' - return cmd_options + def _test_parameters_overrides(self): + return { + 'endpoint': 'https://api.ote.domrobot.com/xmlrpc/' + } diff -Nru lexicon-2.7.12/tests/providers/test_linode4.py lexicon-3.0.8/tests/providers/test_linode4.py --- lexicon-2.7.12/tests/providers/test_linode4.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_linode4.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,31 @@ # Test for one implementation of the interface -from lexicon.providers.linode4 import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.linode4 import Provider + # 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 Linode4ProviderTests(TestCase, IntegrationTests): - Provider = Provider - provider_name = 'linode4' - domain = 'lexicon-test.com' - def _filter_post_data_parameters(self): - return [] - - def _filter_headers(self): - return ['Authorization'] - - def _filter_query_parameters(self): - return [] - - @pytest.mark.skip(reason="can not set ttl when creating/updating records") - def test_Provider_when_calling_list_records_after_setting_ttl(self): - return + Provider = Provider + provider_name = 'linode4' + domain = 'lexicon-test.com' + + def _filter_post_data_parameters(self): + return [] + + def _filter_headers(self): + return ['Authorization'] + + def _filter_query_parameters(self): + return [] + + @pytest.mark.skip(reason="can not set ttl when creating/updating records") + def test_Provider_when_calling_list_records_after_setting_ttl(self): + return diff -Nru lexicon-2.7.12/tests/providers/test_linode.py lexicon-3.0.8/tests/providers/test_linode.py --- lexicon-2.7.12/tests/providers/test_linode.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_linode.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,31 @@ # Test for one implementation of the interface -from lexicon.providers.linode import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.linode import Provider + # 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 LinodeProviderTests(TestCase, IntegrationTests): - Provider = Provider - provider_name = 'linode' - domain = 'lexicon-example.com' - def _filter_post_data_parameters(self): - return [] - - def _filter_headers(self): - return [] - - def _filter_query_parameters(self): - return ['api_key'] - - @pytest.mark.skip(reason="can not set ttl when creating/updating records") - def test_Provider_when_calling_list_records_after_setting_ttl(self): - return + Provider = Provider + provider_name = 'linode' + domain = 'lexicon-example.com' + + def _filter_post_data_parameters(self): + return [] + + def _filter_headers(self): + return [] + + def _filter_query_parameters(self): + return ['api_key'] + + @pytest.mark.skip(reason="can not set ttl when creating/updating records") + def test_Provider_when_calling_list_records_after_setting_ttl(self): + return diff -Nru lexicon-2.7.12/tests/providers/test_localzone.py lexicon-3.0.8/tests/providers/test_localzone.py --- lexicon-2.7.12/tests/providers/test_localzone.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_localzone.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,43 @@ +# Test the localzone implementation of the interface +from unittest import TestCase + +import pytest +from integration_tests import IntegrationTests +from lexicon.providers.localzone import Provider + + +try: + from urllib.request import urlretrieve +except ImportError: + from urllib import urlretrieve + +# 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 define_tests.TheTests + + +class LocalzoneProviderTests(TestCase, IntegrationTests): + + Provider = Provider + provider_name = "localzone" + domain = "example.com" + file_uri = "https://raw.githubusercontent.com/ags-slc/localzone/master/tests/zonefiles/db.example.com" + filename, headers = urlretrieve(file_uri) + + def _test_parameters_overrides(self): + options = { + "filename": self.filename + } + + return options + + def _test_fallback_fn(self): + return lambda _: None + + @pytest.mark.skip(reason="localzone does not require authentication") + def test_Provider_authenticate(self): + return + + @pytest.mark.skip(reason="localzone does not require authentication") + def test_Provider_authenticate_with_unmanaged_domain_should_fail(self): + return diff -Nru lexicon-2.7.12/tests/providers/test_luadns.py lexicon-3.0.8/tests/providers/test_luadns.py --- lexicon-2.7.12/tests/providers/test_luadns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_luadns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.luadns import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.luadns import Provider + # 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 define_tests.TheTests + + class LuaDNSProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'luadns' domain = 'capsulecd.com' + def _filter_headers(self): return ['Authorization'] @@ -22,4 +27,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_memset.py lexicon-3.0.8/tests/providers/test_memset.py --- lexicon-2.7.12/tests/providers/test_memset.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_memset.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,8 +1,9 @@ # Test for one implementation of the interface -from lexicon.providers.memset import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.memset import Provider # Hook into testing framework by inheriting unittest.TestCase and reuse @@ -20,4 +21,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_namecheap.py lexicon-3.0.8/tests/providers/test_namecheap.py --- lexicon-2.7.12/tests/providers/test_namecheap.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_namecheap.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,10 +1,11 @@ # Test for one implementation of the interface -from lexicon.providers.namecheap import Provider -from lexicon.common.options_handler import env_auth_options -from integration_tests import IntegrationTests +import os from unittest import TestCase + import pytest -import os +from integration_tests import IntegrationTests +from lexicon.providers.namecheap import Provider + """ A note about running these tests against the live environment @@ -52,6 +53,8 @@ # 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 NamecheapProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -67,14 +70,13 @@ return env_domain or 'example-aptise.com' def _filter_query_parameters(self): - return ['ApiKey','UserName', 'ApiUser'] + return ['ApiKey', 'UserName', 'ApiUser'] - def _test_options(self): - options = super(NamecheapProviderTests, self)._test_options() - options.update({'auth_sandbox':True}) - options.update({'auth_client_ip':'127.0.0.1'}) - options.update(env_auth_options(self.provider_name)) - return options + def _test_parameters_overrides(self): + return { + 'auth_sandbox': True, + 'auth_client_ip': '127.0.0.1' + } @pytest.mark.skip(reason="can not set ttl when creating/updating records") def test_Provider_when_calling_list_records_after_setting_ttl(self): @@ -89,7 +91,7 @@ In orde to handle this, we run the tests on a second domain owned by another namecheap customer, but permissioned to this account. - + Note we define a `provider_variant`, which will change the cassette path. """ provider_variant = 'managed' diff -Nru lexicon-2.7.12/tests/providers/test_namesilo.py lexicon-3.0.8/tests/providers/test_namesilo.py --- lexicon-2.7.12/tests/providers/test_namesilo.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_namesilo.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,27 +1,29 @@ # Test for one implementation of the interface -from lexicon.providers.namesilo import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.namesilo import Provider + # 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 define_tests.TheTests + + class NameSiloProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'namesilo' domain = 'capsulecdfake.com' - def _test_engine_overrides(self): - overrides = super(NameSiloProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'http://sandbox.namesilo.com/api'}) - return overrides - def _filter_query_parameters(self): return ['key'] + def _test_parameters_overrides(self): + return {'api_endpoint': 'http://sandbox.namesilo.com/api'} + # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_nfsn.py lexicon-3.0.8/tests/providers/test_nfsn.py --- lexicon-2.7.12/tests/providers/test_nfsn.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_nfsn.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,40 @@ +# Test for one implementation of the interface +import os +from unittest import TestCase + +import pytest +from integration_tests import IntegrationTests +from lexicon.providers.nfsn import Provider + + +""" +Some small info about running live tests. + +NFSN doesn't have trial accounts, so these tests can only +be run by those with an NFSN account. NFSN also requires +you to have an API key. More info here: + +https://members.nearlyfreespeech.net/wiki/API/Introduction + +You'll need an account to access that page. + +Therefore, the following +parameters must be provided: + +- LEXICON_NFSN_USERNAME -> Your NFSN username +- LEXICON_NFSN_TOKEN -> Your API Key +- LEXICON_NFSN_DOMAIN -> Domain you want to test with +""" + +# 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 NFSNProviderTests(TestCase, IntegrationTests): + Provider = Provider + provider_name = 'nfsn' + domain = 'koupia.xyz' + + def _filter_headers(self): + return ['X-NFSN-Authentication'] diff -Nru lexicon-2.7.12/tests/providers/test_nsone.py lexicon-3.0.8/tests/providers/test_nsone.py --- lexicon-2.7.12/tests/providers/test_nsone.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_nsone.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.nsone import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.nsone import Provider + # 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 define_tests.TheTests + + class Ns1ProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'nsone' domain = 'lexicon-example.com' + def _filter_headers(self): return ['X-NSONE-Key', 'Authorization'] @@ -22,4 +27,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_onapp.py lexicon-3.0.8/tests/providers/test_onapp.py --- lexicon-2.7.12/tests/providers/test_onapp.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_onapp.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,6 +1,8 @@ from unittest import TestCase -from lexicon.providers.onapp import Provider + from integration_tests import IntegrationTests +from lexicon.providers.onapp import Provider + class OnappProviderTests(TestCase, IntegrationTests): @@ -11,7 +13,5 @@ def _filter_headers(self): return ['Authorization'] - def _test_options(self): - options = super(OnappProviderTests, self)._test_options() - options.update({'auth_server':'https://dashboard.dynomesh.com.au'}) - return options + def _test_parameters_overrides(self): + return {'auth_server': 'https://dashboard.dynomesh.com.au'} diff -Nru lexicon-2.7.12/tests/providers/test_online.py lexicon-3.0.8/tests/providers/test_online.py --- lexicon-2.7.12/tests/providers/test_online.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_online.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,28 @@ # Test for one implementation of the interface -from lexicon.providers.online import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.online import Provider + # 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 OnlineProviderTests(TestCase, IntegrationTests): - Provider = Provider - provider_name = 'online' - domain = 'capsulecd.com' - - def _filter_headers(self): - return ['Authorization', 'x-recruitment'] - - def _test_engine_overrides(self): - overrides = super(OnlineProviderTests, self)._test_engine_overrides() - overrides['fallbackFn'] = (lambda x: 'placeholder_' + x if x != 'priority' else '') - return overrides - - @pytest.mark.skip(reason="manipulating records by id is not supported") - def test_Provider_when_calling_delete_record_by_identifier_should_remove_record(self): - return + Provider = Provider + provider_name = 'online' + domain = 'capsulecd.com' + + def _filter_headers(self): + return ['Authorization', 'x-recruitment'] + + def _test_fallback_fn(self): + return lambda x: 'placeholder_' + x if x != 'priority' else '' + + @pytest.mark.skip(reason="manipulating records by id is not supported") + def test_Provider_when_calling_delete_record_by_identifier_should_remove_record(self): + return diff -Nru lexicon-2.7.12/tests/providers/test_ovh.py lexicon-3.0.8/tests/providers/test_ovh.py --- lexicon-2.7.12/tests/providers/test_ovh.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_ovh.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface from unittest import TestCase -from lexicon.providers.ovh import Provider -from integration_tests import IntegrationTests + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.ovh import Provider + # 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 OvhProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -16,8 +20,5 @@ def _filter_headers(self): return ['X-Ovh-Application', 'X-Ovh-Consumer', 'X-Ovh-Signature'] - # Override _test_options to call env_auth_options and then import auth config from env variables - def _test_options(self): - cmd_options = super(OvhProviderTests, self)._test_options() - cmd_options.update({'auth_entrypoint':'ovh-eu'}) - return cmd_options \ No newline at end of file + def _test_parameters_overrides(self): + return {'auth_entrypoint': 'ovh-eu'} diff -Nru lexicon-2.7.12/tests/providers/test_plesk.py lexicon-3.0.8/tests/providers/test_plesk.py --- lexicon-2.7.12/tests/providers/test_plesk.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_plesk.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.plesk import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.plesk import Provider + # 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 PleskProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -16,10 +20,8 @@ def _filter_headers(self): return ['HTTP_AUTH_LOGIN', 'HTTP_AUTH_PASSWD'] - def _test_options(self): - options = super(PleskProviderTests, self)._test_options() - options.update({'plesk_server':'https://quasispace.de:8443'}) - return options + def _test_parameters_overrides(self): + return {'plesk_server': 'https://quasispace.de:8443'} @pytest.mark.skip(reason="can not set ttl when creating/updating records") def test_Provider_when_calling_list_records_after_setting_ttl(self): diff -Nru lexicon-2.7.12/tests/providers/test_pointhq.py lexicon-3.0.8/tests/providers/test_pointhq.py --- lexicon-2.7.12/tests/providers/test_pointhq.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_pointhq.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.pointhq import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.pointhq import Provider + # 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 define_tests.TheTests + + class PointHqProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'pointhq' domain = 'capsulecd.com' + def _filter_headers(self): return ['Authorization'] @@ -22,4 +27,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_powerdns.py lexicon-3.0.8/tests/providers/test_powerdns.py --- lexicon-2.7.12/tests/providers/test_powerdns.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_powerdns.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,7 +1,8 @@ -from lexicon.providers.powerdns import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.powerdns import Provider # Hook into testing framework by inheriting unittest.TestCase and reuse @@ -16,10 +17,8 @@ def _filter_headers(self): return ['X-API-Key'] - def _test_options(self): - options = super(PowerdnsProviderTests, self)._test_options() - options.update({'pdns_server': 'https://dnsadmin.hhome.me', 'pdns_server_id': 'localhost'}) - return options + def _test_parameters_overrides(self): + return {'pdns_server': 'https://dnsadmin.hhome.me', 'pdns_server_id': 'localhost'} # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") @@ -30,4 +29,3 @@ def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): pytest.skip('Skipping extended suite') - diff -Nru lexicon-2.7.12/tests/providers/test_rackspace.py lexicon-3.0.8/tests/providers/test_rackspace.py --- lexicon-2.7.12/tests/providers/test_rackspace.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_rackspace.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,16 +1,19 @@ """"Test for rackspace implementation of the lexicon interface""" -from unittest import TestCase -import pytest import logging +from unittest import TestCase -from lexicon.providers.rackspace import Provider +import pytest from integration_tests import IntegrationTests +from lexicon.providers.rackspace import Provider + logger = logging.getLogger(__name__) # 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 define_tests.TheTests + + class RackspaceProviderTests(TestCase, IntegrationTests): """Tests the rackspace provider""" @@ -28,19 +31,15 @@ # Replace the auth_account, auth_username and auth_api_key as well as the # domain above with an actual domain you have added to Rackspace to # regenerate the fixtures - def _test_options(self): - options = super(RackspaceProviderTests, self)._test_options() + def _test_parameters_overrides(self): # Set this to 1 if you are making new recordings and set to 0 when # finished to make sure we don't actually sleep and waste time # when we are replaying. Rackspace API calls are async, so you place # the initial request and then make update calls to see if the action # is complete and has a response. - options.update({ + return { 'sleep_time': '0', - }) - return options + } - def _test_engine_overrides(self): - overrides = super(RackspaceProviderTests, self)._test_engine_overrides() - overrides['fallbackFn'] = (lambda x: 'placeholder_' + x if x != 'auth_token' else None) - return overrides + def _test_fallback_fn(self): + return lambda x: 'placeholder_' + x if x != 'auth_token' else None diff -Nru lexicon-2.7.12/tests/providers/test_rage4.py lexicon-3.0.8/tests/providers/test_rage4.py --- lexicon-2.7.12/tests/providers/test_rage4.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_rage4.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.rage4 import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.rage4 import Provider + # 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 define_tests.TheTests + + class Rage4ProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'rage4' domain = 'capsulecd.com' + def _filter_headers(self): return ['Authorization'] @@ -26,4 +31,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_route53.py lexicon-3.0.8/tests/providers/test_route53.py --- lexicon-2.7.12/tests/providers/test_route53.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_route53.py 2019-01-03 16:26:53.000000000 +0000 @@ -43,4 +43,4 @@ # @pytest.fixture(autouse=True) # def skip_suite(self, request): # if request.node.get_marker('ext_suite_1'): -# pytest.skip('Skipping extended suite') \ No newline at end of file +# pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_sakuracloud.py lexicon-3.0.8/tests/providers/test_sakuracloud.py --- lexicon-2.7.12/tests/providers/test_sakuracloud.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_sakuracloud.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.sakuracloud import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.sakuracloud import Provider + # 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 define_tests.TheTests + + class SakruaCloudProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'sakuracloud' domain = 'example.com' + def _filter_headers(self): return ['Authorization'] @@ -24,4 +29,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_softlayer.py lexicon-3.0.8/tests/providers/test_softlayer.py --- lexicon-2.7.12/tests/providers/test_softlayer.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_softlayer.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.softlayer import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.softlayer import Provider + # 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 define_tests.TheTests + + class SoftLayerProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -15,7 +19,7 @@ # SoftLayer does not provide a sandbox API; actual credentials are required # Keeping this here for when fixtures need to be regenerated - #def _test_options(self): + # def _test_options(self): # options = super(SoftLayerProviderTests, self)._test_options() # options.update({ # 'auth_username': 'foo', @@ -27,4 +31,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_subreg.py lexicon-3.0.8/tests/providers/test_subreg.py --- lexicon-2.7.12/tests/providers/test_subreg.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_subreg.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.subreg import Provider -from integration_tests import IntegrationTests from unittest import TestCase +from integration_tests import IntegrationTests +from lexicon.providers.subreg import Provider + + # 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 SubregProviderTests(TestCase, IntegrationTests): Provider = Provider diff -Nru lexicon-2.7.12/tests/providers/test_transip.py lexicon-3.0.8/tests/providers/test_transip.py --- lexicon-2.7.12/tests/providers/test_transip.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_transip.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,10 +1,12 @@ # Test for one implementation of the interface -from lexicon.providers.transip import Provider -from integration_tests import IntegrationTests, provider_vcr +import os +from tempfile import mkstemp from unittest import TestCase + import pytest -from tempfile import mkstemp -import os +from integration_tests import IntegrationTests, provider_vcr +from lexicon.providers.transip import Provider + FAKE_KEY = b""" -----BEGIN RSA PRIVATE KEY----- @@ -57,22 +59,26 @@ # Disable setUp and tearDown, and set a real username and key in # provider_opts to execute real calls - def _test_options(self): - options = super(TransipProviderTests, self)._test_options() + def _test_parameters_overrides(self): (_fake_fd, _fake_key) = mkstemp() _fake_file = os.fdopen(_fake_fd, 'wb', 1024) _fake_file.write(FAKE_KEY) _fake_file.close() self._fake_key = _fake_key - options.update({ + options = { 'auth_username': 'foo', 'auth_api_key': _fake_key - }) + } + return options def tearDown(self): - os.unlink(self._fake_key) + try: + os.unlink(self._fake_key) + except AttributeError: + # Method _test_options may not have been executed, in this case self._fake_key does not exist. + pass def _filter_headers(self): return ['Cookie'] diff -Nru lexicon-2.7.12/tests/providers/test_vultr.py lexicon-3.0.8/tests/providers/test_vultr.py --- lexicon-2.7.12/tests/providers/test_vultr.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_vultr.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,17 +1,22 @@ # Test for one implementation of the interface -from lexicon.providers.vultr import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.vultr import Provider + # 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 define_tests.TheTests + + class VultrProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'vultr' domain = 'capsulecd.com' + def _filter_headers(self): return ['API-Key'] @@ -23,4 +28,4 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') diff -Nru lexicon-2.7.12/tests/providers/test_yandex.py lexicon-3.0.8/tests/providers/test_yandex.py --- lexicon-2.7.12/tests/providers/test_yandex.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_yandex.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface -from lexicon.providers.yandex import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.yandex import Provider + # 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 define_tests.TheTests + + class YandexPDDProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -20,4 +24,4 @@ # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_zeit.py lexicon-3.0.8/tests/providers/test_zeit.py --- lexicon-2.7.12/tests/providers/test_zeit.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_zeit.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,12 +1,16 @@ # Test for one implementation of the interface from unittest import TestCase -from lexicon.providers.zeit import Provider -from integration_tests import IntegrationTests + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.zeit import Provider + # 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 ZeitProviderTests(TestCase, IntegrationTests): Provider = Provider @@ -15,7 +19,7 @@ def _filter_headers(self): return ['Authorization'] - + @pytest.mark.skip(reason="Records TTL are not supported by Zeit DNS") def test_Provider_when_calling_list_records_after_setting_ttl(self): - return \ No newline at end of file + return diff -Nru lexicon-2.7.12/tests/providers/test_zonomi.py lexicon-3.0.8/tests/providers/test_zonomi.py --- lexicon-2.7.12/tests/providers/test_zonomi.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/providers/test_zonomi.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,26 +1,24 @@ -from lexicon.providers.zonomi import Provider -from integration_tests import IntegrationTests from unittest import TestCase + import pytest +from integration_tests import IntegrationTests +from lexicon.providers.zonomi import Provider + # 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 ZonomiProviderTests(TestCase, IntegrationTests): Provider = Provider provider_name = 'zonomi' domain = 'pcekper.com.ar' - - def _test_engine_overrides(self): - overrides = super(ZonomiProviderTests, self)._test_engine_overrides() - overrides.update({'api_endpoint': 'https://zonomi.com/app'}) - return overrides - + def _filter_query_parameters(self): return ['api_key'] - # TODO: the following skipped suite and fixtures should be enabled @pytest.mark.skip(reason="new test, missing recording") def test_Provider_when_calling_update_record_should_modify_record_name_specified(self): @@ -29,4 +27,7 @@ @pytest.fixture(autouse=True) def skip_suite(self, request): if request.node.get_marker('ext_suite_1'): - pytest.skip('Skipping extended suite') \ No newline at end of file + pytest.skip('Skipping extended suite') + + def _test_parameters_overrides(self): + return {'auth_entrypoint': 'zonomi'} diff -Nru lexicon-2.7.12/tests/pylint_quality_gate.py lexicon-3.0.8/tests/pylint_quality_gate.py --- lexicon-2.7.12/tests/pylint_quality_gate.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/pylint_quality_gate.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os +import sys + +from pylint import lint + + +REPO_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +GLOBAL_NOTE_THRESHOLD = 8.12 + + +def quality_gate(stats): + """ + Trigger various performance metrics on code quality. + Raise if these metrics do not match expectations. + """ + quality_errors = False + + sys.stdout.write('=====================\n') + sys.stdout.write('Quality gate results:\n') + sys.stdout.write('=====================\n') + + if stats['fatal']: + sys.stderr.write('1) Failure: {0} "fatal" issues have been found.\n' + .format(stats['fatal'])) + quality_errors = True + else: + sys.stdout.write('1) OK: No "fatal" issues have been found.\n') + + if stats['error']: + sys.stderr.write('2) Failure: {0} "error" issues have been found.\n' + .format(stats['error'])) + quality_errors = True + else: + sys.stdout.write('2) OK. No "error" issues have been found.\n') + + if stats['global_note'] < GLOBAL_NOTE_THRESHOLD: + sys.stderr.write('3) Failure: pylint global note is below threshold: {0} < {1}\n' + .format(stats['global_note'], GLOBAL_NOTE_THRESHOLD)) + quality_errors = True + else: + sys.stdout.write('3) OK: pylint global note is beyond threshold: {0} >= {1}\n' + .format(stats['global_note'], GLOBAL_NOTE_THRESHOLD)) + + return 0 if not quality_errors else 1 + + +def main(): + """Main process""" + # Script is located two levels deep in the repository root (./tests/pylint_quality_gate.py) + repo_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + sys.stdout.write('===> Executing pylint ... <===\n') + results = lint.Run([ + os.path.join(repo_dir, 'lexicon'), + os.path.join(repo_dir, 'tests'), + os.path.join(repo_dir, 'tests', 'providers'), '--persistent=n'], + do_exit=False) + + stats = results.linter.stats + sys.exit(quality_gate(stats)) + + +if __name__ == '__main__': + main() diff -Nru lexicon-2.7.12/tests/test_client.py lexicon-3.0.8/tests/test_client.py --- lexicon-2.7.12/tests/test_client.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/test_client.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,10 +1,28 @@ +import os + import lexicon.client import pytest -import os +from lexicon.config import ConfigResolver + + +def test_Client_basic_init(): + options = { + 'provider_name': 'base', + 'action': 'list', + 'domain': 'example.com', + 'type': 'TXT' + } + client = lexicon.client.Client(ConfigResolver().with_dict(options)) + + assert client.provider_name == options['provider_name'] + assert client.action == options['action'] + assert client.config.resolve('lexicon:domain') == options['domain'] + assert client.config.resolve('lexicon:type') == options['type'] + -def test_Client_init(): +def test_Client_legacy_init(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'example.com', 'type': 'TXT' @@ -13,12 +31,13 @@ assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == options['domain'] - assert client.options['type'] == options['type'] + assert client.config.resolve('lexicon:domain') == options['domain'] + assert client.config.resolve('lexicon:type') == options['type'] + def test_Client_init_when_domain_includes_subdomain_should_strip(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'www.example.com', 'type': 'TXT' @@ -27,12 +46,13 @@ assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == 'example.com' - assert client.options['type'] == options['type'] + assert client.config.resolve('lexicon:domain') == 'example.com' + assert client.config.resolve('lexicon:type') == options['type'] + def test_Client_init_with_delegated_domain_name(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'www.sub.example.com', 'delegated': 'sub', @@ -42,12 +62,13 @@ assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == "sub.example.com" - assert client.options['type'] == options['type'] + assert client.config.resolve('lexicon:domain') == "sub.example.com" + assert client.config.resolve('lexicon:type') == options['type'] + def test_Client_init_with_delegated_domain_fqdn(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'www.sub.example.com', 'delegated': 'sub.example.com', @@ -57,12 +78,13 @@ assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == "sub.example.com" - assert client.options['type'] == options['type'] + assert client.config.resolve('lexicon:domain') == "sub.example.com" + assert client.config.resolve('lexicon:type') == options['type'] + def test_Client_init_with_same_delegated_domain_fqdn(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'www.example.com', 'delegated': 'example.com', @@ -72,8 +94,9 @@ assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == "example.com" - assert client.options['type'] == options['type'] + assert client.config.resolve('lexicon:domain') == "example.com" + assert client.config.resolve('lexicon:type') == options['type'] + def test_Client_init_when_missing_provider_should_fail(): options = { @@ -84,73 +107,77 @@ with pytest.raises(AttributeError): lexicon.client.Client(options) + def test_Client_init_when_missing_action_should_fail(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'domain': 'example.com', 'type': 'TXT' } with pytest.raises(AttributeError): lexicon.client.Client(options) + def test_Client_init_when_missing_domain_should_fail(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'type': 'TXT' } with pytest.raises(AttributeError): lexicon.client.Client(options) + def test_Client_init_when_missing_type_should_fail(): options = { - 'provider_name':'base', + 'provider_name': 'base', 'action': 'list', 'domain': 'example.com', } with pytest.raises(AttributeError): lexicon.client.Client(options) + def test_Client_parse_env_with_no_keys_should_do_nothing(monkeypatch): if os.environ.get('LEXICON_CLOUDFLARE_TOKEN'): monkeypatch.delenv('LEXICON_CLOUDFLARE_TOKEN') if os.environ.get('LEXICON_CLOUDFLARE_USERNAME'): monkeypatch.delenv('LEXICON_CLOUDFLARE_USERNAME') options = { - 'provider_name':'cloudflare', + 'provider_name': 'cloudflare', 'action': 'list', 'domain': 'www.example.com', 'type': 'TXT' } client = lexicon.client.Client(options) - assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == 'example.com' - assert client.options['type'] == options['type'] - assert client.options.get('auth_token') == None - assert client.options.get('auth_username') == None + assert client.config.resolve('lexicon:domain') == 'example.com' + assert client.config.resolve('lexicon:type') == options['type'] + assert client.config.resolve('lexicon:cloudflare:auth_token') == None + assert client.config.resolve('lexicon:cloudflare:auth_username') == None + def test_Client_parse_env_with_auth_keys(monkeypatch): - monkeypatch.setenv('LEXICON_CLOUDFLARE_TOKEN','test-token') - monkeypatch.setenv('LEXICON_CLOUDFLARE_USERNAME','test-username@example.com') + monkeypatch.setenv('LEXICON_CLOUDFLARE_TOKEN', 'test-token') + monkeypatch.setenv('LEXICON_CLOUDFLARE_USERNAME', + 'test-username@example.com') options = { - 'provider_name':'cloudflare', + 'provider_name': 'cloudflare', 'action': 'list', 'domain': 'www.example.com', 'type': 'TXT' } client = lexicon.client.Client(options) - assert client.provider_name == options['provider_name'] assert client.action == options['action'] - assert client.options['domain'] == 'example.com' - assert client.options['type'] == options['type'] - assert client.options.get('auth_token') == 'test-token' - assert client.options.get('auth_username') == 'test-username@example.com' - - + assert client.config.resolve('lexicon:domain') == 'example.com' + assert client.config.resolve('lexicon:type') == options['type'] + assert client.config.resolve( + 'lexicon:cloudflare:auth_token') == 'test-token' + assert client.config.resolve( + 'lexicon:cloudflare:auth_username') == 'test-username@example.com' -#TODO: add tests for Provider loading? \ No newline at end of file +# TODO: add tests for Provider loading? diff -Nru lexicon-2.7.12/tests/test_config.py lexicon-3.0.8/tests/test_config.py --- lexicon-2.7.12/tests/test_config.py 1970-01-01 00:00:00.000000000 +0000 +++ lexicon-3.0.8/tests/test_config.py 2019-01-03 16:26:53.000000000 +0000 @@ -0,0 +1,120 @@ +import os + +import pytest +from lexicon.config import ConfigResolver, ConfigSource +from lexicon.parser import generate_cli_main_parser + + +def test_environment_resolution(monkeypatch): + monkeypatch.setenv('LEXICON_DELEGATED', 'TEST1') + monkeypatch.setenv('LEXICON_CLOUDFLARE_TOKEN', 'TEST2') + monkeypatch.setenv('LEXICON_CLOUDFLARE_AUTH_USERNAME', 'TEST3') + + config = ConfigResolver().with_env() + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:cloudflare:auth_username') == 'TEST3' + assert config.resolve('lexicon:nonexistent') is None + + +def test_argparse_resolution(): + parser = generate_cli_main_parser() + data = parser.parse_args(['--delegated', 'TEST1', 'cloudflare', + 'create', 'example.com', 'TXT', '--auth-token', 'TEST2']) + + config = ConfigResolver().with_args(data) + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:nonexistent') is None + + +def test_dict_resolution(): + dict_object = { + 'delegated': 'TEST1', + 'cloudflare': { + 'auth_token': 'TEST2' + } + } + + config = ConfigResolver().with_dict(dict_object) + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:nonexistent') is None + + +def test_config_lexicon_file_resolution(tmpdir): + lexicon_file = tmpdir.join('lexicon.yml') + lexicon_file.write('delegated: TEST1\ncloudflare:\n auth_token: TEST2') + + config = ConfigResolver().with_config_file(str(lexicon_file)) + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:nonexistent') is None + + +def test_provider_config_lexicon_file_resolution(tmpdir): + provider_file = tmpdir.join('lexicon_cloudflare.yml') + provider_file.write('auth_token: TEST2') + + config = ConfigResolver().with_provider_config_file( + 'cloudflare', str(provider_file)) + + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:nonexistent') is None + + +def test_provider_config_dir_resolution(tmpdir): + lexicon_file = tmpdir.join('lexicon.yml') + provider_file = tmpdir.join('lexicon_cloudflare.yml') + lexicon_file.write('delegated: TEST1\ncloudflare:\n auth_token: TEST2') + provider_file.write('auth_username: TEST3') + + config = ConfigResolver().with_config_dir(str(tmpdir)) + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:cloudflare:auth_username') == 'TEST3' + assert config.resolve('lexicon:nonexistent') is None + + +def test_generic_config_feeder_resolution(): + class GenericConfigSource(ConfigSource): + + def resolve(self, config_key): + return 'TEST1' + + config = ConfigResolver().with_config_source(GenericConfigSource()) + + assert config.resolve('lexicon:cloudflare:auth_username') == 'TEST1' + assert config.resolve('lexicon:nonexistent') == 'TEST1' + + +def test_legacy_dict_config_resolution(): + legacy_config = { + 'delegated': 'TEST1', + 'auth_token': 'TEST2', + 'provider_name': 'cloudflare' + } + + config = ConfigResolver().with_legacy_dict(legacy_config) + + assert config.resolve('lexicon:delegated') == 'TEST1' + assert config.resolve('lexicon:cloudflare:auth_token') == 'TEST2' + assert config.resolve('lexicon:auth_token') is None + assert config.resolve('lexicon:nonexistent') is None + + +def test_prioritized_resolution(tmpdir, monkeypatch): + lexicon_file = tmpdir.join('lexicon.yml') + lexicon_file.write('cloudflare:\n auth_token: TEST1') + + monkeypatch.setenv('LEXICON_CLOUDFLARE_AUTH_TOKEN', 'TEST2') + + assert ConfigResolver().with_config_file(str(lexicon_file)).with_env().resolve( + 'lexicon:cloudflare:auth_token') == 'TEST1' + assert ConfigResolver().with_env().with_config_file( + str(lexicon_file)).resolve('lexicon:cloudflare:auth_token') == 'TEST2' diff -Nru lexicon-2.7.12/tests/test_library.py lexicon-3.0.8/tests/test_library.py --- lexicon-2.7.12/tests/test_library.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/test_library.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,11 +1,11 @@ from __future__ import absolute_import, print_function - -import sys import importlib -import pytest +import sys +from types import ModuleType +import pytest from lexicon.providers.base import Provider as BaseProvider -from types import ModuleType + ''' This unit test suite ensures that the lexicon client works correctly when used as a library. @@ -16,55 +16,70 @@ ''' # Fake provider to simulate the provider resolution from configuration, and to have excution traces when lexicon client is invoked + + class Provider(BaseProvider): - def __init__(self, options, engine_overrides=None): - super(Provider, self).__init__(options, engine_overrides) + def __init__(self, config): + super(Provider, self).__init__(config) def authenticate(self): print('Authenticate action') def create_record(self, type, name, content): - return {'action': 'create', 'domain': self.options.get('domain'), 'type': type, 'name': name, 'content': content} + return {'action': 'create', 'domain': self.domain, 'type': type, 'name': name, 'content': content} def list_records(self, type=None, name=None, content=None): - return {'action': 'list', 'domain': self.options.get('domain'), 'type': type, 'name': name, 'content': content} + return {'action': 'list', 'domain': self.domain, 'type': type, 'name': name, 'content': content} def update_record(self, identifier, type=None, name=None, content=None): - return {'action': 'update', 'domain': self.options.get('domain'), 'identifier': identifier, 'type': type, 'name': name, 'content': content} + return {'action': 'update', 'domain': self.domain, 'identifier': identifier, 'type': type, 'name': name, 'content': content} def delete_record(self, identifier=None, type=None, name=None, content=None): - return {'action': 'delete', 'domain': self.options.get('domain'), 'identifier': identifier, 'type': type, 'name': name, 'content': content} + return {'action': 'delete', 'domain': self.domain, 'identifier': identifier, 'type': type, 'name': name, 'content': content} + # We register at runtime our fake provider as a module to allow lexicon to resolve it correctly module = ModuleType('lexicon.providers.fakeprovider') module.Provider = Provider sys.modules['lexicon.providers.fakeprovider'] = module + @pytest.fixture def lexicon_client(): return importlib.import_module('lexicon.client') + def test_unknown_provider_raises_error(lexicon_client): with pytest.raises(ImportError): - lexicon_client.Client({'action': 'list', 'provider_name': 'unknownprovider', 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) + lexicon_client.Client({'action': 'list', 'provider_name': 'unknownprovider', + 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) + def test_missing_required_client_config_parameter_raises_error(lexicon_client): with pytest.raises(AttributeError): - lexicon_client.Client({'no-action': 'list', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) + lexicon_client.Client({'no-action': 'list', 'provider_name': 'fakeprovider', + 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) with pytest.raises(AttributeError): - lexicon_client.Client({'action': 'list', 'no-provider_name': 'fakeprovider', 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) + lexicon_client.Client({'action': 'list', 'no-provider_name': 'fakeprovider', + 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) with pytest.raises(AttributeError): - lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', 'no-domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) + lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', + 'no-domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake'}) with pytest.raises(AttributeError): - lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'no-type': 'TXT', 'name': 'fake', 'content': 'fake'}) + lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', + 'domain': 'example.com', 'no-type': 'TXT', 'name': 'fake', 'content': 'fake'}) + def test_missing_optional_client_config_parameter_does_not_raise_error(lexicon_client): - lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'type': 'TXT', 'no-name': 'fake', 'no-content': 'fake'}) + lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', + 'domain': 'example.com', 'type': 'TXT', 'no-name': 'fake', 'no-content': 'fake'}) + def test_list_action_is_correctly_handled_by_provider(capsys, lexicon_client): lexicon_client = importlib.import_module('lexicon.client') - client = lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) + client = lexicon_client.Client({'action': 'list', 'provider_name': 'fakeprovider', + 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) results = client.execute() out, _ = capsys.readouterr() @@ -76,9 +91,11 @@ assert results['name'] == 'fake' assert results['content'] == 'fake-content' + def test_create_action_is_correctly_handled_by_provider(capsys, lexicon_client): lexicon_client = importlib.import_module('lexicon.client') - client = lexicon_client.Client({'action': 'create', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) + client = lexicon_client.Client({'action': 'create', 'provider_name': 'fakeprovider', + 'domain': 'example.com', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) results = client.execute() out, _ = capsys.readouterr() @@ -90,9 +107,11 @@ assert results['name'] == 'fake' assert results['content'] == 'fake-content' + def test_update_action_is_correctly_handled_by_provider(capsys, lexicon_client): lexicon_client = importlib.import_module('lexicon.client') - client = lexicon_client.Client({'action': 'update', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'identifier': 'fake-id', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) + client = lexicon_client.Client({'action': 'update', 'provider_name': 'fakeprovider', 'domain': 'example.com', + 'identifier': 'fake-id', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) results = client.execute() out, _ = capsys.readouterr() @@ -105,9 +124,11 @@ assert results['name'] == 'fake' assert results['content'] == 'fake-content' + def test_delete_action_is_correctly_handled_by_provider(capsys, lexicon_client): lexicon_client = importlib.import_module('lexicon.client') - client = lexicon_client.Client({'action': 'delete', 'provider_name': 'fakeprovider', 'domain': 'example.com', 'identifier': 'fake-id', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) + client = lexicon_client.Client({'action': 'delete', 'provider_name': 'fakeprovider', 'domain': 'example.com', + 'identifier': 'fake-id', 'type': 'TXT', 'name': 'fake', 'content': 'fake-content'}) results = client.execute() out, _ = capsys.readouterr() @@ -119,4 +140,3 @@ assert results['type'] == 'TXT' assert results['name'] == 'fake' assert results['content'] == 'fake-content' - diff -Nru lexicon-2.7.12/tests/test_output.py lexicon-3.0.8/tests/test_output.py --- lexicon-2.7.12/tests/test_output.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/test_output.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,25 +1,25 @@ +""" Ensure that stdout corresponds to the given reference output """ from __future__ import absolute_import - -import sys -import importlib -import logging import json -import lexicon.__main__ +import logging + +from lexicon import cli -from types import ModuleType -from lexicon.providers.base import Provider as BaseProvider logger = logging.getLogger(__name__) data = [ - {'id': 'fake-id', 'type': 'TXT', 'name': 'fake.example.com', 'content': 'fake', 'ttl': 3600}, - {'id': 'fake2-id', 'type': 'TXT', 'name': 'fake2.example.com', 'content': 'fake2', 'ttl': 3600} + {'id': 'fake-id', 'type': 'TXT', 'name': 'fake.example.com', + 'content': 'fake', 'ttl': 3600}, + {'id': 'fake2-id', 'type': 'TXT', 'name': 'fake2.example.com', + 'content': 'fake2', 'ttl': 3600} ] -# Ensure that stdout corresponds to the given reference output + def assert_correct_output(capsys, expected_output_lines): out, _ = capsys.readouterr() assert out.splitlines() == expected_output_lines + def test_output_function_outputs_json_as_table(capsys): expected_output_lines = [ 'ID TYPE NAME CONTENT TTL ', @@ -28,40 +28,44 @@ 'fake2-id TXT fake2.example.com fake2 3600', ] - lexicon.__main__.handle_output(data, 'TABLE') + cli.handle_output(data, 'TABLE', 'list') assert_correct_output(capsys, expected_output_lines) + def test_output_function_outputs_json_as_table_with_no_header(capsys): expected_output_lines = [ 'fake-id TXT fake.example.com fake 3600', 'fake2-id TXT fake2.example.com fake2 3600', ] - lexicon.__main__.handle_output(data, 'TABLE-NO-HEADER') + cli.handle_output(data, 'TABLE-NO-HEADER', 'list') assert_correct_output(capsys, expected_output_lines) + def test_output_function_outputs_json_as_json_string(capsys): - lexicon.__main__.handle_output(data, 'JSON') + cli.handle_output(data, 'JSON', 'list') out, _ = capsys.readouterr() json_data = json.loads(out) assert json_data == data + def test_output_function_output_nothing_when_quiet(capsys): expected_output_lines = [] - lexicon.__main__.handle_output(data, 'QUIET') + cli.handle_output(data, 'QUIET', 'list') assert_correct_output(capsys, expected_output_lines) -def test_output_function_outputs_nothing_with_not_a_json_data(capsys): + +def test_output_function_outputs_nothing_with_not_a_json_serializable(capsys): expected_output_lines = [] - lexicon.__main__.handle_output(True, 'TABLE') + cli.handle_output(object(), 'TABLE', 'list') assert_correct_output(capsys, expected_output_lines) - lexicon.__main__.handle_output(True, 'TABLE-NO-HEADER') + cli.handle_output(object(), 'TABLE-NO-HEADER', 'list') assert_correct_output(capsys, expected_output_lines) - lexicon.__main__.handle_output(True, 'JSON') - assert_correct_output(capsys, expected_output_lines) \ No newline at end of file + cli.handle_output(object(), 'JSON', 'list') + assert_correct_output(capsys, expected_output_lines) diff -Nru lexicon-2.7.12/tests/test_parser.py lexicon-3.0.8/tests/test_parser.py --- lexicon-2.7.12/tests/test_parser.py 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tests/test_parser.py 2019-01-03 16:26:53.000000000 +0000 @@ -1,35 +1,46 @@ -import lexicon.__main__ +from __future__ import absolute_import + import pytest +from lexicon.parser import ( + generate_base_provider_parser, + generate_cli_main_parser, +) + -def test_BaseProviderParser(): - baseparser = lexicon.__main__.BaseProviderParser() - parsed = baseparser.parse_args(['list','capsulecd.com','TXT']) +def test_base_provider_parser(): + baseparser = generate_base_provider_parser() + parsed = baseparser.parse_args(['list', 'capsulecd.com', 'TXT']) assert parsed.action == 'list' assert parsed.domain == 'capsulecd.com' assert parsed.type == 'TXT' assert parsed.ttl == None assert parsed.output == 'TABLE' -def test_BaseProviderParser_without_domain(): - baseparser = lexicon.__main__.BaseProviderParser() + +def test_base_provider_parser_without_domain(): + baseparser = generate_base_provider_parser() with pytest.raises(SystemExit): baseparser.parse_args(['list']) -def test_BaseProviderParser_without_options(): - baseparser = lexicon.__main__.BaseProviderParser() + +def test_base_provider_parser_without_options(): + baseparser = generate_base_provider_parser() with pytest.raises(SystemExit): baseparser.parse_args([]) -def test_MainParser(): - baseparser = lexicon.__main__.MainParser() - parsed = baseparser.parse_args(['cloudflare','list','capsulecd.com','TXT']) + +def test_cli_main_parser(): + baseparser = generate_cli_main_parser() + parsed = baseparser.parse_args( + ['cloudflare', 'list', 'capsulecd.com', 'TXT']) assert parsed.provider_name == 'cloudflare' assert parsed.action == 'list' assert parsed.domain == 'capsulecd.com' assert parsed.type == 'TXT' assert parsed.output == 'TABLE' -def test_MainParser_without_args(): - baseparser = lexicon.__main__.MainParser() + +def test_cli_main_parser_without_args(): + baseparser = generate_cli_main_parser() with pytest.raises(SystemExit): baseparser.parse_args([]) diff -Nru lexicon-2.7.12/tox.ini lexicon-3.0.8/tox.ini --- lexicon-2.7.12/tox.ini 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/tox.ini 2019-01-03 16:26:53.000000000 +0000 @@ -4,27 +4,36 @@ # and then run "tox" from this directory. [tox] -envlist = basic, py27, py34, py35, py36, py37 -usedevelop = True +envlist = basic, full, lint +skipsdist = True skip_missing_interpreters = True +# Full env will run every test available for all providers. +[testenv] +passenv = CIRCLE_BRANCH +commands = + tldextract --update + py.test tests --cov=lexicon --numprocesses=auto --dist=loadfile + coveralls +deps = + -r requirements.txt + -r test-requirements.txt + -r optional-requirements.txt + # Basic env ensures that providers which require additional libraries do not break the CLI when not installed. [testenv:basic] passenv = CIRCLE_BRANCH commands = lexicon --version deps = - -rrequirements.txt + -r requirements.txt -# Normal env will run every test available for all providers. -[testenv] -passenv = CIRCLE_BRANCH +# Lint env will check for code quality and errors, and fails if it does not match the minimal requirements. +[testenv:lint] commands = - lexicon --version - tldextract --update - py.test tests --cov=lexicon --numprocesses=auto --dist=loadfile - coveralls + python tests/pylint_quality_gate.py deps = - -rrequirements.txt - -rtest-requirements.txt - -roptional-requirements.txt + -r requirements.txt + -r test-requirements.txt + -r optional-requirements.txt + pylint==2.1.1 diff -Nru lexicon-2.7.12/VERSION lexicon-3.0.8/VERSION --- lexicon-2.7.12/VERSION 2018-10-31 15:39:34.000000000 +0000 +++ lexicon-3.0.8/VERSION 2019-01-03 16:26:53.000000000 +0000 @@ -1 +1 @@ -2.7.12 \ No newline at end of file +3.0.8 \ No newline at end of file