From 5c682137b2ab6ecef2a52fc3974a2cc01931dbf2 Mon Sep 17 00:00:00 2001 From: Puyodead1 Date: Thu, 22 Dec 2022 11:08:03 -0500 Subject: implement PATCH connection --- src/api/routes/users/@me/connections.ts | 47 -------------------- .../#connection_name/#connection_id/index.ts | 51 ++++++++++++++++++++++ src/api/routes/users/@me/connections/index.ts | 47 ++++++++++++++++++++ 3 files changed, 98 insertions(+), 47 deletions(-) delete mode 100644 src/api/routes/users/@me/connections.ts create mode 100644 src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts create mode 100644 src/api/routes/users/@me/connections/index.ts (limited to 'src/api') diff --git a/src/api/routes/users/@me/connections.ts b/src/api/routes/users/@me/connections.ts deleted file mode 100644 index a5041be1..00000000 --- a/src/api/routes/users/@me/connections.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - Fosscord: A FOSS re-implementation and extension of the Discord.com backend. - Copyright (C) 2023 Fosscord and Fosscord Contributors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -import { route } from "@fosscord/api"; -import { ConnectedAccount, ConnectedAccountDTO } from "@fosscord/util"; -import { Request, Response, Router } from "express"; - -const router: Router = Router(); - -router.get("/", route({}), async (req: Request, res: Response) => { - const connections = await ConnectedAccount.find({ - where: { - user_id: req.user_id, - }, - select: [ - "external_id", - "type", - "name", - "verified", - "visibility", - "show_activity", - "revoked", - "access_token", - "friend_sync", - "integrations", - ], - }); - - res.json(connections.map((x) => new ConnectedAccountDTO(x, true))); -}); - -export default router; diff --git a/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts b/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts new file mode 100644 index 00000000..76eb9936 --- /dev/null +++ b/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts @@ -0,0 +1,51 @@ +import { route } from "@fosscord/api"; +import { Request, Response, Router } from "express"; +import { + ConnectedAccount, + DiscordApiErrors, + OrmUtils, +} from "../../../../../../../util"; +const router = Router(); + +// TODO: connection update schema +router.patch( + "/", + route({ body: "ConnectionUpdateSchema" }), + async (req: Request, res: Response) => { + const { connection_name, connection_id } = req.params; + + const connection = await ConnectedAccount.findOne({ + where: { + user_id: req.user_id, + external_id: connection_id, + type: connection_name, + }, + select: [ + "external_id", + "type", + "name", + "verified", + "visibility", + "show_activity", + "revoked", + "friend_sync", + "integrations", + ], + }); + + if (!connection) return DiscordApiErrors.UNKNOWN_CONNECTION; + // TODO: do we need to do anything if the connection is revoked? + OrmUtils.mergeDeep(connection, req.body); + await ConnectedAccount.update( + { + user_id: req.user_id, + external_id: connection_id, + type: connection_name, + }, + connection, + ); + res.json(connection.toJSON()); + }, +); + +export default router; diff --git a/src/api/routes/users/@me/connections/index.ts b/src/api/routes/users/@me/connections/index.ts new file mode 100644 index 00000000..a5041be1 --- /dev/null +++ b/src/api/routes/users/@me/connections/index.ts @@ -0,0 +1,47 @@ +/* + Fosscord: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Fosscord and Fosscord Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { route } from "@fosscord/api"; +import { ConnectedAccount, ConnectedAccountDTO } from "@fosscord/util"; +import { Request, Response, Router } from "express"; + +const router: Router = Router(); + +router.get("/", route({}), async (req: Request, res: Response) => { + const connections = await ConnectedAccount.find({ + where: { + user_id: req.user_id, + }, + select: [ + "external_id", + "type", + "name", + "verified", + "visibility", + "show_activity", + "revoked", + "access_token", + "friend_sync", + "integrations", + ], + }); + + res.json(connections.map((x) => new ConnectedAccountDTO(x, true))); +}); + +export default router; -- cgit 1.5.1