mirror of
https://github.com/shufflewzc/faker3.git
synced 2025-07-18 21:49:50 +08:00
sync
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
14
jd_mybbphdyh4.js
Normal file
14
jd_mybbphdyh4.js
Normal file
File diff suppressed because one or more lines are too long
11
jd_mybbphdyh4_give.js
Normal file
11
jd_mybbphdyh4_give.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,337 +0,0 @@
|
|||||||
const CryptoJS = require("crypto-js");
|
|
||||||
const {BaseUtils} = require("./baseUtils");
|
|
||||||
const os = require('os');
|
|
||||||
|
|
||||||
class BaseH5st {
|
|
||||||
|
|
||||||
constructor(url, cookieStr, userAgent) {
|
|
||||||
global.baseUtils || new BaseUtils();
|
|
||||||
baseUtils.changeEnv(url, cookieStr, userAgent);
|
|
||||||
|
|
||||||
this.ErrCodes = {
|
|
||||||
UNSIGNABLE_PARAMS: 1, APPID_ABSENT: 2, TOKEN_EMPTY: 3, GENERATE_SIGNATURE_FAILED: 4, UNHANDLED_ERROR: -1
|
|
||||||
};
|
|
||||||
|
|
||||||
this._defaultAlgorithm = {};
|
|
||||||
this._debug = false;
|
|
||||||
|
|
||||||
this.settings = {
|
|
||||||
debug: !1, preRequest: !1, timeout: 2,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
_log(log) {
|
|
||||||
if (this._debug) {
|
|
||||||
console.log('[sign]', log)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getSync(t) {
|
|
||||||
let item = window.localStorage.getItem(t);
|
|
||||||
if (item) {
|
|
||||||
let r = JSON.parse(item);
|
|
||||||
if (!r || !r.t || !r.e || 0 === r.e || new Date - r.t >= 1e3 * r.e) {
|
|
||||||
this.removeSync(t);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return r.v
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
setSync(t, r, n, e) {
|
|
||||||
let i = {
|
|
||||||
v: r,
|
|
||||||
t: (new Date).getTime(),
|
|
||||||
e: "number" != typeof n.expire ? 0 : n.expire
|
|
||||||
}
|
|
||||||
window.localStorage.setItem(t, JSON.stringify(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
removeSync(t) {
|
|
||||||
window.localStorage.removeItem(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
__genDefaultKey(t, z) {
|
|
||||||
let A = "";
|
|
||||||
let S = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(baseUtils.decodeBase64URL(this.__parseToken(t, 16, 28)))),
|
|
||||||
B = S.match(/^[123]([x+][123])+/);
|
|
||||||
if (B) {
|
|
||||||
var j = B[0]["split"](""),
|
|
||||||
M = "";
|
|
||||||
j.forEach((r) => {
|
|
||||||
if (isNaN(r)) {
|
|
||||||
if (["+", "x"].includes(r)) M = r;
|
|
||||||
} else {
|
|
||||||
var a = `local_key_${r}`;
|
|
||||||
if (this._defaultAlgorithm[a]) {
|
|
||||||
switch (M) {
|
|
||||||
case "+":
|
|
||||||
A = `${A}${this.__algorithm(a, z, t)}`;
|
|
||||||
break;
|
|
||||||
case "x":
|
|
||||||
A = this.__algorithm(a, A, t);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
A = this.__algorithm(a, z, t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this._log(`__genDefaultKey input=${z},express=${S},key=${A}`)
|
|
||||||
return A;
|
|
||||||
}
|
|
||||||
|
|
||||||
__algorithm(t, r, n) {
|
|
||||||
return t === "local_key_3" ? this._defaultAlgorithm[t](r, n).toString(CryptoJS.enc.Hex) : this._defaultAlgorithm[t](r).toString(CryptoJS.enc.Hex);
|
|
||||||
}
|
|
||||||
|
|
||||||
__parseToken(t, r, n) {
|
|
||||||
if (t) return baseUtils.getDefaultMethod(t, 'slice').call(t, r, n);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
__parseAlgorithm(t, r) {
|
|
||||||
this["_token"] = t || "";
|
|
||||||
this.__genKey = r && new Function(`return ${r}`)() || null;
|
|
||||||
return !(!this["_token"] || !this.__genKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
__genSign(t, r) {
|
|
||||||
var y = baseUtils.getDefaultMethod(r, 'map')["call"](r, function (t) {
|
|
||||||
return t["key"] + ":" + t.value;
|
|
||||||
})["join"]("&");
|
|
||||||
var d = CryptoJS.HmacSHA256(y, t).toString(CryptoJS.enc.Hex);
|
|
||||||
this._log(`__genSign, paramsStr:${y}, signedStr:${d}`);
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
async __requestAlgorithmOnce() {
|
|
||||||
await this.__requestAlgorithm();
|
|
||||||
}
|
|
||||||
|
|
||||||
async __requestAlgorithm() {
|
|
||||||
this._log("__requestAlgorithm start.");
|
|
||||||
var r = this.envCollect(0);
|
|
||||||
r.ai = this._appId;
|
|
||||||
r.fp = this._fingerprint;
|
|
||||||
var n = JSON.stringify(r, null, 2);
|
|
||||||
this._log(`__requestAlgorithm envCollect=${n}`);
|
|
||||||
var e = this.aes(n , 'wm0!@w-s#ll1flo(', "0102030405060708");
|
|
||||||
var dt = {
|
|
||||||
fingerprint: this._fingerprint, appId: this._appId, version: this._version, env: e, debug: this._debug,
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
var {data} = await api({
|
|
||||||
url: "https://cactus.jd.com/request_algo",
|
|
||||||
method: "post",
|
|
||||||
data: {
|
|
||||||
version: dt.version,
|
|
||||||
fp: dt.fingerprint,
|
|
||||||
appId: dt.appId,
|
|
||||||
timestamp: Date.now(),
|
|
||||||
platform: "web",
|
|
||||||
expandParams: dt.env,
|
|
||||||
fv: this.v,
|
|
||||||
},
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json;charset=utf-8",
|
|
||||||
Origin: "https://cactus.jd.com",
|
|
||||||
Host: "cactus.jd.com",
|
|
||||||
accept: "*/*",
|
|
||||||
"User-Agent": navigation.userAgent,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (data && data.status === 200 && data.data && data.data.result) {
|
|
||||||
var c = data.data.result;
|
|
||||||
if (c.algo && c.tk && c.fp) {
|
|
||||||
var l = c.fp === this._fingerprint,
|
|
||||||
p = l ? this.getSync(this._storageFpKey, 1) : "",
|
|
||||||
d = p && c.fp === p;
|
|
||||||
if (d) {
|
|
||||||
var z = this.__parseToken(c.tk, 13, 15);
|
|
||||||
var x = parseInt(z, 16);
|
|
||||||
var w = x * 60 * 60;
|
|
||||||
this.setSync(this._storagetokenKey, CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(c.tk)), {
|
|
||||||
expire: w,
|
|
||||||
});
|
|
||||||
this.setSync(this._storageAlgnKey, CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(c.algo)), {
|
|
||||||
expire: w,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this._log(`__requestAlgorithm request success!, check memory fp:${l}, check storage fp:${d}, token:${c.tk}, storageFp:${p}, fp:${c.fp}`);
|
|
||||||
} else {
|
|
||||||
throw new Error("data.result format error.");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error("request params error.");
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(`request error, ${error.code}, ${error.message}`);
|
|
||||||
}
|
|
||||||
this._log(this._debug, "__requestAlgorithm end.");
|
|
||||||
}
|
|
||||||
|
|
||||||
__checkParams(t) {
|
|
||||||
let u = null;
|
|
||||||
if (!this._appId) {
|
|
||||||
u = {
|
|
||||||
code: this.ErrCodes.APPID_ABSENT, message: "appId is required"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!baseUtils.isPlainObject(t)) {
|
|
||||||
u = {
|
|
||||||
code: this.ErrCodes.UNSIGNABLE_PARAMS, message: 'params is not a plain object'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (baseUtils.isEmpty(t)) {
|
|
||||||
u = {
|
|
||||||
code: this.ErrCodes.UNSIGNABLE_PARAMS, message: 'params is empty'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (baseUtils.containsReservedParamName(t)) {
|
|
||||||
u = {
|
|
||||||
code: this.ErrCodes.UNSIGNABLE_PARAMS, message: 'params contains reserved param name.'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (u) {
|
|
||||||
this._onSign(u);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
let o, e, r, n;
|
|
||||||
o = baseUtils.getDefaultMethod(e = baseUtils.getDefaultMethod(r = baseUtils.getDefaultMethod(n = Object.keys(t), 'sort').call(n), 'map').call(r, (function (e) {
|
|
||||||
return {key: e, value: t[e]}
|
|
||||||
})), 'filter').call(e, (function (t) {
|
|
||||||
return baseUtils.isSafeParamValue(t.value)
|
|
||||||
}))
|
|
||||||
|
|
||||||
if (o.length === 0) {
|
|
||||||
this._onSign({
|
|
||||||
code: this.ErrCodes.UNSIGNABLE_PARAMS, message: 'params is empty after excluding "unsafe" params',
|
|
||||||
});
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
__collect() {
|
|
||||||
var n = this.envCollect(1);
|
|
||||||
n.fp = this._fingerprint;
|
|
||||||
var e = JSON.stringify(n, null, 2);
|
|
||||||
this._log(`__collect envCollect=${e}`);
|
|
||||||
return this.aes(e, this.collectSecret, "0102030405060708");
|
|
||||||
}
|
|
||||||
|
|
||||||
async sign(params) {
|
|
||||||
try {
|
|
||||||
var Ot = Date.now();
|
|
||||||
var e = ["functionId", "appid", "client", "body", "clientVersion", "sign", "t", "jsonp"].reduce((function (e, r) {
|
|
||||||
var n = params[r];
|
|
||||||
return n && ("body" === r && (n = CryptoJS.SHA256(n).toString()), e[r] = n), e
|
|
||||||
}), {});
|
|
||||||
|
|
||||||
var o = this.__checkParams(e);
|
|
||||||
if (o == null) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
await this.__requestDeps();
|
|
||||||
let i = this.__collect();
|
|
||||||
let a = this.__makeSign(o, i);
|
|
||||||
this._log(`sign elapsed time!${Date.now() - Ot}ms`);
|
|
||||||
return Object.assign({}, e, a);
|
|
||||||
} catch (error) {
|
|
||||||
this._onSign({
|
|
||||||
code: this.ErrCodes.UNHANDLED_ERROR, message: 'unknown error'
|
|
||||||
})
|
|
||||||
this._log(`unknown error!${error.message}`);
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
envCollect(e) {
|
|
||||||
let info = {
|
|
||||||
pp: (() => {
|
|
||||||
let ptPin = baseUtils.extractPtPin(document.cookie);
|
|
||||||
if (ptPin) {
|
|
||||||
return {
|
|
||||||
"p1": ptPin,
|
|
||||||
"p2": ptPin
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {}
|
|
||||||
})(),
|
|
||||||
extend: {
|
|
||||||
bu1: this.bu1,
|
|
||||||
bu2: 0,
|
|
||||||
bu3: document.head.childElementCount,
|
|
||||||
bu4: 0,
|
|
||||||
bu5: 0,
|
|
||||||
l: 0,
|
|
||||||
ls: 0,
|
|
||||||
wd: 0,
|
|
||||||
wk: 0,
|
|
||||||
},
|
|
||||||
random: baseUtils.getRandomIDPro({size: 12, dictType: 'max', customDict: null}),
|
|
||||||
sua: (() => {
|
|
||||||
var regex = new RegExp("Mozilla/5.0 \\((.*?)\\)");
|
|
||||||
var matches = window.navigator.userAgent.match(regex);
|
|
||||||
return matches && matches[1] ? matches[1] : "";
|
|
||||||
})()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.v) {
|
|
||||||
info.v = this.v
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e == 0) {
|
|
||||||
Object.assign(info, {
|
|
||||||
"wc": /Chrome/.test(window.navigator.userAgent) && !window.chrome ? 1 : 0,
|
|
||||||
"wd": 0,
|
|
||||||
"l": navigator.language,
|
|
||||||
"ls": navigator.languages.join(","),
|
|
||||||
"ml": navigator.mimeTypes.length,
|
|
||||||
"pl": navigator.plugins.length,
|
|
||||||
"av": (() => {
|
|
||||||
let av = window.navigator.userAgent.match(/(?<=\/)[0-9]\.0[^'"\n]+/g);
|
|
||||||
return av.length > 0 ? av[0] : "";
|
|
||||||
})(),
|
|
||||||
"ua": window.navigator.userAgent,
|
|
||||||
"w": window.screen.width,
|
|
||||||
"h": window.screen.height,
|
|
||||||
"ow": window.outerWidth,
|
|
||||||
"oh": window.outerHeight,
|
|
||||||
"url": location.href,
|
|
||||||
"og": location.origin,
|
|
||||||
// "pf": os.platform(),
|
|
||||||
// "bu2": " at https://storage.360buyimg.com/webcontainer/js_security_v3_0.1.5.js:3833:21",
|
|
||||||
// "canvas": "07d433e77178ffb3c4358a1a92f3233f",
|
|
||||||
// "webglFp": "d714752d3e7330bcd7e2b332e7cbcb56",
|
|
||||||
"ccn": navigator.hardwareConcurrency,
|
|
||||||
"ai": this._appId,
|
|
||||||
"pr": 1,
|
|
||||||
"re": document.referrer,
|
|
||||||
"referer": (() => {
|
|
||||||
var i = new RegExp("[^?]*"),
|
|
||||||
u = document.referrer.match(i);
|
|
||||||
if (!u || !u[0]) return "";
|
|
||||||
return u[0];
|
|
||||||
})(),
|
|
||||||
"pp1": {
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
aes(message, key, iv) {
|
|
||||||
return CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(key), {
|
|
||||||
iv: CryptoJS.enc.Utf8.parse(iv),
|
|
||||||
}).ciphertext.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports.BaseH5st = BaseH5st
|
|
@ -1,408 +0,0 @@
|
|||||||
const CryptoJS = require("crypto-js");
|
|
||||||
const ADLER32 = require("adler-32");
|
|
||||||
const {BaseH5st} = require("./baseH5st");
|
|
||||||
const qs = require("qs");
|
|
||||||
|
|
||||||
class H5st extends BaseH5st {
|
|
||||||
constructor(url, cookieStr, userAgent, config) {
|
|
||||||
super(url, cookieStr, userAgent);
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
try {
|
|
||||||
this.url = url;
|
|
||||||
} catch (e) {
|
|
||||||
console.log('url传递错误')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
try {
|
|
||||||
this.url = url;
|
|
||||||
} catch (e) {
|
|
||||||
console.log("url传递错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.childElementCount = 0;
|
|
||||||
this.v = "v_lite_f_4.4.0"
|
|
||||||
|
|
||||||
this._storageFpKey = 'WQ_lite_vk1';
|
|
||||||
this._defaultToken = "";
|
|
||||||
this._appId = "";
|
|
||||||
this._defaultAlgorithm = {
|
|
||||||
local_key_1: CryptoJS.MD5, local_key_2: CryptoJS.SHA256, local_key_3: CryptoJS.HmacSHA256
|
|
||||||
};
|
|
||||||
this._version = '4.4';
|
|
||||||
this._fingerprint = "";
|
|
||||||
this.settings = {
|
|
||||||
debug: !1
|
|
||||||
};
|
|
||||||
this.ErrCodes = {
|
|
||||||
UNSIGNABLE_PARAMS: 1, APPID_ABSENT: 2, TOKEN_EMPTY: 3, GENERATE_SIGNATURE_FAILED: 4, UNHANDLED_ERROR: -1
|
|
||||||
};
|
|
||||||
this.__iniConfig(Object.assign({}, this.settings, config));
|
|
||||||
}
|
|
||||||
|
|
||||||
__iniConfig(t) {
|
|
||||||
if (!("string" === typeof t.appId && t.appId)) {
|
|
||||||
console.error('settings.appId must be a non-empty string')
|
|
||||||
}
|
|
||||||
this._appId = t.appId || "";
|
|
||||||
if (this._appId) {
|
|
||||||
this._storageFpKey = this._storageFpKey + "_" + this._appId + "_" + this._version
|
|
||||||
}
|
|
||||||
this._debug = Boolean(t.debug);
|
|
||||||
this._onSign = "function" === typeof t.onSign ? t.onSign : function () {
|
|
||||||
};
|
|
||||||
this._log(`create instance with appId=${this._appId}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
__genDefaultKey(t, r, n, e) {
|
|
||||||
return super.__genDefaultKey(t, `${t}${r}${n}${e}qV!+A!`);
|
|
||||||
}
|
|
||||||
|
|
||||||
__genSignParams(t, e, r, n) {
|
|
||||||
return ["" + r, "" + this._fingerprint, "" + this._appId, "" + this._defaultToken, "" + t, "" + this._version, "" + e, "" + n].join(";")
|
|
||||||
}
|
|
||||||
|
|
||||||
__genSign(t, e) {
|
|
||||||
const i = baseUtils.getDefaultMethod(e, 'map').call(e, (function (t) {
|
|
||||||
return t.key + ":" + t.value
|
|
||||||
})).join("&");
|
|
||||||
const a = CryptoJS.MD5(t + i + t).toString(CryptoJS.enc.Hex);
|
|
||||||
this._log(`__genSign, paramsStr:${i}, signedStr:${a}`)
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
|
|
||||||
async __requestDeps() {
|
|
||||||
this._fingerprint = this.getSync(this._storageFpKey);
|
|
||||||
if (!this._fingerprint) {
|
|
||||||
this._fingerprint = this.generateVisitKey();
|
|
||||||
this.setSync(this._storageFpKey, this._fingerprint, {expire: 3600 * 24 * 365});
|
|
||||||
}
|
|
||||||
this._log('__requestDeps, fp:' + this._fingerprint);
|
|
||||||
}
|
|
||||||
|
|
||||||
__makeSign(t, e) {
|
|
||||||
function format() {
|
|
||||||
let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date.now(),
|
|
||||||
e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "yyyy-MM-dd", n = new Date(t),
|
|
||||||
r = e, o = {
|
|
||||||
"M+": n.getMonth() + 1,
|
|
||||||
"d+": n.getDate(),
|
|
||||||
"D+": n.getDate(),
|
|
||||||
"h+": n.getHours(),
|
|
||||||
"H+": n.getHours(),
|
|
||||||
"m+": n.getMinutes(),
|
|
||||||
"s+": n.getSeconds(),
|
|
||||||
"w+": n.getDay(),
|
|
||||||
"q+": Math.floor((n.getMonth() + 3) / 3),
|
|
||||||
"S+": n.getMilliseconds(),
|
|
||||||
};
|
|
||||||
return (/(y+)/i.test(r) && (r = r.replace(RegExp.$1, "".concat(n.getFullYear()).substr(4 - RegExp.$1.length))), Object.keys(o).forEach(function (t) {
|
|
||||||
if (new RegExp("(".concat(t, ")")).test(r)) {
|
|
||||||
var e = "S+" === t ? "000" : "00";
|
|
||||||
r = r.replace(RegExp.$1, 1 == RegExp.$1.length ? o[t] : "".concat(e).concat(o[t]).substr("".concat(o[t]).length));
|
|
||||||
}
|
|
||||||
}), r);
|
|
||||||
}
|
|
||||||
|
|
||||||
let i = Date.now(), a = format(i, 'yyyyMMddhhmmssSSS'), u = a + "88";
|
|
||||||
this._defaultToken = this.genLocalTK(this._fingerprint);
|
|
||||||
let o = this.__genDefaultKey(this._defaultToken, this._fingerprint, u, this._appId)
|
|
||||||
if (!o) {
|
|
||||||
if (this._defaultToken) {
|
|
||||||
this._onSign({code: this.ErrCodes.GENERATE_SIGNATURE_FAILED, message: 'generate key failed'})
|
|
||||||
} else {
|
|
||||||
this._onSign({code: this.ErrCodes.TOKEN_EMPTY, message: 'token is empty'})
|
|
||||||
}
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
const f = this.__genSign(o, t);
|
|
||||||
const l = baseUtils.getDefaultMethod(t, 'map').call(t, (function (t) {
|
|
||||||
return t.key
|
|
||||||
})).join(",");
|
|
||||||
const h = 1;
|
|
||||||
const p = this.__genSignParams(f, i, a, e);
|
|
||||||
this._log(`__makeSign, result:${JSON.stringify({
|
|
||||||
key: o, signStr: f, _stk: l, _ste: h, h5st: p
|
|
||||||
})}`)
|
|
||||||
this._onSign({code: 0, message: 'success'})
|
|
||||||
return {_stk: l, _ste: h, h5st: p};
|
|
||||||
}
|
|
||||||
|
|
||||||
__collect() {
|
|
||||||
let n = this.envCollect(1);
|
|
||||||
n.fp = this._fingerprint;
|
|
||||||
if (0 === n['extend']['bu2']) {
|
|
||||||
n['extend']['bu2'] = -1
|
|
||||||
}
|
|
||||||
let o = JSON.stringify(n, null, 2)
|
|
||||||
this._log(`__collect envCollect=${o}`)
|
|
||||||
let i = CryptoJS.AES.encrypt(o, CryptoJS.enc.Utf8.parse('r1T.6Vinpb.k+/a)'), {iv: CryptoJS.enc.Utf8.parse("0102030405060708")});
|
|
||||||
return i.ciphertext.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
genLocalTK(t) {
|
|
||||||
const that = this;
|
|
||||||
|
|
||||||
function b(t) {
|
|
||||||
function w(t) {
|
|
||||||
return baseUtils.getDefaultMethod(Array.prototype, 'map').call(t, (function (t) {
|
|
||||||
var e;
|
|
||||||
return baseUtils.getDefaultMethod(e = "00" + (255 & t).toString(16), 'slice').call(e, -2)
|
|
||||||
})).join("")
|
|
||||||
}
|
|
||||||
|
|
||||||
function _(t) {
|
|
||||||
var e = new Uint8Array(t.length);
|
|
||||||
return baseUtils.getDefaultMethod(Array.prototype, 'forEach').call(e, (function (e, r, n) {
|
|
||||||
n[r] = t.charCodeAt(r)
|
|
||||||
})), w(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
function x(t) {
|
|
||||||
var o = function () {
|
|
||||||
var t = new ArrayBuffer(2);
|
|
||||||
new DataView(t).setInt16(0, 256, !0);
|
|
||||||
return 256 === new Int16Array(t)[0];
|
|
||||||
}();
|
|
||||||
var i = Math.floor(t / Math.pow(2, 32));
|
|
||||||
var a = t % Math.pow(2, 32);
|
|
||||||
var u = new ArrayBuffer(8);
|
|
||||||
var c = new DataView(u);
|
|
||||||
o ? (c.setUint32(0, a, o), c.setUint32(4, i, o)) : (c.setUint32(0, i, o), c.setUint32(4, a, o))
|
|
||||||
return new Uint8Array(u)
|
|
||||||
}
|
|
||||||
|
|
||||||
var n = "", o = Date.now(), u = 'HiO81-Ei89DH', v = function (t, e, r, n) {
|
|
||||||
var i = new Uint8Array(16);
|
|
||||||
baseUtils.getDefaultMethod(Array.prototype, 'forEach').call(i, (function (e, r, n) {
|
|
||||||
n[r] = t.charCodeAt(r)
|
|
||||||
}));
|
|
||||||
var u = x(e), c = new Uint8Array(2);
|
|
||||||
baseUtils.getDefaultMethod(Array.prototype, 'forEach').call(c, (function (t, e, n) {
|
|
||||||
n[e] = r.charCodeAt(e)
|
|
||||||
}));
|
|
||||||
var f = new Uint8Array(12);
|
|
||||||
baseUtils.getDefaultMethod(Array.prototype, 'forEach').call(f, (function (t, e, r) {
|
|
||||||
r[e] = n.charCodeAt(e)
|
|
||||||
}));
|
|
||||||
var s = new Uint8Array(38);
|
|
||||||
s.set(c), s.set(f, 2), s.set(u, 14), s.set(i, 22);
|
|
||||||
var l = ADLER32.buf(s);
|
|
||||||
l >>>= 0;
|
|
||||||
var h = '00000000' + l.toString(16);
|
|
||||||
return h.substr(h.length - 8)
|
|
||||||
}(t, o, "(>", u);
|
|
||||||
n += _(v), n += _("(>"), n += _(u), n += function (t) {
|
|
||||||
return w(x(t))
|
|
||||||
}(o), n += _(t);
|
|
||||||
var g = CryptoJS.enc.Hex.parse(n), b = CryptoJS.AES.encrypt(g, CryptoJS.enc.Utf8.parse('eHL4|FW#Chc3#q?0'), {iv: CryptoJS.enc.Utf8.parse('0102030405060708')});
|
|
||||||
return that.fromBase64(CryptoJS.enc.Base64.stringify(b.ciphertext))
|
|
||||||
}
|
|
||||||
|
|
||||||
var r = {magic: "tk", version: "02", platform: "w", expires: "41", producer: "l"};
|
|
||||||
r.expr = function () {
|
|
||||||
for (var r = that.getRandomIDPro({
|
|
||||||
size: 32, dictType: 'max', customDict: null
|
|
||||||
}), n = ["1", "2", "3"], o = ["+", "x"], i = (2 + Math.floor(4 * Math.random())), a = "", u = 0; u < i; u++) a += n[Math.floor((Math.random() * 3))], (u < i - 1) && (a += o[Math.floor((Math.random() * 2))]);
|
|
||||||
(a.length < 9) && (a += r.substr(0, (9 - a.length)));
|
|
||||||
var f = CryptoJS.enc.Utf8.parse(a), s = CryptoJS.enc.Base64.stringify(f);
|
|
||||||
return that.fromBase64(s)
|
|
||||||
}();
|
|
||||||
r.cipher = b(t);
|
|
||||||
r.adler32 = function (t) {
|
|
||||||
var r = ADLER32.str(t);
|
|
||||||
r >>>= 0;
|
|
||||||
var n = '00000000' + r.toString(16);
|
|
||||||
return n.substr(n.length - 8)
|
|
||||||
}(r.magic + r.version + r.platform + r.expires + r.producer + r.expr + r.cipher);
|
|
||||||
return r.magic + r.version + r.platform + r.adler32 + r.expires + r.producer + r.expr + r.cipher
|
|
||||||
}
|
|
||||||
|
|
||||||
getRandomIDPro() {
|
|
||||||
var t, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = e.size,
|
|
||||||
n = void 0 === r ? 10 : r, o = e.dictType, i = void 0 === o ? "number" : o, a = e.customDict, u = "";
|
|
||||||
if (a && "string" == typeof a) t = a; else switch (i) {
|
|
||||||
case"alphabet":
|
|
||||||
t = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
||||||
break;
|
|
||||||
case"max":
|
|
||||||
t = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
t = "0123456789"
|
|
||||||
}
|
|
||||||
for (; n--;) u += t[Math.random() * t.length | 0];
|
|
||||||
return u
|
|
||||||
}
|
|
||||||
|
|
||||||
fromBase64(t) {
|
|
||||||
return t.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
generateVisitKey() {
|
|
||||||
const that = this;
|
|
||||||
|
|
||||||
function d(t, e) {
|
|
||||||
var r, f = [], s = t.length, l = hh(t);
|
|
||||||
try {
|
|
||||||
for (l.s(); !(r = l.n()).done;) {
|
|
||||||
var p = r.value;
|
|
||||||
if (Math.random() * s < e && (f.push(p), 0 == --e)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s--
|
|
||||||
}
|
|
||||||
} catch (t) {
|
|
||||||
l.e(t)
|
|
||||||
} finally {
|
|
||||||
l.f()
|
|
||||||
}
|
|
||||||
for (var d = "", g = 0; g < f.length; g++) {
|
|
||||||
var y = (Math.random() * (f.length - g) | 0);
|
|
||||||
d += f[y], f[y] = f[((f.length - g) - 1)]
|
|
||||||
}
|
|
||||||
return d
|
|
||||||
}
|
|
||||||
|
|
||||||
function hh(t, u) {
|
|
||||||
function p(t, e) {
|
|
||||||
(null == e || e > t.length) && (e = t.length);
|
|
||||||
for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
var c = void 0 !== o && i(t) || t["@@iterator"];
|
|
||||||
if (!c) {
|
|
||||||
if (Array.isArray(t) || (c = function (t, e) {
|
|
||||||
var o;
|
|
||||||
if (!t) return;
|
|
||||||
if ("string" == typeof t) return p(t, e);
|
|
||||||
var i = baseUtils.getDefaultMethod(o = Object.prototype.toString.call(t), 'slice').call(o, 8, -1);
|
|
||||||
"Object" === i && t.constructor && (i = t.constructor.name);
|
|
||||||
if ("Map" === i || "Set" === i) return n(t);
|
|
||||||
if ("Arguments" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return p(t, e)
|
|
||||||
}(t)) || u && t && "number" == typeof t.length) {
|
|
||||||
c && (t = c);
|
|
||||||
var f = 0, s = function () {
|
|
||||||
};
|
|
||||||
return {
|
|
||||||
s: s, n: function () {
|
|
||||||
return f >= t.length ? {done: !0} : {done: !1, value: t[f++]}
|
|
||||||
}, e: function (t) {
|
|
||||||
throw t
|
|
||||||
}, f: s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
|
|
||||||
}
|
|
||||||
var l, h = !0, d = !1;
|
|
||||||
return {
|
|
||||||
s: function () {
|
|
||||||
c = c.call(t)
|
|
||||||
}, n: function () {
|
|
||||||
var t = c.next();
|
|
||||||
return h = t.done, t
|
|
||||||
}, e: function (t) {
|
|
||||||
for (var r = e, n = [], o = 0; ;) switch (r[o++]) {
|
|
||||||
case 11:
|
|
||||||
n.push(!0);
|
|
||||||
break;
|
|
||||||
case 18:
|
|
||||||
l = n[n.length - 1];
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
n.push(t);
|
|
||||||
break;
|
|
||||||
case 74:
|
|
||||||
d = n[n.length - 1];
|
|
||||||
break;
|
|
||||||
case 95:
|
|
||||||
return;
|
|
||||||
case 99:
|
|
||||||
n.pop()
|
|
||||||
}
|
|
||||||
}, f: function () {
|
|
||||||
try {
|
|
||||||
h || null == c.return || c.return()
|
|
||||||
} finally {
|
|
||||||
if (d) throw l
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function y(t, e) {
|
|
||||||
for (var r = 0; r < e.length; r++) {
|
|
||||||
-1 !== baseUtils.getDefaultMethod(t, 'indexOf').call(t, e[r]) && (t = t.replace(e[r], ""))
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
function g(t) {
|
|
||||||
for (var e = t.size, n = t.num, o = ""; e--;) o += n[0 | (Math.random() * n.length)];
|
|
||||||
return o
|
|
||||||
}
|
|
||||||
|
|
||||||
var r = '1uct6d0jhq';
|
|
||||||
var n = d(r, 4);
|
|
||||||
var o = 10 * Math.random() | 0;
|
|
||||||
var i = y(r, n);
|
|
||||||
var a = ((g({size: o, num: i}) + n + g({size: 12 - o - 1, num: i})) + o).split("");
|
|
||||||
var u = baseUtils.getDefaultMethod(a, 'slice').call(a, 0, 8);
|
|
||||||
var l = baseUtils.getDefaultMethod(a, 'slice').call(a, 8);
|
|
||||||
var h = [];
|
|
||||||
for (; u.length > 0;) {
|
|
||||||
h.push((35 - parseInt(u.pop(), 36)).toString(36))
|
|
||||||
}
|
|
||||||
return (h = baseUtils.getDefaultMethod(h, 'concat').call(h, l)).join("")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function test(cookieStr, userAgent) {
|
|
||||||
var h5stObj = new H5st("https://prodev.m.jd.com/mall/active/3C751WNneAUaZ8Lw8xYN7cbSE8gm/index.html?ids=501730512%2C501676150&navh=49&stath=37&tttparams=wUQ86eyJhZGRyZXNzSWQiOjAsImRMYXQiOjAsImRMbmciOjAsImdMYXQiOiIzOS45NDQwOTMiLCJnTG5nIjoiMTE2LjQ4MjI3NiIsImdwc19hcmVhIjoiMF8wXzBfMCIsImxhdCI6MCwibG5nIjowLCJtb2RlbCI6IlJlZG1pIE5vdGUgMTJUIFBybyIsInBvc0xhdCI6IjM5Ljk0NDA5MyIsInBvc0xuZyI6IjExNi40ODIyNzYiLCJwcnN0YXRlIjoiMCIsInVlbXBzIjoiMC0wLTAiLCJ1bl9hcmVhIjoiMV83Ml81NTY3NF8wIn50%3D&preventPV=1&forceCurrentView=1", cookieStr, userAgent, {
|
|
||||||
debug: true,
|
|
||||||
appId: "35fa0",
|
|
||||||
});
|
|
||||||
|
|
||||||
var a = await h5stObj.sign({
|
|
||||||
functionId: "try_SpecFeedList",
|
|
||||||
appid: "newtry",
|
|
||||||
body: JSON.stringify({"tabId":"212","page":1,"version":2,"source":"default","client":"outer","tryIds":["501730512","501676150"]})
|
|
||||||
});
|
|
||||||
console.log(a);
|
|
||||||
|
|
||||||
let params = qs.stringify({
|
|
||||||
functionId: "try_SpecFeedList",
|
|
||||||
appid: "newtry",
|
|
||||||
body: JSON.stringify({"tabId":"212","page":1,"version":2,"source":"default","client":"outer","tryIds":["501730512","501676150"]}),
|
|
||||||
'h5st': a.h5st
|
|
||||||
});
|
|
||||||
console.log(params);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const {data} = await api({
|
|
||||||
method: "POST",
|
|
||||||
url: `https://api.m.jd.com/client.action`,
|
|
||||||
headers: {
|
|
||||||
"content-type": "application/x-www-form-urlencoded",
|
|
||||||
origin: "https://prodev.m.jd.com",
|
|
||||||
Referer: "https://prodev.m.jd.com/mall/active/3C751WNneAUaZ8Lw8xYN7cbSE8gm/index.html?ids=501730512%2C501676150&navh=49&stath=37&tttparams=wUQ86eyJhZGRyZXNzSWQiOjAsImRMYXQiOjAsImRMbmciOjAsImdMYXQiOiIzOS45NDQwOTMiLCJnTG5nIjoiMTE2LjQ4MjI3NiIsImdwc19hcmVhIjoiMF8wXzBfMCIsImxhdCI6MCwibG5nIjowLCJtb2RlbCI6IlJlZG1pIE5vdGUgMTJUIFBybyIsInBvc0xhdCI6IjM5Ljk0NDA5MyIsInBvc0xuZyI6IjExNi40ODIyNzYiLCJwcnN0YXRlIjoiMCIsInVlbXBzIjoiMC0wLTAiLCJ1bl9hcmVhIjoiMV83Ml81NTY3NF8wIn50%3D&preventPV=1&forceCurrentView=1",
|
|
||||||
"User-Agent": userAgent,
|
|
||||||
"x-referer-page": "https://prodev.m.jd.com/mall/active/3C751WNneAUaZ8Lw8xYN7cbSE8gm/index.html"
|
|
||||||
},
|
|
||||||
data: params
|
|
||||||
});
|
|
||||||
console.log(data);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
H5st,
|
|
||||||
test
|
|
||||||
}
|
|
149
utils/ql.js
149
utils/ql.js
@ -1,149 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const got = require('got');
|
|
||||||
require('dotenv').config();
|
|
||||||
const { readFile } = require('fs/promises');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const qlDir = '/ql';
|
|
||||||
const authFile = path.join(qlDir, 'config/auth.json');
|
|
||||||
|
|
||||||
const api = got.extend({
|
|
||||||
prefixUrl: 'http://localhost:5600',
|
|
||||||
retry: { limit: 0 },
|
|
||||||
});
|
|
||||||
|
|
||||||
async function getToken() {
|
|
||||||
const authConfig = JSON.parse(await readFile(authFile));
|
|
||||||
return authConfig.token;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports.getEnvs = async () => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
url: 'api/envs',
|
|
||||||
searchParams: {
|
|
||||||
searchValue: 'JD_COOKIE',
|
|
||||||
t: Date.now(),
|
|
||||||
},
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.getEnvsCount = async () => {
|
|
||||||
const data = await this.getEnvs();
|
|
||||||
return data.length;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.addEnv = async (cookie, remarks) => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
method: 'post',
|
|
||||||
url: 'api/envs',
|
|
||||||
params: { t: Date.now() },
|
|
||||||
json: [{
|
|
||||||
name: 'JD_COOKIE',
|
|
||||||
value: cookie,
|
|
||||||
remarks,
|
|
||||||
}],
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
'Content-Type': 'application/json;charset=UTF-8',
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.updateEnv = async (cookie, eid, remarks) => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
method: 'put',
|
|
||||||
url: 'api/envs',
|
|
||||||
params: { t: Date.now() },
|
|
||||||
json: {
|
|
||||||
name: 'JD_COOKIE',
|
|
||||||
value: cookie,
|
|
||||||
_id: eid,
|
|
||||||
remarks,
|
|
||||||
},
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
'Content-Type': 'application/json;charset=UTF-8',
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.DisableCk = async (eid) => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
method: 'put',
|
|
||||||
url: 'api/envs/disable',
|
|
||||||
params: { t: Date.now() },
|
|
||||||
body: JSON.stringify([eid]),
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
'Content-Type': 'application/json;charset=UTF-8',
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.EnableCk = async (eid) => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
method: 'put',
|
|
||||||
url: 'api/envs/enable',
|
|
||||||
params: { t: Date.now() },
|
|
||||||
body: JSON.stringify([eid]),
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
'Content-Type': 'application/json;charset=UTF-8',
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.getstatus = async (eid) => {
|
|
||||||
const envs = await this.getEnvs();
|
|
||||||
for (let i = 0; i < envs.length; i++) {
|
|
||||||
if(envs[i]._id==eid){
|
|
||||||
return envs[i].status;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 99;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.getEnvById = async (eid) => {
|
|
||||||
const envs = await this.getEnvs();
|
|
||||||
for (let i = 0; i < envs.length; i++) {
|
|
||||||
if(envs[i]._id==eid){
|
|
||||||
return envs[i].value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.delEnv = async (eid) => {
|
|
||||||
const token = await getToken();
|
|
||||||
const body = await api({
|
|
||||||
method: 'delete',
|
|
||||||
url: 'api/envs',
|
|
||||||
params: { t: Date.now() },
|
|
||||||
body: JSON.stringify([eid]),
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/json',
|
|
||||||
authorization: `Bearer ${token}`,
|
|
||||||
'Content-Type': 'application/json;charset=UTF-8',
|
|
||||||
},
|
|
||||||
}).json();
|
|
||||||
return body;
|
|
||||||
};
|
|
2499
utils/sendNotify.js
2499
utils/sendNotify.js
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user