diff options
author | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2022-12-17 19:41:49 +1100 |
---|---|---|
committer | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2022-12-17 19:41:49 +1100 |
commit | bf420aac3284d8d83e7658cddfb347e7243076ce (patch) | |
tree | 7223b67b888e7aa60ca695f24588d5107bd88d05 | |
parent | Use staging's GLOBAL_ENV (diff) | |
download | server-bf420aac3284d8d83e7658cddfb347e7243076ce.tar.xz |
Remove Discord oauth login support
-rw-r--r-- | package-lock.json | 18 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | src/api/routes/oauth2/callback.ts | 38 | ||||
-rw-r--r-- | src/api/util/handlers/Oauth.ts | 83 | ||||
-rw-r--r-- | src/api/util/index.ts | 3 |
5 files changed, 13 insertions, 135 deletions
diff --git a/package-lock.json b/package-lock.json index 929961ba..565e78fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,8 @@ "@sentry/integrations": "^7.17.2", "@sentry/node": "^7.17.2", "@sentry/tracing": "^7.17.2", - "ajv": "^8.6.2", - "ajv-formats": "^2.1.1", + "ajv": "8.6.2", + "ajv-formats": "2.1.1", "amqplib": "^0.10.3", "bcrypt": "^5.0.1", "cheerio": "^1.0.0-rc.12", @@ -43,7 +43,7 @@ "proxy-agent": "^5.0.0", "sqlite3": "^5.1.1", "typeorm": "^0.3.10", - "typescript-json-schema": "^0.50.1", + "typescript-json-schema": "0.50.1", "ws": "^8.9.0" }, "devDependencies": { @@ -1911,9 +1911,9 @@ } }, "node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -7394,9 +7394,9 @@ } }, "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", diff --git a/package.json b/package.json index 7d130288..3aa6095e 100644 --- a/package.json +++ b/package.json @@ -54,8 +54,8 @@ "@sentry/integrations": "^7.17.2", "@sentry/node": "^7.17.2", "@sentry/tracing": "^7.17.2", - "ajv": "^8.6.2", - "ajv-formats": "^2.1.1", + "ajv": "8.6.2", + "ajv-formats": "2.1.1", "amqplib": "^0.10.3", "bcrypt": "^5.0.1", "cheerio": "^1.0.0-rc.12", @@ -83,7 +83,7 @@ "proxy-agent": "^5.0.0", "sqlite3": "^5.1.1", "typeorm": "^0.3.10", - "typescript-json-schema": "^0.50.1", + "typescript-json-schema": "0.50.1", "ws": "^8.9.0" }, "optionalDependencies": { diff --git a/src/api/routes/oauth2/callback.ts b/src/api/routes/oauth2/callback.ts deleted file mode 100644 index ddfcdac2..00000000 --- a/src/api/routes/oauth2/callback.ts +++ /dev/null @@ -1,38 +0,0 @@ -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 res.json({ token }) -}); - -export default router; \ No newline at end of file diff --git a/src/api/util/handlers/Oauth.ts b/src/api/util/handlers/Oauth.ts deleted file mode 100644 index cc662161..00000000 --- a/src/api/util/handlers/Oauth.ts +++ /dev/null @@ -1,83 +0,0 @@ -// TODO: Puyo's connections PR would replace this file - -import { Config } from "@fosscord/util"; -import fetch from "node-fetch"; - -export interface OauthAccessToken { - access_token: string; - token_type: string; - expires_in: string; - refresh_token: string; - scope: string; -}; - -export interface OauthUserDetails { - id: string; - email: string; - username: string; - avatar_url: string | null; -} - -interface Connection { - getAccessToken: (code: string) => Promise<OauthAccessToken>; - getUserDetals: (token: string) => Promise<OauthUserDetails>; -} - -const DiscordConnection: Connection = { - getAccessToken: async (code) => { - const { external } = Config.get(); - const { discord } = external; - - if (!discord.id || !discord.secret || !discord.redirect) - throw new Error("Discord Oauth has not been configured.") - - const body = new URLSearchParams( - Object.entries({ - client_id: discord.id as string, - client_secret: discord.secret as string, - redirect_uri: discord.redirect as string, - code: code as string, - grant_type: "authorization_code", - }) - ).toString(); - - const resp = await fetch("https://discord.com/api/oauth2/token", { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - body: body, - }); - if (resp.status !== 200) throw new Error(`Failed to get access token.`,); - - const json = await resp.json(); - - return json; - }, - - getUserDetals: async (token) => { - const resp = await fetch("https://discord.com/api/users/@me", { - headers: { - Authorization: `Bearer ${token}` - }, - }); - - const json = await resp.json(); - if (!json.username || !json.email) throw new Error("Failed to get user details via oauth"); - - return { - id: json.id, - email: json.email, - username: json.username, - avatar_url: json.avatar - ? `https://cdn.discordapp.com/avatars/${json.id}/${json.avatar}?size=2048` - : null, - }; - } -}; - -const OauthCallbackHandlers: { [key: string]: Connection; } = { - discord: DiscordConnection -}; - -export { OauthCallbackHandlers }; \ No newline at end of file diff --git a/src/api/util/index.ts b/src/api/util/index.ts index 49542ceb..ffad0607 100644 --- a/src/api/util/index.ts +++ b/src/api/util/index.ts @@ -7,5 +7,4 @@ export * from "./handlers/route"; export * from "./utility/String"; export * from "./handlers/Voice"; export * from "./utility/captcha"; -export * from "./utility/EmbedHandlers"; -export * from "./handlers/Oauth"; \ No newline at end of file +export * from "./utility/EmbedHandlers"; \ No newline at end of file |