#!/usr/bin/env python3 import sys import os import subprocess # Import-Fix für die Library-Struktur try: from INWX.Domrobot import ApiClient except ImportError: from inwx.Domrobot import ApiClient # --- KONFIGURATION --- API_URL = 'https://api.domrobot.com' BASE_DIR = os.path.dirname(os.path.abspath(__file__)) KP_DB_PATH = os.path.join(BASE_DIR, "hosting.kdbx") KP_ENTRY_NAME = "inwx" # Daten für den neuen Record DOMAIN = "ma151.de" NEW_NAME = "srv1" # Subdomain NEW_TYPE = "A" # Record-Typ NEW_VALUE = "167.86.90.246" NEW_TTL = 3600 # Time to Live in Sekunden def get_creds(): """Liest User/Passwort sicher aus KeePassXC.""" try: cmd = ["keepassxc-cli", "show", "-s", KP_DB_PATH, KP_ENTRY_NAME] output = subprocess.check_output(cmd, text=True) creds = {} for line in output.splitlines(): if ":" in line: k, v = line.split(":", 1) creds[k.strip().lower()] = v.strip() return creds.get("username") or creds.get("benutzername"), creds.get("password") or creds.get("passwort") except Exception as e: print(f"❌ KeePass-Fehler: {e}") return None, None def main(): user, password = get_creds() if not user or not password: sys.exit(1) api = ApiClient(api_url=API_URL) # 1. Login login_res = api.login(user, password) if login_res['code'] != 1000: print(f"❌ Login fehlgeschlagen: {login_res['msg']}") sys.exit(1) print(f"✅ Login erfolgreich. Prüfe Record: {NEW_NAME}.{DOMAIN} ({NEW_TYPE} -> {NEW_VALUE})") # 2. Prüfen, ob der Record bereits existiert # Wir rufen alle Records der Domain ab info_res = api.call_api('nameserver.info', {'domain': DOMAIN}) if info_res['code'] != 1000: print(f"❌ Fehler beim Abrufen der Domain-Info: {info_res['msg']}") api.logout() sys.exit(1) records = info_res['resData'].get('record', []) # Den FQDN (Full Qualified Domain Name) zusammenbauen, wie INWX ihn speichert full_name = f"{NEW_NAME}.{DOMAIN}" # Suche nach Dubletten already_exists = False for rec in records: # INWX gibt Namen oft mit oder ohne Punkt am Ende zurück, wir prüfen beides rec_name = rec['name'].rstrip('.') if (rec_name == full_name and rec['type'] == NEW_TYPE and rec['content'] == NEW_VALUE): already_exists = True break if already_exists: print(f"ℹ️ Record existiert bereits exakt so. Keine Änderung nötig.") else: print(f"🚀 Record nicht gefunden. Erstelle {full_name}...") # 3. Record erstellen create_params = { 'domain': DOMAIN, 'name': NEW_NAME, 'type': NEW_TYPE, 'content': NEW_VALUE, 'ttl': NEW_TTL } create_res = api.call_api('nameserver.createRecord', create_params) if create_res['code'] == 1000: print(f"✅ Erfolg! Record wurde mit ID {create_res['resData']['id']} angelegt.") else: print(f"❌ Fehler beim Erstellen: {create_res['msg']} (Code: {create_res['code']})") api.logout() if __name__ == "__main__": main()