diff options
author | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-02-22 16:48:27 +0100 |
---|---|---|
committer | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-02-22 16:48:27 +0100 |
commit | 0d1f7953057aa04b198e921937bdf6f7dc4a0520 (patch) | |
tree | b1f21536518385c34601ad2aff91925721a573d5 /src/routes | |
parent | :bug: add webhooks to whitelist auth (diff) | |
download | server-0d1f7953057aa04b198e921937bdf6f7dc4a0520.tar.xz |
:art: restructed guilds
Diffstat (limited to 'src/routes')
-rw-r--r-- | src/routes/api/v8/guilds/#id/index.ts | 56 | ||||
-rw-r--r-- | src/routes/api/v8/guilds/#id/members.ts | 16 | ||||
-rw-r--r-- | src/routes/api/v8/guilds/index.ts | 68 |
3 files changed, 74 insertions, 66 deletions
diff --git a/src/routes/api/v8/guilds/#id/index.ts b/src/routes/api/v8/guilds/#id/index.ts new file mode 100644 index 00000000..38fbd5f2 --- /dev/null +++ b/src/routes/api/v8/guilds/#id/index.ts @@ -0,0 +1,56 @@ +import { Request, Response, Router } from "express"; +import { getPermission, GuildDeleteEvent, GuildModel, MemberModel } from "fosscord-server-util"; +import { HTTPError } from "lambert-server"; +import { GuildUpdateSchema } from "../../../../../schema/Guild"; +import { emitEvent } from "../../../../../util/Event"; +import { check } from "../../../../../util/instanceOf"; + +const router = Router(); + +router.get("/", async (req: Request, res: Response) => { + const guild_id = BigInt(req.params.id); + + const guild = await GuildModel.findOne({ id: guild_id }).exec(); + if (!guild) throw new HTTPError("Guild does not exist"); + + const member = await MemberModel.findOne({ guild_id: guild_id, id: req.userid }, "id").exec(); + if (!member) throw new HTTPError("You are not a member of the guild you are trying to access", 401); + + return res.json(guild); +}); + +router.patch("/", check(GuildUpdateSchema), async (req: Request, res: Response) => { + const body = req.body as GuildUpdateSchema; + const guild_id = BigInt(req.params.id); + + const guild = await GuildModel.findOne({ id: guild_id }).exec(); + if (!guild) throw new HTTPError("This guild does not exist", 404); + + const perms = await getPermission(req.userid, guild_id); + if (!perms.has("MANAGE_GUILD")) throw new HTTPError("You do not have the MANAGE_GUILD permission", 401); + + await GuildModel.updateOne({ id: guild_id }, body).exec(); + return res.status(204); +}); + +router.delete("/", async (req: Request, res: Response) => { + var guild_id = BigInt(req.params.id); + + const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }, "owner_id").exec(); + if (!guild) throw new HTTPError("This guild does not exist", 404); + if (guild.owner_id !== req.userid) throw new HTTPError("You are not the owner of this guild", 401); + + await emitEvent({ + event: "GUILD_DELETE", + data: { + id: guild_id, + }, + guild_id: guild_id, + } as GuildDeleteEvent); + + await GuildModel.deleteOne({ id: guild_id }).exec(); + + return res.status(204).send(); +}); + +export default router; diff --git a/src/routes/api/v8/guilds/#id/members.ts b/src/routes/api/v8/guilds/#id/members.ts new file mode 100644 index 00000000..68434830 --- /dev/null +++ b/src/routes/api/v8/guilds/#id/members.ts @@ -0,0 +1,16 @@ +import { Request, Response, Router } from "express"; +import { GuildModel, MemberModel } from "fosscord-server-util"; +import { HTTPError } from "lambert-server"; + +const router = Router(); + +// TODO: needs pagination/only send over websocket +router.get("/:id/members", async (req: Request, res: Response) => { + const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); + if (!guild) throw new HTTPError("Guild not found", 404); + + var members = await MemberModel.find({ guild_id: BigInt(req.params.id) }).exec(); + return res.json(members); +}); + +export default router; diff --git a/src/routes/api/v8/guilds/index.ts b/src/routes/api/v8/guilds/index.ts index ae118d51..54b2d2a4 100644 --- a/src/routes/api/v8/guilds/index.ts +++ b/src/routes/api/v8/guilds/index.ts @@ -1,49 +1,14 @@ import { Router, Request, Response } from "express"; -import { - GuildDeleteEvent, - RoleModel, - GuildModel, - MemberModel, - Snowflake, - getPermission, - Guild, -} from "fosscord-server-util"; +import { RoleModel, GuildModel, Snowflake, Guild } from "fosscord-server-util"; import { HTTPError } from "lambert-server"; import { check } from "./../../../../util/instanceOf"; -import { GuildCreateSchema, GuildUpdateSchema } from "../../../../schema/Guild"; -import { emitEvent } from "../../../../util/Event"; +import { GuildCreateSchema } from "../../../../schema/Guild"; import Config from "../../../../util/Config"; import { getPublicUser } from "../../../../util/User"; import { addMember } from "../../../../util/Member"; const router: Router = Router(); -router.get("/:id", async (req: Request, res: Response) => { - const guild_id = BigInt(req.params.id); - - const guild = await GuildModel.findOne({ id: guild_id }).exec(); - if (!guild) throw new HTTPError("Guild does not exist"); - - const member = await MemberModel.findOne({ guild_id: guild_id, id: req.userid }, "id").exec(); - if (!member) throw new HTTPError("You are not a member of the guild you are trying to access", 401); - - return res.json(guild); -}); - -router.patch("/:id", check(GuildUpdateSchema), async (req: Request, res: Response) => { - const body = req.body as GuildUpdateSchema; - const guild_id = BigInt(req.params.id); - - const guild = await GuildModel.findOne({ id: guild_id }).exec(); - if (!guild) throw new HTTPError("This guild does not exist", 404); - - const perms = await getPermission(req.userid, guild_id); - if (!perms.has("MANAGE_GUILD")) throw new HTTPError("You do not have the MANAGE_GUILD permission", 401); - - await GuildModel.updateOne({ id: guild_id }, body).exec(); - return res.status(204); -}); - router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) => { const body = req.body as GuildCreateSchema; @@ -113,33 +78,4 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = res.status(201).json({ id: guild.id }); }); -router.delete("/:id", async (req: Request, res: Response) => { - var guild_id = BigInt(req.params.id); - - const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }, "owner_id").exec(); - if (!guild) throw new HTTPError("This guild does not exist", 404); - if (guild.owner_id !== req.userid) throw new HTTPError("You are not the owner of this guild", 401); - - await emitEvent({ - event: "GUILD_DELETE", - data: { - id: guild_id, - }, - guild_id: guild_id, - } as GuildDeleteEvent); - - await GuildModel.deleteOne({ id: guild_id }).exec(); - - return res.status(204).send(); -}); - -// TODO: needs pagination/only send over websocket -router.get("/:id/members", async (req: Request, res: Response) => { - const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); - if (!guild) throw new HTTPError("Guild not found", 404); - - var members = await MemberModel.find({ guild_id: BigInt(req.params.id) }).exec(); - return res.json(members); -}); - export default router; |