diff --git a/cli.sh b/cli.sh index b451de912..084f81840 100755 --- a/cli.sh +++ b/cli.sh @@ -82,14 +82,13 @@ mw_start_bgtask(){ mw_stop() { PLIST=`ps -ef|grep app:app |grep -v grep|awk '{print $2}'` - for i in ${($PLIST)[@]} + for i in $PLIST do kill -9 $i > /dev/null 2>&1 done PIDS=`ps -ef|grep panel_task.py | grep -v grep |awk '{print $2}'` - ARR=($PIDS) - for p in ${ARR[@]} + for p in $PIDS do kill -9 $p > /dev/null 2>&1 done diff --git a/web/admin/dashboard/dashboard.py b/web/admin/dashboard/dashboard.py index eb5b3d4fc..0fd7b28d8 100644 --- a/web/admin/dashboard/dashboard.py +++ b/web/admin/dashboard/dashboard.py @@ -37,16 +37,16 @@ def index(): @blueprint.route('/',endpoint='admin_safe_path',methods=['GET']) def admin_safe_path(path): db_path = thisdb.getOption('admin_path') + name = thisdb.getOption('template', default='default') if isLogined(): return redirect('/') - - print(db_path,path) + # print(db_path,path) if db_path == path: - return render_template('default/login.html') + return render_template('%s/login.html' % name) unauthorized_status = thisdb.getOption('unauthorized_status') if unauthorized_status == '0': - return render_template('default/path.html') + return render_template('%s/path.html' % name) return Response(status=int(unauthorized_status)) # 仅针对webhook插件 diff --git a/web/admin/site/redirect.py b/web/admin/site/redirect.py index b1b2e4b72..b8e641cd5 100644 --- a/web/admin/site/redirect.py +++ b/web/admin/site/redirect.py @@ -43,21 +43,31 @@ def set_redirect(): keep_path = request.form.get("keep_path", '') # keep path return MwSites.instance().setRedirect(site_name, site_from, to, type, r_type, keep_path) + +# 设置重定向状态 +@blueprint.route('/set_redirect_status', endpoint='set_redirect_status', methods=['POST']) +@panel_login_required +def set_redirect_status(): + site_name = request.form.get("siteName", '') + status = request.form.get("status") + redirect_id = request.form.get("id", '') + return MwSites.instance().setRedirectStatus(site_name, redirect_id, status) + # 获取重定向配置 @blueprint.route('/get_redirect_conf', endpoint='get_redirect_conf', methods=['POST']) @panel_login_required def get_redirect_conf(): site_name = request.form.get("siteName", '') - rid = request.form.get("id", '') - return MwSites.instance().getRedirectConf(site_name, rid) + redirect_id = request.form.get("id", '') + return MwSites.instance().getRedirectConf(site_name, redirect_id) # 删除重定向配置 @blueprint.route('/del_redirect', endpoint='del_redirect', methods=['POST']) @panel_login_required def del_redirect(): site_name = request.form.get("siteName", '') - rid = request.form.get("id", '') - return MwSites.instance().delRedirect(site_name, rid) + redirect_id = request.form.get("id", '') + return MwSites.instance().delRedirect(site_name, redirect_id) diff --git a/web/static/app/site.js b/web/static/app/site.js index cd19d997f..ce2fcd4ec 100755 --- a/web/static/app/site.js +++ b/web/static/app/site.js @@ -1373,70 +1373,75 @@ function to301(siteName, type, obj){ // 设置 页面展示 if(type == 1) { - obj = { + var obj = { + type: 1, + keep_path: 1, to: 'http://', from: '', r_type: '', + type: 'path' + }; + + var keep_path_ht = obj.keep_path == 1 ? 'checked="checked"' : ''; + var redirect_title = type == 1 ? '创建重定向' : '修改重定向[' + obj.redirectname + ']'; + layer.open({ type: 1, - type: 'path', - keep_path: 1 - } - var redirect_form = layer.open({ - type: 1, - skin: 'demo-class', - area: '650px', - title: type == 1 ? '创建重定向' : '修改重定向[' + obj.redirectname + ']', + area: ['650px','270px'], + title: redirect_title, closeBtn: 1, shift: 5, + btn: ['提交','关闭'], shadeClose: false, - content: "
" + - "
" + - "
" + - "保留URI参数" + - "" + - "
" + - "
" + - "
" + - "重定向类型" + - "
" + - "" + - "重定向方式" + - "
" + - "
" + - "
" + - "重定向源" + - "
" + - "" + - "目标URL" + - "" + - "
" + - "
" + - "" + - "
" + - "
" - }); - setTimeout(function() { - $('.btn-colse-prosy').click(function() { - layer.close(redirect_form); - }); - - $('.btn-submit-redirect').click(function() { + content: "
\ +
\ +
\ + 保留URI参数\ + \ + \ +
\ +
\ +
重定向类型\ +
\ + \ + 重定向方式\ + \ +
\ +
\ +
\ + 重定向源\ +
\ + \ + 目标URL\ + \ +
\ +
\ +
", + success:function(index,layero){ + }, + yes:function(index,index1){ var keep_path = $('[name="keep_path"]').prop('checked') ? 1 : 0; var r_type = $('[name="r_type"]').val(); var type = $('[name="type"]').val(); var from = $('[name="from"]').val(); var to = $('[name="to"]').val(); - $.post('/site/set_redirect', {siteName: siteName,type: type,r_type: r_type,from: from,to: to,keep_path: keep_path}, function(data) { + var pdata = {siteName: siteName, type: type,r_type: r_type,from: from,to: to,keep_path: keep_path}; + $.post('/site/set_redirect', pdata, function(data) { if (data.status) { - layer.close(redirect_form); + layer.close(index); to301(siteName); } else { layer.msg(data.msg, {icon: 2}); } },'json'); - }); - }, 100); + } + }); } if (type == 2) { @@ -1516,40 +1521,53 @@ function to301(siteName, type, obj){ } var body = '
\ -
\ - \ -
\ -
\ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
重定向类型重定向方式保留URL参数操作
\ -
\ -
'; +
\ + \ +
\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
重定向类型重定向方式保留URL参数状态操作
\ +
\ + '; $("#webedit-con").html(body); var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/site/get_redirect','siteName='+siteName, function(res) { layer.close(loadT); $("#md-301-loading").remove(); - if (res.status === true) { - let data = res.data.result; + if (res.status) { + var data = res.data.result; data.forEach(function(item){ - lan_r_type = item.r_type == 0 ? "永久重定向" : "临时重定向" - keep_path = item.keep_path == 0 ? "不保留" : "保留" + var lan_r_type = item.r_type == 0 ? "永久重定向" : "临时重定向"; + var keep_path = item.keep_path == 0 ? "不保留" : "保留"; + + var switchProxy = ''; + if (!item['status']){ + switchProxy = ''; + } + let tmp = '\ '+item.r_from+'\ '+lan_r_type+'\ - '+keep_path+'\ - 详细 | 删除\ + '+keep_path+'\ + '+switchProxy+'\ + \ + 详细 | \ + 删除\ + \ '; $("#md-301-body").append(tmp); }) @@ -1560,6 +1578,28 @@ function to301(siteName, type, obj){ } +function toRedirect(siteName, redirect_id, type){ + if (type == 10 || type == 11) { + //[11]启动 或 停止[10] + var status = type == 10 ? '0' : '1'; + var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); + + var pdata = {siteName: siteName, 'status':status,'id':redirect_id }; + $.post('/site/set_redirect_status', pdata, function(rdata) { + layer.close(loading); + if (!rdata.status){ + layer.msg(res.msg, {time: 3000,icon: 2}); + return; + } + + showMsg("设置成功",function(){ + to301(siteName); + },{icon: 1,time:2000}); + },'json'); + return; + } +} + //反向代理 function toProxy(siteName, type, obj) { // 设置 页面展示 @@ -1828,27 +1868,27 @@ function toProxy(siteName, type, obj) { } var body = '
\ -
\ - \ -
\ -
\ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
名称代理目录目标地址缓存状态操作
\ -
\ -
'; +
\ + \ +
\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
名称代理目录目标地址缓存状态操作
\ +
\ + '; $("#webedit-con").html(body); var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); diff --git a/web/utils/site.py b/web/utils/site.py index cb4dd2eee..ae99a4489 100644 --- a/web/utils/site.py +++ b/web/utils/site.py @@ -128,20 +128,20 @@ class sites(object): mw.removeBackFile(path) return rdata - def getRewriteConf(self, siteName): - return self.rewritePath + '/' + siteName + '.conf' + def getRewriteConf(self, site_name): + return self.rewritePath + '/' + site_name + '.conf' - def getRedirectDataPath(self, siteName): - return "{}/{}/data.json".format(self.redirectPath, siteName) + def getRedirectDataPath(self, site_name): + return "{}/{}/data.json".format(self.redirectPath, site_name) - def getRedirectPath(self, siteName): - return "{}/{}".format(self.redirectPath, siteName) + def getRedirectPath(self, site_name): + return "{}/{}".format(self.redirectPath, site_name) - def getProxyDataPath(self, siteName): - return "{}/{}/data.json".format(self.proxyPath, siteName) + def getProxyDataPath(self, site_name): + return "{}/{}/data.json".format(self.proxyPath, site_name) - def getProxyPath(self, siteName): - return "{}/{}".format(self.proxyPath, siteName) + def getProxyPath(self, site_name): + return "{}/{}".format(self.proxyPath, site_name) def getDirBindRewrite(self, site_name, dir_name): return self.rewritePath + '/' + site_name + '_' + dir_name + '.conf' @@ -1084,8 +1084,10 @@ class sites(object): rep = r"limit_rate\s+([0-9]+)\w+;" conf = re.sub(rep, str_limit_rate, conf) else: - conf = conf.replace('#error_page 404/404.html;', "#error_page 404/404.html;\n " + - str_perserver + "\n " + str_perip + "\n " + str_limit_rate) + conf = conf.replace('#error_page 404/404.html;', "#error_page 404/404.html;\n "+\ + str_perserver+"\n "+\ + str_perip+"\n "+\ + str_limit_rate) mw.writeFile(filename, conf) mw.restartWeb() @@ -1116,17 +1118,39 @@ class sites(object): # 获取重定向配置 - def getRedirect(self, siteName): - redirect_file = self.getRedirectDataPath(siteName) + def getRedirect(self, site_name): + redirect_file = self.getRedirectDataPath(site_name) if not os.path.exists(redirect_file): - mw.execShell("mkdir {}/{}".format(self.redirectPath, siteName)) + mw.execShell("mkdir " + self.getRedirectPath(site_name)) return mw.returnData(True, "no exists!", {"result": [], "count": 0}) content = mw.readFile(redirect_file) data = json.loads(content) - # 处理301信息 + + for i in range(len(data)): + redirect_dir = self.getRedirectPath(site_name) + redirect_file = redirect_dir + '/' + data[i]['id'] + '.conf' + if os.path.exists(redirect_file): + data[i]['status'] = True + else: + data[i]['status'] = False return mw.returnData(True, "ok", {"result": data, "count": len(data)}) + def setRedirectStatus(self, site_name, redirect_id, status): + if status == '' or site_name == '' or redirect_id == '': + return mw.returnData(False, "必填项不能为空!") + + conf_file = "{}/{}/{}.conf".format(self.redirectPath, site_name, redirect_id) + conf_txt = "{}/{}/{}.conf.txt".format(self.redirectPath, site_name, redirect_id) + + if status == '1': + mw.execShell('mv ' + conf_txt + ' ' + conf_file) + else: + mw.execShell('mv ' + conf_file + ' ' + conf_txt) + + mw.restartWeb() + return mw.returnData(True, "OK") + # 操作 重定向配置 def operateRedirectConf(self, siteName, method='start'): vhost_file = self.getHostConf(siteName) @@ -1134,7 +1158,7 @@ class sites(object): cnf_301 = '''#301-START include %s/*.conf; - #301-END''' % (self.getRedirectPath( siteName)) + #301-END''' % (self.getRedirectPath(siteName,)) cnf_301_source = '#301-START' # print('operateRedirectConf', content.find('#301-END')) @@ -1213,12 +1237,12 @@ class sites(object): mw.restartWeb() return mw.returnData(True, "设置成功") - def getRedirectConf(self, siteName, rid): - if rid == '' or siteName == '': + def getRedirectConf(self, site_name, redirect_id): + if redirect_id == '' or site_name == '': return mw.returnData(False, "必填项不能为空!") - path = self.getRedirectPath(siteName) - conf = "{}/{}.conf".format(path, rid) + path = self.getRedirectPath(site_name) + conf = "{}/{}.conf".format(path, redirect_id) data = mw.readFile(conf) if data == False: return mw.returnData(False, "获取失败!") @@ -1407,7 +1431,7 @@ location ^~ {from} {\n\ "open_cache": open_cache, "open_proxy": open_proxy, "cache_time": cache_time, - "id": pid, + "id": proxy_id, }) else: # 修改代理 @@ -1478,6 +1502,33 @@ location ^~ {from} {\n\ self.close_proxy = [] return True + def closeRedirectAll(self, site_name): + self.close_redirect = [] + redirect_path = self.getRedirectDataPath(site_name) + if os.path.exists(redirect_path): + content = mw.readFile(redirect_path) + data = json.loads(content) + for r in data: + redirect_dir = "{}/{}".format(self.redirectPath, site_name) + redirect_conf = redirect_dir + '/' + r['id'] + '.conf' + redirect_txt = "{}/{}/{}.conf.txt".format(self.redirectPath, site_name, r['id']) + if os.path.exists(proxy_conf): + self.close_redirect.append(r['id']) + mw.execShell('mv ' + proxy_conf + ' ' + proxy_txt) + mw.restartWeb() + + def openProxyByOpen(self, site_name): + for redirect_id in self.close_redirect: + redirect_dir = "{}/{}".format(self.redirectPath, site_name) + redirect_conf = redirect_dir + '/' + redirect_id + '.conf' + redirect_txt = "{}/{}/{}.conf.txt".format(self.redirectPath, site_name, redirect_id) + if os.path.exists(proxy_txt): + mw.execShell('mv ' + redirect_txt + ' ' + redirect_conf) + + if len(self.close_redirect) > 0: + mw.restartWeb() + self.close_redirect = [] + return True def getProxyConf(self, site_name, proxy_id):