diff --git a/class/core/cert_request.py b/class/core/cert_request.py index 1b7addb34..b84bb91e0 100644 --- a/class/core/cert_request.py +++ b/class/core/cert_request.py @@ -1046,12 +1046,12 @@ fullchain.pem 粘贴到证书输入框 self.saveCert(cert, index) return cert - def applyCert(self, domains, auth_type='dns', auth_to='Dns_com|None|None', args={}): + def applyCert(self, domains, auth_type='http', auth_to='Dns_com|None|None', args={}): writeLog("", "wb+") try: self.getApis() index = None - if args.index: + if 'index' in args and args.index: index = args.index if not index: # 判断是否只想验证域名 @@ -1084,7 +1084,11 @@ fullchain.pem 粘贴到证书输入框 else: msg = ex writeLog(mw.getTracebackInfo()) - return mw.returnJson(False, msg) + + cert = {} + cert['status'] = False + cert['msg'] = msg + return cert # 取根域名和记录值 def extractZone(self, domain_name): @@ -1218,47 +1222,13 @@ fullchain.pem 粘贴到证书输入框 except: write_log("|-[{}]续签失败".format(siteName)) - def apply_cert_api(self, args): + # 外部API - START ---------------------------------------------------------- + def applyCertApi(self, args): ''' 申请证书 - api ''' - if not 'id' in args: - return mw.returnJson(False, '网站id不能为空!') - # 是否为指定站点 - if mw.M('sites').where('id=?', (args.id,)).count(): - project_info = public.M('sites').where( - 'id=?', (args.id,)).getField('project_config') - try: - project_info = json.loads(project_info) - if not os.path.exists(project_info['ssl_path']): - os.makedirs(project_info['ssl_path']) - path = project_info['ssl_path'] - args.auth_to = path - if args.auto_wildcard == '1': - self._auto_wildcard = True - return self.applyCert(json.loads(args.domains), args.auth_type, args.auth_to) - except: - return mw.returnJson(False, '当前Java项目配置文件存在问题,请重新建立') - else: - if re.match(r"^\d+$", args.auth_to): - import panelSite - path = mw.M('sites').where( - 'id=?', (args.id,)).getField('path') - args.auth_to = path + '/' + panelSite.panelSite().GetRunPath(args) - args.auth_to = args.auth_to.replace("//", "/") - if args.auth_to[-1] == '/': - args.auth_to = args.auth_to[:-1] - - if not os.path.exists(args.auth_to): - return mw.returnJson(False, '无效的站点目录,请检查指定站点是否存在!') - - check_result = self.checkAuthEnv(args) - if check_result: - return check_result - - if args.auto_wildcard == '1': - self._auto_wildcard = True - return self.apply_cert(json.loads(args.domains), args.auth_type, args.auth_to) + return self.applyCert(args['domains'], args['auth_type'], args['auth_to']) + # 外部API - END ---------------------------------------------------------- def renewCert(self, index): writeLog("", "wb+") diff --git a/class/core/files_api.py b/class/core/files_api.py index 3791b395b..b273803fd 100755 --- a/class/core/files_api.py +++ b/class/core/files_api.py @@ -39,7 +39,7 @@ class files_api: data = mw.getLastLine(path, int(line)) return mw.returnJson(True, 'OK', data) except Exception as ex: - return mw.returnJson(False, u'无法正确读取文件!' + str(ex)) + return mw.returnJson(False, '无法正确读取文件!' + str(ex)) def saveBodyApi(self): path = request.form.get('path', '') diff --git a/class/core/site_api.py b/class/core/site_api.py index 6b4f654ed..e2e9e9fc4 100755 --- a/class/core/site_api.py +++ b/class/core/site_api.py @@ -611,6 +611,12 @@ class site_api: mw.restartWeb() return mw.returnJson(True, 'SSL已关闭!') + def getLetLogsApi(self): + log_file = mw.getRunDir() + '/logs/letsencrypt.log' + if not os.path.exists(log_file): + mw.execShell('touch ' + log_file) + return mw.returnJson(True, 'OK', log_file) + def createLetApi(self): siteName = request.form.get('siteName', '') updateOf = request.form.get('updateOf', '') @@ -648,28 +654,30 @@ class site_api: if os.path.exists(proxy_dir_file): return mw.returnJson(False, '检测到您的站点做了反向代理设置,请先关闭反向代理!') - letpath = self.sslDir + siteName - csrpath = letpath + "/fullchain.pem" # 生成证书路径 - keypath = letpath + "/privkey.pem" # 密钥文件路径 + auth_to = self.getSitePath(siteName) + to_args = { + 'domains': domains, + 'auth_type': 'http', + 'auth_to': auth_to, + } - siteInfo = mw.M('sites').where( - 'name=?', (siteName,)).field('id,name,path').find() - path = self.getSitePath(siteName) - srcPath = siteInfo['path'] + # print(to_args) + import cert_request + data = cert_request.cert_request().applyCertApi(to_args) - # print(domains) - # print(cmd) - result = mw.execShell(cmd) + # letpath = self.sslDir + siteName + # csrpath = letpath + "/fullchain.pem" # 生成证书路径 + # keypath = letpath + "/privkey.pem" # 密钥文件路径 - # 写入配置文件 - result = self.setSslConf(siteName) - if not result['status']: - return mw.getJson(result) - result['csr'] = mw.readFile(csrpath) - result['key'] = mw.readFile(keypath) - mw.restartWeb() + # # 写入配置文件 + # result = self.setSslConf(siteName) + # if not result['status']: + # return mw.getJson(result) + # result['csr'] = mw.readFile(csrpath) + # result['key'] = mw.readFile(keypath) - return mw.returnJson(True, 'OK', result) + # mw.restartWeb() + return mw.returnJson(data['status'], '', data['msg']) def createAcmeApi(self): siteName = request.form.get('siteName', '') @@ -1092,10 +1100,10 @@ class site_api: mw.M('binding').add('pid,domain,port,path,addtime', (pid, domain, port, dirName, mw.getDate())) - mw.restartWeb() msg = mw.getInfo('网站[{1}]子目录[{2}]绑定到[{3}]', (siteInfo['name'], dirName, domain)) mw.writeLog('网站管理', msg) + mw.restartWeb() return mw.returnJson(True, '添加成功!') def delDirBindApi(self): diff --git a/route/static/app/public.js b/route/static/app/public.js index 18238915d..8da7993fd 100755 --- a/route/static/app/public.js +++ b/route/static/app/public.js @@ -1607,6 +1607,49 @@ function remove_ssh_menu() { $(".contextmenu").remove(); } +//显示进度 +function showSpeed(filename) { + $.post('/files/get_last_body', { num: 10,path: filename}, function (rdata) { + if ($("#speed_log_lst").text() == ''){ + return; + } + if (rdata.status) { + $("#speed_log_lst").text(rdata.data); + $("#speed_log_lst").scrollTop($("#speed_log_lst")[0].scrollHeight); + } + setTimeout(function () { showSpeed(filename); }, 1000); + },'json'); +} +/** + * 显示进度窗口 + */ +function showSpeedWindow(msg, speed_log_func_name, callback){ + var speed_msg = "
[MSG]"; + var showSpeedKey = layer.open({ + title: false, + type: 1, + closeBtn: 0, + shade: 0.3, + area: "500px", + offset: "30%", + content: speed_msg.replace('[MSG]', msg), + success: function (layers, index) { + var url = speed_log_func_name.replace('.','/'); + $.post('/'+url, {}, function(rdata){ + if (rdata.status){ + setTimeout(function () { + showSpeed(rdata.data); + }, 1000); + } else { + layer.msg("缺少指定文件!"); + } + },'json'); + if (callback) {callback(layers,index,showSpeedKey);} + } + }); +} + + /*** 其中功能,针对插件通过库使用 start ***/ //字符串转数组对象 diff --git a/route/static/app/site.js b/route/static/app/site.js index 6aa808243..fdb92fe14 100755 --- a/route/static/app/site.js +++ b/route/static/app/site.js @@ -1031,31 +1031,35 @@ function webEdit(id,website,endTime,addtime){ +" "+eMenu+"" +"" +"" - +"" - }); - domainEdit(id,website); - //域名输入提示 - var placeholder = "