diff --git a/controllers/admin.py b/controllers/admin.py index 362fcd6720159fed0bd858d2e0ddd40c65034e10..8d00f3b2c2e190250869e41c2f2eb829011cd0ed 100644 --- a/controllers/admin.py +++ b/controllers/admin.py @@ -6,7 +6,7 @@ import os import ujson -from flask import Blueprint,request,render_template,jsonify,make_response +from flask import Blueprint,request,render_template,render_template_string,jsonify,make_response,redirect from controllers.service import storage_service,rules_service,parse_service from base.R import R from base.database import db @@ -14,6 +14,7 @@ from utils.log import logger import shutil from utils.update import getLocalVer,getOnlineVer,download_new_version,download_lives,copy_to_update from utils import parser +from utils.env import get_env from utils.web import getParmas,verfy_token from js.rules import getRules,getCacheCount from utils.parser import runJScode @@ -74,7 +75,26 @@ 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: - return parser.toJs(name,'js') + 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) + 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}') diff --git a/controllers/home.py b/controllers/home.py index 17e7993bc468b7d10ae26584f60f6e666f876188..0ae908bed9dfa43687c664f3a8909249a9c0b33f 100644 --- a/controllers/home.py +++ b/controllers/home.py @@ -262,13 +262,16 @@ def config_render(mode): # print(parses) merged_config['parses'] = parses config_text = json.dumps(merged_config,ensure_ascii=False,indent=1) - if js_proxy: - # print('js_proxy:',js_proxy) - if '=>' in js_proxy: - oldsrc = js_proxy.split('=>')[0] - newsrc = js_proxy.split('=>')[1] - print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}') - config_text = config_text.replace(oldsrc,newsrc) + + # 依赖代理逻辑修改,改为admin/view去动态代理 + # if js_proxy: + # # print('js_proxy:',js_proxy) + # if '=>' in js_proxy: + # oldsrc = js_proxy.split('=>')[0] + # newsrc = js_proxy.split('=>')[1] + # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}') + # config_text = config_text.replace(oldsrc,newsrc) + response = make_response(config_text) # response = make_response(str(merged_config)) response.headers['Content-Type'] = 'application/json; charset=utf-8' diff --git a/controllers/vod.py b/controllers/vod.py index 52126fdc83dcdf96e631dc25c825a01206943e3a..06d3b7ed4ff7cdef3d829f3150eb24b09ac6e256 100644 --- a/controllers/vod.py +++ b/controllers/vod.py @@ -5,10 +5,11 @@ # Date : 2022/9/6 import json -from flask import Blueprint,abort,request,render_template,jsonify,make_response,redirect +from flask import Blueprint,abort,request,render_template,render_template_string,jsonify,make_response,redirect from time import time from utils.web import getParmas,get_interval from utils.cfg import cfg +from utils.env import get_env from js.rules import getRuleLists,getJxs from base.R import R from utils.log import logger @@ -237,6 +238,10 @@ def vod_home(): try: with open(js_path,encoding='utf-8') as f2: jscode = f2.read() + env = get_env() + if env: + jscode = render_template_string(jscode,env=env) + # print(jscode) jscode = before + jscode + end_code # print(jscode) ctx.eval(jscode) diff --git "a/js/007\345\275\261\350\247\206.js" "b/js/007\345\275\261\350\247\206.js" index 2d3143cc383a563b373bf8f06320a77381c2d929..31e24ea8d7fafb01bf008950f53abb423cf96653 100644 --- "a/js/007\345\275\261\350\247\206.js" +++ "b/js/007\345\275\261\350\247\206.js" @@ -1,6 +1,7 @@ muban.首图2.二级.tabs = '.nav-tabs.dpplay&&li'; var rule = Object.assign(muban.首图2,{ title:'007影视', + ali_token:'{{env.ali_token}}', host:'https://www.007ts.me', url:'/channel/fyclass-fypage.html', searchUrl:'/search/**----------fypage---.html', diff --git a/utils/env.py b/utils/env.py new file mode 100644 index 0000000000000000000000000000000000000000..af79b035045028ab6aaad21ba1bd98e36b21d361 --- /dev/null +++ b/utils/env.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : env.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/11/21 + +from utils.cfg import cfg +from controllers.service import storage_service + +def get_env(): + new_conf = cfg + lsg = storage_service() + store_conf_dict = lsg.getStoreConfDict() + new_conf.update(store_conf_dict) + # print(new_conf) + env = { + 'ali_token': new_conf.ALI_TOKEN, + 'js_proxy':new_conf.JS_PROXY + } + return env \ No newline at end of file diff --git a/utils/parser.py b/utils/parser.py index c3d0719071d5617602d1a958b7c051015b3cde5b..0b43ab00451330945533535a8eafd189ddbfd26d 100644 --- a/utils/parser.py +++ b/utils/parser.py @@ -8,7 +8,7 @@ import os import shutil import requests -from flask import make_response, jsonify +from flask import make_response, jsonify,render_template_string from functools import partial # 这玩意儿能锁定一个函数的参数 import subprocess subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法 @@ -77,18 +77,30 @@ def runJs(jsPath, before='', after='', ctx=None): # loader.execute(jscode_to_run) # return loader,js_code -def toJs(jsPath,jsRoot='cache'): +def toJs(jsPath,jsRoot='cache',env=None): base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 js_path = os.path.join(base_path, f'{jsRoot}/{jsPath}') - print(js_path) + # print(js_path) if not os.path.exists(js_path): return jsonify({'code': -2, 'msg': f'非法猥亵,文件不存在'}) with open(js_path, 'r', encoding='UTF-8') as fp: js = fp.read() + if env: + js = render_template_string(js,env=env) response = make_response(js) response.headers['Content-Type'] = 'text/javascript; charset=utf-8' return response +def getJs(jsPath,jsRoot='cache'): + base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 + js_path = os.path.join(base_path, f'{jsRoot}/{jsPath}') + # print(js_path) + if not os.path.exists(js_path): + return '' + with open(js_path, 'r', encoding='UTF-8') as fp: + js = fp.read() + return js + def toHtml(jsPath): base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 js_path = os.path.join(base_path, f'cache/{jsPath}')