177 lines
5.9 KiB
Python
177 lines
5.9 KiB
Python
|
|
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, "修改成功")
|