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

177 lines
5.9 KiB
Python
Raw 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.
import json
import os
import uuid
import public
from sslModel.base import sslBase
class main(sslBase):
def dns_support_info(self):
# aa dns 支持的品牌, 及其默认值
data = [
{
"name": "dns",
"title": "Manual resolution",
"ps": "Returns the host and txt values, which are manually parsed by the user",
"data": False
},
{
"name": "CloudFlareDns",
"title": "CloudFlare",
"data": [
{
"key": "SAVED_CF_MAIL",
"name": "E-Mail",
"value": "",
},
{
"key": "SAVED_CF_KEY",
"name": "API Key",
"value": "",
}
],
"help": "How to get API Token",
"ps": "Use CloudFlare's API interface to automatically parse and apply for SSL",
},
{
"name": "CloudxnsDns",
"title": "CloudXns",
"data": [
{
"key": "SAVED_CX_Key",
"name": "AccessKey",
"value": ""
},
{
"key": "SAVED_CX_Secret",
"name": "SecretKey",
"value": ""
}
],
"ps": "Automatically resolve application SSL using cloudxns API interface",
"help": "CloudxnsBackground > User Center > API Management, follow the instructions to get AccessKey/SecretKey",
},
{
"name": "NameCheapDns",
"title": "NameCheap",
"data": [
{
"key": "SAVED_NC_ACCOUNT",
"name": "Account",
"value": ""
},
{
"key": "SAVED_CX_APIKEY",
"name": "ApiKey",
"value": ""
}
],
"ps": "Use NameCheap's API interface to automatically parse and apply for SSL",
"help": "Namecheap API needs added in Whitelisted IPs (only IPv4): "
"Profile > Tools menu > Namecheap API Access > Whitelisted IPs, "
"please check: https://www.namecheap.com/support/api/intro/",
},
# godaddy pro 环境需要账号里50个域名以上方可调用
]
return data
def get_dnsapi_add_data(self):
data = [
{
'name': 'DNSPod',
'id': 'DNSPodDns',
'params': ['ID', 'Token']
},
{
'name': '阿里云DNS',
'id': 'AliyunDns',
'params': ['AccessKey', 'SecretKey']
},
{
'name': '腾讯云DNS',
'id': 'TencentCloudDns',
'params': ['secret_id', 'secret_key']
},
{
'name': '华为云DNS',
'id': 'HuaweiCloudDns',
'params': ['AccessKey', 'SecretKey', 'project_id']
},
{
'name': 'CloudFlare',
'id': 'CloudFlareDns',
'params': ['E-Mail', 'API Key']
},
{
'name': '西部数码',
'id': 'WestDns',
'params': ['user_name', 'api_password']
},
# godaddy接口访问不了先注释
# {
# 'name': 'GoDaddy',
# 'id': 'GoDaddyDns',
# 'params': ['Key', 'Secret']
# },
]
return data
def get_dns_data(self, get):
api_data = super().get_dns_data(get)
add_data = self.get_dnsapi_add_data()
return {"data": [i for i in api_data.values()], "add_data": add_data}
def add_dns_data(self, get):
dns_name = get.dns_name
ps = get.ps
pdata = json.loads(get.pdata)
if dns_name not in [i['id'] for i in self.get_dnsapi_add_data()]:
return public.returnMsg(False, "暂不支持此类型")
pdata.update({'id': uuid.uuid4().hex, 'ps': ps})
data = {}
sfile = "{}/config/dns_mager.conf".format(public.get_panel_path())
if os.path.exists(sfile):
data = json.loads(public.readFile(sfile))
type_data = data.get(dns_name)
if type_data:
type_data.append(pdata)
else:
type_data = [pdata]
data[dns_name] = type_data
public.writeFile(sfile, json.dumps(data))
return public.returnMsg(True, "添加成功")
def del_dns_data(self, get):
dns_id = get.dns_id
sfile = "{}/config/dns_mager.conf".format(public.get_panel_path())
data = json.loads(public.readFile(sfile))
for key in data.keys():
for val in data[key]:
if val['id'] == dns_id:
data[key].remove(val)
public.writeFile(sfile, json.dumps(data))
return public.returnMsg(True, "删除成功")
def upd_dns_data(self, get):
dns_id = get.dns_id
ps = get.ps
pdata = {}
if 'pdata' in get:
pdata = json.loads(get.pdata)
pdata.update({'ps': ps})
sfile = "{}/config/dns_mager.conf".format(public.get_panel_path())
data = json.loads(public.readFile(sfile))
for key in data.keys():
for val in data[key]:
if val['id'] == dns_id:
val.update(pdata)
public.writeFile(sfile, json.dumps(data))
return public.returnMsg(True, "修改成功")