Move oauth credentials to own kv value

This commit is contained in:
Regalijan 2023-10-28 03:09:34 -04:00
parent ece5baf175
commit 0bc68ef1d2
Signed by: regalijan
GPG Key ID: 5D4196DA269EF520
2 changed files with 27 additions and 13 deletions

View File

@ -33,6 +33,13 @@ async function refreshAuth(context: RequestContext) {
if (!currentUser || currentUser.refresh_at > Date.now()) if (!currentUser || currentUser.refresh_at > Date.now())
return await context.next(); return await context.next();
const oauthData = await context.env.DATA.get(
`oauthcredentials_${currentUser.id}`,
{ type: "json" },
);
if (!oauthData) return await context.next();
const refreshedTokenResponse = await fetch( const refreshedTokenResponse = await fetch(
"https://discord.com/api/v10/oauth2/token", "https://discord.com/api/v10/oauth2/token",
{ {
@ -51,7 +58,7 @@ async function refreshAuth(context: RequestContext) {
const accessData: { [k: string]: any } = await refreshedTokenResponse.json(); const accessData: { [k: string]: any } = await refreshedTokenResponse.json();
let userData: { [k: string]: any } = { let tokenData: { [k: string]: any } = {
...accessData, ...accessData,
refresh_at: Date.now() + 3600000, refresh_at: Date.now() + 3600000,
}; };
@ -64,10 +71,7 @@ async function refreshAuth(context: RequestContext) {
if (!newDiscordData.ok) return await context.next(); if (!newDiscordData.ok) return await context.next();
userData = { const userData: { [k: string]: any } = await newDiscordData.json();
...userData,
...(await newDiscordData.json()),
};
const updatedServerMemberReq = await fetch( const updatedServerMemberReq = await fetch(
"https://discord.com/api/v10/users/@me/guilds/242263977986359297/member", "https://discord.com/api/v10/users/@me/guilds/242263977986359297/member",
@ -95,6 +99,13 @@ async function refreshAuth(context: RequestContext) {
await context.env.DATA.put(`auth_${tokenHash}`, JSON.stringify(userData), { await context.env.DATA.put(`auth_${tokenHash}`, JSON.stringify(userData), {
expirationTtl: accessData.expires_in, expirationTtl: accessData.expires_in,
}); });
await context.env.DATA.put(
`oauthcredentials_${userData.id}`,
JSON.stringify(tokenData),
{
expirationTtl: 1209600000,
},
);
delete context.data.sid; delete context.data.sid;
@ -348,5 +359,5 @@ export const onRequest = [
setTheme, setTheme,
constructHTML, constructHTML,
setBody, setBody,
setHeaders, setHeaders
]; ];

View File

@ -78,7 +78,7 @@ export async function onRequestGet(context: RequestContext) {
if (tokenData.scope.search("guilds.members.read") === -1) if (tokenData.scope.search("guilds.members.read") === -1)
return jsonError("Do not touch the scopes!", 400); return jsonError("Do not touch the scopes!", 400);
let userData: { [k: string]: any } = { const oauthData = {
...tokenData, ...tokenData,
refresh_at: Date.now() + tokenData.expires_in * 1000 - 86400000, refresh_at: Date.now() + tokenData.expires_in * 1000 - 86400000,
}; };
@ -94,12 +94,7 @@ export async function onRequestGet(context: RequestContext) {
return jsonError("Failed to retrieve user", 500); return jsonError("Failed to retrieve user", 500);
} }
const apiUser: { [k: string]: any } = await userReq.json(); const userData: { [k: string]: any } = await userReq.json();
userData = {
...userData,
...apiUser,
};
const serverMemberReq = await fetch( const serverMemberReq = await fetch(
"https://discord.com/api/v10/users/@me/guilds/242263977986359297/member", "https://discord.com/api/v10/users/@me/guilds/242263977986359297/member",
{ {
@ -138,6 +133,14 @@ export async function onRequestGet(context: RequestContext) {
expirationTtl: tokenData.expires_in, expirationTtl: tokenData.expires_in,
}); });
await context.env.DATA.put(
`oauthcredentials_${userData.id}`,
JSON.stringify(oauthData),
{
expirationTtl: 1209600000,
},
);
return new Response(null, { return new Response(null, {
headers: { headers: {
location: stateRedirect, location: stateRedirect,