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