Skip to content

Commit 222c2d7

Browse files
committed
⚡️ 优化百度网盘鉴权
1 parent f5ec7a4 commit 222c2d7

File tree

8 files changed

+78
-38
lines changed

8 files changed

+78
-38
lines changed

build/pack.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const package = require("../package.json");
88

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

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

49-
if (version.prerelease) {
49+
if (version.prerelease.length) {
5050
// 替换蓝猫logo
5151
fs.copyFileSync("./build/assets/logo-beta.png", "./dist/ext/assets/logo.png");
5252
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "scriptcat",
3-
"version": "0.10.0-beta.2",
3+
"version": "0.10.0",
44
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
55
"author": "CodFrm",
66
"license": "GPLv3",

pkg/filesystem/auth.ts

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/* eslint-disable import/prefer-default-export */
2-
import Cache from "@App/app/cache";
32
import { ExtServer } from "@App/app/const";
43
import { api } from "@App/pkg/axios";
54

@@ -8,7 +7,7 @@ type NetDiskType = "baidu";
87
export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
98
code: number;
109
msg: string;
11-
data: { accessToken: string };
10+
data: { token: { accessToken: string; refreshToken: string } };
1211
}> {
1312
return api
1413
.get(`/auth/net-disk/token?netDiskType=${netDiskType}`)
@@ -17,6 +16,24 @@ export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
1716
});
1817
}
1918

