Files
powerdns-proxy/backend/hetzner.py
2023-07-24 22:05:18 +02:00

69 lines
2.3 KiB
Python

import configparser
import requests
def reverse_ip_to_standard(reverse_ip):
parts = reverse_ip.split(".")
parts = parts[:4]
standard_ip = ".".join(reversed(parts))
return standard_ip
class HetznerBackend:
def __init__(self, config_file='config.ini'):
self.config_file = config_file
self.username = None
self.password = None
self.load_credentials()
def load_credentials(self):
config = configparser.ConfigParser()
config.read(self.config_file)
if "Hetzner" not in config:
raise ValueError("Hetzner section not found in config.ini")
self.username = config["Hetzner"].get("username")
self.password = config["Hetzner"].get("password")
if not self.username or not self.password:
raise ValueError("Hetzner username or password not provided in config.ini")
def update_record(self, reverse_ip, record):
ip = reverse_ip_to_standard(reverse_ip)
# Check if the record contains the necessary data
if not record or "content" not in record[0]:
print("Invalid record data. 'content' field is missing.")
return None
domain = record[0]["content"].strip(".")
data = {"ptr": domain}
response = requests.post(f"https://robot-ws.your-server.de/rdns/{ip}",
data=data, auth=(self.username, self.password))
if response.status_code == 200:
print("Updated RDNS record for: " + ip + " to: " + record[0]["content"])
return response.json()
else:
print(f"Failed to fetch rDNS data. Status code: {response.status_code}")
return None
def create_record(self, reverse_ip, record):
# Hetzner's API treats creation and updates the same way so just call update_record instead
self.update_record(reverse_ip, record)
pass
def delete_record(self, reverse_ip):
ip = reverse_ip_to_standard(reverse_ip)
response = requests.delete(f"https://robot-ws.your-server.de/rdns/{ip}", auth=(self.username, self.password))
if response.status_code == 200:
print("Deleted RDNS record for: " + ip)
else:
print(f"Failed to delete rDNS record. Status code: {response.status_code}")
return None