|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
import { ExtServer, ExtServerApi } from "@App/app/const";
|
|
|
|
|
import { WarpTokenError } from "./error";
|
|
|
|
|
import { LocalStorageDAO } from "@App/app/repo/localStorage";
|
|
|
|
|
|
|
|
|
|
type NetDiskType = "baidu" | "onedrive";
|
|
|
|
|
|
|
|
|
@ -8,11 +9,7 @@ export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
|
|
|
|
|
msg: string;
|
|
|
|
|
data: { token: { access_token: string; refresh_token: string } };
|
|
|
|
|
}> {
|
|
|
|
|
return fetch(ExtServerApi + `auth/net-disk/token?netDiskType=${netDiskType}`)
|
|
|
|
|
.then((resp) => resp.json())
|
|
|
|
|
.then((resp) => {
|
|
|
|
|
return resp.data;
|
|
|
|
|
});
|
|
|
|
|
return fetch(ExtServerApi + `auth/net-disk/token?netDiskType=${netDiskType}`).then((resp) => resp.json());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function RefreshToken(
|
|
|
|
@ -32,27 +29,45 @@ export function RefreshToken(
|
|
|
|
|
netDiskType,
|
|
|
|
|
refreshToken,
|
|
|
|
|
}),
|
|
|
|
|
})
|
|
|
|
|
.then((resp) => resp.json())
|
|
|
|
|
.then((resp) => {
|
|
|
|
|
return resp.data;
|
|
|
|
|
});
|
|
|
|
|
}).then((resp) => resp.json());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function NetDisk(netDiskType: NetDiskType) {
|
|
|
|
|
return new Promise<void>((resolve) => {
|
|
|
|
|
const loginWindow = window.open(`${ExtServer}api/v1/auth/net-disk?netDiskType=${netDiskType}`);
|
|
|
|
|
const t = setInterval(() => {
|
|
|
|
|
try {
|
|
|
|
|
if (loginWindow!.closed) {
|
|
|
|
|
if (globalThis.window) {
|
|
|
|
|
const loginWindow = window.open(`${ExtServer}api/v1/auth/net-disk?netDiskType=${netDiskType}`);
|
|
|
|
|
const t = setInterval(() => {
|
|
|
|
|
try {
|
|
|
|
|
if (loginWindow!.closed) {
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
}, 1000);
|
|
|
|
|
}, 1000);
|
|
|
|
|
} else {
|
|
|
|
|
chrome.tabs
|
|
|
|
|
.create({
|
|
|
|
|
url: `${ExtServer}api/v1/auth/net-disk?netDiskType=${netDiskType}`,
|
|
|
|
|
})
|
|
|
|
|
.then(({ id: tabId }) => {
|
|
|
|
|
const t = setInterval(async () => {
|
|
|
|
|
try {
|
|
|
|
|
const tab = await chrome.tabs.get(tabId!);
|
|
|
|
|
console.log("query tab", tab);
|
|
|
|
|
if (!tab) {
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
}, 1000);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -64,8 +79,15 @@ export type Token = {
|
|
|
|
|
|
|
|
|
|
export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
|
|
|
|
|
let token: Token | undefined;
|
|
|
|
|
const localStorageDao = new LocalStorageDAO();
|
|
|
|
|
const key = `netdisk:token:${netDiskType}`;
|
|
|
|
|
try {
|
|
|
|
|
token = JSON.parse(localStorage[`netdisk:token:${netDiskType}`]);
|
|
|
|
|
token = await localStorageDao.get(key).then((resp) => {
|
|
|
|
|
if (resp) {
|
|
|
|
|
return resp.value;
|
|
|
|
|
}
|
|
|
|
|
return undefined;
|
|
|
|
|
});
|
|
|
|
|
} catch (e) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
@ -83,7 +105,10 @@ export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
|
|
|
|
|
createtime: Date.now(),
|
|
|
|
|
};
|
|
|
|
|
invalid = false;
|
|
|
|
|
localStorage[`netdisk:token:${netDiskType}`] = JSON.stringify(token);
|
|
|
|
|
await localStorageDao.save({
|
|
|
|
|
key,
|
|
|
|
|
value: token,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// token过期或者失效
|
|
|
|
|
if (Date.now() >= token.createtime + 3600000 || invalid) {
|
|
|
|
@ -91,7 +116,7 @@ export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
|
|
|
|
|
try {
|
|
|
|
|
const resp = await RefreshToken(netDiskType, token.refreshToken);
|
|
|
|
|
if (resp.code !== 0) {
|
|
|
|
|
localStorage.removeItem(`netdisk:token:${netDiskType}`);
|
|
|
|
|
await localStorageDao.delete(key);
|
|
|
|
|
// 刷新失败,并且标记失效,尝试重新获取token
|
|
|
|
|
if (invalid) {
|
|
|
|
|
return AuthVerify(netDiskType);
|
|
|
|
@ -103,7 +128,11 @@ export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
|
|
|
|
|
refreshToken: resp.data.token.refresh_token,
|
|
|
|
|
createtime: Date.now(),
|
|
|
|
|
};
|
|
|
|
|
localStorage[`netdisk:token:${netDiskType}`] = JSON.stringify(token);
|
|
|
|
|
// 更新token
|
|
|
|
|
await localStorageDao.save({
|
|
|
|
|
key,
|
|
|
|
|
value: token,
|
|
|
|
|
});
|
|
|
|
|
} catch (e) {
|
|
|
|
|
// 报错返回原token
|
|
|
|
|
return Promise.resolve(token.accessToken);
|
|
|
|
|