mirror of
https://github.com/aaPanel/aaPanel.git
synced 2026-08-17 21:25:47 +02:00
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
182 lines
6.1 KiB
Python
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))
|