Add DNS record management module for Mail-in-a-Box
This commit is contained in:
48
miab/dns.py
Normal file
48
miab/dns.py
Normal 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}")
|
||||
Reference in New Issue
Block a user