summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/routes/auth/login.ts15
-rw-r--r--src/routes/channels/#channel_id/messages/#message_id/index.ts29
-rw-r--r--src/routes/channels/#channel_id/messages/bulk-delete.ts3
-rw-r--r--src/routes/users/@me/channels.ts54
-rw-r--r--src/routes/users/@me/guilds.ts2
-rw-r--r--src/schema/Channel.ts18
6 files changed, 58 insertions, 63 deletions
diff --git a/src/routes/auth/login.ts b/src/routes/auth/login.ts

index 247ee018..5c43db1b 100644 --- a/src/routes/auth/login.ts +++ b/src/routes/auth/login.ts
@@ -25,25 +25,16 @@ router.post( const query: any[] = [{ phone: login }]; if (email) query.push({ email }); - const user = await UserModel.findOne( - { - $or: query, - }, - `user_data.hash id user_settings.locale user_settings.theme` - ).exec(); + const user = await UserModel.findOne({ $or: query }, `user_data.hash id user_settings.locale user_settings.theme`).exec(); if (!user) { - throw FieldErrors({ - login: { message: req.t("auth:login.INVALID_LOGIN"), code: "INVALID_LOGIN" }, - }); + throw FieldErrors({ login: { message: req.t("auth:login.INVALID_LOGIN"), code: "INVALID_LOGIN" } }); } // the salt is saved in the password refer to bcrypt docs const same_password = await bcrypt.compare(password, user.user_data.hash); if (!same_password) { - throw FieldErrors({ - password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" }, - }); + throw FieldErrors({ password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" } }); } const token = await generateToken(user.id); 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 014daee7..19efc823 100644 --- a/src/routes/channels/#channel_id/messages/#message_id/index.ts +++ b/src/routes/channels/#channel_id/messages/#message_id/index.ts
@@ -1,6 +1,35 @@ +import { ChannelModel, getPermission, MessageDeleteEvent, MessageModel } from "@fosscord/server-util"; import { Router } from "express"; +import { HTTPError } from "lambert-server"; +import { emitEvent } from "../../../../../util/Event"; +import { check } from "../../../../../util/instanceOf"; const router = Router(); // TODO: +router.delete("/", async (req, res) => { + const { message_id, channel_id } = req.params; + + const channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true }); + if (!channel) throw new HTTPError("Channel doesn't exist", 404); + + const permission = await getPermission(req.user_id, channel.guild_id, channel_id); + permission.hasThrow("MANAGE_MESSAGES"); + + await MessageModel.deleteOne({ id: message_id }).exec(); + + await emitEvent({ + event: "MESSAGE_DELETE", + channel_id, + guild_id: channel.guild_id, + data: { + id: message_id, + channel_id, + guild_id: channel.guild_id, + }, + } as MessageDeleteEvent); + + res.sendStatus(204); +}); + 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 ff1324d7..6ac4d8de 100644 --- a/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/src/routes/channels/#channel_id/messages/bulk-delete.ts
@@ -27,11 +27,12 @@ router.post("/", check({ messages: [String] }), async (req, res) => { if (messages.length > maxBulkDelete) throw new HTTPError(`You cannot delete more than ${maxBulkDelete} messages`); await MessageModel.deleteMany({ id: { $in: messages } }).exec(); + await emitEvent({ event: "MESSAGE_DELETE_BULK", channel_id, data: { ids: messages, channel_id, guild_id: channel.guild_id }, } as MessageDeleteBulkEvent); - res.status(204).send(); + res.sendStatus(204); }); diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts
index 45371b34..3b2b6781 100644 --- a/src/routes/users/@me/channels.ts +++ b/src/routes/users/@me/channels.ts
@@ -1,8 +1,4 @@ -import { - Router, - Request, - Response -} from "express"; +import { Router, Request, Response } from "express"; import { ChannelModel, ChannelCreateEvent, @@ -10,39 +6,23 @@ import { UserModel, toObject, ChannelType, - Snowflake + Snowflake, + trimSpecial, } 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"; +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(); - if (!user) throw new HTTPError("User not found", 404); - - var testID = "829044530203328513"; //FOR TEST - var channels = await ChannelModel.find({ - recipients: req.user_id, - type: 1 + $or: [ + { recipients: req.user_id, type: ChannelType.DM }, + { recipients: req.user_id, type: ChannelType.GROUP_DM }, + ], }).exec(); res.json(toObject(channels)); @@ -50,20 +30,22 @@ router.get("/", async (req: Request, res: Response) => { router.post("/", check(DmChannelCreateSchema), async (req, res) => { const body = req.body as DmChannelCreateSchema; + if (body.recipients.length === 0) throw new HTTPError("You need to specify at least one recipient"); + const type = body.recipients.length === 1 ? ChannelType.DM : ChannelType.GROUP_DM; + const name = trimSpecial(body.name); const channel = { - ...body, + name, + type, owner_id: req.user_id, id: Snowflake.generate(), - type: ChannelType.DM, 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 +export default router; diff --git a/src/routes/users/@me/guilds.ts b/src/routes/users/@me/guilds.ts
index 5042c17c..6528552b 100644 --- a/src/routes/users/@me/guilds.ts +++ b/src/routes/users/@me/guilds.ts
@@ -49,7 +49,7 @@ router.delete("/:id", async (req: Request, res: Response) => { guild_id: guild_id, } as GuildMemberRemoveEvent); - return res.status(204).send(); + return res.sendStatus(204); }); export default router; diff --git a/src/schema/Channel.ts b/src/schema/Channel.ts
index 3a22872a..70e305e4 100644 --- a/src/schema/Channel.ts +++ b/src/schema/Channel.ts
@@ -22,21 +22,13 @@ export const ChannelModifySchema = { }; export const DmChannelCreateSchema = { - owner_id: String, - $id: String, - $created_at: Date, - name: String, - type: Number, - recipients: [String] -} + $name: String, + recipients: [String], +}; export interface DmChannelCreateSchema { - owner_id: String; - id?: String; - created_at?: Date; - name: String; - type: Number; - recipients: String[]; + name?: string; + recipients: string[]; } export interface ChannelModifySchema {