diff options
author | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2022-10-28 15:25:58 +1100 |
---|---|---|
committer | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2022-10-28 15:25:58 +1100 |
commit | 8d93693a38f55c442372cac8f76211f27a752d0b (patch) | |
tree | 7ea113bbef57508919cf3f31bbac6ef7a171ecfc /src/api/routes/oauth2/callback.ts | |
parent | fix bad user validation (diff) | |
download | server-8d93693a38f55c442372cac8f76211f27a752d0b.tar.xz |
Move src-slowcord to own repo https://github.com/MaddyUnderStars/slowcord-services
Diffstat (limited to '')
-rw-r--r-- | src/api/routes/oauth2/callback.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/api/routes/oauth2/callback.ts b/src/api/routes/oauth2/callback.ts new file mode 100644 index 00000000..3c7fb777 --- /dev/null +++ b/src/api/routes/oauth2/callback.ts @@ -0,0 +1,38 @@ +import { Router, Request, Response } from "express"; +import { route, OauthCallbackHandlers } from "@fosscord/api"; +import { FieldErrors, generateToken, User } from "@fosscord/util"; +const router = Router(); + +router.get("/:type", route({}), async (req: Request, res: Response) => { + const { type } = req.params; + const handler = OauthCallbackHandlers[type]; + if (!handler) throw FieldErrors({ + type: { + code: "BASE_TYPE_CHOICES", + message: `Value must be one of (${Object.keys(OauthCallbackHandlers).join(", ")}).`, + } + }); + + const { code } = req.query; + if (!code || typeof code !== "string") throw FieldErrors({ code: { code: "BASE_TYPE_REQUIRED", message: req.t("common:field.BASE_TYPE_REQUIRED"), } }); + const access = await handler.getAccessToken(code); + + const oauthUser = await handler.getUserDetals(access.access_token); + + let user = await User.findOne({ where: { email: oauthUser.email } }); + if (!user) { + user = await User.register({ + email: oauthUser.email, + username: oauthUser.username, + req + }); + + // TODO: upload pfp, banner? + } + + const token = await generateToken(user.id); + + return { token }; +}); + +export default router; \ No newline at end of file |