Add DNS record management module for Mail-in-a-Box

This commit is contained in:
2025-12-27 10:11:42 +01:00
parent 68b7bd9997
commit b78c848525
5 changed files with 105 additions and 0 deletions

7
miab/__init__.py Normal file
View File

@@ -0,0 +1,7 @@
# Initializer for helpers package
from os import getenv
from base64 import b64encode
MIAB_HOST = getenv('MIAB_HOST', 'box.koszewscy.waw.pl')
MIAB_AUTH_HEADER = "Basic " + b64encode(f"{getenv('MIAB_USERNAME', 'admin')}:{getenv('MIAB_PASSWORD', 'password')}".encode()).decode()

48
miab/dns.py Normal file
View File

@@ -0,0 +1,48 @@
from . import MIAB_HOST, MIAB_AUTH_HEADER
from requests import get, put, delete
import jmespath
def list_records(record_type: str = None):
response = get(
f"https://{MIAB_HOST}/admin/dns/custom",
headers={"Authorization": MIAB_AUTH_HEADER}
)
if response.status_code == 200:
records = response.json()
if record_type:
jmespath_expr = f"[?rtype=='{record_type.upper()}']"
else:
jmespath_expr = "[]"
return jmespath.search(jmespath_expr + ".{name: qname, type: rtype, value: value}", records)
else:
raise Exception(f"Failed to retrieve DNS records: {response.status_code} {response.text}")
def set_record(name: str, value: str, type: str = "A"):
response = put(
f"https://{MIAB_HOST}/admin/dns/custom/{name}/{type.upper()}",
headers={
"Authorization": MIAB_AUTH_HEADER,
"Content-Type": "text/plain"
},
data=value
)
if response.status_code == 200:
return response.text
else:
raise Exception(f"Failed to set DNS record: {response.status_code} {response.text}")
def delete_record(name: str, type: str):
response = delete(
f"https://{MIAB_HOST}/admin/dns/custom/{name}/{type}",
headers={
"Authorization": MIAB_AUTH_HEADER,
"Content-Type": "text/plain"
},
data=""
)
if response.status_code == 200:
return response.text
else:
raise Exception(f"Failed to delete DNS record: {response.status_code} {response.text}")