Skip to content

Commit

Permalink
⚡️ 优化百度网盘鉴权
Browse files Browse the repository at this point in the history
  • Loading branch information
CodFrm committed Nov 17, 2022
1 parent f5ec7a4 commit 222c2d7
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 38 deletions.
4 changes: 2 additions & 2 deletions build/pack.js
Expand Up @@ -8,7 +8,7 @@ const package = require("../package.json");

// 判断是否为beta版本
const version = semver.parse(package.version);
if (version.prerelease) {
if (version.prerelease.length) {
// 替换manifest中的版本
let betaVersion = 1000;
switch (version.prerelease[0]) {
Expand Down Expand Up @@ -46,7 +46,7 @@ fs.writeFileSync("./src/app/const.ts", configSystem);

execSync("npm run build", { stdio: "inherit" });

if (version.prerelease) {
if (version.prerelease.length) {
// 替换蓝猫logo
fs.copyFileSync("./build/assets/logo-beta.png", "./dist/ext/assets/logo.png");
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "scriptcat",
"version": "0.10.0-beta.2",
"version": "0.10.0",
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
"author": "CodFrm",
"license": "GPLv3",
Expand Down
81 changes: 60 additions & 21 deletions pkg/filesystem/auth.ts
@@ -1,5 +1,4 @@
/* eslint-disable import/prefer-default-export */
import Cache from "@App/app/cache";
import { ExtServer } from "@App/app/const";
import { api } from "@App/pkg/axios";

Expand All @@ -8,7 +7,7 @@ type NetDiskType = "baidu";
export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
code: number;
msg: string;
data: { accessToken: string };
data: { token: { accessToken: string; refreshToken: string } };
}> {
return api
.get(`/auth/net-disk/token?netDiskType=${netDiskType}`)
Expand All @@ -17,6 +16,24 @@ export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
});
}

export function RefreshToken(
netDiskType: NetDiskType,
refreshToken: string
): Promise<{
code: number;
msg: string;
data: { token: { accessToken: string; refreshToken: string } };
}> {
return api
.post(`/auth/net-disk/token/refresh?netDiskType=${netDiskType}`, {
netDiskType,
refreshToken,
})
.then((resp) => {
return resp.data;
});
}

export function NetDisk(netDiskType: NetDiskType) {
return new Promise<void>((resolve) => {
const loginWindow = window.open(
Expand All @@ -36,27 +53,49 @@ export function NetDisk(netDiskType: NetDiskType) {
});
}

export async function AuthVerify(netDiskType: NetDiskType, refresh?: boolean) {
if (!refresh) {
const data = Cache.getInstance().get(`netDiskToken:${netDiskType}`);
// 大于一小时进行刷新
if (data && Date.now() - data.time < 3600000) {
return Promise.resolve(data.data);
}
export type Token = {
accessToken: string;
refreshToken: string;
createtime: number;
};

export async function AuthVerify(netDiskType: NetDiskType, reapply?: boolean) {
let token: Token | undefined;
try {
token = JSON.parse(localStorage[`netdisk:token:${netDiskType}`]);
} catch (e) {
// ignore
}
// 调用API查看是否已经验证过,否则进行重定向
let token = await GetNetDiskToken(netDiskType);
if (token.code !== 0) {
// 申请
if (reapply || !token || !token.accessToken) {
// 强制重新获取token
await NetDisk(netDiskType);
token = await GetNetDiskToken(netDiskType);
const resp = await GetNetDiskToken(netDiskType);
if (resp.code !== 0) {
return Promise.reject(new Error(resp.msg));
}
token = {
accessToken: resp.data.token.accessToken,
refreshToken: resp.data.token.refreshToken,
createtime: Date.now(),
};
}
if (token.code !== 0) {
return Promise.reject(new Error(token.msg));
token.createtime = 0;
if (Date.now() > token.createtime + 3600000) {
// 大于一小时刷新token
const resp = await RefreshToken(netDiskType, token.refreshToken);
if (resp.code !== 0) {
// 刷新失败删除token
localStorage.removeItem(`netdisk:token:${netDiskType}`);
return Promise.reject(new Error(resp.msg));
}
token = {
accessToken: resp.data.token.accessToken,
refreshToken: resp.data.token.refreshToken,
createtime: Date.now(),
};
} else {
return Promise.resolve(token.accessToken);
}
Cache.getInstance().set(`netDiskToken:${netDiskType}`, {
data: token.data,
time: Date.now(),
});
return Promise.resolve(token.data);
localStorage[`netdisk:token:${netDiskType}`] = JSON.stringify(token);
return Promise.resolve(token.accessToken);
}
6 changes: 3 additions & 3 deletions pkg/filesystem/baidu/baidu.ts
Expand Up @@ -20,7 +20,7 @@ export default class BaiduFileSystem implements FileSystem {

async verify(): Promise<void> {
const token = await AuthVerify("baidu");
this.accessToken = token.accessToken;
this.accessToken = token;
return Promise.resolve();
}

Expand Down Expand Up @@ -69,8 +69,8 @@ export default class BaiduFileSystem implements FileSystem {
config = config || {};
const headers = <Headers>config.headers || new Headers();
// 利用GM函数的匿名实现不发送cookie,因为某些情况cookie会导致-6错误
// headers.append(`${this.systemConfig.scriptCatFlag}-gm-xhr`, "true");
// headers.append(`${this.systemConfig.scriptCatFlag}-anonymous`, "true");
headers.append(`${this.systemConfig.scriptCatFlag}-gm-xhr`, "true");
headers.append(`${this.systemConfig.scriptCatFlag}-anonymous`, "true");
config.headers = headers;
return fetch(url, config)
.then((data) => data.json())
Expand Down
2 changes: 1 addition & 1 deletion src/app/const.ts
@@ -1,4 +1,4 @@
export const ExtVersion = "0.10.0-beta.2";
export const ExtVersion = "0.10.0";

export const ExtServer =
process.env.NODE_ENV === "development"
Expand Down
2 changes: 1 addition & 1 deletion src/app/service/system/manager.ts
Expand Up @@ -57,7 +57,7 @@ export class SystemManager extends Manager {
chrome.tabs.create({ url: "https://docs.scriptcat.org/" });
} else if (details.reason === "update") {
const version = semver.parse(ExtVersion);
if (version && !version.prerelease) {
if (version && !version.prerelease.length) {
chrome.tabs.create({
url: "https://docs.scriptcat.org/docs/change/",
});
Expand Down
9 changes: 3 additions & 6 deletions src/pages/options/routes/ScriptList.tsx
Expand Up @@ -318,12 +318,9 @@ function ScriptList() {
return (
<Tooltip
content={
<>
<p style={{ margin: 0 }}>
订阅链接: {decodeURIComponent(item.subscribeUrl)}
</p>
(点击复制)
</>
<p style={{ margin: 0 }}>
订阅链接: {decodeURIComponent(item.subscribeUrl)}
</p>
}
>
<Tag
Expand Down
10 changes: 7 additions & 3 deletions src/runtime/background/runtime.ts
Expand Up @@ -498,6 +498,10 @@ export default class Runtime extends Manager {
// 加载页面脚本
loadPageScript(script: ScriptRunResouce) {
// 重构code
const logger = this.logger.with({
scriptId: script.id,
name: script.name,
});
script.code = dealScript(compileInjectScript(script));

this.match.del(<ScriptRunResouce>script);
Expand All @@ -507,7 +511,7 @@ export default class Runtime extends Manager {
try {
this.match.add(url, script);
} catch (e) {
this.logger.error("url加载错误", Logger.E(e));
logger.error("url加载错误", Logger.E(e));
}
});
}
Expand All @@ -516,7 +520,7 @@ export default class Runtime extends Manager {
try {
this.include.add(url, script);
} catch (e) {
this.logger.error("url加载错误", Logger.E(e));
logger.error("url加载错误", Logger.E(e));
}
});
}
Expand All @@ -526,7 +530,7 @@ export default class Runtime extends Manager {
this.include.exclude(url, script);
this.match.exclude(url, script);
} catch (e) {
this.logger.error("url加载错误", Logger.E(e));
logger.error("url加载错误", Logger.E(e));
}
});
}
Expand Down

0 comments on commit 222c2d7

Please sign in to comment.