Skip to content

Commit 52bfcbc

Browse files
authored
Merge pull request #239 from hjdhnx/main
drpy接口优化。新增加密方式
2 parents 6c39fe9 + f9882d9 commit 52bfcbc

File tree

3 files changed

+78
-14
lines changed

3 files changed

+78
-14
lines changed

src/renderer/src/utils/drpy/drpy3.ts

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ const pre = () => {
263263
let rule = {};
264264
// @ts-ignore
265265
let vercode = typeof pdfl === 'function' ? 'drpy3.1' : 'drpy3';
266-
const VERSION = `${vercode} 3.9.50beta21 202400529`;
266+
const VERSION = `${vercode} 3.9.50beta24 20240601`;
267267
/** 已知问题记录
268268
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
269269
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
@@ -853,6 +853,20 @@ const urlencode = (str) => {
853853
.replace(/%20/g, '+');
854854
};
855855

856+
/**
857+
* url编码,同 encodeURI
858+
* @param str
859+
* @returns {string}
860+
*/
861+
function encodeUrl(str){
862+
if(typeof(encodeURI) == 'function'){
863+
return encodeURI(str)
864+
}else{
865+
str = (str + '').toString();
866+
return encodeURIComponent(str).replace(/%2F/g, '/').replace(/%3F/g, '?').replace(/%3A/g, ':').replace(/%40/g, '@').replace(/%3D/g, '=').replace(/%3A/g, ':').replace(/%2C/g, ',').replace(/%2B/g, '+').replace(/%24/g, '$');
867+
}
868+
}
869+
856870
const base64Encode = (text: string) => {
857871
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
858872
};
@@ -1248,8 +1262,6 @@ let VODS: any = []; // 一级或者搜索需要的数据列表
12481262
let VOD: any = {}; // 二级的单个数据
12491263
let TABS: any = []; // 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
12501264
let LISTS: any = []; // 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
1251-
globalThis.encodeUrl = urlencode;
1252-
globalThis.urlencode = urlencode;
12531265

12541266
/**
12551267
* 获取链接的query请求转为js的object字典对象
@@ -2048,7 +2060,7 @@ const homeVodParse = (homeVodObj) => {
20482060
if (!p || typeof p !== 'string') return '{}';
20492061

20502062
p = p.trim();
2051-
let pp = rule['一级'].split(';');
2063+
let pp = rule['一级']?rule['一级'].split(';'):[];
20522064

20532065
if (p.startsWith('js:')) {
20542066
const TYPE = 'home';
@@ -2363,7 +2375,7 @@ const searchParse = (searchObj) => {
23632375
if (!p || typeof p !== 'string') return '{}';
23642376

23652377
p = p.trim();
2366-
let pp = rule['一级'].split(';');
2378+
let pp = rule['一级']?rule['一级'].split(';'):[];
23672379
let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
23682380

23692381
if (searchObj.pg === 1 && url.includes('[') && url.includes(']') && !url.includes('#')) {
@@ -2973,10 +2985,29 @@ function getOriginalJs(js_code){
29732985
}
29742986
let rsa_private_key = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=';
29752987
let decode_content = '';
2988+
function aes_decrypt(data) {
2989+
let key = CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A");
2990+
let iv = CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A");
2991+
let encrypted = CryptoJS.AES.decrypt({
2992+
ciphertext: CryptoJS.enc.Base64.parse(data)
2993+
}, key, {
2994+
iv: iv,
2995+
mode: CryptoJS.mode.CBC,
2996+
padding: CryptoJS.pad.Pkcs7
2997+
}).toString(CryptoJS.enc.Utf8);
2998+
return encrypted;
2999+
}
3000+
let error_log = false;
3001+
function logger(text){
3002+
if(error_log){
3003+
log(text);
3004+
}
3005+
}
29763006
let decode_funcs = [
2977-
(text)=>{try {return ungzip(text)} catch (e) {return ''}},
2978-
(text)=>{try {return base64Decode(text)} catch (e) {return ''}},
2979-
(text)=>{try {return RSA.decode(text,rsa_private_key,null)} catch (e) {return ''}},
3007+
(text)=>{try {return ungzip(text)} catch (e) {logger('非gzip加密');return ''}},
3008+
(text)=>{try {return base64Decode(text)} catch (e) {logger('非b64加密');return ''}},
3009+
(text)=>{try {return aes_decrypt(text)} catch (e) {logger('非aes加密');return ''}},
3010+
(text)=>{try {return RSA.decode(text,rsa_private_key,null)} catch (e) {logger('非rsa加密');return ''}},
29803011
]
29813012
let func_index = 0
29823013
while(!current_match.test(decode_content)){
@@ -3025,7 +3056,9 @@ const init = (ext) => {
30253056
let js: any = request(ext, { method: 'GET' });
30263057
if (js){
30273058
js = getOriginalJs(js);
3028-
eval(js.replace('var rule', 'rule'));
3059+
// eval(js.replace('var rule', 'rule'));
3060+
// eval("(function(){'use strict';"+js.replace('var rule', 'rule')+"})()");
3061+
eval("(function(){"+js.replace('var rule', 'rule')+"})()");
30293062
}
30303063
if (query['type'] === 'url' && query['params']) {
30313064
// 指定type是链接并且传了params支持简写如 ./xx.json
@@ -3036,7 +3069,9 @@ const init = (ext) => {
30363069
}
30373070
}else {
30383071
ext = getOriginalJs(ext);
3039-
eval(ext.replace('var rule', 'rule'));
3072+
// eval(ext.replace('var rule', 'rule'));
3073+
// eval("(function(){'use strict';"+ext.replace('var rule', 'rule')+"})()");
3074+
eval("(function(){"+ext.replace('var rule', 'rule')+"})()");
30403075
}
30413076
}
30423077
if (rule['模板'] && muban.hasOwnProperty(rule['模板'])) {
@@ -3367,6 +3402,14 @@ const isVideo = (url: string) => {
33673402
return result;
33683403
};
33693404

3405+
/**
3406+
* 获取规则
3407+
* @returns {{}}
3408+
*/
3409+
function getRule(key) {
3410+
return key ? rule[key]||'' : rule
3411+
}
3412+
33703413
// [重要]防止树摇
33713414
const keepUnUse = {
33723415
useful: (): void => {
@@ -3390,6 +3433,8 @@ const keepUnUse = {
33903433
maoss,
33913434
getProxyUrl,
33923435
urljoin2,
3436+
urlencode,
3437+
encodeUrl,
33933438
stringify,
33943439
jsp,
33953440
jq,
@@ -3420,6 +3465,7 @@ const keepUnUse = {
34203465
};
34213466

34223467
export {
3468+
getRule,
34233469
runMain,
34243470
init,
34253471
home,

src/renderer/src/utils/drpy/drpy_suggestions/drpy_object_inner.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ declare const OcrApi: {
6868
*/
6969
declare function checkHtml(html: string, url: string, obj: object): any
7070

71+
/**
72+
* 获取规则
73+
* @param key 获取规则对象的某个属性。不传则获取整个规则
74+
*/
75+
declare function getRule(key: string | null): any
76+
77+
/**
78+
* 执行一个含main函数的字符串并得到drpy任意结果
79+
* @param main_func_code 带有main函数的字符串比如 function main(){return rule} 或者 function main(){return VERSION}
80+
* @param arg 运行main函数的传参
81+
*/
82+
declare function runMain(main_func_code: string, arg: object | string): any
7183

7284
/**
7385
* 首页分类解析,筛选暂未实现

src/renderer/src/utils/drpy/drpy_suggestions/drpy_suggestions.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,14 @@ const Function = [
375375
{
376376
label: 'urlencode',
377377
insertText: 'urlencode(${1:input})',
378-
detail: 'url编码',
379-
documentation: 'urlencode(string)',
378+
detail: 'url编码-常用于将base64编码转url编码',
379+
documentation: 'urlencode(string)\n全部字符串都会被编码',
380+
},
381+
{
382+
label: 'encodeUrl',
383+
insertText: 'encodeUrl(${1:input})',
384+
detail: 'url编码-同encodeURL',
385+
documentation: 'encodeUrl(string)\n部分中文和特殊字符串才会被编码',
380386
},
381387
{
382388
label: 'encodeStr',
@@ -729,7 +735,7 @@ const Keyword = [
729735
},
730736
{
731737
label: 'search_url',
732-
insertText:`
738+
insertText: `
733739
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**',
734740
detailUrl: '/detail/fyid.html',
735741
搜索: 'json:list;name;pic;en;id',
@@ -915,4 +921,4 @@ const createDependencyProposals = (range: object, monaco: any) => {
915921
return suggestions;
916922
};
917923

918-
export {createDependencyProposals};
924+
export { createDependencyProposals };

0 commit comments

Comments
 (0)