Files
yakpanel-core/class/sslModel/dnspodModel.py
2026-04-07 02:04:22 +05:30

182 lines
6.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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))