diff --git a/.gitignore b/.gitignore index 21c659353..9f4ba0ac1 100644 --- a/.gitignore +++ b/.gitignore @@ -195,3 +195,4 @@ plugins/goedge-happy /plugins/tools /plugins/choose-linux-python *.md5 +/bak diff --git a/plugins/doh/config/config.toml b/plugins/doh/config/config.toml new file mode 100644 index 000000000..c358cf803 --- /dev/null +++ b/plugins/doh/config/config.toml @@ -0,0 +1,48 @@ +[general] +# 监听地址和端口 +listen_addr = "0.0.0.0:8080" + +# DoH 路径 +path = "/dns-query" + +# TLS 配置(如果需要 HTTPS) +# tls_cert_path = "/etc/doh-proxy/cert.pem" +# tls_key_path = "/etc/doh-proxy/key.pem" + +# 并发请求限制 +max_concurrent_requests = 512 + +# 日志文件 +log_file = "{$SERVER_PATH}/doh/doh-proxy.log" + +[upstream] +# 上游 DNS 服务器 +upstream_addr = "1.1.1.1:443" +bootstrap_addr = "1.1.1.1:53" + +# 上游 DoH 服务器 URL(如果使用标准的 DoH 端点) +# upstream_url = "https://cloudflare-dns.com/dns-query" + +# 超时设置 +timeout = 10 + +# 重试次数 +tries = 3 + +# 启用 TCP 保活 +tcp_keepalive = 30 + +[cache] +# 缓存设置 +max_entries = 65536 +min_ttl = 60 +max_ttl = 3600 + +[network] +# 网络设置 +tcp_fastopen = true +reuse_port = true + +[log] +# 日志级别:debug, info, warn, error +level = "info" \ No newline at end of file diff --git a/plugins/doh/ico.png b/plugins/doh/ico.png new file mode 100644 index 000000000..2260f976a Binary files /dev/null and b/plugins/doh/ico.png differ diff --git a/plugins/doh/index.html b/plugins/doh/index.html new file mode 100755 index 000000000..000fe9a45 --- /dev/null +++ b/plugins/doh/index.html @@ -0,0 +1,26 @@ + +
+
+
+

服务

+

自启动

+

使用说明

