mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-04-22 21:59:49 +08:00
♻️ 迁移passportReq
This commit is contained in:
@@ -414,58 +414,92 @@ async function openClient(func: string): Promise<void> {
|
||||
}
|
||||
|
||||
async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
let briefInfoGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取LToken成功");
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
showSnackbar.error(`获取LToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取LToken异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取LToken成功");
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取CookieToken成功");
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取CookieToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取CookieToken异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取CookieToken成功");
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
console.debug(briefRes);
|
||||
if ("retcode" in briefRes) {
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
console.debug(briefRes);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
uid: briefInfoGet.uid,
|
||||
cookie: ck,
|
||||
brief: briefInfoGet,
|
||||
updated: "",
|
||||
});
|
||||
uid.value = briefInfoGet.uid;
|
||||
briefInfo.value = briefInfoGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取用户信息异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
if (!briefInfoGet) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error("获取用户信息失败");
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
const briefInfoGet: TGApp.App.Account.BriefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
uid: briefInfoGet.uid,
|
||||
cookie: ck,
|
||||
brief: briefInfoGet,
|
||||
updated: "",
|
||||
});
|
||||
uid.value = briefInfoGet.uid;
|
||||
briefInfo.value = briefInfoGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
await showLoading.update("正在获取游戏账号");
|
||||
let gameRes: TGApp.BBS.Game.AccountResp | undefined;
|
||||
try {
|
||||
@@ -570,21 +604,32 @@ async function tryCodeLogin(): Promise<void> {
|
||||
* @returns {Promise<string | null>} 返回 action_type 或 null
|
||||
*/
|
||||
async function tryGetCaptcha(phone: string, aigis?: string): Promise<string | false> {
|
||||
const captchaResp = await passportReq.captcha.create(phone, aigis);
|
||||
if ("retcode" in captchaResp) {
|
||||
if (!captchaResp.data || captchaResp.data === "") {
|
||||
showSnackbar.error(`[${captchaResp.retcode}] ${captchaResp.message}`);
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][tryGetCaptcha] ${captchaResp.retcode} ${captchaResp.message}`,
|
||||
);
|
||||
return false;
|
||||
try {
|
||||
const resp = await passportReq.captcha.create(phone, aigis);
|
||||
if (resp.data.retcode !== 0) {
|
||||
// 检查是否需要极验验证
|
||||
const aigisData = resp.headers.get("x-rpc-aigis");
|
||||
if (!aigisData) {
|
||||
showSnackbar.error(`[${resp.data.retcode}] ${resp.data.message}`);
|
||||
await TGLogger.Warn(`[t-sidebar][tryGetCaptcha] ${resp.data.retcode} ${resp.data.message}`);
|
||||
return false;
|
||||
}
|
||||
const aigisResp = <TGApp.BBS.CaptchaLogin.CaptchaAigis>JSON.parse(aigisData);
|
||||
const gtRes = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
if (!gtRes) {
|
||||
showSnackbar.error("极验验证失败");
|
||||
return false;
|
||||
}
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(gtRes))}`;
|
||||
return await tryGetCaptcha(phone, aigisStr);
|
||||
}
|
||||
const aigisResp: TGApp.BBS.CaptchaLogin.CaptchaAigis = JSON.parse(captchaResp.data);
|
||||
const resp = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(resp))}`;
|
||||
return await tryGetCaptcha(phone, aigisStr);
|
||||
return resp.data.data.action_type;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取验证码失败:${errMsg}`);
|
||||
await TGLogger.Error(`[t-sidebar][tryGetCaptcha] 获取验证码异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
return captchaResp.action_type;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -602,22 +647,35 @@ async function tryLoginByCaptcha(
|
||||
actionType: string,
|
||||
aigis?: string,
|
||||
): Promise<TGApp.BBS.CaptchaLogin.LoginRes | false> {
|
||||
const loginResp = await passportReq.captcha.login(phone, captcha, actionType, aigis);
|
||||
if ("retcode" in loginResp) {
|
||||
if (!loginResp.data || loginResp.data === "") {
|
||||
showSnackbar.error(`[${loginResp.retcode}] ${loginResp.message}`);
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][tryLoginByCaptcha] ${loginResp.retcode} ${loginResp.message}`,
|
||||
);
|
||||
await new Promise<void>((resolve) => setTimeout(resolve, 3000));
|
||||
return false;
|
||||
try {
|
||||
const resp = await passportReq.captcha.login(phone, captcha, actionType, aigis);
|
||||
if (resp.data.retcode !== 0) {
|
||||
// 检查是否需要极验验证
|
||||
const aigisData = resp.headers.get("x-rpc-aigis");
|
||||
if (!aigisData) {
|
||||
showSnackbar.error(`[${resp.data.retcode}] ${resp.data.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[t-sidebar][tryLoginByCaptcha] ${resp.data.retcode} ${resp.data.message}`,
|
||||
);
|
||||
await new Promise<void>((resolve) => setTimeout(resolve, 3000));
|
||||
return false;
|
||||
}
|
||||
const aigisResp = <TGApp.BBS.CaptchaLogin.CaptchaAigis>JSON.parse(aigisData);
|
||||
const gtRes = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
if (!gtRes) {
|
||||
showSnackbar.error("极验验证失败");
|
||||
return false;
|
||||
}
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(gtRes))}`;
|
||||
return await tryLoginByCaptcha(phone, captcha, actionType, aigisStr);
|
||||
}
|
||||
const aigisResp: TGApp.BBS.CaptchaLogin.CaptchaAigis = JSON.parse(loginResp.data);
|
||||
const resp = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(resp))}`;
|
||||
return await tryLoginByCaptcha(phone, captcha, actionType, aigisStr);
|
||||
return resp.data.data;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`验证码登录失败:${errMsg}`);
|
||||
await TGLogger.Error(`[t-sidebar][tryLoginByCaptcha] 验证码登录异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
return loginResp;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -663,43 +721,77 @@ async function addByCookie(): Promise<void> {
|
||||
ltoken: "",
|
||||
};
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
showSnackbar.error(`获取LToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取LToken异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取CookieToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取CookieToken异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
let briefInfoGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取用户信息异常:${errMsg}`);
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
const briefInfoGet: TGApp.App.Account.BriefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
uid.value = briefRes.uid;
|
||||
if (!briefInfoGet) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error("获取用户信息失败");
|
||||
isTryLogin.value = false;
|
||||
return;
|
||||
}
|
||||
uid.value = briefInfoGet.uid;
|
||||
briefInfo.value = briefInfoGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
@@ -764,27 +856,33 @@ async function tryLaunchGame(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
const gamePath = `${gameDir.value}${path.sep()}${find.name}`;
|
||||
const resp = await passportReq.authTicket(account.value, cookie.value);
|
||||
if (typeof resp !== "object") {
|
||||
showSnackbar.error(resp);
|
||||
await TGLogger.Error(`[sidebar][tryLaunchGame] resp: ${resp}`);
|
||||
return;
|
||||
}
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
let ticket: string;
|
||||
try {
|
||||
const resp = await passportReq.authTicket(account.value, cookie.value);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[sidebar][tryLaunchGame] 尝试获取authTicket失败,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
);
|
||||
await TGLogger.Warn(`[sidebar][tryLaunchGame] ${resp.retcode}: ${resp.message}`);
|
||||
return;
|
||||
}
|
||||
ticket = resp.data.ticket;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取authTicket失败:${errMsg}`);
|
||||
await TGLogger.Error(
|
||||
`[sidebar][tryLaunchGame] 尝试获取authTicket失败,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
`[sidebar][tryLaunchGame] 获取authTicket异常,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
);
|
||||
await TGLogger.Error(`[sidebar][tryLaunchGame] resp: ${JSON.stringify(resp)}`);
|
||||
await TGLogger.Error(`[sidebar][tryLaunchGame] ${errMsg}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success(`成功获取ticket,正在启动应用...`);
|
||||
try {
|
||||
await invoke("launch_game", { path: gamePath, ticket: resp.ticket });
|
||||
await invoke("launch_game", { path: gamePath, ticket });
|
||||
} catch (error) {
|
||||
showSnackbar.error(`${error}`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -23,6 +23,7 @@ import useUserStore from "@store/user.js";
|
||||
import { path } from "@tauri-apps/api";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { readDir } from "@tauri-apps/plugin-fs";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
|
||||
@@ -49,23 +50,30 @@ async function tryPlayGame(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
const gamePath = `${gameDir.value}${path.sep()}${find.name}`;
|
||||
const resp = await passportReq.authTicket(account.value, cookie.value);
|
||||
if (typeof resp !== "object") {
|
||||
showSnackbar.error(resp);
|
||||
await TGLogger.Error(`[sidebar][tryLaunchGame] resp: ${resp}`);
|
||||
return;
|
||||
}
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
let ticket: string;
|
||||
try {
|
||||
const resp = await passportReq.authTicket(account.value, cookie.value);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[config][gameBadge] 尝试获取authTicket失败,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
);
|
||||
await TGLogger.Warn(`[config][gameBadge] ${resp.retcode}: ${resp.message}`);
|
||||
return;
|
||||
}
|
||||
ticket = resp.data.ticket;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取authTicket失败:${errMsg}`);
|
||||
await TGLogger.Error(
|
||||
`[config][gameBadge] 尝试获取authTicket失败,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
`[config][gameBadge] 获取authTicket异常,当前用户:${account.value.uid}-${account.value.gameUid}`,
|
||||
);
|
||||
await TGLogger.Error(`[config][gameBadge] resp: ${JSON.stringify(resp)}`);
|
||||
await TGLogger.Error(`[config][gameBadge] ${errMsg}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success(`成功获取ticket,正在启动应用...`);
|
||||
try {
|
||||
await invoke("launch_game", { path: gamePath, ticket: resp.ticket });
|
||||
await invoke("launch_game", { path: gamePath, ticket });
|
||||
} catch (error) {
|
||||
showSnackbar.error(`${error}`);
|
||||
}
|
||||
|
||||
@@ -151,54 +151,84 @@ const userInfo = computed<TGApp.App.Account.BriefInfo>(() => {
|
||||
});
|
||||
|
||||
async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
let briefInfoGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取LToken成功");
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
showSnackbar.error(`获取LToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取LToken异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取LToken成功");
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取CookieToken成功");
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取CookieToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取CookieToken异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取CookieToken成功");
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
uid: briefInfoGet.uid,
|
||||
cookie: ck,
|
||||
brief: briefInfoGet,
|
||||
updated: "",
|
||||
});
|
||||
uid.value = briefInfoGet.uid;
|
||||
briefInfo.value = briefInfoGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取用户信息异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
if (!briefInfoGet) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error("获取用户信息失败");
|
||||
return;
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
const briefInfoGet: TGApp.App.Account.BriefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
uid: briefInfoGet.uid,
|
||||
cookie: ck,
|
||||
brief: briefInfoGet,
|
||||
updated: "",
|
||||
});
|
||||
uid.value = briefInfoGet.uid;
|
||||
briefInfo.value = briefInfoGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
await showLoading.update("正在获取游戏账号");
|
||||
let gameRes: TGApp.BBS.Game.AccountResp | undefined;
|
||||
try {
|
||||
@@ -276,63 +306,91 @@ async function refreshUser(uid: string, full: boolean) {
|
||||
}
|
||||
let ck = account.cookie;
|
||||
await showLoading.start("正在刷新用户信息", "正在验证 LToken");
|
||||
const verifyLTokenRes = await passportReq.lToken.verify(ck);
|
||||
if (typeof verifyLTokenRes === "string") {
|
||||
await showLoading.update("验证 LToken 成功");
|
||||
showSnackbar.success("验证 LToken 成功");
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 验证 LToken 成功");
|
||||
} else {
|
||||
await showLoading.update("验证 LToken 失败,将尝试重新获取 LToken");
|
||||
showSnackbar.error(`[${verifyLTokenRes.retcode}]${verifyLTokenRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUser] 验证 LToken 失败");
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][refreshUser] ${verifyLTokenRes.retcode}: ${verifyLTokenRes.message}`,
|
||||
);
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes === "string") {
|
||||
await showLoading.update("获取 LToken 成功");
|
||||
ck.ltoken = ltokenRes;
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 获取 LToken 成功");
|
||||
try {
|
||||
const verifyLTokenRes = await passportReq.lToken.verify(ck);
|
||||
if (verifyLTokenRes.retcode === 0) {
|
||||
await showLoading.update("验证 LToken 成功");
|
||||
showSnackbar.success("验证 LToken 成功");
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 验证 LToken 成功");
|
||||
} else {
|
||||
await showLoading.update("获取 LToken 失败");
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error("[tc-userBadge][refreshUser] 获取 LToken 失败");
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][refreshUser] ${ltokenRes.retcode}: ${ltokenRes.message}`,
|
||||
await showLoading.update("验证 LToken 失败,将尝试重新获取 LToken");
|
||||
showSnackbar.error(`[${verifyLTokenRes.retcode}]${verifyLTokenRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUser] 验证 LToken 失败");
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][refreshUser] ${verifyLTokenRes.retcode}: ${verifyLTokenRes.message}`,
|
||||
);
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode === 0) {
|
||||
await showLoading.update("获取 LToken 成功");
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 获取 LToken 成功");
|
||||
} else {
|
||||
await showLoading.update("获取 LToken 失败");
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUser] 获取 LToken 失败");
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][refreshUser] ${ltokenRes.retcode}: ${ltokenRes.message}`,
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.update("获取 LToken 失败");
|
||||
showSnackbar.error(`获取 LToken 失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUser] 获取 LToken 异常:${errMsg}`);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.update("验证 LToken 失败");
|
||||
showSnackbar.error(`验证 LToken 失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUser] 验证 LToken 异常:${errMsg}`);
|
||||
}
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes === "string") {
|
||||
await showLoading.update("获取 CookieToken 成功");
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 获取 CookieToken 成功");
|
||||
} else {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode === 0) {
|
||||
await showLoading.update("获取 CookieToken 成功");
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
await TGLogger.Info("[tc-userBadge][refreshUser] 获取 CookieToken 成功");
|
||||
} else {
|
||||
await showLoading.update("获取 CookieToken 失败");
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUser] 获取 CookieToken 失败");
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][refreshUser] ${cookieTokenRes.retcode}: ${cookieTokenRes.message}`,
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.update("获取 CookieToken 失败");
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error("[tc-userBadge][refreshUser] 获取 CookieToken 失败");
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][refreshUser] ${cookieTokenRes.retcode}: ${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取 CookieToken 失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUser] 获取 CookieToken 异常:${errMsg}`);
|
||||
}
|
||||
account.cookie = ck;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const infoRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in infoRes) {
|
||||
try {
|
||||
const infoRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in infoRes) {
|
||||
await showLoading.update("获取用户信息失败");
|
||||
showSnackbar.error(`[${infoRes.retcode}]${infoRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUserInfo] 获取用户信息失败");
|
||||
await TGLogger.Warn(`[tc-userBadge][refreshUserInfo] ${infoRes.retcode}: ${infoRes.message}`);
|
||||
} else {
|
||||
await showLoading.update("获取用户信息成功");
|
||||
account.brief = {
|
||||
nickname: infoRes.nickname,
|
||||
uid: infoRes.uid,
|
||||
avatar: infoRes.avatar_url,
|
||||
desc: infoRes.introduce,
|
||||
};
|
||||
await TGLogger.Info("[tc-userBadge][refreshUserInfo] 获取用户信息成功");
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.update("获取用户信息失败");
|
||||
showSnackbar.error(`[${infoRes.retcode}]${infoRes.message}`);
|
||||
await TGLogger.Error("[tc-userBadge][refreshUserInfo] 获取用户信息失败");
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUserInfo] ${infoRes.retcode}: ${infoRes.message}`);
|
||||
} else {
|
||||
await showLoading.update("获取用户信息成功");
|
||||
account.brief = {
|
||||
nickname: infoRes.nickname,
|
||||
uid: infoRes.uid,
|
||||
avatar: infoRes.avatar_url,
|
||||
desc: infoRes.introduce,
|
||||
};
|
||||
await TGLogger.Info("[tc-userBadge][refreshUserInfo] 获取用户信息成功");
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUserInfo] 获取用户信息异常:${errMsg}`);
|
||||
}
|
||||
if (!full) {
|
||||
await showLoading.end();
|
||||
@@ -359,8 +417,7 @@ async function refreshUser(uid: string, full: boolean) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.update("获取游戏账号信息失败");
|
||||
showSnackbar.error(`获取游戏账号信息失败:${errMsg}`);
|
||||
await TGLogger.Error("[tc-userBadge][refreshUserInfo] 获取账号信息异常");
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUserInfo] ${e}`);
|
||||
await TGLogger.Error(`[tc-userBadge][refreshUserInfo] 获取账号信息异常:${errMsg}`);
|
||||
}
|
||||
await showLoading.end();
|
||||
}
|
||||
@@ -418,21 +475,34 @@ async function confirmCopyCookie(): Promise<void> {
|
||||
}
|
||||
|
||||
async function tryGetCaptcha(phone: string, aigis?: string): Promise<string | false> {
|
||||
const captchaResp = await passportReq.captcha.create(phone, aigis);
|
||||
if ("retcode" in captchaResp) {
|
||||
if (!captchaResp.data || captchaResp.data === "") {
|
||||
showSnackbar.error(`[${captchaResp.retcode}] ${captchaResp.message}`);
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][tryGetCaptcha] ${captchaResp.retcode} ${captchaResp.message}`,
|
||||
);
|
||||
return false;
|
||||
try {
|
||||
const resp = await passportReq.captcha.create(phone, aigis);
|
||||
if (resp.data.retcode !== 0) {
|
||||
// 检查是否需要极验验证
|
||||
const aigisData = resp.headers.get("x-rpc-aigis");
|
||||
if (!aigisData) {
|
||||
showSnackbar.error(`[${resp.data.retcode}] ${resp.data.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][tryGetCaptcha] ${resp.data.retcode} ${resp.data.message}`,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
const aigisResp = <TGApp.BBS.CaptchaLogin.CaptchaAigis>JSON.parse(aigisData);
|
||||
const gtRes = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
if (!gtRes) {
|
||||
showSnackbar.error("极验验证失败");
|
||||
return false;
|
||||
}
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(gtRes))}`;
|
||||
return await tryGetCaptcha(phone, aigisStr);
|
||||
}
|
||||
const aigisResp: TGApp.BBS.CaptchaLogin.CaptchaAigis = JSON.parse(captchaResp.data);
|
||||
const resp = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(resp))}`;
|
||||
return await tryGetCaptcha(phone, aigisStr);
|
||||
return resp.data.data.action_type;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取验证码失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][tryGetCaptcha] 获取验证码异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
return captchaResp.action_type;
|
||||
}
|
||||
|
||||
async function tryLoginByCaptcha(
|
||||
@@ -441,21 +511,34 @@ async function tryLoginByCaptcha(
|
||||
actionType: string,
|
||||
aigis?: string,
|
||||
): Promise<TGApp.BBS.CaptchaLogin.LoginRes | false> {
|
||||
const loginResp = await passportReq.captcha.login(phone, captcha, actionType, aigis);
|
||||
if ("retcode" in loginResp) {
|
||||
if (!loginResp.data || loginResp.data === "") {
|
||||
showSnackbar.error(`[${loginResp.retcode}] ${loginResp.message}`);
|
||||
await TGLogger.Error(
|
||||
`[tc-userBadge][tryLoginByCaptcha] ${loginResp.retcode} ${loginResp.message}`,
|
||||
);
|
||||
return false;
|
||||
try {
|
||||
const resp = await passportReq.captcha.login(phone, captcha, actionType, aigis);
|
||||
if (resp.data.retcode !== 0) {
|
||||
// 检查是否需要极验验证
|
||||
const aigisData = resp.headers.get("x-rpc-aigis");
|
||||
if (!aigisData) {
|
||||
showSnackbar.error(`[${resp.data.retcode}] ${resp.data.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[tc-userBadge][tryLoginByCaptcha] ${resp.data.retcode} ${resp.data.message}`,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
const aigisResp = <TGApp.BBS.CaptchaLogin.CaptchaAigis>JSON.parse(aigisData);
|
||||
const gtRes = await showGeetest(JSON.parse(aigisResp.data), aigisResp);
|
||||
if (!gtRes) {
|
||||
showSnackbar.error("极验验证失败");
|
||||
return false;
|
||||
}
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(gtRes))}`;
|
||||
return await tryLoginByCaptcha(phone, captcha, actionType, aigisStr);
|
||||
}
|
||||
const aigisResp: TGApp.BBS.CaptchaLogin.CaptchaAigis = JSON.parse(loginResp.data);
|
||||
const resp = await showGeetest(JSON.parse(aigisResp.data));
|
||||
const aigisStr = `${aigisResp.session_id};${btoa(JSON.stringify(resp))}`;
|
||||
return await tryLoginByCaptcha(phone, captcha, actionType, aigisStr);
|
||||
return resp.data.data;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`验证码登录失败:${errMsg}`);
|
||||
await TGLogger.Error(`[tc-userBadge][tryLoginByCaptcha] 验证码登录异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
return loginResp;
|
||||
}
|
||||
|
||||
async function showMenu(): Promise<void> {
|
||||
@@ -508,40 +591,70 @@ async function addByCookie(): Promise<void> {
|
||||
ltoken: "",
|
||||
};
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
return;
|
||||
}
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
showSnackbar.error(`获取LToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取LToken异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取CookieToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取CookieToken异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
let briefGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
return;
|
||||
}
|
||||
briefGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取用户信息异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
const briefGet: TGApp.App.Account.BriefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
uid.value = briefRes.uid;
|
||||
if (!briefGet) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error("获取用户信息失败");
|
||||
return;
|
||||
}
|
||||
uid.value = briefGet.uid;
|
||||
briefInfo.value = briefGet;
|
||||
cookie.value = ck;
|
||||
isLogin.value = true;
|
||||
|
||||
@@ -9,6 +9,7 @@ import bbsReq from "@req/bbsReq.js";
|
||||
import passportReq from "@req/passportReq.js";
|
||||
import { path } from "@tauri-apps/api";
|
||||
import { exists, mkdir, readTextFile, writeTextFile } from "@tauri-apps/plugin-fs";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { timestampToDate } from "@utils/toolFunc.js";
|
||||
|
||||
@@ -137,39 +138,69 @@ async function updateAllAccountCk(): Promise<void> {
|
||||
async function updateAccountCk(data: TGApp.App.Account.User): Promise<boolean> {
|
||||
const ck = data.cookie;
|
||||
await showLoading.update("正在获取 LToken");
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (typeof ltokenRes !== "string") {
|
||||
try {
|
||||
const ltokenRes = await passportReq.lToken.get(ck);
|
||||
if (ltokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Warn(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
return false;
|
||||
}
|
||||
ck.ltoken = ltokenRes.data.ltoken;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${ltokenRes.retcode}]${ltokenRes.message}`);
|
||||
await TGLogger.Error(`获取LToken失败:${ltokenRes.retcode}-${ltokenRes.message}`);
|
||||
showSnackbar.error(`获取LToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取LToken异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
ck.ltoken = ltokenRes;
|
||||
await showLoading.update("正在获取 CookieToken");
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (typeof cookieTokenRes !== "string") {
|
||||
try {
|
||||
const cookieTokenRes = await passportReq.cookieToken(ck);
|
||||
if (cookieTokenRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Warn(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes.data.cookie_token;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${cookieTokenRes.retcode}]${cookieTokenRes.message}`);
|
||||
await TGLogger.Error(
|
||||
`获取CookieToken失败:${cookieTokenRes.retcode}-${cookieTokenRes.message}`,
|
||||
);
|
||||
showSnackbar.error(`获取CookieToken失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取CookieToken异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
ck.cookie_token = cookieTokenRes;
|
||||
await showLoading.update("正在获取用户信息");
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
let briefInfo: TGApp.App.Account.BriefInfo | undefined;
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
return false;
|
||||
}
|
||||
briefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Error(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`获取用户信息异常:${errMsg}`);
|
||||
return false;
|
||||
}
|
||||
if (!briefInfo) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error("获取用户信息失败");
|
||||
return false;
|
||||
}
|
||||
const briefInfo: TGApp.App.Account.BriefInfo = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
};
|
||||
const updated = timestampToDate(new Date().getTime());
|
||||
await showLoading.update("正在写入数据库");
|
||||
const db = await TGSqlite.getDB();
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/**
|
||||
* Passport 相关请求
|
||||
* @since Beta v0.9.9
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
import { getRequestHeader } from "@utils/getRequestHeader.js";
|
||||
import TGBbs from "@utils/TGBbs.js";
|
||||
import TGHttp from "@utils/TGHttp.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import { getDeviceInfo } from "@utils/toolFunc.js";
|
||||
import { JSEncrypt } from "jsencrypt";
|
||||
|
||||
@@ -36,16 +36,16 @@ function rsaEncrypt(data: string): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录ticket
|
||||
* @since Beta v0.9.9
|
||||
* 获取登录 ticket
|
||||
* @since Beta v0.10.1
|
||||
* @param account - 账户
|
||||
* @param cookie - cookie
|
||||
* @returns ticket
|
||||
* @returns ticket 响应数据
|
||||
*/
|
||||
async function createAuthTicketByGameBiz(
|
||||
account: TGApp.Sqlite.Account.Game,
|
||||
cookie: TGApp.App.Account.Cookie,
|
||||
): Promise<TGApp.BBS.Response.Base | TGApp.Game.Login.GameAuthTicketRes> {
|
||||
): Promise<TGApp.Game.Login.GameAuthTicketResp> {
|
||||
const params: Record<string, string> = {
|
||||
game_biz: account.gameBiz,
|
||||
stoken: cookie.stoken,
|
||||
@@ -56,25 +56,24 @@ async function createAuthTicketByGameBiz(
|
||||
"x-rpc-client_type": "3",
|
||||
"x-rpc-app_id": "ddxf5dufpuyo",
|
||||
};
|
||||
const resp = await TGHttp<TGApp.Game.Login.GameAuthTicketResp>(
|
||||
const resp = await TGHttps.post<TGApp.Game.Login.GameAuthTicketResp>(
|
||||
`${pAbu}account/ma-cn-verifier/app/createAuthTicketByGameBiz`,
|
||||
{ method: "POST", headers: headers, query: params },
|
||||
{ headers: headers, query: params },
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取短信验证码
|
||||
* @since Beta v0.7.2
|
||||
* @since Beta v0.10.1
|
||||
* @param phone - 手机号
|
||||
* @param aigis - 验证数据
|
||||
* @returns 验证码返回
|
||||
* @returns 验证码响应
|
||||
*/
|
||||
async function createLoginCaptcha(
|
||||
phone: string,
|
||||
aigis?: string,
|
||||
): Promise<TGApp.BBS.CaptchaLogin.CaptchaRes | TGApp.BBS.Response.BaseWithData<string>> {
|
||||
): Promise<TGApp.App.Response.Resp<TGApp.BBS.CaptchaLogin.CaptchaResp>> {
|
||||
const body = { area_code: rsaEncrypt("+86"), mobile: rsaEncrypt(phone) };
|
||||
const header: Record<string, string> = {
|
||||
"x-rpc-aigis": aigis || "",
|
||||
@@ -90,35 +89,22 @@ async function createLoginCaptcha(
|
||||
referer: "https://user.miyoushe.com/",
|
||||
"x-rpc-game_biz": "hk4e_cn",
|
||||
};
|
||||
const resp = await TGHttp<TGApp.BBS.CaptchaLogin.CaptchaResp>(
|
||||
return await TGHttps.post<TGApp.BBS.CaptchaLogin.CaptchaResp>(
|
||||
`${pAbu}account/ma-cn-verifier/verifier/createLoginCaptcha`,
|
||||
{ method: "POST", headers: header, body: JSON.stringify(body) },
|
||||
true,
|
||||
{ headers: header, body: body },
|
||||
);
|
||||
const data = await resp.data;
|
||||
if (data.retcode !== 0) {
|
||||
return <TGApp.BBS.Response.BaseWithData<string>>{
|
||||
retcode: data.retcode,
|
||||
message: data.message,
|
||||
data: resp.resp.headers.get("x-rpc-aigis"),
|
||||
};
|
||||
}
|
||||
return <TGApp.BBS.CaptchaLogin.CaptchaRes>data.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建登录二维码
|
||||
* @since Beta v0.6.8
|
||||
* @since Beta v0.10.1
|
||||
* @deprecated 返回数据不符合要求
|
||||
* @returns 二维码URL
|
||||
* @returns 二维码响应数据
|
||||
*/
|
||||
async function createQrLogin(): Promise<
|
||||
TGApp.BBS.Response.Base | TGApp.BBS.GameLogin.GetLoginQrData
|
||||
> {
|
||||
const resp = await TGHttp<TGApp.BBS.GameLogin.GetLoginQrResponse>(
|
||||
async function createQrLogin(): Promise<TGApp.BBS.GameLogin.GetLoginQrResponse> {
|
||||
const resp = await TGHttps.post<TGApp.BBS.GameLogin.GetLoginQrResponse>(
|
||||
`${pAbu}account/ma-cn-passport/app/createQRLogin`,
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"x-rpc-device_id": getDeviceInfo("device_id"),
|
||||
"user-agent": `HYPContainer/${hlv}`,
|
||||
@@ -127,65 +113,60 @@ async function createQrLogin(): Promise<
|
||||
},
|
||||
},
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 stoken 获取 cookie_token
|
||||
* @since Beta v0.6.3
|
||||
* @since Beta v0.10.1
|
||||
* @param cookie - Cookie
|
||||
* @returns cookie_token
|
||||
* @returns cookie_token 响应数据
|
||||
*/
|
||||
async function getCookieAccountInfoBySToken(
|
||||
cookie: TGApp.App.Account.Cookie,
|
||||
): Promise<string | TGApp.BBS.Response.Base> {
|
||||
): Promise<TGApp.BBS.Passport.CookieTokenResp> {
|
||||
const ck = { stoken: cookie.stoken, mid: cookie.mid };
|
||||
const params = { stoken: cookie.stoken };
|
||||
type ResType = { uid: string; cookie_token: string };
|
||||
const resp = await TGHttp<TGApp.BBS.Response.BaseWithData<ResType>>(
|
||||
const resp = await TGHttps.get<TGApp.BBS.Passport.CookieTokenResp>(
|
||||
`${pAbu}account/auth/api/getCookieAccountInfoBySToken`,
|
||||
{ method: "GET", headers: getRequestHeader(ck, "GET", params), query: params },
|
||||
{ headers: getRequestHeader(ck, "GET", params), query: params },
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data.cookie_token;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 stoken_v2 获取 ltoken
|
||||
* @since Beta v0.5.0
|
||||
* @since Beta v0.10.1
|
||||
* @param cookie - Cookie
|
||||
* @returns ltoken
|
||||
* @returns ltoken 响应数据
|
||||
*/
|
||||
async function getLTokenBySToken(
|
||||
cookie: TGApp.App.Account.Cookie,
|
||||
): Promise<string | TGApp.BBS.Response.Base> {
|
||||
): Promise<TGApp.BBS.Passport.LTokenResp> {
|
||||
const ck = { mid: cookie.mid, stoken: cookie.stoken };
|
||||
const params = { stoken: cookie.stoken };
|
||||
type ResType = { ltoken: string };
|
||||
const resp = await TGHttp<TGApp.BBS.Response.BaseWithData<ResType>>(
|
||||
const resp = await TGHttps.get<TGApp.BBS.Passport.LTokenResp>(
|
||||
`${pAbu}account/auth/api/getLTokenBySToken`,
|
||||
{ method: "GET", headers: getRequestHeader(ck, "GET", params), query: params },
|
||||
{ headers: getRequestHeader(ck, "GET", params), query: params },
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data.ltoken;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过短信验证码登录
|
||||
* @since Beta v0.5.1
|
||||
* @since Beta v0.10.1
|
||||
* @param phone - 手机号
|
||||
* @param captcha - 验证码
|
||||
* @param action_type - 操作类型
|
||||
* @param aigis - 验证数据
|
||||
* @returns 登录返回
|
||||
* @returns 登录响应
|
||||
*/
|
||||
async function loginByMobileCaptcha(
|
||||
phone: string,
|
||||
captcha: string,
|
||||
action_type: string,
|
||||
aigis?: string,
|
||||
): Promise<TGApp.BBS.CaptchaLogin.LoginRes | TGApp.BBS.Response.Base> {
|
||||
): Promise<TGApp.App.Response.Resp<TGApp.BBS.CaptchaLogin.LoginResp>> {
|
||||
const body = {
|
||||
area_code: rsaEncrypt("+86"),
|
||||
mobile: rsaEncrypt(phone),
|
||||
@@ -203,81 +184,53 @@ async function loginByMobileCaptcha(
|
||||
"x-rpc-device_model": getDeviceInfo("product"),
|
||||
"user-agent": TGBbs.ua,
|
||||
};
|
||||
const resp = await TGHttp<TGApp.BBS.CaptchaLogin.LoginResp>(
|
||||
return await TGHttps.post<TGApp.BBS.CaptchaLogin.LoginResp>(
|
||||
`${pAbu}account/ma-cn-passport/app/loginByMobileCaptcha`,
|
||||
{ method: "POST", headers: header, body: JSON.stringify(body) },
|
||||
{ headers: header, body: body },
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录状态
|
||||
* @since Beta v0.6.8
|
||||
* @since Beta v0.10.1
|
||||
* @deprecated 返回数据不符合要求
|
||||
* @param ticket - 二维码 ticket
|
||||
* @returns 登录状态
|
||||
* @returns 登录状态响应数据
|
||||
*/
|
||||
async function queryLoginStatus(
|
||||
ticket: string,
|
||||
): Promise<TGApp.BBS.Response.Base | TGApp.BBS.GameLogin.GetLoginStatusData> {
|
||||
const resp = await TGHttp<TGApp.BBS.GameLogin.GetLoginStatusResponse>(
|
||||
): Promise<TGApp.BBS.GameLogin.GetLoginStatusResponse> {
|
||||
const resp = await TGHttps.post<TGApp.BBS.GameLogin.GetLoginStatusResponse>(
|
||||
`${pAbu}account/ma-cn-passport/app/queryQRLoginStatus`,
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"x-rpc-device_id": getDeviceInfo("device_id"),
|
||||
"user-agent": `HYPContainer/${hlv}`,
|
||||
"x-rpc-app_id": "ddxf5dufpuyo",
|
||||
"x-rpc-client_type": "3",
|
||||
},
|
||||
body: JSON.stringify({ ticket }),
|
||||
body: { ticket },
|
||||
},
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证 ltoken 有效性,返回 mid
|
||||
* @since Beta v0.6.5
|
||||
* @since Beta v0.10.1
|
||||
* @param cookie - 账户 cookie
|
||||
* @returns mid
|
||||
* @returns 验证响应数据
|
||||
*/
|
||||
async function verifyLToken(
|
||||
cookie: TGApp.App.Account.Cookie,
|
||||
): Promise<string | TGApp.BBS.Response.Base> {
|
||||
): Promise<TGApp.BBS.Passport.VerifyLTokenResp> {
|
||||
const ck = { ltoken: cookie.ltoken, ltuid: cookie.ltuid };
|
||||
const data = { ltoken: cookie.ltoken };
|
||||
type ResType = {
|
||||
realname_info: unknown;
|
||||
need_realperson: boolean;
|
||||
user_info: {
|
||||
aid: string;
|
||||
mid: string;
|
||||
account_name: string;
|
||||
email: string;
|
||||
is_email_verify: number;
|
||||
area_code: string;
|
||||
safe_mobile: string;
|
||||
realname: string;
|
||||
identity_code: string;
|
||||
rebind_area_code: string;
|
||||
rebind_mobile: string;
|
||||
rebind_mobile_time: string;
|
||||
links: Array<unknown>;
|
||||
};
|
||||
};
|
||||
const resp = await TGHttp<TGApp.BBS.Response.BaseWithData<ResType>>(
|
||||
const resp = await TGHttps.post<TGApp.BBS.Passport.VerifyLTokenResp>(
|
||||
`${p4Abu}account/ma-cn-session/web/verifyLtoken`,
|
||||
{
|
||||
method: "POST",
|
||||
headers: getRequestHeader(ck, "POST", data),
|
||||
body: JSON.stringify(data),
|
||||
},
|
||||
{ headers: getRequestHeader(ck, "POST", data), body: data },
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data.user_info.mid;
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
const passportReq = {
|
||||
|
||||
90
src/types/BBS/Passport.d.ts
vendored
Normal file
90
src/types/BBS/Passport.d.ts
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* Passport 相关类型定义
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
|
||||
declare namespace TGApp.BBS.Passport {
|
||||
/**
|
||||
* 获取 CookieToken 返回响应
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type CookieTokenResp = TGApp.BBS.Response.BaseWithData<CookieTokenRes>;
|
||||
|
||||
/**
|
||||
* 获取 CookieToken 返回数据
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type CookieTokenRes = {
|
||||
/** 用户 UID */
|
||||
uid: string;
|
||||
/** CookieToken */
|
||||
cookie_token: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取 LToken 返回响应
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type LTokenResp = TGApp.BBS.Response.BaseWithData<LTokenRes>;
|
||||
|
||||
/**
|
||||
* 获取 LToken 返回数据
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type LTokenRes = {
|
||||
/** LToken */
|
||||
ltoken: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* 验证 LToken 返回响应
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type VerifyLTokenResp = TGApp.BBS.Response.BaseWithData<VerifyLTokenRes>;
|
||||
|
||||
/**
|
||||
* 验证 LToken 返回数据
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type VerifyLTokenRes = {
|
||||
/** 实名信息 */
|
||||
realname_info: unknown;
|
||||
/** 是否需要真人验证 */
|
||||
need_realperson: boolean;
|
||||
/** 用户信息 */
|
||||
user_info: VerifyLTokenUserInfo;
|
||||
};
|
||||
|
||||
/**
|
||||
* 验证 LToken 用户信息
|
||||
* @since Beta v0.10.1
|
||||
*/
|
||||
type VerifyLTokenUserInfo = {
|
||||
/** 账号 ID */
|
||||
aid: string;
|
||||
/** mid */
|
||||
mid: string;
|
||||
/** 账号名称 */
|
||||
account_name: string;
|
||||
/** 邮箱 */
|
||||
email: string;
|
||||
/** 是否验证邮箱 */
|
||||
is_email_verify: number;
|
||||
/** 区域代码 */
|
||||
area_code: string;
|
||||
/** 安全手机号 */
|
||||
safe_mobile: string;
|
||||
/** 真实姓名 */
|
||||
realname: string;
|
||||
/** 身份证号 */
|
||||
identity_code: string;
|
||||
/** 重新绑定区域代码 */
|
||||
rebind_area_code: string;
|
||||
/** 重新绑定手机号 */
|
||||
rebind_mobile: string;
|
||||
/** 重新绑定时间 */
|
||||
rebind_mobile_time: string;
|
||||
/** 链接信息 */
|
||||
links: Array<unknown>;
|
||||
};
|
||||
}
|
||||
@@ -15,11 +15,11 @@ import { core, event, webviewWindow } from "@tauri-apps/api";
|
||||
import type { Event, UnlistenFn } from "@tauri-apps/api/event";
|
||||
import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import { getDS4JS } from "@utils/getRequestHeader.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
|
||||
import { parseLink } from "./linkParser.js";
|
||||
import TGBbs from "./TGBbs.js";
|
||||
import TGLogger from "./TGLogger.js";
|
||||
import TGHttps from "./TGHttps.js";
|
||||
import { createPost } from "./TGWindow.js";
|
||||
import { getDeviceInfo } from "./toolFunc.js";
|
||||
|
||||
@@ -583,10 +583,19 @@ class Client {
|
||||
const user = useUserStore();
|
||||
if (!user.cookie) return;
|
||||
if (typeof arg.payload === "object" && arg.payload.forceRefresh) {
|
||||
const res = await passportReq.cookieToken(user.cookie);
|
||||
if (typeof res !== "string") return;
|
||||
user.cookie.cookie_token = res;
|
||||
await TGSqlite.saveAppData("cookie", JSON.stringify(user.cookie));
|
||||
try {
|
||||
const res = await passportReq.cookieToken(user.cookie);
|
||||
if (res.retcode !== 0) {
|
||||
await TGLogger.Warn(`[TGClient][getCookieToken] ${res.retcode}: ${res.message}`);
|
||||
return;
|
||||
}
|
||||
user.cookie.cookie_token = res.data.cookie_token;
|
||||
await TGSqlite.saveAppData("cookie", JSON.stringify(user.cookie));
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(`[TGClient][getCookieToken] 获取cookie_token异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
const executeJS = `javascript:(function(){
|
||||
let domainCur = window.location.hostname;
|
||||
|
||||
Reference in New Issue
Block a user