Package: no-hostingde-api
Unofficial Hosting.de API Client and Certbot DNS Auth PluginPython3 library for accessing the hosting.de dns api.DisclaimerThis is an unofficial client for the hosting.de API. I have only implemented very few functions that I need for another hobby project. I am not in any way connected to hosting.de other then being a paying customer.I'd be happy to give up this library for an official and supported library.I have built this library to use it for ddns scripts and let's encrypt wildcard certificate requests.Validation and sanitizing of any inputs is expected to be done at higher level.USE THIS LIBRARY AT YOUR OWN RISK, DO NOT USE IN PRODUCTION. DO NOT EXPECT SUPPORT.Featurescertbot dns authenticator pluginimplemented all hosting.de api zone and record functionsretry on busy api objectscustom dns api helper functionsdns api filter helpersdns api helpersCertbot DNS Authenticator PluginIntroduced in version 0.3.0, this certbot dns authenticator plugin allows certificates
to be requested from letsencrypt for domains hosted by hosting.de.This allows to create certificates for hosts that may not be reachable for webroot authentication,
or that require dns validation. e.g.: internal servers with private dns, wildcard certificates.Configurationcredentials (path to ini file containing apikey)propagation-seconds (delay between dns record creation and validation) [default: 60]credentials.ini:no_hostingde_api:dns_hostingde_apikey=MY_SECRET_API_KEY_FOR_HOSTING_DEThis is the api key configured athosting.de profile- the api key needs only the permissions to list and edit zones. ( DNS_ZONES_LIST & DNS_ZONES_EDIT )Install with certbotThe plugin is for certbot, which is not yet python3 compatible. Make sure to use python2.pipinstallcertbotno-hostingde-apiUsageAfter installation and creating the ini file containing the credentials,
the following command can be used to request a certificate using this plugin.certbotcertonly\-ano-hostingde-api:dns-hostingde\--no-hostingde-api:dns-hostingde-credentials~/credentials.ini\--no-hostingde-api:dns-hostingde-propagation-seconds60\-ddemo.example.orgDNS Api ClientSo far, only functions for zones, records and zoneConfigs have been implemented.
Some functions have been implemented, to allow easier usage of the api for single records,
that will query more or less information from the api.The DnsApiClient has a builtin retry for busy api objects, by default 2s delay and 2 retries.API functionsThe Hosting.de DNS API functions that I have implemented so far are:recordsFind(recordFilter, limit=25, page=1, sort=None)zoneConfigsFind(zoneConfigFilter, limit=25, page=1, sort=None)zonesFind(zoneFilter, limit=25, page=1, sort=None)zoneCreate(zoneConfig, records, useDefaultNameserverSet=False, nameserverSetId=None)zoneDelete(zoneConfigId=None, zoneConfigName=None)zoneRecreate(zoneConfig, records, useDefaultNameserverSet=False, nameserverSetId=None)zoneUpdate(zoneConfig, recordsToAdd, recordsToDelete=[])There are also helpers to aid with correct data structes for these functions and helper functions, that require less information.Custom API functionsgetZonesByFilter(zoneFilter, limit=25, page=1, sort=None)getZonesByRecord(recordName, recordType=None, recordContent=None, limit=25, page=1, sort=None)getZonesByDomainHierarchy(recordName, limit=25, page=1, sort=None)getZoneByRecord(recordName, recordType=None, recordContent=None, limit=25, page=1)getZoneByDomain(recordName, recordType=None, recordContent=None, limit=25, page=1)getRecordsByFilter(recordFilter, limit=50, page=1, sort=None)getRecords(recordName, recordType=None, recordContent=None, limit=50, page=1, sort=None)addZoneRecordWithConfig(zoneConfig, recordName, recordType, recordContent, ttl=600)deleteZoneRecordWithConfig(zoneConfig, recordName, recordType, recordContent)updateZoneRecordWithConfig(zoneConfig, recordName, recordType, recordContent, oldContent, ttl=600)deleteZoneRecordsWithFilter(zoneFilter, recordName, recordType, recordContent=None)setZoneRecordWithFilter(zoneFilter, recordName, recordType, recordContent, oldContent=None, ttl=600)addZoneRecord(zoneName, recordName, recordType, recordContent, ttl=600)deleteZoneRecord(zoneName, recordName, recordType, recordContent)updateZoneRecord(zoneName, recordName, recordType, recordContent, oldContent, ttl=600)deleteZoneRecords(zoneName, recordName, recordType, recordContent=None)setZoneRecord(zoneName, recordName, recordType, recordContent, oldContent=None, ttl=600)addRecord(recordName, recordType, recordContent, ttl=600)deleteRecord(recordName, recordType, recordContent=None)setRecord(recordName, recordType, recordContent, oldContent=None, ttl=600)updateRecord(recordName, recordType, recordContent, oldContent=None, ttl=600)ExamplesAdding IPv4 IP:fromhostingde.api.dnsimportDnsApiClientclient=DnsApiClient("MySecretLongApiKey")# only 1 api call because we know the zone name:client.AddZoneRecord("dev.example.org","demo.dev.example.org","A","127.0.0.1",ttl=8400)# alternative for unknown zone - requires 2 api calls, because we need to find the zone first - expensive!client.AddRecord("demo.dev.example.org","A","127.0.0.1",ttl=8400)Adding IPv6 IP:fromhostingde.api.dnsimportDnsApiClientclient=DnsApiClient("MySecretLongApiKey")client.AddZoneRecord("dev.example.org","demo.dev.example.org","AAAA","AFFE::1",ttl=8400)Update IPv4 IP:fromhostingde.api.dnsimportDnsApiClientclient=DnsApiClient("MySecretLongApiKey")client.UpdateRecord("demo.dev.example.org","A","128.0.0.1","127.0.0.1",60)In this case the zoneConfigName and TTL are used from the first previous record, ttl can be specified. Value is only updated if there is more than one record or the current value differs from the new value.Known IssuesNo warning handling from responsesDependenciesrequestsInstallEasypipinstallno-hostingde-apiDeveloperLocal install:gitclonehttps://github.com/DimeOne/no-hostingde-api.gitcdhostingde-api
pythonsetup.pydeveloporgitclonehttps://github.com/DimeOne/no-hostingde-api.gitcdhostingde-api
pipinstall-e.Build:pipinstall-rdev.requirements.txt
pythonsetup.pysdistbdist_wheelPublish:pipinstall-rdev.requirements.txt
twineuploaddist/*Changelog0.3.1: Fix for api zoneConfig changes.ReferencesGithub Project PageHosting.de ProviderHosting.de ProfileHosting.de API ReferenceHosting.de DNS API Reference