+
+
+
+
+
+
+ \ No newline at end of file diff --git a/plugins/doh/index.py b/plugins/doh/index.py new file mode 100755 index 000000000..6d667fdb0 --- /dev/null +++ b/plugins/doh/index.py @@ -0,0 +1,248 @@ +# coding: utf-8 + + +import time +import os +import sys +import re +import subprocess + +web_dir = os.getcwd() + "/web" +if os.path.exists(web_dir): + sys.path.append(web_dir) + os.chdir(web_dir) + +import core.mw as mw + +app_debug = False +if mw.isAppleSystem(): + app_debug = True + + +def getPluginName(): + return 'doh' + + +def getPluginDir(): + return mw.getPluginDir() + '/' + getPluginName() + + +def getServerDir(): + return mw.getServerDir() + '/' + getPluginName() + + +def getInitDFile(): + if app_debug: + return '/tmp/' + getPluginName() + return '/etc/init.d/' + getPluginName() + + +def getArgs(): + args = sys.argv[2:] + tmp = {} + args_len = len(args) + + if args_len == 1: + t = args[0].strip('{').strip('}') + t = t.split(':', 1) + tmp[t[0]] = t[1] + elif args_len > 1: + for i in range(len(args)): + t = args[i].split(':', 1) + tmp[t[0]] = t[1] + + return tmp + + +def checkArgs(data, ck=[]): + for i in range(len(ck)): + if not ck[i] in data: + return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!')) + return (True, mw.returnJson(True, 'ok')) + + +def getInitdConfTpl(): + path = getPluginDir() + "/init.d/gitea.tpl" + return path + + +def getInitdConf(): + path = getServerDir() + "/init.d/doh" + return path + + if not os.path.exists(path): + return mw.returnJson(False, "请先安装初始化!
默认地址:http://" + mw.getLocalIp() + ":3000") + return path + + +def getConfTpl(): + path = getPluginDir() + "/config/config.toml" + return path + + +def status(): + data = mw.execShell( + "ps -ef|grep " + getPluginName() + " |grep -v grep | grep -v python | awk '{print $2}'") + if data[0] == '': + return 'stop' + return 'start' + + +def getHomeDir(): + if mw.isAppleSystem(): + user = mw.execShell( + "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip() + return '/Users/' + user + else: + return 'www' + + + +def contentReplace(content): + + service_path = mw.getServerDir() + content = content.replace('{$ROOT_PATH}', mw.getFatherDir()) + content = content.replace('{$SERVER_PATH}', service_path) + return content + + +def initDreplace(): + + file_tpl = getInitdConfTpl() + service_path = mw.getServerDir() + + + conf_toml = getServerDir() + '/config.toml' + if not os.path.exists(conf_toml): + conf_tpl = getConfTpl() + content = mw.readFile(conf_tpl) + mw.writeFile(conf_toml, content) + + # systemd + systemDir = mw.systemdCfgDir() + systemService = systemDir + '/doh.service' + systemServiceTpl = getPluginDir() + '/init.d/doh.service.tpl' + if os.path.exists(systemDir) and not os.path.exists(systemService): + service_path = mw.getServerDir() + se_content = mw.readFile(systemServiceTpl) + se_content = se_content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(systemService, se_content) + mw.execShell('systemctl daemon-reload') + + log_path = getServerDir() + '/log' + if not os.path.exists(log_path): + os.mkdir(log_path) + + return '' + + + + +def appOp(method): + initDreplace() + if not mw.isAppleSystem(): + data = mw.execShell('systemctl ' + method + ' ' + getPluginName()) + if data[1] == '': + return 'ok' + return 'fail' + return "fail" + + +def start(): + return appOp('start') + + +def stop(): + return appOp('stop') + + +def restart(): + return appOp('restart') + + +def reload(): + return appOp('reload') + + +def initdStatus(): + if mw.isAppleSystem(): + return "Apple Computer does not support" + + shell_cmd = 'systemctl status ' + getPluginName() + ' | grep loaded | grep "enabled;"' + data = mw.execShell(shell_cmd) + if data[0] == '': + return 'fail' + return 'ok' + + +def initdInstall(): + if mw.isAppleSystem(): + return "Apple Computer does not support" + + mw.execShell('systemctl enable ' + getPluginName()) + return 'ok' + + +def initdUinstall(): + if mw.isAppleSystem(): + return "Apple Computer does not support" + + mw.execShell('systemctl disable ' + getPluginName()) + return 'ok' + + +def runLog(): + log_path = getServerDir() + '/log/doh.log' + return log_path + +def getTotalStatistics(): + st = status() + data = {} + if st.strip() == 'start': + list_count = pQuery('select count(id) as num from repository') + count = list_count[0]["num"] + data['status'] = True + data['count'] = count + data['ver'] = mw.readFile(getServerDir() + '/version.pl').strip() + return mw.returnJson(True, 'ok', data) + + data['status'] = False + data['count'] = 0 + return mw.returnJson(False, 'fail', data) + + +def uninstallPreInspection(): + return 'ok' + +if __name__ == "__main__": + func = sys.argv[1] + if func == 'status': + print(status()) + elif func == 'start': + print(start()) + elif func == 'stop': + print(stop()) + elif func == 'restart': + print(restart()) + elif func == 'reload': + print(reload()) + elif func == 'initd_status': + print(initdStatus()) + elif func == 'initd_install': + print(initdInstall()) + elif func == 'initd_uninstall': + print(initdUinstall()) + elif func == 'uninstall_pre_inspection': + print(uninstallPreInspection()) + elif func == 'run_log': + print(runLog()) + elif func == 'post_receive_log': + print(postReceiveLog()) + elif func == 'conf': + print(getConf()) + elif func == 'init_conf': + print(getInitdConf()) + elif func == 'get_total_statistics': + print(getTotalStatistics()) + else: + print('fail') diff --git a/plugins/doh/info.json b/plugins/doh/info.json new file mode 100755 index 000000000..21edc77d9 --- /dev/null +++ b/plugins/doh/info.json @@ -0,0 +1,18 @@ +{ + "ps": "DNS over HTTPS(DoH)是一种通过HTTPS协议加密域名解析请求的技术!", + "name": "doh", + "title": "DoH", + "versions": ["0.9.15"], + "tip": "soft", + "install_pre_inspection":false, + "uninstall_pre_inspection":true, + "checks": "server/doh", + "path":"server/doh", + "author": "doh", + "date": "2025-11-23", + "home": "https://github.com/DNSCrypt/doh-server", + "type": "doh", + "shell": "install.sh", + "pid": "4", + "sort": 7 +} \ No newline at end of file diff --git a/plugins/doh/init.d/doh.service.tpl b/plugins/doh/init.d/doh.service.tpl new file mode 100644 index 000000000..fb7a35366 --- /dev/null +++ b/plugins/doh/init.d/doh.service.tpl @@ -0,0 +1,21 @@ +[Unit] +Description=DOH(DNS over HTTPS) +After=syslog.target +After=network.target + +[Service] +RestartSec=2s +Type=simple +User=www +Group=www +WorkingDirectory={$SERVER_PATH}/doh +# /www/server/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000 +# /www/server/doh/doh-proxy -h +ExecStart={$SERVER_PATH}/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000 +Restart=always +RemainAfterExit=yes +#AmbientCapabilities=CAP_NET_BIND_SERVICE +#CapabilityBoundingSet=CAP_NET_BIND_SERVICE + +[Install] +WantedBy=multi-user.target diff --git a/plugins/doh/install.sh b/plugins/doh/install.sh new file mode 100755 index 000000000..361fb51a0 --- /dev/null +++ b/plugins/doh/install.sh @@ -0,0 +1,102 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH + +curPath=`pwd` +rootPath=$(dirname "$curPath") +rootPath=$(dirname "$rootPath") +serverPath=$(dirname "$rootPath") + +if [ -f ${rootPath}/bin/activate ];then + source ${rootPath}/bin/activate +fi + + +# cd /www/server/mdserver-web/plugins/doh && bash install.sh install 0.9.15 + +# /www/server/doh/doh-proxy --config /www/server/doh/config.toml +# /www/server/doh/doh-proxy --config /www/server/doh/config.toml --check + + +# /www/server/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000 + +# 详细状态信息 +# sudo systemctl status doh -l +# 查看完整日志 +# sudo journalctl -u doh -n 100 +# 实时日志跟踪 +# sudo journalctl -u doh -f + + +URL_DOWNLOAD=https://github.com/DNSCrypt/doh-server/releases/download + + +bash ${rootPath}/scripts/getos.sh +OSNAME=`cat ${rootPath}/data/osname.pl` +OSNAME_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'` + +Install_App() +{ + + mkdir -p $serverPath/source/doh + + echo '正在安装脚本文件...' + version=$1 + + if [ "macos" == "$OSNAME" ];then + echo "not support!" + exit + else + file=doh-proxy_${version}_linux-x86_64 + fi + + # https://github.com/DNSCrypt/doh-server/releases/download/0.9.15/doh-proxy_0.9.15_linux-aarch64.tar.bz2 + file_xz="${file}.tar.bz2" + echo "wget -O $serverPath/source/doh/$file_xz ${URL_DOWNLOAD}/${version}/${file_xz}" + if [ ! -f $serverPath/source/doh/$file_xz ];then + wget --no-check-certificate -O $serverPath/source/doh/$file_xz ${URL_DOWNLOAD}/${version}/${file_xz} + fi + + if [ -f $serverPath/source/doh/$file_xz ];then + cd $serverPath/source/doh && tar -xjf $file_xz + fi + + + echo "mv $serverPath/source/doh/doh-proxy $serverPath/doh" + if [ -f $serverPath/source/doh/doh-proxy ];then + mv $serverPath/source/doh/doh-proxy $serverPath/doh + fi + + + if [ -d $serverPath/doh ];then + echo $version > $serverPath/doh/version.pl + + cd ${rootPath} && python3 plugins/doh/index.py start + cd ${rootPath} && python3 plugins/doh/index.py initd_install + fi + + echo 'install doh success' +} + +Uninstall_App() +{ + + if [ -f /usr/lib/systemd/system/doh.service ];then + systemctl stop doh + systemctl disable doh + rm -rf /usr/lib/systemd/system/doh.service + systemctl daemon-reload + fi + + rm -rf $serverPath/doh + echo 'uninstall doh success' +} + + +action=$1 +version=$2 +if [ "${1}" == 'install' ];then + Install_App $version +else + Uninstall_App $version +fi diff --git a/plugins/doh/js/doh.js b/plugins/doh/js/doh.js new file mode 100755 index 000000000..c2d7b6397 --- /dev/null +++ b/plugins/doh/js/doh.js @@ -0,0 +1,37 @@ + +function dohPost(method,args,callback, title){ + + var _args = null; + if (typeof(args) == 'string'){ + _args = JSON.stringify(toArrayObject(args)); + } else { + _args = JSON.stringify(args); + } + + var _title = '正在获取...'; + if (typeof(title) != 'undefined'){ + _title = title; + } + + var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 }); + $.post('/plugins/run', {name:'doh', func:method, args:_args}, function(data) { + layer.close(loadT); + if (!data.status){ + layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + if(typeof(callback) == 'function'){ + callback(data); + } + },'json'); +} + +function dohRead(){ + + var readme = ''; + + $('.soft-man-con').html(readme); +} \ No newline at end of file diff --git a/plugins/doh/t.md b/plugins/doh/t.md new file mode 100644 index 000000000..1eaf2b6a9 --- /dev/null +++ b/plugins/doh/t.md @@ -0,0 +1,2 @@ +🌐 Custom DoH Proxy +Use /dns-query endpoint \ No newline at end of file diff --git a/plugins/haproxy/versions/2.6/install.sh b/plugins/haproxy/versions/2.6/install.sh index f49b5d395..77d4ef230 100755 --- a/plugins/haproxy/versions/2.6/install.sh +++ b/plugins/haproxy/versions/2.6/install.sh @@ -22,7 +22,7 @@ Install_App() APP_DIR=${serverPath}/source/haproxy mkdir -p $APP_DIR - + echo $MIN_VERSION > $serverPath/haproxy/version.pl LOCAL_ADDR=common cn=$(curl -fsSL -m 10 -s http://ipinfo.io/json | grep "\"country\": \"CN\"") @@ -59,7 +59,6 @@ Install_App() cd ${APP_DIR}/haproxy-${VERSION} && make TARGET=linux-glibc && make install PREFIX=$serverPath/haproxy fi - echo $MIN_VERSION > $serverPath/haproxy/version.pl echo '安装Haproxy成功' #Haproxy日志配置 diff --git a/plugins/openresty/index.py b/plugins/openresty/index.py index b3ee56ed8..58c921fab 100755 --- a/plugins/openresty/index.py +++ b/plugins/openresty/index.py @@ -206,6 +206,11 @@ def confReplace(): if not os.path.exists(a_conf): mw.writeFile(a_conf, mw.readFile(a_conf_tpl)) + # copy resty lib + src_resty_dir = getPluginDir()+'/resty/*' + dst_resty_dir = getServerDir()+'/lualib/resty' + mw.execShell('cp -rf ' + src_resty_dir + ' ' + dst_resty_dir) + def initDreplace(): diff --git a/plugins/php/install.sh b/plugins/php/install.sh index 4b7cf06ba..21611e98e 100755 --- a/plugins/php/install.sh +++ b/plugins/php/install.sh @@ -9,6 +9,7 @@ serverPath=$(dirname "$rootPath") sysName=`uname` # cd /www/server/mdserver-web/plugins/php && bash install.sh install 73 +# cd /www/server/mdserver-web/plugins/php && bash install.sh install 85 # https://www.php.net/releases if id www &> /dev/null ;then diff --git a/plugins/php/versions/84/install.sh b/plugins/php/versions/84/install.sh index bdc70d678..98d9d66c1 100755 --- a/plugins/php/versions/84/install.sh +++ b/plugins/php/versions/84/install.sh @@ -119,8 +119,8 @@ if [ "$sysName" == "Darwin" ];then export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include" export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz" else - cd ${rootPath}/plugins/php/lib && /bin/bash openssl_30.sh - export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl30/lib/pkgconfig + cd ${rootPath}/plugins/php/lib && /bin/bash openssl_35.sh + export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl35/lib/pkgconfig OPTIONS="$OPTIONS --with-openssl" fi diff --git a/plugins/php/versions/85/install.sh b/plugins/php/versions/85/install.sh index 988aa3d7f..141bc19ba 100755 --- a/plugins/php/versions/85/install.sh +++ b/plugins/php/versions/85/install.sh @@ -120,8 +120,9 @@ if [ "$sysName" == "Darwin" ];then export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include" export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz" else - cd ${rootPath}/plugins/php/lib && /bin/bash openssl_30.sh - export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl30/lib/pkgconfig + echo "lib" + cd ${rootPath}/plugins/php/lib && /bin/bash openssl_35.sh + export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl35/lib/pkgconfig OPTIONS="$OPTIONS --with-openssl" fi diff --git a/plugins/php/versions/common/memcached.sh b/plugins/php/versions/common/memcached.sh index ff92809d6..ee2e4142a 100755 --- a/plugins/php/versions/common/memcached.sh +++ b/plugins/php/versions/common/memcached.sh @@ -21,6 +21,11 @@ if [ "$version" -lt "70" ];then LIBV=2.2.0 fi + +if [ "$version" == "85" ];then + LIBV=3.4.0 +fi + LIB_PATH_NAME=lib/php if [ -d $serverPath/php/${version}/lib64 ];then LIB_PATH_NAME=lib64 diff --git a/plugins/php/versions/common/redis.sh b/plugins/php/versions/common/redis.sh index 0b94f387b..994f83a0f 100755 --- a/plugins/php/versions/common/redis.sh +++ b/plugins/php/versions/common/redis.sh @@ -12,7 +12,7 @@ serverPath=$(dirname "$rootPath") sourcePath=${serverPath}/source/php SYS_ARCH=`arch` LIBNAME=redis -LIBV=6.1.0 +LIBV=6.3.0 sysName=`uname` actionType=$1 version=$2 @@ -24,7 +24,7 @@ elif [ "$version" -lt "70" ];then elif [ "$version" -lt "80" ];then LIBV=5.3.7 elif [ "$version" -gt "80" ];then - LIBV=6.1.0 + LIBV=6.3.0 else echo 'ok' fi diff --git a/plugins/tgbot/startup/extend/push_ad.py b/plugins/tgbot/startup/extend/push_ad.py index 3bc6045bc..19cdbc82c 100644 --- a/plugins/tgbot/startup/extend/push_ad.py +++ b/plugins/tgbot/startup/extend/push_ad.py @@ -45,10 +45,6 @@ def send_msg(bot, tag='ad', trigger_time=300): mw.writeFile(lock_file, json.dumps(lock_data)) # 信号只在一个周期内执行一次|end keyboard = [ - [ - types.InlineKeyboardButton( - text="官方收劫持|SEO", url='https://t.me/xiaosi876') - ], [ types.InlineKeyboardButton( text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555') diff --git a/plugins/tgbot/startup/extend/push_notice_msg.py b/plugins/tgbot/startup/extend/push_notice_msg.py index 554f3a732..4f66b5cdd 100644 --- a/plugins/tgbot/startup/extend/push_notice_msg.py +++ b/plugins/tgbot/startup/extend/push_notice_msg.py @@ -54,16 +54,11 @@ def send_msg(bot, tag='ad', trigger_time=300): mw.writeFile(lock_file, json.dumps(lock_data)) # 信号只在一个周期内执行一次|end - # 官方收劫持|SEO| 6m | next,2/6 | @tlx104 # https://t.me/gjgzs2022 | 22/m | @GJ_gzs # 实名认证/过人脸🕵️‍♀️各种账号处理✅ | 30/m| next,12/30 | @nngzs # 18+资源采集| 4/m | next,1/14 | @liuxingyu123 keyboard = [ - [ - types.InlineKeyboardButton( - text="官方收劫持|SEO", url='https://t.me/xiaosi876') - ], [ types.InlineKeyboardButton( text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555') diff --git a/web/misc/nginx/rewrite/doh.conf b/web/misc/nginx/rewrite/doh.conf new file mode 100644 index 000000000..4f7c8462b --- /dev/null +++ b/web/misc/nginx/rewrite/doh.conf @@ -0,0 +1,5 @@ +location /dns-query { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; +} \ No newline at end of file diff --git a/web/misc/nginx/rewrite/obf.conf b/web/misc/nginx/rewrite/obf.conf new file mode 100644 index 000000000..9ba36282e --- /dev/null +++ b/web/misc/nginx/rewrite/obf.conf @@ -0,0 +1,28 @@ +# 在http目录下配置 +# lua_shared_dict obf_cache 64m; + +# 混淆配置 +body_filter_by_lua_block { + local obf = require("resty.obf.obf") + obf.process_response() +} + +location / { + + #set $close_close 'true'; # 关闭 关闭开关 + #set $debug_close 'true'; # 关闭 开始调试 + set $obf_js_mode 'inline'; # 解密模式 link:链接, inline:内链模式 + set $obf_js_url 'https://cdn.jsdelivr.net/npm/node-forge@1.3.1/dist/forge.min.js?v=1'; # 自定义解密js地址,tips: forge + set $obf_timeout 600; # 缓存时间 + set $obf_rand_var 'true'; # 随机变量 + set $obf_rand_extra 'true'; # 随机混淆内容 + set $obf_uint8_b64 'false'; # 是Uint8Array,否base64 + #set $obf_prof 'true'; # 测试时间消耗记录 + set $obf_cache_item_max 0; # 缓存多少 + set $obf_cache_max_bytes 16777216; # 缓存字节大小 + + if (!-e $request_filename) { + rewrite ^(.*)$ /index.php/$1 last; + break; + } +} diff --git a/web/misc/nginx/rewrite/obf_proxy.conf b/web/misc/nginx/rewrite/obf_proxy.conf new file mode 100644 index 000000000..29fbe2dce --- /dev/null +++ b/web/misc/nginx/rewrite/obf_proxy.conf @@ -0,0 +1,38 @@ +# 在http目录下配置 +# lua_shared_dict obf_cache 64m; + +# 混淆配置-代理 +body_filter_by_lua_block { + local obf = require("resty.obf.obf") + obf.process_response() +} + +location / { + proxy_pass http://127.0.0.1:8989; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_hide_header Content-Encoding; + #gzip off; + proxy_set_header Accept-Encoding ""; + proxy_set_header If-Modified-Since ""; + proxy_set_header If-None-Match ""; + + #set $close_close 'true'; + #set $debug_close 'true'; + set $obf_js_mode 'inline'; + set $obf_js_url ''; + set $obf_timeout 600; + set $obf_rand_var 'true'; + set $obf_rand_extra 'true'; + set $obf_uint8_b64 'true'; + set $obf_prof 'true'; + set $obf_cache_item_max 0; + set $obf_cache_max_bytes 16777216; + set $obf_kdf_raw 'false'; + + header_filter_by_lua_block { + ngx.header.content_length = nil + } +} \ No newline at end of file diff --git a/web/static/app/site.js b/web/static/app/site.js index ece72ba91..18a86a0a1 100755 --- a/web/static/app/site.js +++ b/web/static/app/site.js @@ -2931,7 +2931,21 @@ function rewrite(siteName){ $("#webedit-con").html(webBakHtml); var editor = CodeMirror.fromTextArea(document.getElementById("rewriteBody"), { - extraKeys: {"Ctrl-Space": "autocomplete"}, + extraKeys: { + "Ctrl-Space": "autocomplete", + "Ctrl-F": "findPersistent", + "Ctrl-H": "replaceAll", + "Ctrl-S": function() { + $("#rewriteBody").empty(); + $("#rewriteBody").text(editor.getValue()); + setRewrite(filename, encodeURIComponent(editor.getValue())); + }, + "Cmd-S":function() { + $("#rewriteBody").empty(); + $("#rewriteBody").text(editor.getValue()); + setRewrite(filename, encodeURIComponent(editor.getValue())); + }, + }, lineNumbers: true, matchBrackets:true, });