Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Create data transfer verify endpoint
  • Loading branch information
regalijan committed Nov 23, 2023
1 parent fd13a0b commit b8251b6
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions functions/api/data-transfers/verify.ts
@@ -0,0 +1,94 @@
import { jsonError } from "../../common.js";
import { getBanList } from "../../roblox-open-cloud.js";

export async function onRequestGet(context: RequestContext) {
const code = new URL(context.request.url).searchParams.get("code");

if (!code) return jsonError("Missing code", 400);

const dataTransferData = (await context.env.DATA.get(
`datatransfer_${context.data.data_transfer_id}`,
{ type: "json" },
)) as { [k: string]: any } | null;

if (!dataTransferData)
return jsonError("No transfer exists with that ID", 404);

const exchangeReq = await fetch("https://apis.roblox.com/oauth/v1/token", {
body: `code=${code}&grant_type=authorization_code`,
headers: {
authorization: `Basic ${
btoa(context.env.ROBLOX_OAUTH_ID) +
":" +
context.env.ROBLOX_OAUTH_SECRET
}`,
"content-type": "application/x-www-form-urlencoded",
},
method: "POST",
});

if (!exchangeReq.ok) return jsonError("Failed to redeem code", 500);

const { id_token } = (await exchangeReq.json()) as { id_token: string };

const { name, preferred_username, sub } = JSON.parse(
atob(id_token.replaceAll("-", "+").replaceAll("_", "/")),
);

if (!preferred_username) return jsonError("Username missing", 500);

const userObj = {
displayName: name,
id: parseInt(sub),
name: preferred_username,
};

let redirectLocation = "/data-transfer/complete";

if (dataTransferData.oldUser) {
let banList;

try {
banList = (await getBanList(context)) as {
[k: string]: { BanType: number };
};
} catch {
return jsonError("Failed to create data transfer request", 500);
}

if (banList[userObj.id].BanType)
return new Response(null, {
headers: {
location: redirectLocation,
},
status: 302,
});

dataTransferData.newUser = userObj;

await fetch(
`https://api.trello.com/1/cards?key=${context.env.TRELLO_API_KEY}&token=${context.env.TRELLO_API_TOKEN}`,
{
body: JSON.stringify({
desc: `${dataTransferData.oldUser.name} -> ${userObj.name}\n${dataTransferData.oldUser.id} -> ${userObj.id}\nNO MODMAIL TICKET - WEBSITE FORM SUBMISSION`,
idList: context.env.TRELLO_LIST_ID,
name: `${dataTransferData.oldUser.name} | Data Transfer`,
}),
headers: {
"content-type": "application/json",
},
method: "POST",
},
);
} else {
dataTransferData.oldUser = userObj;
redirectLocation = "/data-transfer/destination-account";
}

return new Response(null, {
headers: {
location: redirectLocation,
},
status: 302,
});
}

0 comments on commit b8251b6

Please sign in to comment.