Files
aaPanel/class/sslModel/dnspodModel.py
T
Jack a24f2e23c6 Update to 7.25.0
1. Added Mail Marketing Automation trigger tasks
2. Added Mail Marketing Groups Import, Export, Merge
3. Added Mail Marketing Subscribers to support paste import
4. Added Mail Marketing Template Import Export Duplicate
5. Added Mail server add timed automatic reply
6. Added HTTPS Protection function for Website (disables automatic HTTP to HTTPS redirection when enabled)
7. Optimize Website Interface Button Integration
8. Optimize the response speed of WP Toolkit interface
2025-03-13 17:52:26 +08:00

182 lines
6.1 KiB
Python

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))