fix: accept qdreader json map cookie input

This commit is contained in:
2026-05-17 17:58:01 +08:00
parent c040ca40df
commit 9d8021e1e4
3 changed files with 83 additions and 18 deletions
+37 -9
View File
@@ -554,18 +554,46 @@ function handleDelete(arg, store, bind) {
setStore(store); setBindStore(bind); setRemarkStore(remarks)
return "已删除 uid: " + duid
}
function normalizeCookieInput(arg) {
var s = trim(arg)
var obj = safeJsonParse(s, null)
if (isObject(obj)) {
var out = []
for (var uid in obj) if (obj.hasOwnProperty(uid)) {
var realUid = isRealUid(uid)
var cookie = trim(obj[uid])
if (!realUid || !cookie) continue
out.push({ uid: realUid, cookie: cookie })
}
return out
}
return [{ uid: "", cookie: s }]
}
function handleSaveCookie(arg, store, bind) {
var cookie = arg
if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) return "未识别到 Cookie。请发送:启点ck <QX抓到的完整cookie>"
var uid = extractUid(cookie)
if (!uid) return "无法从 Cookie 识别 uid。请确认 QX 抓的是启点读书福利中心 getlogininfo 请求,Cookie 内应包含 QDHeader 或 uid。"
var isNew = !store[uid]
var changed = store[uid] !== cookie
var entries = normalizeCookieInput(arg)
if (!entries.length) return "未识别到 Cookie。请发送:启点ck {\"uid\":\"cookie\"} 或 启点ck <QX抓到的完整cookie>"
var me = currentUserId()
store[uid] = cookie
if (me) bind[uid] = me
var lines = []
for (var i = 0; i < entries.length; i++) {
var cookie = entries[i].cookie
if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) return "未识别到 Cookie。请发送:启点ck {\"uid\":\"cookie\"} 或 启点ck <QX抓到的完整cookie>"
var parsedUid = extractUid(cookie)
var uid = entries[i].uid || parsedUid
if (!uid) return "无法从 Cookie 识别 uid。请确认 QX 抓的是启点读书福利中心 getlogininfo 请求,Cookie 内应包含 QDHeader 或 uid。"
var isNew = !store[uid]
var changed = store[uid] !== cookie
store[uid] = cookie
if (me) bind[uid] = me
lines.push("启点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功")
lines.push("uid: " + uid)
if (entries.length > 1 && parsedUid && parsedUid !== uid) lines.push("提示: JSON uid 与 Cookie 解析 uid 不一致,已按 JSON uid 保存")
}
setStore(store); setBindStore(bind)
return ["启点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功", "uid: " + uid, me ? ("绑定用户: " + maskUid(me)) : "绑定用户: 未识别", "账号数: " + visibleUids(store, bind, false).length, "cookie: " + maskCookie(cookie), "签到:发送 启点签到"].join("\n")
lines.push(me ? ("绑定用户: " + maskUid(me)) : "绑定用户: 未识别")
lines.push("账号数: " + visibleUids(store, bind, false).length)
lines.push("cookie: " + maskCookie(entries[0].cookie))
lines.push("签到:发送 启点签到")
return lines.join("\n")
}
function main() {
var text = contentText()
+37 -9
View File
@@ -554,18 +554,46 @@ function handleDelete(arg, store, bind) {
setStore(store); setBindStore(bind); setRemarkStore(remarks)
return "已删除 uid: " + duid
}
function normalizeCookieInput(arg) {
var s = trim(arg)
var obj = safeJsonParse(s, null)
if (isObject(obj)) {
var out = []
for (var uid in obj) if (obj.hasOwnProperty(uid)) {
var realUid = isRealUid(uid)
var cookie = trim(obj[uid])
if (!realUid || !cookie) continue
out.push({ uid: realUid, cookie: cookie })
}
return out
}
return [{ uid: "", cookie: s }]
}
function handleSaveCookie(arg, store, bind) {
var cookie = arg
if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) return "未识别到 Cookie。请发送:启点ck <QX抓到的完整cookie>"
var uid = extractUid(cookie)
if (!uid) return "无法从 Cookie 识别 uid。请确认 QX 抓的是启点读书福利中心 getlogininfo 请求,Cookie 内应包含 QDHeader 或 uid。"
var isNew = !store[uid]
var changed = store[uid] !== cookie
var entries = normalizeCookieInput(arg)
if (!entries.length) return "未识别到 Cookie。请发送:启点ck {\"uid\":\"cookie\"} 或 启点ck <QX抓到的完整cookie>"
var me = currentUserId()
store[uid] = cookie
if (me) bind[uid] = me
var lines = []
for (var i = 0; i < entries.length; i++) {
var cookie = entries[i].cookie
if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) return "未识别到 Cookie。请发送:启点ck {\"uid\":\"cookie\"} 或 启点ck <QX抓到的完整cookie>"
var parsedUid = extractUid(cookie)
var uid = entries[i].uid || parsedUid
if (!uid) return "无法从 Cookie 识别 uid。请确认 QX 抓的是启点读书福利中心 getlogininfo 请求,Cookie 内应包含 QDHeader 或 uid。"
var isNew = !store[uid]
var changed = store[uid] !== cookie
store[uid] = cookie
if (me) bind[uid] = me
lines.push("启点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功")
lines.push("uid: " + uid)
if (entries.length > 1 && parsedUid && parsedUid !== uid) lines.push("提示: JSON uid 与 Cookie 解析 uid 不一致,已按 JSON uid 保存")
}
setStore(store); setBindStore(bind)
return ["启点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功", "uid: " + uid, me ? ("绑定用户: " + maskUid(me)) : "绑定用户: 未识别", "账号数: " + visibleUids(store, bind, false).length, "cookie: " + maskCookie(cookie), "签到:发送 启点签到"].join("\n")
lines.push(me ? ("绑定用户: " + maskUid(me)) : "绑定用户: 未识别")
lines.push("账号数: " + visibleUids(store, bind, false).length)
lines.push("cookie: " + maskCookie(entries[0].cookie))
lines.push("签到:发送 启点签到")
return lines.join("\n")
}
function main() {
var text = contentText()
+9
View File
@@ -73,6 +73,15 @@ test('manual cookie save falls back to ywguid when QDHeader uid is null', () =>
assert.equal(JSON.parse(r.store.qdreader_cookie_json)['54321'], fallbackCookie);
});
test('manual cookie save accepts upstream JSON map format', () => {
const jsonCookie = 'QDHeader=KG51bGwpfHg=; ywguid=54321; qdh=qdh; sessionyw=s; appId=10';
const r = runPlugin({ content: '启点ck ' + JSON.stringify({ '475700975': jsonCookie }) });
assert.match(r.replies.join('\n'), /CK新增成功/);
assert.match(r.replies.join('\n'), /uid: 475700975/);
assert.equal(JSON.parse(r.store.qdreader_cookie_json)['475700975'], jsonCookie);
assert.equal(JSON.parse(r.bucketStore['hermes_qidian.qdreader_user_bind_json'])['475700975'], 'user-a');
});
test('manual cookie save falls back to QDHeader embedded UserId before ywguid', () => {
const streamQdheader = 'KG51bGwpfChudWxsKXwxMTc5fDI1NTZ8KG51bGwpfDE2LjEwfDB8aU9TL2lQaG9uZS8obnVsbCl8MHwobnVsbCl8KG51bGwpfDQ3NTcwMDk3NXwxNzc5MDA5MTM2MDAwfDB8KG51bGwpfHx8KG51bGwpfChudWxsKXww';
const streamCookie = `QDHeader=${streamQdheader}; ywguid=120098575768; qdh=qdh; sessionyw=s; appId=12`;