This commit is contained in:
iLay
2024-12-06 03:20:18 +08:00
parent 941b1b64a4
commit 64df57e1a8
33 changed files with 17209 additions and 4284 deletions

View File

@ -0,0 +1,49 @@
import { decrypt, getParams } from '../../../utils/decode';
import { defineEventHandler, getRouterParams } from 'h3'
export const runtime = 'edge'
export default defineEventHandler(async (event) => {
try {
const { sid } = getRouterParams(event);
const response = await fetch(`https://openapi.alipan.com/oauth/qrcode/${sid}/status`);
const statusData:any = await response.json();
if (statusData.status === 'LoginSuccess') {
try {
const authCode = statusData.authCode;
const t = Math.floor(Date.now() / 1000);
const sendData = { ...getParams(t), code: authCode, "Content-Type": "application/json"};
const headers = Object.fromEntries(
Object.entries(sendData).map(([k, v]) => [k, String(v)])
);
const tokenResponse = await fetch('http://api.extscreen.com/aliyundrive/v3/token', {
method: 'POST',
headers: headers,
body: JSON.stringify(sendData)
});
const tokenData:any = await tokenResponse.json();
const jsonp = tokenData.data;
const plainData = decrypt(jsonp.ciphertext, jsonp.iv, t);
const tokenInfo = JSON.parse(plainData);
return {
status: 'LoginSuccess',
refresh_token: tokenInfo.refresh_token,
access_token: tokenInfo.access_token
};
} catch (error) {
return { status: 'LoginFailed' };
}
} else {
return { status: statusData.status };
}
} catch (error:any) {
throw createError({
statusCode: 500,
message: error.message
});
}
});

View File

@ -0,0 +1,25 @@
import { defineEventHandler } from 'h3'
export default defineEventHandler(async (event) => {
try {
const response = await fetch('http://api.extscreen.com/aliyundrive/qrcode', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
scopes: ["user:base", "file:all:read", "file:all:write"].join(','),
width: 500,
height: 500,
})
})
const data:any = await response.json()
return {
qr_link: data.data.qrCodeUrl,
sid: data.data.sid
}
} catch (error: any) {
throw createError({
statusCode: 500,
message: error.message
})
}
})

43
server/routes/refresh.ts Normal file
View File

@ -0,0 +1,43 @@
import { decrypt, getParams } from '../../utils/decode';
import { defineEventHandler } from 'h3'
export const runtime = 'edge'
export default defineEventHandler(async (event) => {
try {
const { refresh_token } = await readBody(event);
const t = Math.floor(Date.now() / 1000);
const sendData = {
...getParams(t),
refresh_token: refresh_token,
"Content-Type": "application/json"
};
const headers = Object.fromEntries(
Object.entries(sendData).map(([k, v]) => [k, String(v)])
);
const response = await fetch('http://api.extscreen.com/aliyundrive/v3/token', {
method: 'POST',
headers: headers,
body: JSON.stringify(sendData)
});
const tokenData :any = await response.json();
const jsonp = tokenData.data;
const plainData = decrypt(jsonp.ciphertext, jsonp.iv, t);
const tokenInfo = JSON.parse(plainData);
return {
token_type: 'Bearer',
access_token: tokenInfo.access_token,
refresh_token: tokenInfo.refresh_token,
expires_in: tokenInfo.expires_in
};
} catch (error:any) {
return {
error: error.message,
statusCode: 500
}
}
})

3
server/tsconfig.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "../.nuxt/tsconfig.server.json"
}