From f2468861841a2d1d9ee9de17da77bb53b41f3944 Mon Sep 17 00:00:00 2001 From: hjdhnx Date: Wed, 22 Mar 2023 13:44:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E6=B3=A8=E5=85=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/admin.py | 64 ++++++++++--------- controllers/home.py | 15 +++-- ...64\346\226\260\346\227\245\345\277\227.md" | 3 + js/version.txt | 2 +- utils/common_api.py | 45 +++++++++++++ 5 files changed, 93 insertions(+), 36 deletions(-) create mode 100644 utils/common_api.py diff --git a/controllers/admin.py b/controllers/admin.py index 604a34d..fb6e43a 100644 --- a/controllers/admin.py +++ b/controllers/admin.py @@ -20,6 +20,7 @@ from js.rules import getRules,getCacheCount from utils.parser import runJScode from werkzeug.utils import secure_filename from utils.web import md5 +from utils.common_api import js_render admin = Blueprint("admin", __name__) @@ -83,37 +84,38 @@ def admin_update_env(): # 更新环境变量中的某个值 @admin.route("/view/",methods=['GET']) def admin_view_rule(name): - if not name or not name.split('.')[-1] in ['js','txt','py','json']: - return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py') - try: - env = get_env() - # print(env) - if env.get('js_proxy'): - js_proxy = env['js_proxy'] - burl = request.base_url - if '=>' in js_proxy: - oldsrc = js_proxy.split('=>')[0] - if oldsrc in burl: - newsrc = js_proxy.split('=>')[1] - # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}') - rurl = burl.replace(oldsrc, newsrc) - if burl != rurl: - jscode = parser.getJs(name, 'js') - # rjscode = render_template_string(jscode, env=env) - rjscode = jscode - for k in env: - # print(f'${k}', f'{env[k]}') - if f'${k}' in rjscode: - rjscode = rjscode.replace(f'${k}', f'{env[k]}') - # rjscode = render_template_string(jscode, **env) - if rjscode.strip() == jscode.strip(): # 无需渲染才代理 - return redirect(rurl) - else: - logger.info(f'{name}由于存在环境变量无法被依赖代理') - - return parser.toJs(name,'js',env) - except Exception as e: - return R.error(f'非法猥亵\n{e}') + return js_render(name) + # if not name or not name.split('.')[-1] in ['js','txt','py','json']: + # return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py') + # try: + # env = get_env() + # # print(env) + # if env.get('js_proxy'): + # js_proxy = env['js_proxy'] + # burl = request.base_url + # if '=>' in js_proxy: + # oldsrc = js_proxy.split('=>')[0] + # if oldsrc in burl: + # newsrc = js_proxy.split('=>')[1] + # # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}') + # rurl = burl.replace(oldsrc, newsrc) + # if burl != rurl: + # jscode = parser.getJs(name, 'js') + # # rjscode = render_template_string(jscode, env=env) + # rjscode = jscode + # for k in env: + # # print(f'${k}', f'{env[k]}') + # if f'${k}' in rjscode: + # rjscode = rjscode.replace(f'${k}', f'{env[k]}') + # # rjscode = render_template_string(jscode, **env) + # if rjscode.strip() == jscode.strip(): # 无需渲染才代理 + # return redirect(rurl) + # else: + # logger.info(f'{name}由于存在环境变量无法被依赖代理') + # + # return parser.toJs(name,'js',env) + # except Exception as e: + # return R.error(f'非法猥亵\n{e}') @admin.route('/clear/') def admin_clear_rule(name): diff --git a/controllers/home.py b/controllers/home.py index 4827e8c..4727198 100644 --- a/controllers/home.py +++ b/controllers/home.py @@ -25,6 +25,7 @@ from utils.update import getLocalVer,getHotSuggest from js.rules import getJxs import random from utils.web import getParmas,verfy_token +from utils.common_api import js_render import functools @@ -137,11 +138,17 @@ def custom_static_libs(filename): # print(filename) return send_from_directory('libs', filename) -@home.route('/js/') -def custom_static_js(filename): +# @home.route('/js/') +# def custom_static_js(filename): +# # 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}} +# # print(filename) +# return send_from_directory('js', filename) + +@home.route('/js/',methods=['GET']) +def custom_static_js(name): # 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}} - # print(filename) - return send_from_directory('js', filename) + # print(name) + return js_render(name) # @home.route('/txt/') # def get_txt_files(name): diff --git "a/doc/\346\233\264\346\226\260\346\227\245\345\277\227.md" "b/doc/\346\233\264\346\226\260\346\227\245\345\277\227.md" index 2e6cbde..f638fd4 100644 --- "a/doc/\346\233\264\346\226\260\346\227\245\345\277\227.md" +++ "b/doc/\346\233\264\346\226\260\346\227\245\345\277\227.md" @@ -1,3 +1,6 @@ +###### 2023/03/22 +- [X] 3.9.40beta5 修复 /js 路径未注入环境变量问题 + ###### 2023/03/21 - [X] 增加了直播转点播的api,版本号升级至 3.9.40 - [X] 需要在custom.conf加一行自定义配置,例如: diff --git a/js/version.txt b/js/version.txt index a4f1cf7..a2487b6 100644 --- a/js/version.txt +++ b/js/version.txt @@ -1 +1 @@ -3.9.40beta4 \ No newline at end of file +3.9.40beta5 \ No newline at end of file diff --git a/utils/common_api.py b/utils/common_api.py new file mode 100644 index 0000000..dad654a --- /dev/null +++ b/utils/common_api.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : common_api.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Author's Blog: https://blog.csdn.net/qq_32394351 +# Date : 2023/3/22 + +from utils import parser +from utils.env import get_env +from base.R import R +from flask import request,redirect +from utils.log import logger + +def js_render(name): + if not name or not name.split('.')[-1] in ['js','txt','py','json']: + return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py') + try: + env = get_env() + # print(env) + if env.get('js_proxy'): + js_proxy = env['js_proxy'] + burl = request.base_url + if '=>' in js_proxy: + oldsrc = js_proxy.split('=>')[0] + if oldsrc in burl: + newsrc = js_proxy.split('=>')[1] + # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}') + rurl = burl.replace(oldsrc, newsrc) + if burl != rurl: + jscode = parser.getJs(name, 'js') + # rjscode = render_template_string(jscode, env=env) + rjscode = jscode + for k in env: + # print(f'${k}', f'{env[k]}') + if f'${k}' in rjscode: + rjscode = rjscode.replace(f'${k}', f'{env[k]}') + # rjscode = render_template_string(jscode, **env) + if rjscode.strip() == jscode.strip(): # 无需渲染才代理 + return redirect(rurl) + else: + logger.info(f'{name}由于存在环境变量无法被依赖代理') + + return parser.toJs(name,'js',env) + except Exception as e: + return R.error(f'非法猥亵\n{e}') \ No newline at end of file -- GitLab