mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 04:19:26 +08:00
网站设置反向代理升级功能
This commit is contained in:
@@ -107,6 +107,7 @@ docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:
|
|||||||
* rsyncd添加优化
|
* rsyncd添加优化
|
||||||
* 使用mariadb二进制导入备份文件
|
* 使用mariadb二进制导入备份文件
|
||||||
* docker插件-镜像导入导出功能
|
* docker插件-镜像导入导出功能
|
||||||
|
* 网站设置反向代理升级功能
|
||||||
|
|
||||||
### JSDelivr安装地址
|
### JSDelivr安装地址
|
||||||
|
|
||||||
|
|||||||
@@ -1215,6 +1215,12 @@ def formatDate(format="%Y-%m-%d %H:%M:%S", times=None):
|
|||||||
return time.strftime(format, time_local)
|
return time.strftime(format, time_local)
|
||||||
|
|
||||||
|
|
||||||
|
def strfToTime(sdate):
|
||||||
|
# 转换时间
|
||||||
|
import time
|
||||||
|
return time.strftime('%Y-%m-%d', time.strptime(sdate, '%b %d %H:%M:%S %Y %Z'))
|
||||||
|
|
||||||
|
|
||||||
def checkIp(ip):
|
def checkIp(ip):
|
||||||
# 检查是否为IPv4地址
|
# 检查是否为IPv4地址
|
||||||
import re
|
import re
|
||||||
|
|||||||
+104
-52
@@ -1870,19 +1870,16 @@ class site_api:
|
|||||||
if _id == '' or _siteName == '':
|
if _id == '' or _siteName == '':
|
||||||
return mw.returnJson(False, "必填项不能为空!")
|
return mw.returnJson(False, "必填项不能为空!")
|
||||||
|
|
||||||
_old_config = mw.readFile(
|
proxy_file = "{}/{}/{}.conf".format(self.proxyPath, _siteName, _id)
|
||||||
"{}/{}/{}.conf".format(self.proxyPath, _siteName, _id))
|
mw.backFile(proxy_file)
|
||||||
if _old_config == False:
|
mw.writeFile(proxy_file, _config)
|
||||||
return mw.returnJson(False, "非法操作")
|
|
||||||
|
|
||||||
mw.writeFile("{}/{}/{}.conf".format(self.proxyPath,
|
|
||||||
_siteName, _id), _config)
|
|
||||||
rule_test = mw.checkWebConfig()
|
rule_test = mw.checkWebConfig()
|
||||||
if rule_test != True:
|
if rule_test != True:
|
||||||
mw.writeFile("{}/{}/{}.conf".format(self.proxyPath,
|
mw.restoreFile(proxy_file)
|
||||||
_siteName, _id), _old_config)
|
mw.removeBackFile(proxy_file)
|
||||||
return mw.returnJson(False, "OpenResty 配置测试不通过, 请重试: {}".format(rule_test))
|
return mw.returnJson(False, "OpenResty 配置测试不通过, 请重试: {}".format(rule_test))
|
||||||
|
|
||||||
|
mw.removeBackFile(proxy_file)
|
||||||
self.operateRedirectConf(_siteName, 'start')
|
self.operateRedirectConf(_siteName, 'start')
|
||||||
mw.restartWeb()
|
mw.restartWeb()
|
||||||
return mw.returnJson(True, "ok")
|
return mw.returnJson(True, "ok")
|
||||||
@@ -1923,21 +1920,20 @@ class site_api:
|
|||||||
_from = request.form.get('from', '')
|
_from = request.form.get('from', '')
|
||||||
_to = request.form.get('to', '')
|
_to = request.form.get('to', '')
|
||||||
_host = request.form.get('host', '')
|
_host = request.form.get('host', '')
|
||||||
|
_name = request.form.get('name', '')
|
||||||
_open_proxy = request.form.get('open_proxy', '')
|
_open_proxy = request.form.get('open_proxy', '')
|
||||||
|
_open_cache = request.form.get('open_cache', '')
|
||||||
|
_cache_time = request.form.get('cache_time', '')
|
||||||
|
_id = request.form.get('id', '')
|
||||||
|
|
||||||
if _siteName == "" or _from == "" or _to == "" or _host == "":
|
# print(_name, _siteName, _from, _to, _host)
|
||||||
|
if _name == "" or _siteName == "" or _from == "" or _to == "" or _host == "":
|
||||||
return mw.returnJson(False, "必填项不能为空")
|
return mw.returnJson(False, "必填项不能为空")
|
||||||
|
|
||||||
data_path = self.getProxyDataPath(_siteName)
|
|
||||||
data_content = mw.readFile(
|
|
||||||
data_path) if os.path.exists(data_path) else ""
|
|
||||||
data = json.loads(data_content) if data_content != "" else []
|
|
||||||
|
|
||||||
rep = "http(s)?\:\/\/([a-zA-Z0-9][-a-zA-Z0-9]{0,62}\.)+([a-zA-Z0-9][a-zA-Z0-9]{0,62})+.?"
|
rep = "http(s)?\:\/\/([a-zA-Z0-9][-a-zA-Z0-9]{0,62}\.)+([a-zA-Z0-9][a-zA-Z0-9]{0,62})+.?"
|
||||||
if not re.match(rep, _to):
|
if not re.match(rep, _to):
|
||||||
return mw.returnJson(False, "错误的目标地址!")
|
return mw.returnJson(False, "错误的目标地址!")
|
||||||
|
|
||||||
# _to = _to.strip("/")
|
|
||||||
# get host from url
|
# get host from url
|
||||||
try:
|
try:
|
||||||
if _host == "$host":
|
if _host == "$host":
|
||||||
@@ -1946,7 +1942,11 @@ class site_api:
|
|||||||
except:
|
except:
|
||||||
return mw.returnJson(False, "错误的目标地址")
|
return mw.returnJson(False, "错误的目标地址")
|
||||||
|
|
||||||
# location ~* ^{from}(.*)$ {
|
proxy_site_path = self.getProxyDataPath(_siteName)
|
||||||
|
data_content = mw.readFile(
|
||||||
|
proxy_site_path) if os.path.exists(proxy_site_path) else ""
|
||||||
|
data = json.loads(data_content) if data_content != "" else []
|
||||||
|
|
||||||
tpl = "#PROXY-START\n\
|
tpl = "#PROXY-START\n\
|
||||||
location ^~ {from} {\n\
|
location ^~ {from} {\n\
|
||||||
proxy_pass {to};\n\
|
proxy_pass {to};\n\
|
||||||
@@ -1954,12 +1954,29 @@ location ^~ {from} {\n\
|
|||||||
proxy_set_header X-Real-IP $remote_addr;\n\
|
proxy_set_header X-Real-IP $remote_addr;\n\
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;\n\
|
proxy_set_header REMOTE-HOST $remote_addr;\n\
|
||||||
|
proxy_set_header Upgrade $http_upgrade;\n\
|
||||||
|
proxy_set_header Connection $connection_upgrade;\n\
|
||||||
|
proxy_http_version 1.1;\n\
|
||||||
\n\
|
\n\
|
||||||
add_header X-Cache $upstream_cache_status;\n\
|
add_header X-Cache $upstream_cache_status;\n\
|
||||||
proxy_ignore_headers Set-Cookie Cache-Control expires;\n\
|
|
||||||
add_header Cache-Control no-cache;\n\
|
|
||||||
\n\
|
\n\
|
||||||
set $static_files_app 0;\n\
|
{proxy_cache}\n\
|
||||||
|
}\n\
|
||||||
|
# PROXY-END"
|
||||||
|
|
||||||
|
tpl_proxy_cache = "\n\
|
||||||
|
if ( $uri ~* \"\.(gif|png|jpg|css|js|woff|woff2)$\" )\n\
|
||||||
|
{\n\
|
||||||
|
expires {cache_time}m;\n\
|
||||||
|
}\n\
|
||||||
|
proxy_ignore_headers Set-Cookie Cache-Control expires;\n\
|
||||||
|
proxy_cache mw_cache;\n\
|
||||||
|
proxy_cache_key \"$host$uri$is_args$args\";\n\
|
||||||
|
proxy_cache_valid 200 304 301 302 {cache_time}m;\n\
|
||||||
|
"
|
||||||
|
|
||||||
|
tpl_proxy_nocache = "\n\
|
||||||
|
set $static_files_app 0; \n\
|
||||||
if ( $uri ~* \"\.(gif|png|jpg|css|js|woff|woff2)$\" )\n\
|
if ( $uri ~* \"\.(gif|png|jpg|css|js|woff|woff2)$\" )\n\
|
||||||
{\n\
|
{\n\
|
||||||
set $static_files_app 1;\n\
|
set $static_files_app 1;\n\
|
||||||
@@ -1969,8 +1986,7 @@ location ^~ {from} {\n\
|
|||||||
{\n\
|
{\n\
|
||||||
add_header Cache-Control no-cache;\n\
|
add_header Cache-Control no-cache;\n\
|
||||||
}\n\
|
}\n\
|
||||||
}\n\
|
"
|
||||||
#PROXY-END"
|
|
||||||
|
|
||||||
# replace
|
# replace
|
||||||
if _from[0] != '/':
|
if _from[0] != '/':
|
||||||
@@ -1978,28 +1994,69 @@ location ^~ {from} {\n\
|
|||||||
tpl = tpl.replace("{from}", _from, 999)
|
tpl = tpl.replace("{from}", _from, 999)
|
||||||
tpl = tpl.replace("{to}", _to)
|
tpl = tpl.replace("{to}", _to)
|
||||||
tpl = tpl.replace("{host}", _host, 999)
|
tpl = tpl.replace("{host}", _host, 999)
|
||||||
|
tpl = tpl.replace("{cache_time}", _cache_time, 999)
|
||||||
|
|
||||||
_id = mw.md5("{}+{}+{}".format(_from, _to, _siteName))
|
if _open_cache == 'on':
|
||||||
for item in data:
|
tpl_proxy_cache = tpl_proxy_cache.replace(
|
||||||
if item["id"] == _id:
|
"{cache_time}", _cache_time, 999)
|
||||||
return mw.returnJson(False, "已存在该规则!")
|
tpl = tpl.replace("{proxy_cache}", tpl_proxy_cache, 999)
|
||||||
if item["from"] == _from:
|
else:
|
||||||
return mw.returnJson(False, "代理目录已存在!")
|
tpl = tpl.replace("{proxy_cache}", tpl_proxy_nocache, 999)
|
||||||
data.append({
|
|
||||||
"from": _from,
|
proxy_action = 'add'
|
||||||
"to": _to,
|
if _id == "":
|
||||||
"host": _host,
|
_id = mw.md5("{}".format(_name))
|
||||||
"id": _id
|
else:
|
||||||
})
|
proxy_action = 'edit'
|
||||||
|
|
||||||
|
conf_proxy = "{}/{}.conf".format(self.getProxyPath(_siteName), _id)
|
||||||
|
conf_bk = "{}/{}.conf.txt".format(self.getProxyPath(_siteName), _id)
|
||||||
|
|
||||||
|
mw.writeFile(conf_proxy, tpl)
|
||||||
|
|
||||||
|
rule_test = mw.checkWebConfig()
|
||||||
|
if rule_test != True:
|
||||||
|
os.remove(conf_proxy)
|
||||||
|
return mw.returnJson(False, "OpenResty配置测试不通过, 请重试: {}".format(rule_test))
|
||||||
|
|
||||||
|
if proxy_action == "add":
|
||||||
|
# 添加代理
|
||||||
|
_id = mw.md5("{}".format(_name))
|
||||||
|
for item in data:
|
||||||
|
if item["name"] == _name:
|
||||||
|
return mw.returnJson(False, "名称重复!")
|
||||||
|
if item["from"] == _from:
|
||||||
|
return mw.returnJson(False, "代理目录已存在!")
|
||||||
|
data.append({
|
||||||
|
"name": _name,
|
||||||
|
"from": _from,
|
||||||
|
"to": _to,
|
||||||
|
"host": _host,
|
||||||
|
"open_cache": _open_cache,
|
||||||
|
"open_proxy": _open_proxy,
|
||||||
|
"cache_time": _cache_time,
|
||||||
|
"id": _id,
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
# 修改代理
|
||||||
|
dindex = -1
|
||||||
|
for x in range(len(data)):
|
||||||
|
if data[x]["id"] == _id:
|
||||||
|
dindex = x
|
||||||
|
break
|
||||||
|
if dindex < 0:
|
||||||
|
return mw.returnJson(False, "异常请求")
|
||||||
|
data[dindex]['from'] = _from
|
||||||
|
data[dindex]['to'] = _to
|
||||||
|
data[dindex]['host'] = _host
|
||||||
|
data[dindex]['open_cache'] = _open_cache
|
||||||
|
data[dindex]['open_proxy'] = _open_proxy
|
||||||
|
data[dindex]['cache_time'] = _cache_time
|
||||||
|
|
||||||
conf_file = "{}/{}.conf".format(self.getProxyPath(_siteName), _id)
|
|
||||||
if _open_proxy != 'on':
|
if _open_proxy != 'on':
|
||||||
conf_file = "{}/{}.conf.txt".format(
|
os.rename(conf_proxy, conf_bk)
|
||||||
self.getProxyPath(_siteName), _id)
|
|
||||||
|
|
||||||
mw.writeFile(data_path, json.dumps(data))
|
|
||||||
mw.writeFile(conf_file, tpl)
|
|
||||||
|
|
||||||
|
mw.writeFile(proxy_site_path, json.dumps(data))
|
||||||
self.operateProxyConf(_siteName, 'start')
|
self.operateProxyConf(_siteName, 'start')
|
||||||
mw.restartWeb()
|
mw.restartWeb()
|
||||||
return mw.returnJson(True, "ok", {"hash": _id})
|
return mw.returnJson(True, "ok", {"hash": _id})
|
||||||
@@ -2030,10 +2087,10 @@ location ^~ {from} {\n\
|
|||||||
self.getProxyPath(_siteName), _id)
|
self.getProxyPath(_siteName), _id)
|
||||||
mw.execShell(cmd)
|
mw.execShell(cmd)
|
||||||
except:
|
except:
|
||||||
return mw.returnJson(False, "删除失败!")
|
return mw.returnJson(False, "删除反代失败!")
|
||||||
|
|
||||||
mw.restartWeb()
|
mw.restartWeb()
|
||||||
return mw.returnJson(True, "删除成功!")
|
return mw.returnJson(True, "删除反代成功!")
|
||||||
|
|
||||||
def getSiteTypesApi(self):
|
def getSiteTypesApi(self):
|
||||||
# 取网站分类
|
# 取网站分类
|
||||||
@@ -2100,7 +2157,7 @@ location ^~ {from} {\n\
|
|||||||
|
|
||||||
##### ----- end ----- ###
|
##### ----- end ----- ###
|
||||||
|
|
||||||
# 域名编码转换
|
# 域名编码转换
|
||||||
def toPunycode(self, domain):
|
def toPunycode(self, domain):
|
||||||
import re
|
import re
|
||||||
if sys.version_info[0] == 2:
|
if sys.version_info[0] == 2:
|
||||||
@@ -2108,7 +2165,7 @@ location ^~ {from} {\n\
|
|||||||
tmp = domain.split('.')
|
tmp = domain.split('.')
|
||||||
newdomain = ''
|
newdomain = ''
|
||||||
for dkey in tmp:
|
for dkey in tmp:
|
||||||
# 匹配非ascii字符
|
# 匹配非ascii字符
|
||||||
match = re.search(u"[\x80-\xff]+", dkey)
|
match = re.search(u"[\x80-\xff]+", dkey)
|
||||||
if not match:
|
if not match:
|
||||||
newdomain += dkey + '.'
|
newdomain += dkey + '.'
|
||||||
@@ -2410,7 +2467,7 @@ location ^~ {from} {\n\
|
|||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#SECURITY-END
|
# SECURITY-END
|
||||||
include %s/enable-php-''' % (fix.strip().replace(',', '|'), domains.strip().replace(',', ' '), pre_path)
|
include %s/enable-php-''' % (fix.strip().replace(',', '|'), domains.strip().replace(',', ' '), pre_path)
|
||||||
conf = re.sub(re_path, rconf, conf)
|
conf = re.sub(re_path, rconf, conf)
|
||||||
mw.writeLog('网站管理', '站点[' + name + ']已开启防盗链!')
|
mw.writeLog('网站管理', '站点[' + name + ']已开启防盗链!')
|
||||||
@@ -2663,7 +2720,7 @@ location ^~ {from} {\n\
|
|||||||
mw.writeLog('TYPE_SITE', '设置成功,站点到期后将自动停止!', (siteName, edate))
|
mw.writeLog('TYPE_SITE', '设置成功,站点到期后将自动停止!', (siteName, edate))
|
||||||
return mw.returnJson(True, '设置成功,站点到期后将自动停止!')
|
return mw.returnJson(True, '设置成功,站点到期后将自动停止!')
|
||||||
|
|
||||||
# ssl相关方法 start
|
# ssl相关方法 start
|
||||||
def setSslConf(self, siteName):
|
def setSslConf(self, siteName):
|
||||||
file = self.getHostConf(siteName)
|
file = self.getHostConf(siteName)
|
||||||
conf = mw.readFile(file)
|
conf = mw.readFile(file)
|
||||||
@@ -2762,9 +2819,4 @@ location ^~ {from} {\n\
|
|||||||
mw.execShell("chattr +i " + filename)
|
mw.execShell("chattr +i " + filename)
|
||||||
|
|
||||||
return mw.returnJson(True, '已打开防跨站设置!')
|
return mw.returnJson(True, '已打开防跨站设置!')
|
||||||
|
# ssl相关方法 end
|
||||||
# 转换时间
|
|
||||||
def strfToTime(self, sdate):
|
|
||||||
import time
|
|
||||||
return time.strftime('%Y-%m-%d', time.strptime(sdate, '%b %d %H:%M:%S %Y %Z'))
|
|
||||||
# ssl相关方法 end
|
|
||||||
|
|||||||
+2
-9
@@ -39,20 +39,13 @@ server
|
|||||||
allow all;
|
allow all;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
|
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
|
||||||
{
|
{
|
||||||
expires 30d;
|
expires 30d;
|
||||||
error_log off;
|
error_log /dev/null;
|
||||||
access_log /dev/null;
|
access_log /dev/null;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ .*\\.(js|css)?$
|
|
||||||
{
|
|
||||||
expires 12h;
|
|
||||||
error_log off;
|
|
||||||
access_log /dev/null;
|
|
||||||
}
|
|
||||||
|
|
||||||
access_log {$LOGPATH}/{$SERVER_NAME}.log main;
|
access_log {$LOGPATH}/{$SERVER_NAME}.log main;
|
||||||
error_log {$LOGPATH}/{$SERVER_NAME}.error.log;
|
error_log {$LOGPATH}/{$SERVER_NAME}.error.log;
|
||||||
}
|
}
|
||||||
@@ -35,18 +35,11 @@ server
|
|||||||
allow all;
|
allow all;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
|
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
|
||||||
{
|
{
|
||||||
expires 30d;
|
error_log /dev/null;
|
||||||
error_log off;
|
|
||||||
access_log /dev/null;
|
access_log /dev/null;
|
||||||
}
|
expires 30d;
|
||||||
|
|
||||||
location ~ .*\\.(js|css)?$
|
|
||||||
{
|
|
||||||
expires 12h;
|
|
||||||
error_log off;
|
|
||||||
access_log /dev/null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
access_log {$LOGPATH}/{$SERVER_MAIN}_{$DIRBIND}.log;
|
access_log {$LOGPATH}/{$SERVER_MAIN}_{$DIRBIND}.log;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ http
|
|||||||
limit_conn_zone $binary_remote_addr zone=perip:10m;
|
limit_conn_zone $binary_remote_addr zone=perip:10m;
|
||||||
limit_conn_zone $server_name zone=perserver:10m;
|
limit_conn_zone $server_name zone=perserver:10m;
|
||||||
|
|
||||||
|
# CACEH_BEGIN
|
||||||
proxy_buffering on;
|
proxy_buffering on;
|
||||||
proxy_buffer_size 4k;
|
proxy_buffer_size 4k;
|
||||||
proxy_buffers 512 4k;
|
proxy_buffers 512 4k;
|
||||||
@@ -70,19 +71,15 @@ http
|
|||||||
proxy_read_timeout 5s;
|
proxy_read_timeout 5s;
|
||||||
proxy_send_timeout 5s;
|
proxy_send_timeout 5s;
|
||||||
|
|
||||||
server_tokens off;
|
fastcgi_cache_key "$scheme$request_method$host$request_uri";
|
||||||
access_log off;
|
fastcgi_cache_path {$SERVER_PATH}/openresty/nginx/fastcgi_cache_temp levels=1:2 keys_zone=mw_cache_fcgi:100m inactive=60m max_size=5g;
|
||||||
|
fastcgi_cache_use_stale error timeout invalid_header http_500;
|
||||||
|
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
|
||||||
|
# CACEH_END
|
||||||
|
|
||||||
server {
|
server_tokens off;
|
||||||
listen 80;
|
access_log /dev/null;
|
||||||
listen [::]:80;
|
|
||||||
server_name 127.0.0.1;
|
|
||||||
allow 127.0.0.1;
|
|
||||||
location /nginx_status {
|
|
||||||
stub_status on;
|
|
||||||
access_log off;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
include {$SERVER_PATH}/web_conf/nginx/vhost/*.conf;
|
include {$SERVER_PATH}/web_conf/nginx/vhost/*.conf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name 127.0.0.1;
|
||||||
|
allow 127.0.0.1;
|
||||||
|
location /nginx_status {
|
||||||
|
stub_status on;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
@@ -180,6 +180,17 @@ def confReplace():
|
|||||||
cmd_s = 'chmod u+s ' + ng_exe_bin
|
cmd_s = 'chmod u+s ' + ng_exe_bin
|
||||||
os.system('echo %s|sudo -S %s' % (sudoPwd, cmd_s))
|
os.system('echo %s|sudo -S %s' % (sudoPwd, cmd_s))
|
||||||
|
|
||||||
|
# vhost
|
||||||
|
vhost_dir = mw.getServerDir() + '/web_conf/nginx/vhost'
|
||||||
|
vhost_tpl_dir = getPluginDir() + '/conf/vhost'
|
||||||
|
# print(vhost_dir, vhost_tpl_dir)
|
||||||
|
vhost_list = ['0.websocket.conf', '0.nginx_status.conf']
|
||||||
|
for f in vhost_list:
|
||||||
|
a_conf = vhost_dir + '/' + f
|
||||||
|
a_conf_tpl = vhost_tpl_dir + '/' + f
|
||||||
|
if not os.path.exists(a_conf):
|
||||||
|
mw.writeFile(a_conf, mw.readFile(a_conf_tpl))
|
||||||
|
|
||||||
|
|
||||||
def initDreplace():
|
def initDreplace():
|
||||||
|
|
||||||
@@ -290,6 +301,7 @@ def restart():
|
|||||||
|
|
||||||
|
|
||||||
def reload():
|
def reload():
|
||||||
|
confReplace()
|
||||||
return restyOp('reload')
|
return restyOp('reload')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+10
-17
@@ -789,18 +789,15 @@ function batchPasteTo(data,path){
|
|||||||
|
|
||||||
function getSuffixName(fileName){
|
function getSuffixName(fileName){
|
||||||
var extArr = fileName.split(".");
|
var extArr = fileName.split(".");
|
||||||
var exts = ['folder','folder-unempty','sql','c','cpp','cs','flv','css','js',
|
var exts = ['folder-unempty','sql','c','cpp','cs','flv','css','js',
|
||||||
'htm','html','java','log','mht','url','xml','ai','bmp','cdr','gif','ico',
|
'htm','html','java','log','mht','url','xml','ai','bmp','cdr','gif','ico',
|
||||||
'jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4',
|
'jpeg','jpg','JPG','png','psd','webp','ape','avi','mkv','mov','mp3','mp4',
|
||||||
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
|
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
|
||||||
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
|
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
|
||||||
'folder','folder-empty','folder-unempty','fromchromefolder','documentfolder','fromphonefolder',
|
'folder','folder-empty','fromchromefolder','documentfolder','fromphonefolder',
|
||||||
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb','sql','c',
|
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb',
|
||||||
'cpp','cs','js','fla','flv','htm','html','java','mht','url','xml','ai','bmp','cdr',
|
'fla','doc','docm','dotx','dotm','dot','pdf',
|
||||||
'gif','ico','jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4','mpeg',
|
'ppt','pptm','pot','xls','csv','xlsm','scss','svg','pl','py','php','md','json','sh','conf'];
|
||||||
'mpg','rm','rmvb','swf','wav','webm','wma','wmv','doc','docm','dotx','dotm','dot','rtf','docx','pdf',
|
|
||||||
'fdf','ppt','pptm','pot','potm','pptx','txt','xls','csv','xlsm','xlsb','xlsx','7z','gz','cab','iso',
|
|
||||||
'rar','zip','bt','file','apk','css','scss','svg','pl','py','php','md','json','sh'];
|
|
||||||
var extLastName = extArr[extArr.length - 1];
|
var extLastName = extArr[extArr.length - 1];
|
||||||
for(var i=0; i<exts.length; i++){
|
for(var i=0; i<exts.length; i++){
|
||||||
if(exts[i]==extLastName){
|
if(exts[i]==extLastName){
|
||||||
@@ -818,13 +815,9 @@ function getExtName(fileName){
|
|||||||
'jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4',
|
'jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4',
|
||||||
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
|
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
|
||||||
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
|
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
|
||||||
'folder','folder-empty','folder-unempty','fromchromefolder','documentfolder','fromphonefolder',
|
'folder-empty','fromchromefolder','documentfolder','fromphonefolder',
|
||||||
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb','sql','c',
|
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb',
|
||||||
'cpp','cs','js','fla','flv','htm','html','java','log','mht','url','xml','ai','bmp','cdr',
|
'fla','flv','doc','docm','dotx','dotm','dot','pdf','ppt','pptm','pot','xls','csv','xlsm'];
|
||||||
'gif','ico','jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4','mpeg',
|
|
||||||
'mpg','rm','rmvb','swf','wav','webm','wma','wmv','doc','docm','dotx','dotm','dot','rtf','docx','pdf',
|
|
||||||
'fdf','ppt','pptm','pot','potm','pptx','txt','xls','csv','xlsm','xlsb','xlsx','7z','gz','cab','iso',
|
|
||||||
'rar','zip','bt','file','apk','css'];
|
|
||||||
var extLastName = extArr[extArr.length - 1];
|
var extLastName = extArr[extArr.length - 1];
|
||||||
for(var i=0; i<exts.length; i++){
|
for(var i=0; i<exts.length; i++){
|
||||||
if(exts[i]==extLastName){
|
if(exts[i]==extLastName){
|
||||||
@@ -842,7 +835,7 @@ function ShowEditMenu(){
|
|||||||
$(this).removeClass("hover");
|
$(this).removeClass("hover");
|
||||||
}).click(function(){
|
}).click(function(){
|
||||||
$(this).addClass("on").siblings().removeClass("on");
|
$(this).addClass("on").siblings().removeClass("on");
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//取磁盘
|
//取磁盘
|
||||||
|
|||||||
+279
-132
@@ -1561,82 +1561,164 @@ function to301(siteName, type, obj){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function toProxySwitch(){
|
|
||||||
var status = $("input[name='open_proxy']").prop("checked")==true?1:0;
|
|
||||||
if(status==1){
|
|
||||||
$("input[name='open_proxy']").prop("checked",false);
|
|
||||||
}else{
|
|
||||||
$("input[name='open_proxy']").prop("checked",true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//反向代理
|
//反向代理
|
||||||
function toProxy(siteName, type, obj) {
|
function toProxy(siteName, type, obj) {
|
||||||
// 设置 页面展示
|
// 设置 页面展示
|
||||||
if(type == 1) {
|
if(type == 1) {
|
||||||
var proxy_form = layer.open({
|
var proxy_title = "创建反向代理";
|
||||||
|
if (typeof(obj) != 'undefined'){
|
||||||
|
proxy_title = "编辑反向代理";
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.open({
|
||||||
type: 1,
|
type: 1,
|
||||||
area: '650px',
|
area: '650px',
|
||||||
title: "创建反向代理",
|
title: proxy_title,
|
||||||
closeBtn: 1,
|
closeBtn: 1,
|
||||||
shift: 5,
|
shift: 5,
|
||||||
shadeClose: false,
|
shadeClose: false,
|
||||||
btn: ['提交','关闭'],
|
btn: ['提交','关闭'],
|
||||||
content: "<form id='form_redirect' class='divtable pd15' style='padding-bottom: 10px'>" +
|
content: "<form id='form_proxy' class='divtable pd15' style='padding-bottom: 10px'>\
|
||||||
"<div class='line'>" +
|
<div class='line'>\
|
||||||
'<span class="tname">开启代理</span>'+
|
<span class='tname'>开启代理</span>\
|
||||||
"<div class='info-r ml0'>" +
|
<div class='info-r ml0 mt5'>\
|
||||||
"<input name='open_proxy' class='btswitch btswitch-ios' type='checkbox' checked><label id='open_proxy' class='btswitch-btn' for='openProxy' onclick='toProxySwitch();'></label>" +
|
<input name='open_proxy' class='btswitch btswitch-ios' type='checkbox' checked>\
|
||||||
"</div>" +
|
<label id='open_proxy' class='btswitch-btn' for='openProxy' style='float:left'></label>\
|
||||||
"</div>" +
|
<div style='display: inline-block'>\
|
||||||
"<div class='line'>"+
|
<span class='tname' style='margin-left:15px;position: relative;top: -5px;'>是否缓存</span>\
|
||||||
"<span class='tname'>代理目录</span>" +
|
<input class='btswitch btswitch-ios' type='checkbox' name='open_cache'>\
|
||||||
"<div class='info-r ml0'>" +
|
<label class='btswitch-btn' id='open_cache' for='openCache' style='float:left'></label>\
|
||||||
"<input name='from' value='/' placeholder='/' class='bt-input-text mr5' type='text' style='width:200px''>" +
|
</div>\
|
||||||
"</div>" +
|
</div>\
|
||||||
"</div>" +
|
</div>\
|
||||||
"<div class='line'>" +
|
<div class='line'>\
|
||||||
"<span class='tname'>目标URL</span>" +
|
<span class='tname'>名称</span>\
|
||||||
"<div class='info-r ml0'>" +
|
<div class='info-r ml0'>\
|
||||||
"<input name='to' class='bt-input-text mr5' type='text' style='width:200px;float: left;margin-right:0px''>" +
|
<input name='name' value='index' placeholder='请输入名称' class='bt-input-text mr5' type='text' style='width:200px''>\
|
||||||
"<span class='tname' style='width:90px'>发送域名</span>" +
|
</div>\
|
||||||
"<input name='host' value='$host' class='bt-input-text mr5' type='text' style='width:200px'>" +
|
</div>\
|
||||||
"</div>" +
|
<div class='line' style='display:none' id='cache_time'>\
|
||||||
"</div>" +
|
<span class='tname'>缓存时间</span>\
|
||||||
"<div class='help-info-text c7'>" +
|
<div class='info-r ml0'>\
|
||||||
"<ul class='help-info-text c7'>" +
|
<input name='cache_time' value='1' class='bt-input-text mr5' type='text' style='width:200px''>分钟\
|
||||||
"<li>代理目录:访问这个目录时将会把目标URL的内容返回并显示</li>" +
|
</div>\
|
||||||
"<li>目标URL:可以填写你需要代理的站点,目标URL必须为可正常访问的URL,否则将返回错误</li>" +
|
</div>\
|
||||||
"<li>发送域名:将域名添加到请求头传递到代理服务器,默认为目标URL域名,若设置不当可能导致代理无法正常运行</li>" +
|
<div class='line'>\
|
||||||
"</ul>" +
|
<span class='tname'>代理目录</span>\
|
||||||
"</div>" +
|
<div class='info-r ml0'>\
|
||||||
"</form>",
|
<input name='from' value='/' placeholder='/' class='bt-input-text mr5' type='text' style='width:200px''>\
|
||||||
yes:function(){
|
</div>\
|
||||||
var data = $('#form_redirect').serializeArray();
|
</div>\
|
||||||
|
<div class='line'>\
|
||||||
|
<span class='tname'>目标URL</span>\
|
||||||
|
<div class='info-r ml0'>\
|
||||||
|
<input name='to' class='bt-input-text mr5' type='text' style='width:200px;float: left;margin-right:0px''>\
|
||||||
|
<span class='tname' style='width:90px'>发送域名</span>\
|
||||||
|
<input name='host' value='$host' class='bt-input-text mr5' type='text' style='width:200px'>\
|
||||||
|
</div>\
|
||||||
|
</div>\
|
||||||
|
<input name='id' value='' type='hidden'>\
|
||||||
|
<div class='help-info-text c7'>\
|
||||||
|
<ul class='help-info-text c7'>\
|
||||||
|
<li>代理目录:访问这个目录时将会把目标URL的内容返回并显示</li>\
|
||||||
|
<li>目标URL:可以填写你需要代理的站点,目标URL必须为可正常访问的URL,否则将返回错误</li>\
|
||||||
|
<li>发送域名:将域名添加到请求头传递到代理服务器,默认为目标URL域名,若设置不当可能导致代理无法正常运行</li>\
|
||||||
|
</ul>\
|
||||||
|
</div>\
|
||||||
|
</form>",
|
||||||
|
success:function(){
|
||||||
|
|
||||||
|
if (typeof(obj) != 'undefined'){
|
||||||
|
// console.log(obj);
|
||||||
|
$('input[name="name"]').val(obj['name']).attr('readonly','readonly').addClass('disabled');
|
||||||
|
if (obj['open_cache'] == 'on'){
|
||||||
|
$("input[name='open_cache']").prop("checked",true);
|
||||||
|
$('#cache_time').show();
|
||||||
|
}
|
||||||
|
|
||||||
|
$('input[name="from"]').val(obj['from']);
|
||||||
|
$('input[name="to"]').val(obj['to']);
|
||||||
|
|
||||||
|
var url = obj['to'];
|
||||||
|
var ip_reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
|
||||||
|
url = url.replace(/^http[s]?:\/\//, '');
|
||||||
|
url = url.replace(/(:|\?|\/|\\)(.*)$/, '');
|
||||||
|
if (ip_reg.test(url)) {
|
||||||
|
$("[name='host']").val('$host');
|
||||||
|
} else {
|
||||||
|
$("[name='host']").val(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('input[name="id"]').val(obj['id']);
|
||||||
|
$('input[name="cache_time"]').val(obj['cache_time']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$('input[name="to"]').on('keyup', function(){
|
||||||
|
var url = $(this).val();
|
||||||
|
var ip_reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
|
||||||
|
url = url.replace(/^http[s]?:\/\//, '');
|
||||||
|
url = url.replace(/(:|\?|\/|\\)(.*)$/, '');
|
||||||
|
if (ip_reg.test(url)) {
|
||||||
|
$("[name='host']").val('$host');
|
||||||
|
} else {
|
||||||
|
$("[name='host']").val(url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#open_proxy").click(function(){
|
||||||
|
var status = $("input[name='open_proxy']").prop("checked")==true?1:0;
|
||||||
|
if(status==1){
|
||||||
|
$("input[name='open_proxy']").prop("checked",false);
|
||||||
|
}else{
|
||||||
|
$("input[name='open_proxy']").prop("checked",true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#open_cache').click(function(){
|
||||||
|
var status = $("input[name='open_cache']").prop("checked")==true?1:0;
|
||||||
|
if(status==1){
|
||||||
|
$('#cache_time').hide();
|
||||||
|
$("input[name='open_cache']").prop("checked",false);
|
||||||
|
}else{
|
||||||
|
$('#cache_time').show();
|
||||||
|
$("input[name='open_cache']").prop("checked",true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
yes:function(index,layer_ro){
|
||||||
|
var data = $('#form_proxy').serializeArray();
|
||||||
var t = {};
|
var t = {};
|
||||||
t['name'] = 'siteName';
|
t['name'] = 'siteName';
|
||||||
t['value'] = siteName;
|
t['value'] = siteName;
|
||||||
data.push(t);
|
data.push(t);
|
||||||
|
|
||||||
var loading = layer.msg('添加中...',{icon:16,time:0,shade: [0.3, '#000']});
|
// console.log(data);
|
||||||
|
var loading = layer.msg('正在'+proxy_title+'...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||||
$.post('/site/set_proxy',data, function(res) {
|
$.post('/site/set_proxy',data, function(res) {
|
||||||
layer.close(loading);
|
layer.close(loading);
|
||||||
if (res.status) {
|
if (!res.status){
|
||||||
layer.close(proxy_form);
|
layer.msg(res.msg, {icon: 2,time:10000});
|
||||||
toProxy(siteName)
|
return;
|
||||||
} else {
|
|
||||||
layer.msg(res.msg, {icon: 2});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showMsg(proxy_title+"成功!",function(){
|
||||||
|
layer.close(index);
|
||||||
|
toProxy(siteName);
|
||||||
|
},{icon: 1, time:2000});
|
||||||
},'json');
|
},'json');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == 2) {
|
if (type == 2) {
|
||||||
|
var loading = layer.msg('正在删除中...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||||
$.post('/site/del_proxy', {siteName: siteName,id: obj,}, function(res) {
|
$.post('/site/del_proxy', {siteName: siteName,id: obj,}, function(res) {
|
||||||
|
layer.close(loading);
|
||||||
if (res.status == true) {
|
if (res.status == true) {
|
||||||
layer.msg('删除成功', {time: 1000,icon: 1});
|
showMsg('删除成功', function(){
|
||||||
toProxy(siteName)
|
toProxy(siteName);
|
||||||
|
},{time: 1000,icon: 1});
|
||||||
} else {
|
} else {
|
||||||
layer.msg(res.msg, {time: 1000,icon: 2});
|
layer.msg(res.msg, {time: 1000,icon: 2});
|
||||||
}
|
}
|
||||||
@@ -1650,90 +1732,118 @@ function toProxy(siteName, type, obj) {
|
|||||||
var data = {siteName: siteName,id: obj};
|
var data = {siteName: siteName,id: obj};
|
||||||
$.post('/site/get_proxy_conf', data, function(res) {
|
$.post('/site/get_proxy_conf', data, function(res) {
|
||||||
layer.close(laoding);
|
layer.close(laoding);
|
||||||
if (res.status == true) {
|
if (!res.status){
|
||||||
var mBody = "<div class='webEdit-box' style='padding: 20px'>\
|
|
||||||
<textarea style='height: 320px; width: 445px; margin-left: 20px; line-height:18px' id='configProxyBody'>"+res.data.result+"</textarea>\
|
|
||||||
<div class='info-r'>\
|
|
||||||
<ul class='help-info-text c7 ptb10'>\
|
|
||||||
<li>此处为反向代理配置文件,若您不了解配置规则,请勿随意修改.</li>\
|
|
||||||
</ul>\
|
|
||||||
</div>\
|
|
||||||
</div>";
|
|
||||||
var editor;
|
|
||||||
var index = layer.open({
|
|
||||||
type: 1,
|
|
||||||
title: '编辑配置文件',
|
|
||||||
closeBtn: 1,
|
|
||||||
shadeClose: true,
|
|
||||||
area: ['500px', '500px'],
|
|
||||||
btn: ['提交','关闭'],
|
|
||||||
content: mBody,
|
|
||||||
success: function () {
|
|
||||||
editor = CodeMirror.fromTextArea(document.getElementById("configProxyBody"), {
|
|
||||||
extraKeys: {"Ctrl-Space": "autocomplete"},
|
|
||||||
lineNumbers: true,
|
|
||||||
matchBrackets:true,
|
|
||||||
});
|
|
||||||
editor.focus();
|
|
||||||
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
|
|
||||||
$("#onlineEditFileBtn").unbind('click');
|
|
||||||
},
|
|
||||||
yes:function(index,layero){
|
|
||||||
$("#configProxyBody").empty().text(editor.getValue());
|
|
||||||
var load = layer.load();
|
|
||||||
var data = {
|
|
||||||
siteName: siteName,
|
|
||||||
id: obj,
|
|
||||||
config: editor.getValue(),
|
|
||||||
};
|
|
||||||
|
|
||||||
$.post('/site/save_proxy_conf', data, function(res) {
|
|
||||||
layer.close(load)
|
|
||||||
if (res.status == true) {
|
|
||||||
layer.msg('保存成功', {icon: 1});
|
|
||||||
layer.close(index);
|
|
||||||
} else {
|
|
||||||
layer.msg(res.msg, {time: 3000,icon: 2});
|
|
||||||
}
|
|
||||||
},'json');
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
layer.msg('请求错误!!', {time: 3000,icon: 2});
|
layer.msg('请求错误!!', {time: 3000,icon: 2});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mBody = "<div class='webEdit-box' style='padding: 20px'>\
|
||||||
|
<textarea style='height: 320px; width: 445px; margin-left: 20px; line-height:18px' id='configProxyBody'>"+res.data.result+"</textarea>\
|
||||||
|
<div class='info-r'>\
|
||||||
|
<ul class='help-info-text c7 ptb10'>\
|
||||||
|
<li>此处为反向代理配置文件,若您不了解配置规则,请勿随意修改.</li>\
|
||||||
|
</ul>\
|
||||||
|
</div>\
|
||||||
|
</div>";
|
||||||
|
var editor;
|
||||||
|
var index = layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: '编辑配置文件',
|
||||||
|
closeBtn: 1,
|
||||||
|
shadeClose: true,
|
||||||
|
area: ['500px', '500px'],
|
||||||
|
btn: ['提交','关闭'],
|
||||||
|
content: mBody,
|
||||||
|
success: function () {
|
||||||
|
editor = CodeMirror.fromTextArea(document.getElementById("configProxyBody"), {
|
||||||
|
extraKeys: {"Ctrl-Space": "autocomplete"},
|
||||||
|
lineNumbers: true,
|
||||||
|
matchBrackets:true,
|
||||||
|
});
|
||||||
|
editor.focus();
|
||||||
|
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
|
||||||
|
$("#onlineEditFileBtn").unbind('click');
|
||||||
|
},
|
||||||
|
yes:function(index,layero){
|
||||||
|
$("#configProxyBody").empty().text(editor.getValue());
|
||||||
|
var load = layer.load();
|
||||||
|
var data = {
|
||||||
|
siteName: siteName,
|
||||||
|
id: obj,
|
||||||
|
config: editor.getValue(),
|
||||||
|
};
|
||||||
|
|
||||||
|
$.post('/site/save_proxy_conf', data, function(res) {
|
||||||
|
layer.close(load)
|
||||||
|
if (res.status == true) {
|
||||||
|
layer.msg('保存成功', {icon: 1});
|
||||||
|
layer.close(index);
|
||||||
|
} else {
|
||||||
|
layer.msg(res.msg, {time: 3000,icon: 2});
|
||||||
|
}
|
||||||
|
},'json');
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
});
|
||||||
},'json');
|
},'json');
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == 10 || type == 11) {
|
if (type == 10 || type == 11) {
|
||||||
//[11]启动 或 停止[10]
|
//[11]启动 或 停止[10]
|
||||||
status = type==10 ? '0' : '1';
|
status = type==10 ? '0' : '1';
|
||||||
var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
||||||
$.post('/site/set_proxy_status', {siteName: siteName,'status':status,'id':obj}, function(res) {
|
$.post('/site/set_proxy_status', {siteName: siteName,'status':status,'id':obj}, function(rdata) {
|
||||||
layer.close(loading);
|
layer.close(loading);
|
||||||
if (res.status == true) {
|
if (!rdata.status){
|
||||||
layer.msg('设置成功', {icon: 1});
|
|
||||||
toProxy(siteName);
|
|
||||||
} else {
|
|
||||||
layer.msg(res.msg, {time: 3000,icon: 2});
|
layer.msg(res.msg, {time: 3000,icon: 2});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showMsg("设置成功",function(){
|
||||||
|
toProxy(siteName);
|
||||||
|
},{icon: 1,time:2000});
|
||||||
|
},'json');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == 20 || type == 21) {
|
||||||
|
//[20] 开始缓存 或 [21] 停止缓存
|
||||||
|
var status = type == 20 ? 'on' : '';
|
||||||
|
obj['open_cache'] = status;
|
||||||
|
obj['siteName'] = siteName;
|
||||||
|
|
||||||
|
var loading = layer.msg('正在提交请求...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||||
|
$.post('/site/set_proxy',obj, function(rdata) {
|
||||||
|
layer.close(loading);
|
||||||
|
if (!rdata.status){
|
||||||
|
layer.msg(rdata.msg, {icon: 2,time:2000});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
showMsg("设置成功!",function(){
|
||||||
|
toProxy(siteName);
|
||||||
|
},{icon: 1, time:2000});
|
||||||
},'json');
|
},'json');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = '<div id="proxy_list" class="bt_table">\
|
var body = '<div id="proxy_list" class="bt_table">\
|
||||||
<div style="padding-bottom: 10px">\
|
<div style="padding-bottom: 10px">\
|
||||||
<button type="button" title="添加反向代理" class="btn btn-success btn-sm mr5" onclick="toProxy(\''+siteName+'\',1)" ><span>添加反向代理</span></button>\
|
<button type="button" title="添加反向代理" class="btn btn-success btn-sm mr5" onclick="toProxy(\''+siteName+'\',1)" >\
|
||||||
|
<span>添加反向代理</span>\
|
||||||
|
</button>\
|
||||||
</div>\
|
</div>\
|
||||||
<div class="divtable" style="max-height:200px;">\
|
<div class="divtable" style="max-height:200px;">\
|
||||||
<table class="table table-hover" >\
|
<table class="table table-hover" >\
|
||||||
<thead style="position: relative;z-index: 1;">\
|
<thead style="position: relative;z-index: 1;">\
|
||||||
<tr>\
|
<tr>\
|
||||||
<th><span data-index="1"><span>代理目录</span></span></th>\
|
<th>名称</th>\
|
||||||
<th><span data-index="2"><span>目标地址</span></span></th>\
|
<th>代理目录</th>\
|
||||||
<th><span data-index="2"><span>状态</span></span></th>\
|
<th>目标地址</th>\
|
||||||
<th><span data-index="3"><span>操作</span></span></th>\
|
<th>缓存</th>\
|
||||||
|
<th>状态</th>\
|
||||||
|
<th>操作</th>\
|
||||||
</tr>\
|
</tr>\
|
||||||
</thead>\
|
</thead>\
|
||||||
<tbody id="md-301-body"></tbody>\
|
<tbody id="md-301-body"></tbody>\
|
||||||
@@ -1745,28 +1855,64 @@ function toProxy(siteName, type, obj) {
|
|||||||
var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
var loading = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
||||||
$.post("/site/get_proxy_list", {siteName: siteName},function (res) {
|
$.post("/site/get_proxy_list", {siteName: siteName},function (res) {
|
||||||
layer.close(loading);
|
layer.close(loading);
|
||||||
if (res.status === true) {
|
if (!res.status){
|
||||||
let data = res.data.result;
|
|
||||||
data.forEach(function(item){
|
|
||||||
var switchProxy = '<span onclick="toProxy(\''+siteName+'\', 10, \''+ item.id +'\')" style="color:rgb(92, 184, 92);" class="btlink glyphicon glyphicon-play"></span>';
|
|
||||||
if (!item['status']){
|
|
||||||
switchProxy = '<span onclick="toProxy(\''+siteName+'\', 11, \''+ item.id +'\')" style="color:rgb(255, 0, 0);" class="btlink glyphicon glyphicon-pause"></span>';
|
|
||||||
}
|
|
||||||
|
|
||||||
let tmp = '<tr>\
|
|
||||||
<td><span data-index="1"><span>'+item.from+'</span></span></td>\
|
|
||||||
<td><span data-index="2"><span>'+item.to+'</span></span></td>\
|
|
||||||
<td>'+switchProxy+'</td>\
|
|
||||||
<td>\
|
|
||||||
<span data-index="4" onclick="toProxy(\''+siteName+'\', 3, \''+ item.id +'\')" class="btlink">详细</span> |\
|
|
||||||
<span data-index="4" onclick="toProxy(\''+siteName+'\', 2, \''+ item.id +'\')" class="btlink">删除</span>\
|
|
||||||
</td>\
|
|
||||||
</tr>';
|
|
||||||
$("#md-301-body").append(tmp);
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
layer.msg(res.msg, {icon:2});
|
layer.msg(res.msg, {icon:2});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var data = res.data.result;
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
var item = data[i];
|
||||||
|
|
||||||
|
var switchProxy = '<span onclick="toProxy(\''+siteName+'\', 10, \''+ item.id +'\')" style="color:rgb(92, 184, 92);" class="btlink glyphicon glyphicon-play"></span>';
|
||||||
|
if (!item['status']){
|
||||||
|
switchProxy = '<span onclick="toProxy(\''+siteName+'\', 11, \''+ item.id +'\')" style="color:rgb(255, 0, 0);" class="btlink glyphicon glyphicon-pause"></span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
var openCache = '<span data-index="'+i+'" class="btlink cache off">未开启</span>';
|
||||||
|
if (item['open_cache'] == 'on'){
|
||||||
|
openCache = '<span data-index="'+i+'" class="btlink cache on">已开启</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
let tmp = '<tr>\
|
||||||
|
<td>'+item.name+'</td>\
|
||||||
|
<td>'+item.from+'</td>\
|
||||||
|
<td>'+item.to+'</td>\
|
||||||
|
<td>'+openCache+'</td>\
|
||||||
|
<td>'+switchProxy+'</td>\
|
||||||
|
<td>\
|
||||||
|
<span data-index="'+i+'" class="btlink detail">详细</span> |\
|
||||||
|
<span data-index="'+i+'" class="btlink edit">编辑</span> |\
|
||||||
|
<span data-index="'+i+'" class="btlink delete">删除</span>\
|
||||||
|
</td>\
|
||||||
|
</tr>';
|
||||||
|
$("#md-301-body").append(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#md-301-body .detail').click(function(){
|
||||||
|
var index = $(this).data('index');
|
||||||
|
toProxy(siteName, 3 ,data[index]['id']);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#md-301-body .edit').click(function(){
|
||||||
|
var index = $(this).data('index');
|
||||||
|
toProxy(siteName, 1 ,data[index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#md-301-body .delete').click(function(){
|
||||||
|
var index = $(this).data('index');
|
||||||
|
toProxy(siteName, 2 ,data[index]['id']);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#md-301-body .cache').click(function(){
|
||||||
|
var index = $(this).data('index');
|
||||||
|
if ($(this).hasClass('on')){
|
||||||
|
toProxy(siteName, 21 ,data[index]);
|
||||||
|
} else{
|
||||||
|
toProxy(siteName, 20 ,data[index]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
},'json');
|
},'json');
|
||||||
/////////
|
/////////
|
||||||
}
|
}
|
||||||
@@ -1779,7 +1925,8 @@ function sslAdmin(siteName){
|
|||||||
var rdata = data['data'];
|
var rdata = data['data'];
|
||||||
var tbody = '';
|
var tbody = '';
|
||||||
for(var i=0;i<rdata.length;i++){
|
for(var i=0;i<rdata.length;i++){
|
||||||
tbody += '<tr><td>'+rdata[i].subject+'</td>\
|
tbody += '<tr>\
|
||||||
|
<td>'+rdata[i].subject+'</td>\
|
||||||
<td>'+rdata[i].dns.join('<br>')+'</td>\
|
<td>'+rdata[i].dns.join('<br>')+'</td>\
|
||||||
<td>'+rdata[i].notAfter+'</td>\
|
<td>'+rdata[i].notAfter+'</td>\
|
||||||
<td>'+rdata[i].issuer.split(' ')[0]+'</td>\
|
<td>'+rdata[i].issuer.split(' ')[0]+'</td>\
|
||||||
|
|||||||
@@ -4503,7 +4503,7 @@ html .menu .menu_exit:hover {
|
|||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
}
|
}
|
||||||
/*微信二维码*/
|
/*微信二维码*/
|
||||||
.boxConter {
|
.boxConter {
|
||||||
height: 458px;
|
height: 458px;
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
@@ -4854,3 +4854,21 @@ select[disabled]{
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#form_proxy .sub-groud .bt-input-text{
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
#form_proxy .sub-groud {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
#form_proxy .btswitch-btn{
|
||||||
|
display:inline-block;
|
||||||
|
}
|
||||||
|
#form_proxy .add-replace-prosy {
|
||||||
|
position: relative;
|
||||||
|
top: -10px;
|
||||||
|
}
|
||||||
|
#form_proxy .disabled{
|
||||||
|
background-color: #eee !important;
|
||||||
|
cursor: default;
|
||||||
|
border: 1px solid #dbdbea;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user