summary refs log tree commit diff
path: root/src/routes/channels
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-04-24 12:49:12 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-04-24 12:49:12 +0200
commitfe8a1c10005cc3becacf0c9601ecdc17f2a86e30 (patch)
tree5b406a7f497d05eb137ea8a0374e813a7bb904e1 /src/routes/channels
parent:bug: fix type in Channel Messages (diff)
parentUpdate channels.ts (diff)
downloadserver-fe8a1c10005cc3becacf0c9601ecdc17f2a86e30.tar.xz
Merge branch 'master' of https://github.com/fosscord/fosscord-api
Diffstat (limited to 'src/routes/channels')
-rw-r--r--src/routes/channels/#channel_id/followers.ts10
-rw-r--r--src/routes/channels/#channel_id/index.ts26
-rw-r--r--src/routes/channels/#channel_id/invites.ts12
-rw-r--r--src/routes/channels/#channel_id/messages/#message_id/crosspost.ts8
-rw-r--r--src/routes/channels/#channel_id/messages/#message_id/index.ts6
-rw-r--r--src/routes/channels/#channel_id/messages/#message_id/reactions.ts6
-rw-r--r--src/routes/channels/#channel_id/messages/bulk-delete.ts6
-rw-r--r--src/routes/channels/#channel_id/messages/index.ts14
-rw-r--r--src/routes/channels/#channel_id/permissions.ts1
-rw-r--r--src/routes/channels/#channel_id/pins.ts1
-rw-r--r--src/routes/channels/#channel_id/recipients.ts1
-rw-r--r--src/routes/channels/#channel_id/typing.ts1
-rw-r--r--src/routes/channels/#channel_id/webhooks.ts23
13 files changed, 96 insertions, 19 deletions
diff --git a/src/routes/channels/#channel_id/followers.ts b/src/routes/channels/#channel_id/followers.ts

