summary refs log tree commit diff
path: root/src/routes/api/v8/guilds/#id/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/api/v8/guilds/#id/index.ts')
-rw-r--r--src/routes/api/v8/guilds/#id/index.ts56
1 files changed, 56 insertions, 0 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;