summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/routes/channels/#channel_id/invites.ts35
-rw-r--r--src/routes/channels/#channel_id/messages/index.ts18
-rw-r--r--src/routes/guilds/#id/bans.ts6
-rw-r--r--src/routes/guilds/#id/channels.ts13
-rw-r--r--src/routes/guilds/#id/members.ts5
-rw-r--r--src/routes/users/@me/guilds.ts10
-rw-r--r--src/util/User.ts8
7 files changed, 52 insertions, 43 deletions
diff --git a/src/routes/channels/#channel_id/invites.ts b/src/routes/channels/#channel_id/invites.ts

index adfb0688..da802800 100644 --- a/src/routes/channels/#channel_id/invites.ts +++ b/src/routes/channels/#channel_id/invites.ts
@@ -7,21 +7,21 @@ import { emitEvent } from "../../../util/Event"; import { InviteCreateSchema } from "../../../schema/Invite"; -import { getPermission, ChannelModel, InviteModel, InviteCreateEvent } from "fosscord-server-util"; +import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject } from "fosscord-server-util"; const router: Router = Router(); router.post("/", check(InviteCreateSchema), async (req: Request, res: Response) => { - const usID = req.user_id; - const chID = req.params.channel_id; - const channel = await ChannelModel.findOne({ id: chID }).exec(); + const { user_id } = req; + const { channel_id } = req.params; + const channel = await ChannelModel.findOne({ id: channel_id }).exec(); if (!channel || !channel.guild_id) { throw new HTTPError("This channel doesn't exist", 404); } - const { guild_id: guID } = channel; + const { guild_id } = channel; - const permission = await getPermission(usID, guID); + 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); @@ -34,34 +34,35 @@ router.post("/", check(InviteCreateSchema), async (req: Request, res: Response) max_uses: req.body.max_uses, max_age: req.body.max_age, created_at: new Date(), - guild_id: guID, - channel_id: chID, - inviter_id: usID, + guild_id, + channel_id: channel_id, + inviter_id: user_id, }; await new InviteModel(invite).save(); - await emitEvent({ event: "INVITE_CREATE", data: invite } as InviteCreateEvent); + await emitEvent({ event: "INVITE_CREATE", data: invite, guild_id } as InviteCreateEvent); res.status(201).send(invite); }); router.get("/", async (req: Request, res: Response) => { - const usID = req.user_id; - const chID = req.params.channel_id; - const channel = await ChannelModel.findOne({ id: chID }).exec(); + const { user_id } = req; + const { channel_id } = req.params; + const channel = await ChannelModel.findOne({ id: channel_id }).exec(); if (!channel || !channel.guild_id) { throw new HTTPError("This channel doesn't exist", 404); } - const { guild_id: guID } = channel; - const permission = await getPermission(usID, guID); + 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); } - const invites = await InviteModel.find({ guild_id: guID }).lean().exec(); - res.status(200).send(invites); + const invites = await InviteModel.find({ guild_id }).exec(); + + res.status(200).send(toObject(invites)); }); export default router; diff --git a/src/routes/channels/#channel_id/messages/index.ts b/src/routes/channels/#channel_id/messages/index.ts
index 7b4b3ec0..cba1d7f0 100644 --- a/src/routes/channels/#channel_id/messages/index.ts +++ b/src/routes/channels/#channel_id/messages/index.ts
@@ -1,11 +1,22 @@ import { Router } from "express"; -import { ChannelModel, ChannelType, getPermission, Message, MessageCreateEvent, MessageModel, Snowflake } from "fosscord-server-util"; +import { + ChannelModel, + ChannelType, + getPermission, + Message, + MessageCreateEvent, + MessageDocument, + MessageModel, + Snowflake, + toObject, +} from "fosscord-server-util"; import { HTTPError } from "lambert-server"; import { MessageCreateSchema } from "../../../../schema/Message"; import { check, instanceOf, Length } from "../../../../util/instanceOf"; import { PublicUserProjection } from "../../../../util/User"; import multer from "multer"; import { emitEvent } from "../../../../util/Event"; +import { Query } from "mongoose"; const router: Router = Router(); export default router; @@ -57,7 +68,7 @@ router.get("/", async (req, res) => { if (!channel.recipients.includes(req.user_id)) throw new HTTPError("You don't have permission to view this channel", 401); } - var query: any; + var query: Query<MessageDocument[], MessageDocument, {}>; if (after) query = MessageModel.find({ channel_id, id: { $gt: after } }); else if (before) query = MessageModel.find({ channel_id, id: { $lt: before } }); else if (around) @@ -76,10 +87,9 @@ router.get("/", async (req, res) => { .populate({ path: "mention_channels", select: { id: true, guild_id: true, type: true, name: true } }) .populate("mention_roles") // .populate({ path: "member", select: PublicMemberProjection }) - .lean() .exec(); - return res.json(messages); + return res.json(toObject(messages)); }); // TODO: config max upload size diff --git a/src/routes/guilds/#id/bans.ts b/src/routes/guilds/#id/bans.ts
index e66ae3d4..5ac92154 100644 --- a/src/routes/guilds/#id/bans.ts +++ b/src/routes/guilds/#id/bans.ts
@@ -1,5 +1,5 @@ import { Request, Response, Router } from "express"; -import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel } 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"; @@ -16,8 +16,8 @@ router.get("/", async (req: Request, res: Response) => { const guild = await GuildModel.findOne({ id: guild_id }).exec(); if (!guild) throw new HTTPError("Guild not found", 404); - var bans = await BanModel.find({ guild_id: guild_id }).lean().exec(); - return res.json(bans); + var bans = await BanModel.find({ guild_id: guild_id }).exec(); + return res.json(toObject(bans)); }); router.get("/:user", async (req: Request, res: Response) => { diff --git a/src/routes/guilds/#id/channels.ts b/src/routes/guilds/#id/channels.ts
index cd03fdbb..b949def0 100644 --- a/src/routes/guilds/#id/channels.ts +++ b/src/routes/guilds/#id/channels.ts
@@ -1,19 +1,20 @@ import { Router } from "express"; -import { ChannelModel, ChannelType, GuildModel, Snowflake } 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"; import { check } from "../../../util/instanceOf"; const router = Router(); router.get("/", async (req, res) => { - const guild_id = (req.params.id); - const channels = await ChannelModel.find({ guild_id }).lean().exec(); + const guild_id = req.params.id; + const channels = await ChannelModel.find({ guild_id }).exec(); - res.json(channels); + res.json(toObject(channels)); }); router.post("/", check(ChannelModifySchema), async (req, res) => { - const guild_id = (req.params.id); + const guild_id = req.params.id; const body = req.body as ChannelModifySchema; if (!body.permission_overwrites) body.permission_overwrites = []; if (!body.topic) body.topic = ""; @@ -45,6 +46,8 @@ router.post("/", check(ChannelModifySchema), async (req, res) => { }; await new ChannelModel(channel).save(); + await emitEvent({ event: "CHANNEL_CREATE", data: channel, guild_id } as ChannelCreateEvent); + res.json(channel); }); diff --git a/src/routes/guilds/#id/members.ts b/src/routes/guilds/#id/members.ts
index f95bd313..1c3cb33d 100644 --- a/src/routes/guilds/#id/members.ts +++ b/src/routes/guilds/#id/members.ts
@@ -1,5 +1,5 @@ import { Request, Response, Router } from "express"; -import { GuildModel, MemberModel } 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"; @@ -32,10 +32,9 @@ router.get("/", async (req: Request, res: Response) => { var members = await MemberModel.find({ guild_id, ...query }, PublicMemberProjection) .limit(limit) .populate({ path: "user", select: PublicUserProjection }) - .lean() .exec(); - return res.json(members); + return res.json(toObject(members)); }); router.get("/:member", async (req: Request, res: Response) => { diff --git a/src/routes/users/@me/guilds.ts b/src/routes/users/@me/guilds.ts
index 6b9243ac..e04107ac 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 } 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"; @@ -11,15 +11,13 @@ router.get("/", async (req: Request, res: Response) => { if (!user) throw new HTTPError("User not found", 404); var guildIDs = user.guilds || []; - var guild = await GuildModel.find({ id: { $in: guildIDs } }) - .lean() - .exec(); - res.json(guild); + var guild = await GuildModel.find({ id: { $in: guildIDs } }).exec(); + res.json(toObject(guild)); }); // user send to leave a certain guild router.delete("/:id", async (req: Request, res: Response) => { - const guildID = (req.params.id); + const guildID = req.params.id; const guild = await GuildModel.findOne({ id: guildID }).exec(); if (!guild) throw new HTTPError("Guild doesn't exist", 404); diff --git a/src/util/User.ts b/src/util/User.ts
index 70098bb5..05213642 100644 --- a/src/util/User.ts +++ b/src/util/User.ts
@@ -1,4 +1,4 @@ -import { UserModel } from "fosscord-server-util"; +import { toObject, UserModel } from "fosscord-server-util"; import { HTTPError } from "lambert-server"; export const PublicUserProjection = { @@ -16,9 +16,7 @@ export async function getPublicUser(user_id: string, additional_fields?: any) { ...PublicUserProjection, ...additional_fields, } - ) - .lean() - .exec(); + ).exec(); if (!user) throw new HTTPError("User not found", 404); - return user; + return toObject(user); }