19+
export function RefreshToken(
20+
netDiskType: NetDiskType,
21+
refreshToken: string
22+
): Promise<{
23+
code: number;
24+
msg: string;
25+
data: { token: { accessToken: string; refreshToken: string } };
26+
}> {
27+
return api
28+
.post(`/auth/net-disk/token/refresh?netDiskType=${netDiskType}`, {
29+
netDiskType,
30+
refreshToken,
31+
})
32+
.then((resp) => {
33+
return resp.data;
34+
});
35+
}
36+
2037
export function NetDisk(netDiskType: NetDiskType) {
2138
return new Promise<void>((resolve) => {
2239
const loginWindow = window.open(
@@ -36,27 +53,49 @@ export function NetDisk(netDiskType: NetDiskType) {
3653
});
3754
}
3855

39-
export async function AuthVerify(netDiskType: NetDiskType, refresh?: boolean) {
40-
if (!refresh) {
41-
const data = Cache.getInstance().get(`netDiskToken:${netDiskType}`);
42-
// 大于一小时进行刷新
43-
if (data && Date.now() - data.time < 3600000) {
44-
return Promise.resolve(data.data);
45-
}
56+
export type Token = {
57+
accessToken: string;
58+
refreshToken: string;
59+
createtime: number;
60+
};
61+
62+
export async function AuthVerify(netDiskType: NetDiskType, reapply?: boolean) {
63+
let token: Token | undefined;
64+
try {
65+
token = JSON.parse(localStorage[`netdisk:token:${netDiskType}`]);
66+
} catch (e) {
67+
// ignore
4668
}
47-
// 调用API查看是否已经验证过,否则进行重定向
48-
let token = await GetNetDiskToken(netDiskType);
49-
if (token.code !== 0) {
50-
// 申请
69+
if (reapply || !token || !token.accessToken) {
70+
// 强制重新获取token
5171
await NetDisk(netDiskType);
52-
token = await GetNetDiskToken(netDiskType);
72+
const resp = await GetNetDiskToken(netDiskType);
73+
if (resp.code !== 0) {
74+
return Promise.reject(new Error(resp.msg));
75+
}
76+
token = {
77+
accessToken: resp.data.token.accessToken,
78+
refreshToken: resp.data.token.refreshToken,
79+
createtime: Date.now(),
80+
};
5381
}
54-
if (token.code !== 0) {
55-
return Promise.reject(new Error(token.msg));
82+
token.createtime = 0;
83+
if (Date.now() > token.createtime + 3600000) {
84+
// 大于一小时刷新token
85+
const resp = await RefreshToken(netDiskType, token.refreshToken);
86+
if (resp.code !== 0) {
87+
// 刷新失败删除token
88+
localStorage.removeItem(`netdisk:token:${netDiskType}`);
89+
return Promise.reject(new Error(resp.msg));
90+
}
91+
token = {
92+
accessToken: resp.data.token.accessToken,
93+
refreshToken: resp.data.token.refreshToken,
94+
createtime: Date.now(),
95+
};
96+
} else {
97+
return Promise.resolve(token.accessToken);
5698
}
57-
Cache.getInstance().set(`netDiskToken:${netDiskType}`, {
58-
data: token.data,
59-
time: Date.now(),
60-
});
61-
return Promise.resolve(token.data);
99+
localStorage[`netdisk:token:${netDiskType}`] = JSON.stringify(token);
100+
return Promise.resolve(token.accessToken);
62101
}

pkg/filesystem/baidu/baidu.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default class BaiduFileSystem implements FileSystem {
2020

2121
async verify(): Promise<void> {
2222
const token = await AuthVerify("baidu");
23-
this.accessToken = token.accessToken;
23+
this.accessToken = token;
2424
return Promise.resolve();
2525
}
2626

@@ -69,8 +69,8 @@ export default class BaiduFileSystem implements FileSystem {
6969
config = config || {};
7070
const headers = <Headers>config.headers || new Headers();
7171
// 利用GM函数的匿名实现不发送cookie,因为某些情况cookie会导致-6错误
72-
// headers.append(`${this.systemConfig.scriptCatFlag}-gm-xhr`, "true");
73-
// headers.append(`${this.systemConfig.scriptCatFlag}-anonymous`, "true");
72+
headers.append(`${this.systemConfig.scriptCatFlag}-gm-xhr`, "true");
73+
headers.append(`${this.systemConfig.scriptCatFlag}-anonymous`, "true");
7474
config.headers = headers;
7575
return fetch(url, config)
7676
.then((data) => data.json())

src/app/const.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const ExtVersion = "0.10.0-beta.2";
1+
export const ExtVersion = "0.10.0";
22

33
export const ExtServer =
44
process.env.NODE_ENV === "development"

src/app/service/system/manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export class SystemManager extends Manager {
5757
chrome.tabs.create({ url: "https://docs.scriptcat.org/" });
5858
} else if (details.reason === "update") {
5959
const version = semver.parse(ExtVersion);
60-
if (version && !version.prerelease) {
60+
if (version && !version.prerelease.length) {
6161
chrome.tabs.create({
6262
url: "https://docs.scriptcat.org/docs/change/",
6363
});

src/pages/options/routes/ScriptList.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -318,12 +318,9 @@ function ScriptList() {
318318
return (
319319
<Tooltip
320320
content={
321-
<>
322-
<p style={{ margin: 0 }}>
323-
订阅链接: {decodeURIComponent(item.subscribeUrl)}
324-
</p>
325-
(点击复制)
326-
</>
321+
<p style={{ margin: 0 }}>
322+
订阅链接: {decodeURIComponent(item.subscribeUrl)}
323+
</p>
327324
}
328325
>
329326
<Tag

src/runtime/background/runtime.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,10 @@ export default class Runtime extends Manager {
498498
// 加载页面脚本
499499
loadPageScript(script: ScriptRunResouce) {
500500
// 重构code
501+
const logger = this.logger.with({
502+
scriptId: script.id,
503+
name: script.name,
504+
});
501505
script.code = dealScript(compileInjectScript(script));
502506

503507
this.match.del(<ScriptRunResouce>script);
@@ -507,7 +511,7 @@ export default class Runtime extends Manager {
507511
try {
508512
this.match.add(url, script);
509513
} catch (e) {
510-
this.logger.error("url加载错误", Logger.E(e));
514+
logger.error("url加载错误", Logger.E(e));
511515
}
512516
});
513517
}
@@ -516,7 +520,7 @@ export default class Runtime extends Manager {
516520
try {
517521
this.include.add(url, script);
518522
} catch (e) {
519-
this.logger.error("url加载错误", Logger.E(e));
523+
logger.error("url加载错误", Logger.E(e));
520524
}
521525
});
522526
}
@@ -526,7 +530,7 @@ export default class Runtime extends Manager {
526530
this.include.exclude(url, script);
527531
this.match.exclude(url, script);
528532
} catch (e) {
529-
this.logger.error("url加载错误", Logger.E(e));
533+
logger.error("url加载错误", Logger.E(e));
530534
}
531535
});
532536
}

0 commit comments

Comments
 (0)