From b40d6b825b4a2074e5eb0f6f20f0388abb36dd89 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Thu, 22 Apr 2021 23:37:07 +0200 Subject: npm i @fosscord/server-util --- src/routes/auth/login.ts | 2 +- src/routes/auth/register.ts | 2 +- src/routes/channels/#channel_id/invites.ts | 2 +- src/routes/channels/#channel_id/messages/bulk-delete.ts | 4 ++-- src/routes/channels/#channel_id/messages/index.ts | 2 +- src/routes/guilds/#guild_id/bans.ts | 2 +- src/routes/guilds/#guild_id/channels.ts | 2 +- src/routes/guilds/#guild_id/index.ts | 2 +- src/routes/guilds/#guild_id/members.ts | 2 +- src/routes/guilds/index.ts | 2 +- src/routes/invites/index.ts | 2 +- src/routes/users/@me/guilds.ts | 2 +- src/routes/users/@me/index.ts | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src/routes') diff --git a/src/routes/auth/login.ts b/src/routes/auth/login.ts index cc2b6202..9db2e06a 100644 --- a/src/routes/auth/login.ts +++ b/src/routes/auth/login.ts @@ -2,7 +2,7 @@ import { Request, Response, Router } from "express"; import { check, FieldErrors, Length } from "../../util/instanceOf"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -import { User, UserModel } from "fosscord-server-util"; +import { User, UserModel } from "@fosscord/server-util"; import Config from "../../util/Config"; import { adjustEmail } from "./register"; diff --git a/src/routes/auth/register.ts b/src/routes/auth/register.ts index 5501203d..1a026670 100644 --- a/src/routes/auth/register.ts +++ b/src/routes/auth/register.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import Config from "../../util/Config"; -import { trimSpecial, User, Snowflake, UserModel } from "fosscord-server-util"; +import { trimSpecial, User, Snowflake, UserModel } from "@fosscord/server-util"; import bcrypt from "bcrypt"; import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../util/instanceOf"; import "missing-native-js-functions"; diff --git a/src/routes/channels/#channel_id/invites.ts b/src/routes/channels/#channel_id/invites.ts index da802800..5ec5163a 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(); diff --git a/src/routes/channels/#channel_id/messages/bulk-delete.ts b/src/routes/channels/#channel_id/messages/bulk-delete.ts index 89e9d720..13aea8a1 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,7 +13,7 @@ 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); diff --git a/src/routes/channels/#channel_id/messages/index.ts b/src/routes/channels/#channel_id/messages/index.ts index 4978b98a..91298326 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"; diff --git a/src/routes/guilds/#guild_id/bans.ts b/src/routes/guilds/#guild_id/bans.ts index 3de80a32..f0e3804a 100644 --- a/src/routes/guilds/#guild_id/bans.ts +++ b/src/routes/guilds/#guild_id/bans.ts @@ -1,5 +1,5 @@ import { Request, Response, Router } from "express"; -import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel, toObject } from "fosscord-server-util"; +import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel, toObject } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { getIpAdress } from "../../../middlewares/GlobalRateLimit"; import { BanCreateSchema } from "../../../schema/Ban"; diff --git a/src/routes/guilds/#guild_id/channels.ts b/src/routes/guilds/#guild_id/channels.ts index e0d8f3ac..d42ba481 100644 --- a/src/routes/guilds/#guild_id/channels.ts +++ b/src/routes/guilds/#guild_id/channels.ts @@ -1,5 +1,5 @@ import { Router } from "express"; -import { ChannelCreateEvent, ChannelModel, ChannelType, GuildModel, Snowflake, toObject } from "fosscord-server-util"; +import { ChannelCreateEvent, ChannelModel, ChannelType, GuildModel, Snowflake, toObject } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { ChannelModifySchema } from "../../../schema/Channel"; import { emitEvent } from "../../../util/Event"; diff --git a/src/routes/guilds/#guild_id/index.ts b/src/routes/guilds/#guild_id/index.ts index 7e5f49d3..96861e48 100644 --- a/src/routes/guilds/#guild_id/index.ts +++ b/src/routes/guilds/#guild_id/index.ts @@ -12,7 +12,7 @@ import { RoleModel, toObject, UserModel, -} from "fosscord-server-util"; +} from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { GuildUpdateSchema } from "../../../schema/Guild"; import { emitEvent } from "../../../util/Event"; diff --git a/src/routes/guilds/#guild_id/members.ts b/src/routes/guilds/#guild_id/members.ts index f4e6d4e8..61493485 100644 --- a/src/routes/guilds/#guild_id/members.ts +++ b/src/routes/guilds/#guild_id/members.ts @@ -1,5 +1,5 @@ import { Request, Response, Router } from "express"; -import { GuildModel, MemberModel, toObject } from "fosscord-server-util"; +import { GuildModel, MemberModel, toObject } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { instanceOf, Length } from "../../../util/instanceOf"; import { PublicMemberProjection } from "../../../util/Member"; diff --git a/src/routes/guilds/index.ts b/src/routes/guilds/index.ts index 57d7ddc4..6d9b7c1b 100644 --- a/src/routes/guilds/index.ts +++ b/src/routes/guilds/index.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { RoleModel, GuildModel, Snowflake, 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 } from "../../schema/Guild"; diff --git a/src/routes/invites/index.ts b/src/routes/invites/index.ts index df74e216..7ffceb25 100644 --- a/src/routes/invites/index.ts +++ b/src/routes/invites/index.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { getPermission, InviteModel, toObject } from "fosscord-server-util"; +import { getPermission, InviteModel, toObject } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; const router: Router = Router(); diff --git a/src/routes/users/@me/guilds.ts b/src/routes/users/@me/guilds.ts index d0fbaa3e..5042c17c 100644 --- a/src/routes/users/@me/guilds.ts +++ b/src/routes/users/@me/guilds.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "fosscord-server-util"; +import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; import { emitEvent } from "../../../util/Event"; import { getPublicUser } from "../../../util/User"; diff --git a/src/routes/users/@me/index.ts b/src/routes/users/@me/index.ts index 32877dcc..22d4cf3b 100644 --- a/src/routes/users/@me/index.ts +++ b/src/routes/users/@me/index.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { UserModel } from "fosscord-server-util"; +import { UserModel } from "@fosscord/server-util"; import { HTTPError } from "lambert-server"; const router: Router = Router(); -- cgit 1.5.1 From 696ef6278ab6a4f48f5bc6ef46571691127b80be Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Fri, 23 Apr 2021 00:14:54 +0200 Subject: :bug: fix wrong permission in delete invite --- src/routes/invites/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/routes') diff --git a/src/routes/invites/index.ts b/src/routes/invites/index.ts index 7ffceb25..7f4ff59b 100644 --- a/src/routes/invites/index.ts +++ b/src/routes/invites/index.ts @@ -21,7 +21,8 @@ router.delete("/:invite_code", async (req: Request, res: Response) => { const { guild_id, channel_id } = invite; const perms = await getPermission(req.user_id, guild_id, channel_id); - if (!perms.has("MANAGE_GUILD") || !perms.has("MANAGE_CHANNELS")) throw new HTTPError("You aren't allow", 401); + if (!perms.has("MANAGE_GUILD") && !perms.has("MANAGE_CHANNELS")) + throw new HTTPError("You missing the MANAGE_GUILD or MANAGE_CHANNELS permission", 401); await InviteModel.deleteOne({ code }).exec(); -- cgit 1.5.1 From 3e6d1103bcb121390116ed9d2b200806da0f85d9 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Fri, 23 Apr 2021 00:15:38 +0200 Subject: :art: clean up permission checks to use .hasThrow() --- package-lock.json | 14 +++++++------- package.json | 2 +- src/routes/channels/#channel_id/followers.ts | 9 +++++++++ src/routes/channels/#channel_id/invites.ts | 10 ++-------- .../channels/#channel_id/messages/:message_id/crosspost.ts | 8 ++++++++ .../channels/#channel_id/messages/:message_id/index.ts | 0 .../channels/#channel_id/messages/:message_id/reactions.ts | 0 src/routes/channels/#channel_id/messages/bulk-delete.ts | 2 +- src/routes/channels/#channel_id/messages/index.ts | 10 +++++----- src/routes/channels/#channel_id/webhooks.ts | 2 ++ src/routes/guilds/#guild_id/bans.ts | 6 ++---- src/routes/guilds/#guild_id/index.ts | 2 +- 12 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 src/routes/channels/#channel_id/messages/:message_id/crosspost.ts create mode 100644 src/routes/channels/#channel_id/messages/:message_id/index.ts create mode 100644 src/routes/channels/#channel_id/messages/:message_id/reactions.ts (limited to 'src/routes') diff --git a/package-lock.json b/package-lock.json index 53482ae0..e5321797 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@fosscord/server-util": "^1.0.2", + "@fosscord/server-util": "^1.0.3", "@types/jest": "^26.0.22", "bcrypt": "^5.0.0", "body-parser": "^1.19.0", @@ -581,9 +581,9 @@ } }, "node_modules/@fosscord/server-util": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.0.2.tgz", - "integrity": "sha512-X4l+lzG4nnNsM63bfjQenPkWOQBiPn40iqoSH+vZGw1dBUs25U8Vd4XpDoi/mkOTPiKXIM2fRkhGvTFyEn9l4g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.0.3.tgz", + "integrity": "sha512-sDZIU1ROu9SwThrwxcIUBw/YY9nB/Uselkgufanx6tdDJ0YTgWzviP7C4l1QweZ/fJdSNBNj1rNipDeY3/r7qA==", "dependencies": { "@types/jsonwebtoken": "^8.5.0", "@types/mongoose-autopopulate": "^0.10.1", @@ -12563,9 +12563,9 @@ } }, "@fosscord/server-util": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.0.2.tgz", - "integrity": "sha512-X4l+lzG4nnNsM63bfjQenPkWOQBiPn40iqoSH+vZGw1dBUs25U8Vd4XpDoi/mkOTPiKXIM2fRkhGvTFyEn9l4g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.0.3.tgz", + "integrity": "sha512-sDZIU1ROu9SwThrwxcIUBw/YY9nB/Uselkgufanx6tdDJ0YTgWzviP7C4l1QweZ/fJdSNBNj1rNipDeY3/r7qA==", "requires": { "@types/jsonwebtoken": "^8.5.0", "@types/mongoose-autopopulate": "^0.10.1", diff --git a/package.json b/package.json index c2899076..7e4dd3de 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/fosscord/fosscord-api#readme", "dependencies": { - "@fosscord/server-util": "^1.0.2", + "@fosscord/server-util": "^1.0.3", "@types/jest": "^26.0.22", "bcrypt": "^5.0.0", "body-parser": "^1.19.0", diff --git a/src/routes/channels/#channel_id/followers.ts b/src/routes/channels/#channel_id/followers.ts index 9a4e81fa..25165356 100644 --- a/src/routes/channels/#channel_id/followers.ts +++ b/src/routes/channels/#channel_id/followers.ts @@ -2,3 +2,12 @@ import { Router } from "express"; const router: Router = Router(); 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/invites.ts b/src/routes/channels/#channel_id/invites.ts index 5ec5163a..10d6ae3f 100644 --- a/src/routes/channels/#channel_id/invites.ts +++ b/src/routes/channels/#channel_id/invites.ts @@ -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..e69de29b 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..e69de29b diff --git a/src/routes/channels/#channel_id/messages/bulk-delete.ts b/src/routes/channels/#channel_id/messages/bulk-delete.ts index 13aea8a1..ff1324d7 100644 --- a/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/src/routes/channels/#channel_id/messages/bulk-delete.ts @@ -18,7 +18,7 @@ router.post("/", check({ messages: [String] }), async (req, res) => { 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 91298326..689f6733 100644 --- a/src/routes/channels/#channel_id/messages/index.ts +++ b/src/routes/channels/#channel_id/messages/index.ts @@ -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/webhooks.ts b/src/routes/channels/#channel_id/webhooks.ts index 9a4e81fa..a7a5df95 100644 --- a/src/routes/channels/#channel_id/webhooks.ts +++ b/src/routes/channels/#channel_id/webhooks.ts @@ -1,4 +1,6 @@ import { Router } from "express"; const router: Router = Router(); +router.post("/", (req, res) => {}); + export default router; diff --git a/src/routes/guilds/#guild_id/bans.ts b/src/routes/guilds/#guild_id/bans.ts index f0e3804a..f84950f9 100644 --- a/src/routes/guilds/#guild_id/bans.ts +++ b/src/routes/guilds/#guild_id/bans.ts @@ -35,7 +35,7 @@ router.post("/:user_id", check(BanCreateSchema), async (req: Request, res: Respo const banned_user = await getPublicUser(banned_user_id); const perms = await getPermission(req.user_id, guild_id); - if (!perms.has("BAN_MEMBERS")) throw new HTTPError("You don't have the permission to ban members", 403); + perms.hasThrow("BAN_MEMBERS"); if (req.user_id === banned_user_id) throw new HTTPError("You can't ban yourself", 400); await removeMember(banned_user_id, guild_id); @@ -69,9 +69,7 @@ router.delete("/:user_id", async (req: Request, res: Response) => { if (!guild) throw new HTTPError("Guild not found", 404); const perms = await getPermission(req.user_id, guild_id); - if (!perms.has("BAN_MEMBERS")) { - throw new HTTPError("No permissions", 403); - } + perms.hasThrow("BAN_MEMBERS"); await BanModel.deleteOne({ user_id: banned_user_id, diff --git a/src/routes/guilds/#guild_id/index.ts b/src/routes/guilds/#guild_id/index.ts index 96861e48..2a7d9b38 100644 --- a/src/routes/guilds/#guild_id/index.ts +++ b/src/routes/guilds/#guild_id/index.ts @@ -41,7 +41,7 @@ router.patch("/", check(GuildUpdateSchema), async (req: Request, res: Response) // TODO: guild update check image const perms = await getPermission(req.user_id, guild_id); - if (!perms.has("MANAGE_GUILD")) throw new HTTPError("You do not have the MANAGE_GUILD permission", 401); + perms.hasThrow("MANAGE_GUILD"); const guild = await GuildModel.findOneAndUpdate({ id: guild_id }, body) .populate({ path: "joined_at", match: { id: req.user_id } }) -- cgit 1.5.1 From 4a2c0ebe5f56348fcd5ebf0f3691decda3c30209 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Fri, 23 Apr 2021 00:48:18 +0200 Subject: :construction: Webhook --- src/routes/channels/#channel_id/followers.ts | 1 + src/routes/channels/#channel_id/index.ts | 1 + .../#channel_id/messages/:message_id/index.ts | 6 ++++++ .../#channel_id/messages/:message_id/reactions.ts | 6 ++++++ src/routes/channels/#channel_id/messages/index.ts | 2 +- src/routes/channels/#channel_id/permissions.ts | 1 + src/routes/channels/#channel_id/pins.ts | 1 + src/routes/channels/#channel_id/recipients.ts | 1 + src/routes/channels/#channel_id/typing.ts | 1 + src/routes/channels/#channel_id/webhooks.ts | 23 +++++++++++++++++++++- src/util/instanceOf.ts | 3 +++ 11 files changed, 44 insertions(+), 2 deletions(-) (limited to 'src/routes') diff --git a/src/routes/channels/#channel_id/followers.ts b/src/routes/channels/#channel_id/followers.ts index 25165356..c06db61b 100644 --- a/src/routes/channels/#channel_id/followers.ts +++ b/src/routes/channels/#channel_id/followers.ts @@ -1,5 +1,6 @@ import { Router } from "express"; const router: Router = Router(); +// TODO: export default router; diff --git a/src/routes/channels/#channel_id/index.ts b/src/routes/channels/#channel_id/index.ts index 9a4e81fa..93c33ea5 100644 --- a/src/routes/channels/#channel_id/index.ts +++ b/src/routes/channels/#channel_id/index.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/messages/:message_id/index.ts b/src/routes/channels/#channel_id/messages/:message_id/index.ts index e69de29b..014daee7 100644 --- a/src/routes/channels/#channel_id/messages/:message_id/index.ts +++ 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 index e69de29b..014daee7 100644 --- a/src/routes/channels/#channel_id/messages/:message_id/reactions.ts +++ 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/index.ts b/src/routes/channels/#channel_id/messages/index.ts index 689f6733..712bbc7a 100644 --- a/src/routes/channels/#channel_id/messages/index.ts +++ b/src/routes/channels/#channel_id/messages/index.ts @@ -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: 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 a7a5df95..a56365b8 100644 --- a/src/routes/channels/#channel_id/webhooks.ts +++ b/src/routes/channels/#channel_id/webhooks.ts @@ -1,6 +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"); -router.post("/", (req, res) => {}); + 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; diff --git a/src/util/instanceOf.ts b/src/util/instanceOf.ts index b4a231ba..e4e58092 100644 --- a/src/util/instanceOf.ts +++ b/src/util/instanceOf.ts @@ -34,6 +34,9 @@ export function FieldErrors(fields: Record Date: Fri, 23 Apr 2021 20:39:52 +0200 Subject: :bug: fix directory name --- src/routes/auth/login.ts | 2 +- src/routes/channels/#channel_id/messages/#message_id/crosspost.ts | 8 ++++++++ src/routes/channels/#channel_id/messages/#message_id/index.ts | 6 ++++++ src/routes/channels/#channel_id/messages/#message_id/reactions.ts | 6 ++++++ src/routes/channels/#channel_id/messages/:message_id/crosspost.ts | 8 -------- src/routes/channels/#channel_id/messages/:message_id/index.ts | 6 ------ src/routes/channels/#channel_id/messages/:message_id/reactions.ts | 6 ------ 7 files changed, 21 insertions(+), 21 deletions(-) create mode 100644 src/routes/channels/#channel_id/messages/#message_id/crosspost.ts create mode 100644 src/routes/channels/#channel_id/messages/#message_id/index.ts create mode 100644 src/routes/channels/#channel_id/messages/#message_id/reactions.ts delete mode 100644 src/routes/channels/#channel_id/messages/:message_id/crosspost.ts delete mode 100644 src/routes/channels/#channel_id/messages/:message_id/index.ts delete mode 100644 src/routes/channels/#channel_id/messages/:message_id/reactions.ts (limited to 'src/routes') diff --git a/src/routes/auth/login.ts b/src/routes/auth/login.ts index 9db2e06a..247ee018 100644 --- a/src/routes/auth/login.ts +++ b/src/routes/auth/login.ts @@ -2,7 +2,7 @@ import { Request, Response, Router } from "express"; import { check, FieldErrors, Length } from "../../util/instanceOf"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -import { User, UserModel } from "@fosscord/server-util"; +import { UserModel } from "@fosscord/server-util"; import Config from "../../util/Config"; import { adjustEmail } from "./register"; 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/:message_id/crosspost.ts b/src/routes/channels/#channel_id/messages/:message_id/crosspost.ts deleted file mode 100644 index 17f36396..00000000 --- a/src/routes/channels/#channel_id/messages/:message_id/crosspost.ts +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 014daee7..00000000 --- a/src/routes/channels/#channel_id/messages/:message_id/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index 014daee7..00000000 --- a/src/routes/channels/#channel_id/messages/:message_id/reactions.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Router } from "express"; - -const router = Router(); -// TODO: - -export default router; -- cgit 1.5.1 From e1d06e35efddaccc1135003634ddbc570906e61e Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 00:10:18 +0200 Subject: Create index.ts --- src/routes/users/#id/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/routes/users/#id/index.ts (limited to 'src/routes') diff --git a/src/routes/users/#id/index.ts b/src/routes/users/#id/index.ts new file mode 100644 index 00000000..ca280597 --- /dev/null +++ b/src/routes/users/#id/index.ts @@ -0,0 +1,15 @@ +import { Router, Request, Response } from "express"; +import { UserModel } from "@fosscord/server-util"; +import { HTTPError } from "lambert-server"; + +const router: Router = Router(); + +router.get("/", async (req: Request, res: Response) => { + const { id } = req.params; + const user = await UserModel.findOne({ id: id }).exec(); + if (!user) throw new HTTPError("User not found", 404); + + res.json(user); +}); + +export default router; -- cgit 1.5.1 From b213e2931a4e2ea1973e151dc985bede331363a6 Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 00:21:57 +0200 Subject: Update index.ts --- src/routes/users/#id/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/routes') diff --git a/src/routes/users/#id/index.ts b/src/routes/users/#id/index.ts index ca280597..3cbeb463 100644 --- a/src/routes/users/#id/index.ts +++ b/src/routes/users/#id/index.ts @@ -1,15 +1,18 @@ import { Router, Request, Response } from "express"; -import { UserModel } from "@fosscord/server-util"; +import { UserModel} from "@fosscord/server-util"; +import { getPublicUser } from "../../../util/User"; import { HTTPError } from "lambert-server"; const router: Router = Router(); router.get("/", async (req: Request, res: Response) => { const { id } = req.params; - const user = await UserModel.findOne({ id: id }).exec(); + const user = await getPublicUser(id); if (!user) throw new HTTPError("User not found", 404); res.json(user); }); + + export default router; -- cgit 1.5.1 From 07fb93a4e6b14fa5f2ab890255d0eb054414832f Mon Sep 17 00:00:00 2001 From: stefan080106 Date: Sat, 24 Apr 2021 01:25:20 +0200 Subject: :construction: add guild channel delete route --- src/routes/channels/#channel_id/index.ts | 27 ++++++++++++++++++++++++++- src/routes/guilds/index.ts | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'src/routes') diff --git a/src/routes/channels/#channel_id/index.ts b/src/routes/channels/#channel_id/index.ts index 93c33ea5..f6970df3 100644 --- a/src/routes/channels/#channel_id/index.ts +++ b/src/routes/channels/#channel_id/index.ts @@ -1,5 +1,30 @@ +import { ChannelModel, getPermission, toObject } from "@fosscord/server-util"; import { Router } from "express"; +import { HTTPError } from "lambert-server"; const router: Router = Router(); -// TODO: +// 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/guilds/index.ts b/src/routes/guilds/index.ts index 6d9b7c1b..bd491e86 100644 --- a/src/routes/guilds/index.ts +++ b/src/routes/guilds/index.ts @@ -9,6 +9,8 @@ import { addMember } from "../../util/Member"; const router: Router = Router(); +//TODO: create default channel + router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) => { const body = req.body as GuildCreateSchema; -- cgit 1.5.1 From e3815e5c3e2acf8f31b177c889e2a77ca80bd165 Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 09:38:18 +0200 Subject: lol --- src/routes/users/#id/index.ts | 5 +++-- src/schema/User.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/schema/User.ts (limited to 'src/routes') diff --git a/src/routes/users/#id/index.ts b/src/routes/users/#id/index.ts index 3cbeb463..d5f3b788 100644 --- a/src/routes/users/#id/index.ts +++ b/src/routes/users/#id/index.ts @@ -1,7 +1,9 @@ import { Router, Request, Response } from "express"; -import { UserModel} from "@fosscord/server-util"; +import { UserModel, toObject } from "@fosscord/server-util"; import { getPublicUser } from "../../../util/User"; import { HTTPError } from "lambert-server"; +import { UserUpdateSchema } from "../../../schema/User"; +import { check } from "../../../util/instanceOf"; const router: Router = Router(); @@ -14,5 +16,4 @@ router.get("/", async (req: Request, res: Response) => { }); - export default router; diff --git a/src/schema/User.ts b/src/schema/User.ts new file mode 100644 index 00000000..2b74a433 --- /dev/null +++ b/src/schema/User.ts @@ -0,0 +1,43 @@ +export const UserUpdateSchema = { + id: String, + username: String, + discriminator: String, + avatar: String || null, + $phone: String, + desktop: Boolean, + mobile: Boolean, + premium: Boolean, + premium_type: Number, + bot: Boolean, + system: Boolean, + nsfw_allowed: Boolean, + mfa_enabled: Boolean, + created_at: Date, + verified: Boolean, + $email: String, + flags: BigInt, + public_flags: BigInt, + $guilds: [String], +}; + +export interface UserUpdateSchema { + id: string; + username: string; + discriminator: string; + avatar: string | null; + phone?: string; + desktop: boolean; + mobile: boolean; + premium: boolean; + premium_type: number; + bot: boolean; + system: boolean; + nsfw_allowed: boolean; + mfa_enabled: boolean; + created_at: Date; + verified: boolean; + email?: string; + flags: bigint; + public_flags: bigint; + guilds: string[]; +} -- cgit 1.5.1 From ca02ca690b33731e2f1f3ca496bbfcf2d7378ac4 Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 09:58:38 +0200 Subject: get /users/@me/channels --- src/routes/users/@me/channels.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/routes/users/@me/channels.ts (limited to 'src/routes') diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts new file mode 100644 index 00000000..8f2cb74d --- /dev/null +++ b/src/routes/users/@me/channels.ts @@ -0,0 +1,20 @@ +import { Router, Request, Response } from "express"; +import { ChannelModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util"; +import { HTTPError } from "lambert-server"; +import { emitEvent } from "../../../util/Event"; +import { getPublicUser } from "../../../util/User"; + +const router: Router = Router(); + +router.get("/", async (req: Request, res: Response) => { + const user = await UserModel.findOne({ id: req.user_id }, { guilds: true }).exec(); + if (!user) throw new HTTPError("User not found", 404); + + var testID = "829044530203328513"; //FOR TEST + + var channels = await ChannelModel.find({ recipients: req.user_id }).exec(); + + res.json(toObject(channels)); +}); + +export default router; \ No newline at end of file -- cgit 1.5.1 From 75461b9f6ed940d744c0036227b0f8ce943a26ca Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 10:21:40 +0200 Subject: POST /users/@me/channels --- src/routes/users/@me/channels.ts | 73 ++++++++++++++++++++++++++++++++++++---- src/schema/Channel.ts | 19 +++++++++++ 2 files changed, 85 insertions(+), 7 deletions(-) (limited to 'src/routes') diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts index 8f2cb74d..b5a53be7 100644 --- a/src/routes/users/@me/channels.ts +++ b/src/routes/users/@me/channels.ts @@ -1,20 +1,79 @@ -import { Router, Request, Response } from "express"; -import { ChannelModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util"; -import { HTTPError } from "lambert-server"; -import { emitEvent } from "../../../util/Event"; -import { getPublicUser } from "../../../util/User"; +import { + Router, + Request, + Response +} from "express"; +import { + ChannelModel, + ChannelCreateEvent, + DMChannel, + UserModel, + toObject, + ChannelType, + Snowflake +} from "@fosscord/server-util"; +import { + HTTPError +} from "lambert-server"; +import { + emitEvent +} from "../../../util/Event"; +import { + getPublicUser +} from "../../../util/User"; +import { + DmChannelCreateSchema +} from "../../../schema/Channel"; +import { + check +} from "../../../util/instanceOf"; const router: Router = Router(); router.get("/", async (req: Request, res: Response) => { - const user = await UserModel.findOne({ id: req.user_id }, { guilds: true }).exec(); + const user = await UserModel.findOne({ + id: req.user_id + }, { + guilds: true + }).exec(); if (!user) throw new HTTPError("User not found", 404); var testID = "829044530203328513"; //FOR TEST - var channels = await ChannelModel.find({ recipients: req.user_id }).exec(); + var channels = await ChannelModel.find({ + recipients: req.user_id, + type: 1 + }).exec(); res.json(toObject(channels)); }); +router.post("/", check(DmChannelCreateSchema), async (req, res) => { + const body = req.body as DmChannelCreateSchema; + switch (body.type) { + case ChannelType.GUILD_CATEGORY: + case ChannelType.GUILD_TEXT: + case ChannelType.GUILD_VOICE: + throw new HTTPError("You can't create a dm channel in a guild"); + // TODO: + case ChannelType.GUILD_STORE: + throw new HTTPError("Not yet supported"); + case ChannelType.GUILD_NEWS: + // TODO: check if guild is community server + } + + const channel = { + ...body, + owner_id: req.user_id, + id: Snowflake.generate(), + created_at: new Date(), + }; + await new ChannelModel(channel).save(); + + /*Event({ event: "CHANNEL_CREATE", data: channel } as ChannelCreateEvent);*/ + + + res.json(channel); +}); + export default router; \ No newline at end of file diff --git a/src/schema/Channel.ts b/src/schema/Channel.ts index 0fafc54d..3a22872a 100644 --- a/src/schema/Channel.ts +++ b/src/schema/Channel.ts @@ -1,3 +1,4 @@ +import { ChannelType } from "@fosscord/server-util"; import { Length } from "../util/instanceOf"; export const ChannelModifySchema = { @@ -20,6 +21,24 @@ export const ChannelModifySchema = { $nsfw: Boolean, }; +export const DmChannelCreateSchema = { + owner_id: String, + $id: String, + $created_at: Date, + name: String, + type: Number, + recipients: [String] +} + +export interface DmChannelCreateSchema { + owner_id: String; + id?: String; + created_at?: Date; + name: String; + type: Number; + recipients: String[]; +} + export interface ChannelModifySchema { name: string; type: number; -- cgit 1.5.1 From f41f2cb251132ff5d2915cf98a4411f1fb0d2942 Mon Sep 17 00:00:00 2001 From: Intevel ツ <59223342+Intevel@users.noreply.github.com> Date: Sat, 24 Apr 2021 10:28:25 +0200 Subject: Update channels.ts --- src/routes/users/@me/channels.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'src/routes') diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts index b5a53be7..45371b34 100644 --- a/src/routes/users/@me/channels.ts +++ b/src/routes/users/@me/channels.ts @@ -50,22 +50,12 @@ router.get("/", async (req: Request, res: Response) => { router.post("/", check(DmChannelCreateSchema), async (req, res) => { const body = req.body as DmChannelCreateSchema; - switch (body.type) { - case ChannelType.GUILD_CATEGORY: - case ChannelType.GUILD_TEXT: - case ChannelType.GUILD_VOICE: - throw new HTTPError("You can't create a dm channel in a guild"); - // TODO: - case ChannelType.GUILD_STORE: - throw new HTTPError("Not yet supported"); - case ChannelType.GUILD_NEWS: - // TODO: check if guild is community server - } const channel = { ...body, owner_id: req.user_id, id: Snowflake.generate(), + type: ChannelType.DM, created_at: new Date(), }; await new ChannelModel(channel).save(); -- cgit 1.5.1