index 9a4e81fa..c06db61b 100644 --- a/src/routes/channels/#channel_id/followers.ts +++ b/src/routes/channels/#channel_id/followers.ts
@@ -1,4 +1,14 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; + +/** + * + * @param {"webhook_channel_id":"754001514330062952"} + * + * Creates a WebHook in the channel and returns the id of it + * + * @returns {"channel_id": "816382962056560690", "webhook_id": "834910735095037962"} + */ diff --git a/src/routes/channels/#channel_id/index.ts b/src/routes/channels/#channel_id/index.ts
index 9a4e81fa..f6970df3 100644 --- a/src/routes/channels/#channel_id/index.ts +++ b/src/routes/channels/#channel_id/index.ts
@@ -1,4 +1,30 @@ +import { ChannelModel, getPermission, toObject } from "@fosscord/server-util"; import { Router } from "express"; +import { HTTPError } from "lambert-server"; const router: Router = Router(); +// TODO: delete channel +// TODO: Get channel + +router.delete("/", async(req,res)=>{ + const {channel_id} = req.params + + const channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); + if (!channel) throw new HTTPError("Channel not found", 404); + if (channel.guild_id) { + const permission = await getPermission(req.user_id, channel.guild_id) + permission.hasThrow("MANAGE_CHANNELS") + + // TODO Channel Update Gateway event will fire for each of them + await ChannelModel.updateMany({parent_id: channel_id}, {$set: {channel_id: null}}).exec() + + await ChannelModel.deleteOne({id: channel_id}) + } + + // TODO: Dm channel "close" not delete + + const data = toObject(channel); + //TODO: Reload channel list if request successful + res.send(data) +}) export default router; diff --git a/src/routes/channels/#channel_id/invites.ts b/src/routes/channels/#channel_id/invites.ts
index da802800..10d6ae3f 100644 --- a/src/routes/channels/#channel_id/invites.ts +++ b/src/routes/channels/#channel_id/invites.ts
@@ -7,7 +7,7 @@ import { emitEvent } from "../../../util/Event"; import { InviteCreateSchema } from "../../../schema/Invite"; -import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject } from "fosscord-server-util"; +import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject } from "@fosscord/server-util"; const router: Router = Router(); @@ -22,10 +22,7 @@ router.post("/", check(InviteCreateSchema), async (req: Request, res: Response) const { guild_id } = channel; const permission = await getPermission(user_id, guild_id); - - if (!permission.has("CREATE_INSTANT_INVITE")) { - throw new HTTPError("You aren't authorised to access this endpoint", 401); - } + permission.hasThrow("CREATE_INSTANT_INVITE"); const invite = { code: random(), @@ -55,10 +52,7 @@ router.get("/", async (req: Request, res: Response) => { } const { guild_id } = channel; const permission = await getPermission(user_id, guild_id); - - if (!permission.has("MANAGE_CHANNELS")) { - throw new HTTPError("You aren't authorised to access this endpoint", 401); - } + permission.hasThrow("MANAGE_CHANNELS"); const invites = await InviteModel.find({ guild_id }).exec(); diff --git a/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts b/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts new file mode 100644
index 00000000..17f36396 --- /dev/null +++ b/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts
@@ -0,0 +1,8 @@ +import { Router } from "express"; + +const router = Router(); + +// TODO: +// router.post("/", (req, res) => {}); + +export default router; diff --git a/src/routes/channels/#channel_id/messages/#message_id/index.ts b/src/routes/channels/#channel_id/messages/#message_id/index.ts new file mode 100644
index 00000000..014daee7 --- /dev/null +++ b/src/routes/channels/#channel_id/messages/#message_id/index.ts
@@ -0,0 +1,6 @@ +import { Router } from "express"; + +const router = Router(); +// TODO: + +export default router; diff --git a/src/routes/channels/#channel_id/messages/#message_id/reactions.ts b/src/routes/channels/#channel_id/messages/#message_id/reactions.ts new file mode 100644
index 00000000..014daee7 --- /dev/null +++ b/src/routes/channels/#channel_id/messages/#message_id/reactions.ts
@@ -0,0 +1,6 @@ +import { Router } from "express"; + +const router = Router(); +// TODO: + +export default router; diff --git a/src/routes/channels/#channel_id/messages/bulk-delete.ts b/src/routes/channels/#channel_id/messages/bulk-delete.ts
index 89e9d720..ff1324d7 100644 --- a/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/src/routes/channels/#channel_id/messages/bulk-delete.ts
@@ -1,5 +1,5 @@ import { Router } from "express"; -import { ChannelModel, getPermission, MessageDeleteBulkEvent, MessageModel } from "fosscord-server-util"; +import { ChannelModel, getPermission, MessageDeleteBulkEvent, MessageModel } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import Config from "../../../../util/Config"; import { emitEvent } from "../../../../util/Event"; @@ -13,12 +13,12 @@ export default router; // TODO: should this request fail, if you provide messages older than 14 days/invalid ids? // https://discord.com/developers/docs/resources/channel#bulk-delete-messages router.post("/", check({ messages: [String] }), async (req, res) => { - const channel_id = req.params.channel_id + const channel_id = req.params.channel_id; const channel = await ChannelModel.findOne({ id: channel_id }, { permission_overwrites: true, guild_id: true }).exec(); if (!channel?.guild_id) throw new HTTPError("Can't bulk delete dm channel messages", 400); const permission = await getPermission(req.user_id, channel?.guild_id, channel_id, { channel }); - if (!permission.has("MANAGE_MESSAGES")) throw new HTTPError("You are missing the MANAGE_MESSAGES permissions"); + permission.hasThrow("MANAGE_MESSAGES"); const { maxBulkDelete } = Config.get().limits.message; diff --git a/src/routes/channels/#channel_id/messages/index.ts b/src/routes/channels/#channel_id/messages/index.ts
index c3ea3da9..a5151d9b 100644 --- a/src/routes/channels/#channel_id/messages/index.ts +++ b/src/routes/channels/#channel_id/messages/index.ts
@@ -9,7 +9,7 @@ import { MessageModel, Snowflake, toObject, -} from "fosscord-server-util"; +} from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { MessageCreateSchema } from "../../../../schema/Message"; import { check, instanceOf, Length } from "../../../../util/instanceOf"; @@ -22,7 +22,7 @@ const router: Router = Router(); export default router; -function isTextChannel(type: ChannelType): boolean { +export function isTextChannel(type: ChannelType): boolean { switch (type) { case ChannelType.GUILD_VOICE: case ChannelType.GUILD_CATEGORY: @@ -62,7 +62,8 @@ router.get("/", async (req, res) => { if (channel.guild_id) { const permissions = await getPermission(req.user_id, channel.guild_id, channel_id, { channel }); - if (!permissions.has("VIEW_CHANNEL")) throw new HTTPError("You don't have permission to view this channel", 401); + permissions.hasThrow("VIEW_CHANNEL"); + if (!permissions.has("READ_MESSAGE_HISTORY")) return res.json([]); } else if (channel.recipients) { // group/dm channel @@ -106,11 +107,10 @@ router.post("/", check(MessageCreateSchema), async (req, res) => { if (channel.guild_id) { const permissions = await getPermission(req.user_id, channel.guild_id, channel_id, { channel }); - if (!permissions.has("SEND_MESSAGES")) throw new HTTPError("You don't have the SEND_MESSAGES permission"); - if (body.tts && !permissions.has("SEND_TTS_MESSAGES")) throw new HTTPError("You are missing the SEND_TTS_MESSAGES permission"); + permissions.hasThrow("SEND_MESSAGES"); + if (body.tts) permissions.hasThrow("SEND_TTS_MESSAGES"); if (body.message_reference) { - if (!permissions.has("READ_MESSAGE_HISTORY")) - throw new HTTPError("You are missing the READ_MESSAGE_HISTORY permission to reply"); + permissions.hasThrow("READ_MESSAGE_HISTORY"); if (body.message_reference.guild_id !== channel.guild_id) throw new HTTPError("You can only reference messages from this guild"); } diff --git a/src/routes/channels/#channel_id/permissions.ts b/src/routes/channels/#channel_id/permissions.ts
index 9a4e81fa..93c33ea5 100644 --- a/src/routes/channels/#channel_id/permissions.ts +++ b/src/routes/channels/#channel_id/permissions.ts
@@ -1,4 +1,5 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; diff --git a/src/routes/channels/#channel_id/pins.ts b/src/routes/channels/#channel_id/pins.ts
index 9a4e81fa..93c33ea5 100644 --- a/src/routes/channels/#channel_id/pins.ts +++ b/src/routes/channels/#channel_id/pins.ts
@@ -1,4 +1,5 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; diff --git a/src/routes/channels/#channel_id/recipients.ts b/src/routes/channels/#channel_id/recipients.ts
index 9a4e81fa..93c33ea5 100644 --- a/src/routes/channels/#channel_id/recipients.ts +++ b/src/routes/channels/#channel_id/recipients.ts
@@ -1,4 +1,5 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; diff --git a/src/routes/channels/#channel_id/typing.ts b/src/routes/channels/#channel_id/typing.ts
index 9a4e81fa..93c33ea5 100644 --- a/src/routes/channels/#channel_id/typing.ts +++ b/src/routes/channels/#channel_id/typing.ts
@@ -1,4 +1,5 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; diff --git a/src/routes/channels/#channel_id/webhooks.ts b/src/routes/channels/#channel_id/webhooks.ts
index 9a4e81fa..a56365b8 100644 --- a/src/routes/channels/#channel_id/webhooks.ts +++ b/src/routes/channels/#channel_id/webhooks.ts
@@ -1,4 +1,27 @@ import { Router } from "express"; +import { check, Length } from "../../../util/instanceOf"; +import { ChannelModel, getPermission, trimSpecial } from "@fosscord/server-util"; +import { HTTPError } from "lambert-server"; +import { isTextChannel } from "./messages/index"; + const router: Router = Router(); +// TODO: + +// TODO: use Image Data Type for avatar instead of String +router.post("/", check({ name: new Length(String, 1, 80), $avatar: String }), async (req, res) => { + const channel_id = req.params.channel_id; + const channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true, type: true }).exec(); + if (!channel) throw new HTTPError("Channel not found", 404); + + isTextChannel(channel.type); + if (!channel.guild_id) throw new HTTPError("Not a guild channel", 400); + + const permission = await getPermission(req.user_id, channel.guild_id); + permission.hasThrow("MANAGE_WEBHOOKS"); + + var { avatar, name } = req.body as { name: string; avatar?: string }; + name = trimSpecial(name); + if (name === "clyde") throw new HTTPError("Invalid name", 400); +}); export default router;