summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/routes/api/v8/channels/#channel_id/messages.ts25
-rw-r--r--src/util/instanceOf.ts5
2 files changed, 27 insertions, 3 deletions
diff --git a/src/routes/api/v8/channels/#channel_id/messages.ts b/src/routes/api/v8/channels/#channel_id/messages.ts

index 0826cf94..b11c0015 100644 --- a/src/routes/api/v8/channels/#channel_id/messages.ts +++ b/src/routes/api/v8/channels/#channel_id/messages.ts
@@ -1,6 +1,7 @@ import { Router } from "express"; import { ChannelModel, ChannelType, getPermission, MessageModel } from "fosscord-server-util"; import { HTTPError } from "lambert-server"; +import { instanceOf, Length } from "../../../../../util/instanceOf"; const router: Router = Router(); export default router; @@ -14,14 +15,34 @@ router.get("/", async (req, res) => { if (!channel) throw new HTTPError("Channel not found", 404); const type: ChannelType = channel.type; + switch (type) { + case ChannelType.GUILD_VOICE: + case ChannelType.GUILD_CATEGORY: + throw new HTTPError("not a text channel", 400); + case ChannelType.DM: + case ChannelType.GROUP_DM: + case ChannelType.GUILD_NEWS: + case ChannelType.GUILD_STORE: + case ChannelType.GUILD_TEXT: + break; + } - getPermission(req.userid, channel.guild_id, channel_id); + instanceOf({ $around: BigInt, $after: BigInt, $before: BigInt, $limit: new Length(Number, 1, 100) }, req.query, { + path: "query", + req, + }); if (channel.guild_id) { - channel.permission_overwrites; + const permissions = await getPermission(req.userid, channel.guild_id, channel_id, { channel }); + if (!permissions.has("VIEW_CHANNEL")) + throw new HTTPError("You don't have permission to view this channel", 401); + if (permissions.has("READ_MESSAGE_HISTORY")) return res.json([]); } else if (channel.recipients) { // group/dm channel + if (!channel.recipients.includes(req.userid)) + throw new HTTPError("You don't have permission to view this channel", 401); } else { // idk what this channel is, can probably be removed + throw new HTTPError("Unkown channel type", 500); } }); diff --git a/src/util/instanceOf.ts b/src/util/instanceOf.ts
index be7124d4..b5b2f587 100644 --- a/src/util/instanceOf.ts +++ b/src/util/instanceOf.ts
@@ -66,8 +66,11 @@ export function instanceOf( errors = {}, req, ref, - }: { path?: string; optional?: boolean; errors?: any; req: Request; ref: { key: string | number; obj: any } } + }: { path?: string; optional?: boolean; errors?: any; req: Request; ref?: { key: string | number; obj: any } } ): Boolean { + if (!ref) ref = { obj: null, key: "" }; + if (!path) path = "body"; + try { if (!type) return true; // no type was specified