#!/usr/bin/env python3 # -*- coding: utf-8 -*- from inwx_config import api_call # Import the base API calling function def get_dns_info(domain): """Fetches and displays all DNS records for a given domain in a formatted table.""" print(f"\n--- Fetching DNS records for {domain}...") result = api_call("nameserver.info", {"domain": domain}) if result and result.get('code') == 1000 and 'record' in result.get('resData', {}): print(f"[SUCCESS] DNS Records for **{domain}**:") records = result['resData']['record'] # Output the table header print("-" * 100) print(f"| {'ID':<10} | {'Name/Host':<15} | {'Type':<5} | {'TTL':<5} | {'Content':<50} |") print("-" * 100) for record in records: # Truncate Name and Content for clean table output name_short = record.get('name', '')[:14].ljust(15) content_short = record.get('content', '')[:49].ljust(50) # Note: record['id'] is handled as string input/output now (API change) print(f"| {str(record['id']):<10} | {name_short} | {record['type']:<5} | {str(record['ttl']):<5} | {content_short} |") print("-" * 100) return True elif result and 'msg' in result: print(f"[ERROR] Failed to fetch records: {result.get('msg', 'Unknown error.')}") else: print("[ERROR] Failed to fetch records (Unexpected API response).") return False def add_record(): """Adds a new DNS record using the nameserver.createRecord API method.""" print("\n--- ADD NEW DNS RECORD ---") domain = input("Domain (e.g., example.com): ").strip() name = input("Host/Subdomain (leave blank for main domain '@'): ").strip() record_type = input("Type (A, CNAME, TXT, MX, etc.): ").strip().upper() content = input("Content (IP address, target, text): ").strip() # Optional: TTL with default value 3600 try: ttl = int(input("TTL (seconds, default: 3600): ") or 3600) except ValueError: print("[WARNING] Invalid TTL. Using default value 3600.") ttl = 3600 params = { "domain": domain, "name": name, "type": record_type, "content": content, "ttl": ttl } print(f"\n--- Sending request to add record {name}.{domain}...") result = api_call("nameserver.createRecord", params) if result and result.get('code') == 1000: new_id = result.get('resData', {}).get('id', 'N/A') print(f"[SUCCESS] Record successfully added! ID: **{new_id}**") else: print(f"[ERROR] Failed to add record: {result.get('msg', 'Unknown error.')}") def update_record(): """Modifies an existing DNS record using the nameserver.updateRecord API method.""" print("\n--- MODIFY EXISTING DNS RECORD ---") record_id = input("ID of the record to modify (see Option 1): ").strip() if not record_id.isdigit(): print("[ERROR] Invalid ID.") return # Prompt for values to change new_content = input("New Content (leave blank to skip): ").strip() new_ttl = input("New TTL (seconds, leave blank to skip): ").strip() # Pass ID as string (INWX API change compliance) params = {"id": record_id} if new_content: params["content"] = new_content if new_ttl: try: params["ttl"] = int(new_ttl) except ValueError: print("[ERROR] Invalid TTL. Modification aborted.") return if len(params) <= 1: print("No changes specified. Operation aborted.") return print(f"\n--- Sending request to modify ID **{record_id}**...") result = api_call("nameserver.updateRecord", params) if result and result.get('code') == 1000: print(f"[SUCCESS] Record ID **{record_id}** successfully updated.") else: print(f"[ERROR] Failed to modify record: {result.get('msg', 'Unknown error.')}") def delete_record(): """Deletes a DNS record using the nameserver.deleteRecord API method.""" print("\n--- DELETE DNS RECORD ---") record_id = input("ID of the record to delete (see Option 1): ").strip() if not record_id.isdigit(): print("[ERROR] Invalid ID.") return confirm = input(f"Are you sure you want to delete record ID **{record_id}**? (Y/N): ").strip().upper() if confirm != 'Y': print("Deletion aborted.") return # Pass ID as string (INWX API change compliance) params = {"id": record_id} print(f"\n--- Sending request to delete ID **{record_id}**...") result = api_call("nameserver.deleteRecord", params) if result and result.get('code') == 1000: print(f"[SUCCESS] Record ID **{record_id}** successfully deleted.") else: print(f"[ERROR] Failed to delete record: {result.get('msg', 'Unknown error.')}")