From 7483901c5140e6ecd9c289e24e46504c33eae742 Mon Sep 17 00:00:00 2001 From: hjdhnx Date: Fri, 28 Oct 2022 12:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=92=E5=BA=8F=E5=92=8C?= =?UTF-8?q?=20=E9=98=B2=E7=99=BD=E5=AB=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/config.py | 2 + base/rules.db | Bin 110592 -> 110592 bytes controllers/admin.py | 4 +- controllers/home.py | 31 ++++++++++++--- controllers/layui.py | 34 ++++++++++++++++- controllers/parse.py | 4 +- controllers/service.py | 15 ++++++-- controllers/vod.py | 12 +++++- templates/admin.html | 2 +- templates/config.txt | 4 +- templates/layui_list.html | 78 +++++++++++++++++++++++++------------- 11 files changed, 143 insertions(+), 43 deletions(-) diff --git a/base/config.py b/base/config.py index b93421d..2143c47 100644 --- a/base/config.py +++ b/base/config.py @@ -36,6 +36,8 @@ OCR_API = 'http://dm.mudery.com:10000' # 验证码识别接口,传参数data UNAME = 'admin' # 管理员账号 PWD = 'drpy' # 管理员密码 USE_PY = 0 # 开启py源 +JS0_DISABLE = 0 # 禁用js0 +JS0_PASSWORD = '' # js0密码 JS_MODE = 0 # js模式 0 drpy服务器解析 1 pluto本地解析 MAX_CONTENT_LENGTH = 1 * 1024 * 100 # 100 kB LIVE_MODE = 0 # 0 本地 1外网 diff --git a/base/rules.db b/base/rules.db index 6d236cd61c24fbf804fc32093e808bf22c7831da..2b45b419a583d8568355d6280fe028b2dd091932 100644 GIT binary patch delta 2799 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 X%G==1BUJ8Xf2D0naOiX#x-1U>m<&eR diff --git a/controllers/admin.py b/controllers/admin.py index 540a9b9..c1fb903 100644 --- a/controllers/admin.py +++ b/controllers/admin.py @@ -37,12 +37,13 @@ def admin_index(): # 管理员界面 lsg = storage_service() live_url = lsg.getItem('LIVE_URL') use_py = lsg.getItem('USE_PY') + js0_password = lsg.getItem('JS0_PASSWORD') # print(f'live_url:', live_url) rules = getRules('js') # print(rules) cache_count = getCacheCount() # print(cache_count) - return render_template('admin.html', pystate=use_py,rules=rules,cache_count=cache_count, ver=getLocalVer(), live_url=live_url) + return render_template('admin.html',js0_password=js0_password, pystate=use_py,rules=rules,cache_count=cache_count, ver=getLocalVer(), live_url=live_url) @admin.route('/settings') def admin_settings(): # 管理员界面 @@ -158,6 +159,7 @@ def admin_rule_order(order=0): # 管理员修改规则顺序 # print(rules.getState(rule_list[0])) # print(rule_list) success_list = [] + rule_list.reverse() # 倒序解决时间多重排序问题 for rule in rule_list: try: res_id = rules.setOrder(rule,order) diff --git a/controllers/home.py b/controllers/home.py index 45cb9f6..a6a47df 100644 --- a/controllers/home.py +++ b/controllers/home.py @@ -24,6 +24,7 @@ from utils.update import getLocalVer,getHotSuggest from js.rules import getJxs import random from utils.web import getParmas +import functools home = Blueprint("home", __name__,static_folder='/static') @@ -221,18 +222,19 @@ def config_render(mode): lsg = storage_service() store_conf_dict = lsg.getStoreConfDict() new_conf.update(store_conf_dict) + # print(new_conf) # print(type(new_conf),new_conf) host = getHost(mode) # ali_token = lsg.getItem('ALI_TOKEN') ali_token = new_conf.ALI_TOKEN xr_mode = new_conf.XR_MODE + js0_password = new_conf.JS0_PASSWORD js_mode = int(new_conf.JS_MODE or 0) print(f'{type(js_mode)} jsmode:{js_mode}') # print(ali_token) customConfig = getCustonDict(host,ali_token) # print(customConfig) jxs = getJxs(host=host) - lsg = storage_service() use_py = lsg.getItem('USE_PY') pys = getPys() if use_py else [] # print(pys) @@ -242,7 +244,7 @@ def config_render(mode): rules = getRules('js',js_mode) rules = get_multi_rules(rules) # html = render_template('config.txt',rules=getRules('js'),host=host,mode=mode,jxs=jxs,base64Encode=base64Encode,config=new_conf) - html = render_template('config.txt',UA=UA,xr_mode=xr_mode,ISTVB=ISTVB,pys=pys,rules=rules,host=host,mode=mode,js_mode=js_mode,jxs=jxs,alists=alists,alists_str=alists_str,live_url=live_url,config=new_conf) + html = render_template('config.txt',js0_password=js0_password,UA=UA,xr_mode=xr_mode,ISTVB=ISTVB,pys=pys,rules=rules,host=host,mode=mode,js_mode=js_mode,jxs=jxs,alists=alists,alists_str=alists_str,live_url=live_url,config=new_conf) merged_config = custom_merge(parseText(html),customConfig) # print(merged_config['sites']) merged_hide(merged_config) @@ -273,16 +275,32 @@ def sort_sites_by_order(sites,js_mode=0): site_rule = rule_list[rule_names.index(site_name)] sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state'] sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order'] + sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp() else: sites[i]['state'] = 1 sites[i]['order'] = 0 + sites[i]['write_date'] = 0 # sites[i]['site_name'] = site_name # print(sites) - sites.sort(key=lambda x: x['order'], reverse=False) + def comp(x, y): + if x['order'] > y['order']: + return 1 + elif x['order'] < y['order']: + return - 1 + else: + if x['write_date'] < y['write_date']: + return 1 + elif x['write_date'] > y['write_date']: + return -1 + else: + return 0 + # sites.sort(key=lambda x: x['order'], reverse=False) + sites.sort(key=functools.cmp_to_key(comp), reverse=False) # print(sites) for site in sites: del site['state'] del site['order'] + del site['write_date'] return sites @home.route('/configs') @@ -296,6 +314,7 @@ def config_gen(): try: use_py = lsg.getItem('USE_PY') js_mode = int(new_conf.JS_MODE or 0) + js0_password = new_conf.JS0_PASSWORD pys = getPys() if use_py else False alists = getAlist() alists_str = json.dumps(alists,ensure_ascii=False) @@ -303,15 +322,15 @@ def config_gen(): rules = get_multi_rules(rules) host0 = getHost(0) jxs = getJxs(host=host0) - set_local = render_template('config.txt',pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,0),mode=0,js_mode=js_mode,host=host0,jxs=jxs) + set_local = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,0),mode=0,js_mode=js_mode,host=host0,jxs=jxs) # print(set_local) host1 = getHost(1) jxs = getJxs(host=host1) - set_area = render_template('config.txt',pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,1),mode=1,js_mode=js_mode,host=host1,jxs=jxs) + set_area = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,1),mode=1,js_mode=js_mode,host=host1,jxs=jxs) host2 = getHost(2) or host1 # print('远程地址:'+host2) jxs = getJxs(host=host2) - set_online = render_template('config.txt',pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs) + set_online = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs) ali_token = new_conf.ALI_TOKEN with open('txt/pycms0.json','w+',encoding='utf-8') as f: customConfig = getCustonDict(host0,ali_token) diff --git a/controllers/layui.py b/controllers/layui.py index cb96512..df7c3c9 100644 --- a/controllers/layui.py +++ b/controllers/layui.py @@ -12,6 +12,8 @@ from utils.system import getHost from utils.files import getCustonDict,custom_merge from utils.encode import parseText from js.rules import getRules,getPys +from operator import itemgetter, attrgetter +import functools layui = Blueprint("layui", __name__) @@ -64,12 +66,42 @@ def layui_rule_list(): site_rule = rule_list[rule_names.index(site_name)] sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state'] sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order'] + sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp() else: sites[i]['state'] = 1 sites[i]['order'] = 0 + sites[i]['write_date'] = 0 sites[i]['site_name'] = site_name - sites.sort(key=lambda x:x['order'],reverse=False) + def multisort(sites, specs): + """ + https://zhuanlan.zhihu.com/p/109269549?utm_id=0 + 多重排序,来自知乎的代码.明显只对了最后的元素进行排序.看完评论和实践发现不对 + :param sites: + :param specs: + :return: + """ + for key, reverse in specs: + # sites.sort(key=attrgetter(key), reverse=reverse) + sites.sort(key=lambda x:x[key], reverse=reverse) + return sites + + def comp(x, y): + if x['order'] > y['order']: + return 1 + elif x['order'] < y['order']: + return - 1 + else: + if x['write_date'] < y['write_date']: + return 1 + elif x['write_date'] > y['write_date']: + return -1 + else: + return 0 + + # multisort(sites, (('order', False), ('write_date', True))) + # sites.sort(key=lambda x:x['order'],reverse=False) + sites.sort(key=functools.cmp_to_key(comp),reverse=False) new_sites = sites[(page-1)*limit:page*limit] # print(new_sites) return layuiBack('获取成功',new_sites,count=len(sites)) diff --git a/controllers/parse.py b/controllers/parse.py index d1beb9a..1c8e91a 100644 --- a/controllers/parse.py +++ b/controllers/parse.py @@ -9,6 +9,7 @@ import os from utils.cfg import cfg from utils.log import logger from utils.encode import OcrApi +from controllers.service import storage_service from utils.pyctx import py_ctx,getPreJs,runJScode,JsObjectWrapper,PyJsString,parseText,jsoup,time import base64 @@ -106,7 +107,8 @@ def parse_home(filename): @parse.route('/ocr',methods=['POST']) def base64_ocr(): - ocr_api = cfg.OCR_API + lsg = storage_service() + ocr_api = lsg.getItem('OCR_API',cfg.OCR_API) # print(ocr_api) # print('params:',getParmas()) img = getParmas('img') diff --git a/controllers/service.py b/controllers/service.py index fc70815..008ea3d 100644 --- a/controllers/service.py +++ b/controllers/service.py @@ -9,6 +9,7 @@ from models.storage import Storage from models.ruleclass import RuleClass from utils.cfg import cfg from base.database import db +from datetime import datetime,timedelta class storage_service(object): @@ -19,7 +20,7 @@ class storage_service(object): return copy_utils.obj_to_list(res) def __init__(self): - conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE','PLAY_URL', 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', + conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE','JS0_DISABLE','JS0_PASSWORD','PLAY_URL', 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', 'WALL_PAPER', 'UNAME', 'PWD', 'LIVE_MODE', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','MULTI_MODE','XR_MODE','ALI_TOKEN'] for conf in conf_list: if not self.hasItem(conf): @@ -29,9 +30,9 @@ class storage_service(object): @classmethod def getStoreConf(self): # MAX_CONTENT_LENGTH 最大上传和端口ip一样是顶级配置,无法外部修改的 - conf_list = ['LIVE_URL', 'LIVE_MODE','PLAY_URL', 'PID_URL','USE_PY','JS_MODE', 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', + conf_list = ['LIVE_URL', 'LIVE_MODE','PLAY_URL', 'PID_URL','USE_PY','JS_MODE', 'JS0_DISABLE','JS0_PASSWORD','PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', 'WALL_PAPER', 'UNAME', 'PWD', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','MULTI_MODE','XR_MODE','ALI_TOKEN'] - conf_name_list = ['直播地址', '直播模式','远程地址', '进程管理链接','启用py源', 'js模式','禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号', + conf_name_list = ['直播地址', '直播模式','远程地址', '进程管理链接','启用py源', 'js模式','禁用js0','js0密码','禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号', '管理密码', '分类排除', '线路排除','聚搜超时','多源模式','仙人模式','阿里tk'] conf_lists = [] for i in range(len(conf_list)): @@ -75,7 +76,9 @@ class rules_service(object): @staticmethod def query_all(): # 查询所有 - res = RuleClass.query.all() + res = RuleClass.query.order_by(RuleClass.order.asc(),RuleClass.write_date.desc()).all() + # print(res) + # res = RuleClass.query.order_by(RuleClass.write_date.asc()).all() return copy_utils.obj_to_list(res) @classmethod @@ -113,6 +116,10 @@ class rules_service(object): res = RuleClass.query.filter(RuleClass.name == key).first() if res: res.order = order + # print(f'{res.name}设置order为:{order}') + if res.order == order: + res.write_date = datetime.now() + # res.write_date = res.write_date + timedelta(hours=2) db.session.add(res) else: res = RuleClass(name=key, order=order) diff --git a/controllers/vod.py b/controllers/vod.py index 8679211..52126fd 100644 --- a/controllers/vod.py +++ b/controllers/vod.py @@ -5,7 +5,7 @@ # Date : 2022/9/6 import json -from flask import Blueprint,request,render_template,jsonify,make_response,redirect +from flask import Blueprint,abort,request,render_template,jsonify,make_response,redirect from time import time from utils.web import getParmas,get_interval from utils.cfg import cfg @@ -183,6 +183,16 @@ def multi_search(wd): @vod.route('/vod') def vod_home(): + lsg = storage_service() + js0_disable = lsg.getItem('JS0_DISABLE',cfg.get('JS0_DISABLE',0)) + if js0_disable: + abort(403) + js0_password = lsg.getItem('JS0_PASSWORD', cfg.get('JS0_PASSWORD', '')) + # print('js0_password:',js0_password) + if js0_password: + pwd = getParmas('pwd') + if pwd != js0_password: + abort(403) t0 = time() rule = getParmas('rule') ac = getParmas('ac') diff --git a/templates/admin.html b/templates/admin.html index 6534b8f..f94df59 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -22,7 +22,7 @@ $(".view_home").click(function(){ let rule = this.getAttribute('value').trim(); - location.href = '/vod?rule='+rule; + location.href = '/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule='+rule; }); $("#checkUpdate").click(function(){ diff --git a/templates/config.txt b/templates/config.txt index 68f03ad..e73fe2f 100644 --- a/templates/config.txt +++ b/templates/config.txt @@ -10,7 +10,7 @@ "key":"dr_{{ rule.name }}", "name":"{{ rule.name }}(道长)", "type":1, - "api":"{{ host }}/vod?rule={{ rule.name }}", + "api":"{{ host }}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule={{ rule.name }}", "searchable": {{ rule.searchable }}, "quickSearch": {{ rule.quickSearch }}, "filterable": {{ rule.filterable }} @@ -30,7 +30,7 @@ "key":"js_drpy", "name":"drpy(道长)", "type":1, - "api":"{{ host }}/vod?rule=drpy", + "api":"{{ host }}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=drpy", "searchable": 1, "quickSearch": 1, "filterable": 1 diff --git a/templates/layui_list.html b/templates/layui_list.html index c5b9c28..ffef479 100644 --- a/templates/layui_list.html +++ b/templates/layui_list.html @@ -49,8 +49,11 @@ @@ -118,6 +121,7 @@ layui.use(['table', 'dropdown'], function(){ // curr: 3 //重新从第 1 页开始 // } }); + layer.msg('已设置顺序为'+to_set_order,{time:1000}); }else{ console.log('修改失败了...'); return false @@ -170,7 +174,7 @@ layui.use(['table', 'dropdown'], function(){ // var td = obj.td(this.field); //获取当前 td // return td.find('select').val(); // }} - ,{fixed: 'right', title:'操作', width: 125, minWidth: 125, toolbar: '#barDemo'} + ,{fixed: 'right', title:'操作', width: 130, minWidth: 130, toolbar: '#barDemo'} ]] ,done: function(){ var id = this.id; @@ -308,7 +312,6 @@ layui.use(['table', 'dropdown'], function(){ }else{ setOrder(data,Number(value)); layer.close(index); - layer.msg('请设置顺序为'+value,{time:1000}); } }); // setOrder(data,0); @@ -390,6 +393,32 @@ layui.use(['table', 'dropdown'], function(){ table.on('tool(test)', function(obj){ // 双击 toolDouble var data = obj.data; //console.log(obj) + function setPos(od,msg){ + let obj_name; + try{ + obj_name = obj.data.api.match(/rule=(.*)/)[1].split('&')[0]; + }catch (e){ + obj_name = obj.data.key; + } + console.log(obj); + let params = {"names":[obj_name].join(',')}; + console.log(params); + $.post("/admin/rule_order/"+od,params,function(res,status){ + console.log(res); + if(res.code === 200){ + data.order = od; + // console.log(obj); + obj.update({ + order: data.order + }); + layer.msg('已'+msg); + }else{ + console.log('修改失败了...'); + layer.msg(msg+'失败,具体错误看日志'); + return false + } + }); + } if(obj.event === 'del'){ let obj_name; try{ @@ -432,29 +461,26 @@ layui.use(['table', 'dropdown'], function(){ content: '
自定义表单元素
' }); }else if(obj.event === 'set_top'){ - let obj_name; - try{ - obj_name = obj.data.api.match(/rule=(.*)/)[1].split('&')[0]; - }catch (e){ - obj_name = obj.data.key; - } - console.log(obj); - let params = {"names":[obj_name].join(',')}; - console.log(params); - $.post("/admin/rule_order/0",params,function(res,status){ - console.log(res); - if(res.code === 200){ - data.order = 0; - obj.update({ - order: data.order + setPos(0,'置顶'); + }else if(obj.event === 'set_bottom'){ + setPos(9999,'置底'); + }else if(obj.event === 'set_order'){ + layer.prompt({ + formType: 0, + value: '', + title: '请输入指定的排序序号,数字越小排名越靠前', + btn: ['确定','取消'], //按钮, + btnAlign: 'c' + }, function(value,index){ + console.log('value:'+value); + var reg = /^[\d]+$/; + if(!reg.test(value)){ + layer.msg('请输入有效数字!',{time:500}); + }else{ + setPos(Number(value),'指定顺序'); + layer.close(index); + } }); - layer.msg('已置顶'); - }else{ - console.log('修改失败了...'); - layer.msg('置顶失败,具体错误看日志'); - return false - } - }); } }); -- GitLab