Files
yakpanel-core/class/sslModel/dnspodModel.py

182 lines
6.1 KiB
Python
Raw Normal View History

2026-04-07 02:04:22 +05:30
from sslModel.base import sslBase
import requests
from urllib.parse import urlparse
from urllib.parse import urljoin
import public
class main(sslBase):
dns_provider_name = "dnspod"
_type = 0 # 0:lest 1锐成
def __init__(self):
super().__init__()
def __init_data(self,data):
self.DNSPOD_ID = data['ID']
self.DNSPOD_API_KEY = data['Token']
self.DNSPOD_API_BASE_URL = 'https://dnsapi.cn/'
self.HTTP_TIMEOUT = 65 # seconds
self.DNSPOD_LOGIN = "{0},{1}".format(self.DNSPOD_ID, self.DNSPOD_API_KEY)
def create_dns_record(self,get):
"""
@name 创建dns记录
@param get.dns_id dns_id
@param get.domain_name 域名
@param get.domain_dns_value 域名解析值
"""
dns_id = get.dns_id
domain_name = get.domain_name
domain_dns_value = get.domain_dns_value
record_type = 'TXT'
if 'record_type' in get:
record_type = get.record_type
self.__init_data(self.get_dns_data(None)[dns_id])
domain_name, subd, _ = self.extract_zone(domain_name)
return self.add_record(domain_name, subd, domain_dns_value, record_type)
def delete_dns_record(self,get):
"""
@name 删除dns记录
@param get.dns_id dns_id
@param get.domain_name 域名
"""
dns_id = get.dns_id
domain_name = get.domain_name
RecordId = get.RecordId
self.__init_data(self.get_dns_data(None)[dns_id])
try:
domain_name, subd, _ = self.extract_zone(domain_name)
res = self.remove_record(domain_name, RecordId)
if res["status"]["code"] != '1':
return public.returnMsg(False, res["status"]["message"])
except Exception as e:
return public.returnMsg(False, e)
return public.returnMsg(True, '删除成功')
def get_dns_record(self,get):
"""
@name 获取dns记录
@param get.dns_id dns_id
@param get.domain_name 域名
@return json
"""
dns_id = get.dns_id
domain_name = get.domain_name
self.__init_data(self.get_dns_data(None)[dns_id])
domain_name, _, subd = self.extract_zone(domain_name)
url = urljoin(self.DNSPOD_API_BASE_URL, "Record.List")
rootdomain = domain_name
body = {
"login_token": self.DNSPOD_LOGIN,
"format": "json",
"domain": rootdomain,
}
try:
list_dns_response = requests.post(url, data=body, timeout=self.HTTP_TIMEOUT).json()
except:
list_dns_response = {}
data = {}
if list_dns_response.get("status", {}).get("code") == "10":
data = {"info": {'record_total': 0}, "list": []}
if 'records' in list_dns_response:
for i in list_dns_response['records']:
i['name'] = i['name'] + "." + domain_name if i['name'] != '@' else domain_name
i['RecordId'] = i['id']
i["status"] = "启用" if i["status"] == "enable" else "暂停" if i["status"] == "disable" else i["status"]
data['list'] = list_dns_response['records']
if 'info' in list_dns_response:
data['info'] = list_dns_response['info']
if not data:
data = list_dns_response
self.set_record_data({domain_name: data})
return data
def add_record(self, domain_name, subd, domain_dns_value, s_type):
"""
@name 添加记录
@param domain_name 域名
@param subd 子域名
@param domain_dns_value 解析值
@param s_type 记录类型
"""
url = urljoin(self.DNSPOD_API_BASE_URL, "Record.Create")
body = {
"record_type": s_type,
"domain": domain_name,
"sub_domain": subd,
"value": domain_dns_value,
"record_line_id": "0",
"format": "json",
"login_token": self.DNSPOD_LOGIN,
}
create_dnspod_dns_record_response = requests.post(
url, data=body, timeout=self.HTTP_TIMEOUT
).json()
if create_dnspod_dns_record_response["status"]["code"] != "1":
raise ValueError(
"Error creating dnspod dns record: status_code={status_code} response={response}".format(
status_code=create_dnspod_dns_record_response["status"]["code"],
response=create_dnspod_dns_record_response["status"]["message"],
)
)
return public.returnMsg(True, '添加成功')
def remove_record(self, domain_name, RecordId):
rootdomain = domain_name
urlr = urljoin(self.DNSPOD_API_BASE_URL, "Record.Remove")
bodyr = {
"login_token": self.DNSPOD_LOGIN,
"format": "json",
"domain": rootdomain,
"record_id": RecordId,
}
return requests.post(
urlr, data=bodyr, timeout=self.HTTP_TIMEOUT
).json()
def add_record_for_creat_site(self, domain, server_ip):
domain_name, zone, _ = self.extract_zone(domain)
self.add_record(domain_name, zone, server_ip, "A")
def update_dns_record(self, get):
domain_name = get.domain_name
domain_name, subd, _ = self.extract_zone(domain_name)
self.__init_data(self.get_dns_data(None)[get.dns_id])
url = urljoin(self.DNSPOD_API_BASE_URL, "Record.Modify")
body = {
"login_token": self.DNSPOD_LOGIN,
"domain": domain_name,
"record_id": get.RecordId,
"sub_domain": subd,
"record_type": get.record_type,
"record_line": get.RecordLine,
"value": get.domain_dns_value,
"mx ": get.mx,
}
try:
res = requests.post(
url, data=body, timeout=self.HTTP_TIMEOUT
).json()
if res["status"]["code"] != '1':
return public.returnMsg(False, res["status"]["message"])
return public.returnMsg(True, "修改成功")
except Exception as e:
return public.returnMsg(False, "操作失败:{}".format(e))