CAT API
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user