pull/624/head
Mr Chen 8 months ago
parent e77bfb055a
commit c02e95bc49
  1. 99
      plugins/acme_pandominassl_apply/index.py
  2. 9
      plugins/acme_pandominassl_apply/install.sh
  3. 28
      plugins/acme_pandominassl_apply/js/common.js

@ -5,6 +5,8 @@ import io
import os import os
import time import time
import re import re
import requests
import json
sys.path.append(os.getcwd() + "/class/core") sys.path.append(os.getcwd() + "/class/core")
import mw import mw
@ -508,7 +510,7 @@ def getDnsapiData(dnsapi_id):
return tdata[0] return tdata[0]
return {} return {}
def getCmdExportVar(val): def getDnsapiExportVar(val):
cmd_list = val.split('~') cmd_list = val.split('~')
def_var = '' def_var = ''
for x in range(len(cmd_list)): for x in range(len(cmd_list)):
@ -517,6 +519,17 @@ def getCmdExportVar(val):
def_var += 'export '+vlist[0]+'="'+vlist[1]+'"\n' def_var += 'export '+vlist[0]+'="'+vlist[1]+'"\n'
return def_var return def_var
def getDnsapiKv(val):
cmd_list = val.split('~')
def_var = {}
for x in range(len(cmd_list)):
v = cmd_list[x]
vlist = v.split('|')
kk = vlist[0]
vv = vlist[1]
def_var[kk] = vv
return def_var
def domainApplyPathJudge(domain): def domainApplyPathJudge(domain):
acme_dir = "/root/.acme.sh" acme_dir = "/root/.acme.sh"
if mw.isAppleSystem(): if mw.isAppleSystem():
@ -589,7 +602,7 @@ def runHookDstDomain(row):
cmd_data = getDnsapiData(row['dnsapi_id']) cmd_data = getDnsapiData(row['dnsapi_id'])
# print(cmd_data) # print(cmd_data)
export_val = getCmdExportVar(cmd_data['val']) export_val = getDnsapiExportVar(cmd_data['val'])
cmd += export_val cmd += export_val
# acme.sh --register-account -m my@example.com # acme.sh --register-account -m my@example.com
@ -631,12 +644,6 @@ def runHookId():
return data[1] return data[1]
conn = pSqliteDb('domain') conn = pSqliteDb('domain')
field = 'id,status'
fdata = conn.field(field).where('id=?',(args['id'],)).find()
conn = pSqliteDb('domain')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark' field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
row = conn.field(field).where('id=?',(args['id'],)).find() row = conn.field(field).where('id=?',(args['id'],)).find()
runHookDstDomain(row) runHookDstDomain(row)
@ -649,7 +656,6 @@ def runHookCmd():
def runHook(): def runHook():
conn = pSqliteDb('domain') conn = pSqliteDb('domain')
conn_dnsapi = pSqliteDb('dnsapi')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark' field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
clist = conn.field(field).where('status=?',(1,)).limit('1000').order('id desc').select() clist = conn.field(field).where('status=?',(1,)).limit('1000').order('id desc').select()
@ -661,6 +667,75 @@ def runHook():
time.sleep(1) time.sleep(1)
return 'run hook end' return 'run hook end'
def autoSyncDomain(domain, dnsapi_id, email):
conn = pSqliteDb('domain')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
fdata = conn.field(field).where('domain=?',(domain,)).select()
# print(fdata)
mdate = time.strftime('%Y-%m-%d %X', time.localtime())
if len(fdata) == 0:
conn.add('domain,dnsapi_id,email,remark,addtime', (domain, dnsapi_id, email,"备注", mdate))
print(domain+" 同步成功!")
return True
def runSyncCfDataRow(row, page = 1):
# print(row, page)
cf_key = row['kv']['CF_Key']
cf_mail = row['kv']['CF_Email']
header = {
'X-Auth-Email': cf_mail,
'X-Auth-Key': cf_key,
'Content-Type': 'application/json'
}
url = "https://api.cloudflare.com/client/v4/zones?status=active&page="+str(page)+"&per_page=20&order=status&direction=desc&match=all"
try:
r = requests.get(url, timeout=30, headers=header)
r.raise_for_status()
r.encoding = r.apparent_encoding
# print(r.text)
jdata = json.loads(r.text)
result = jdata['result']
result_info = jdata['result_info']
# print(len(result))
for i in result:
autoSyncDomain(i['name'], row['id'], cf_mail)
if result_info['total_pages'] > page:
page += 1
runSyncCfDataRow(row, page)
# print(result)
except Exception as e:
print(e)
# 同步CloudFlare数据
def runSyncCfData():
print("同步CloudFlare数据开始")
conn_dnsapi = pSqliteDb('dnsapi')
field = "id,name,type,val"
fdata = conn_dnsapi.field(field).where('type=?', ('dns_cf',)).limit('10').select()
for x in range(len(fdata)):
row = fdata[x]
dnsapi_kv = getDnsapiKv(row['val'])
row['kv'] = dnsapi_kv
runSyncCfDataRow(row)
print("同步CloudFlare数据结束")
return ''
def runSyncCfCmd():
cmd = "cd "+mw.getRunDir()+" "
cmd += '&& python3 plugins/acme_pandominassl_apply/index.py run_sync_cf_data'
return mw.returnJson(True, 'ok',cmd)
# 同步DnsPod数据
def runSyncDnsPodData():
print("同步DnsPod数据开始")
print("同步DnsPod数据结束")
return ''
if __name__ == "__main__": if __name__ == "__main__":
func = sys.argv[1] func = sys.argv[1]
@ -715,5 +790,11 @@ if __name__ == "__main__":
print(getHookIdCmd()) print(getHookIdCmd())
elif func == 'run_hook_id': elif func == 'run_hook_id':
print(runHookId()) print(runHookId())
elif func == 'run_sync_cf_data':
print(runSyncCfData())
elif func == 'run_sync_cf_cmd':
print(runSyncCfCmd())
elif func == 'run_sync_dnspod_data':
print(runSyncDnsPodData())
else: else:
print('error') print('error')

@ -17,9 +17,18 @@ VERSION=$2
# source /Users/xxx/.zshrc # source /Users/xxx/.zshrc
# https://github.com/acmesh-official/acme.sh/wiki/dnsapi # https://github.com/acmesh-official/acme.sh/wiki/dnsapi
# https://docs.dnspod.com/api-legacy/domains.html#get-the-domain-list
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_hook # cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_hook
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_sync_cf_data
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_sync_dnspod_data
if [ -f ${rootPath}/bin/activate ];then
source ${rootPath}/bin/activate
fi
# pip install cloudflare
Install_App() Install_App()
{ {
echo '正在安装脚本文件...' > $install_tmp echo '正在安装脚本文件...' > $install_tmp

@ -559,6 +559,31 @@ function domainHookCmd(){
}); });
} }
function syncCfCmd(){
apaPost('run_sync_cf_cmd', {}, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
title: "手动同步CloudFlare全部命令",
area: ['600px', '180px'],
type:1,
closeBtn: 1,
shadeClose: false,
btn:["复制","取消"],
content: '<div class="pd15">\
<div class="divtable">\
<pre class="layui-code">'+rdata.data+'</pre>\
</div>\
</div>',
success:function(){
copyText(rdata.data);
},
yes:function(){
copyText(rdata.data);
}
});
});
}
function domainAdd(row){ function domainAdd(row){
var option_domian = ''; var option_domian = '';
@ -693,7 +718,8 @@ function domainList(page, search){
var con = '<div class="safe bgw">\ var con = '<div class="safe bgw">\
<button onclick="domainAdd()" title="添加顶级域名" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加域名</button>\ <button onclick="domainAdd()" title="添加顶级域名" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加域名</button>\
<button onclick="domainHookCmd()" title="添加顶级域名" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">全部同步命令</button>\ <button onclick="domainHookCmd()" title="全部同步命令" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">全部同步命令</button>\
<button onclick="syncCfCmd()" title="cloudflare同步命令" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">cloudflare同步命令</button>\
<div class="divtable mtb10">\ <div class="divtable mtb10">\
<div class="tablescroll">\ <div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\ <table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\

Loading…
Cancel
Save