1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-09-21 18:21:36 +02:00
This commit is contained in:
Your Name 2021-04-26 03:06:23 +05:30
commit c041961243
8 changed files with 1062 additions and 72 deletions

1007
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,8 @@
"start": "npm run build:util && npm run build && node dist/start", "start": "npm run build:util && npm run build && node dist/start",
"build": "tsc -b .", "build": "tsc -b .",
"build:util": "tsc -b ./node_modules/@fosscord/server-util/", "build:util": "tsc -b ./node_modules/@fosscord/server-util/",
"postinstall": "patch-package" "postinstall": "patch-package",
"dev": "tsnd --respawn src/"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -41,7 +42,7 @@
"i18next-http-middleware": "^3.1.0", "i18next-http-middleware": "^3.1.0",
"i18next-node-fs-backend": "^2.1.3", "i18next-node-fs-backend": "^2.1.3",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"lambert-server": "^1.0.10", "lambert-server": "^1.1.9",
"missing-native-js-functions": "^1.2.6", "missing-native-js-functions": "^1.2.6",
"mongodb": "^3.6.4", "mongodb": "^3.6.4",
"mongoose": "^5.12.3", "mongoose": "^5.12.3",
@ -63,6 +64,7 @@
"jest": "^26.6.3", "jest": "^26.6.3",
"node-fetch": "^2.6.1", "node-fetch": "^2.6.1",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"ts-node-dev": "^1.1.6",
"typescript": "^4.1.2" "typescript": "^4.1.2"
} }
} }

View File

@ -25,25 +25,16 @@ router.post(
const query: any[] = [{ phone: login }]; const query: any[] = [{ phone: login }];
if (email) query.push({ email }); if (email) query.push({ email });
const user = await UserModel.findOne( const user = await UserModel.findOne({ $or: query }, `user_data.hash id user_settings.locale user_settings.theme`).exec();
{
$or: query,
},
`user_data.hash id user_settings.locale user_settings.theme`
).exec();
if (!user) { if (!user) {
throw FieldErrors({ throw FieldErrors({ login: { message: req.t("auth:login.INVALID_LOGIN"), code: "INVALID_LOGIN" } });
login: { message: req.t("auth:login.INVALID_LOGIN"), code: "INVALID_LOGIN" },
});
} }
// the salt is saved in the password refer to bcrypt docs // the salt is saved in the password refer to bcrypt docs
const same_password = await bcrypt.compare(password, user.user_data.hash); const same_password = await bcrypt.compare(password, user.user_data.hash);
if (!same_password) { if (!same_password) {
throw FieldErrors({ throw FieldErrors({ password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" } });
password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" },
});
} }
const token = await generateToken(user.id); const token = await generateToken(user.id);

View File

@ -1,6 +1,35 @@
import { ChannelModel, getPermission, MessageDeleteEvent, MessageModel } from "@fosscord/server-util";
import { Router } from "express"; import { Router } from "express";
import { HTTPError } from "lambert-server";
import { emitEvent } from "../../../../../util/Event";
import { check } from "../../../../../util/instanceOf";
const router = Router(); const router = Router();
// TODO: // 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; export default router;

View File

@ -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`); if (messages.length > maxBulkDelete) throw new HTTPError(`You cannot delete more than ${maxBulkDelete} messages`);
await MessageModel.deleteMany({ id: { $in: messages } }).exec(); await MessageModel.deleteMany({ id: { $in: messages } }).exec();
await emitEvent({ await emitEvent({
event: "MESSAGE_DELETE_BULK", event: "MESSAGE_DELETE_BULK",
channel_id, channel_id,
data: { ids: messages, channel_id, guild_id: channel.guild_id }, data: { ids: messages, channel_id, guild_id: channel.guild_id },
} as MessageDeleteBulkEvent); } as MessageDeleteBulkEvent);
res.status(204).send(); res.sendStatus(204);
}); });

View File

@ -1,8 +1,4 @@
import { import { Router, Request, Response } from "express";
Router,
Request,
Response
} from "express";
import { import {
ChannelModel, ChannelModel,
ChannelCreateEvent, ChannelCreateEvent,
@ -10,39 +6,23 @@ import {
UserModel, UserModel,
toObject, toObject,
ChannelType, ChannelType,
Snowflake Snowflake,
trimSpecial,
} from "@fosscord/server-util"; } from "@fosscord/server-util";
import { import { HTTPError } from "lambert-server";
HTTPError import { emitEvent } from "../../../util/Event";
} from "lambert-server"; import { getPublicUser } from "../../../util/User";
import { import { DmChannelCreateSchema } from "../../../schema/Channel";
emitEvent import { check } from "../../../util/instanceOf";
} from "../../../util/Event";
import {
getPublicUser
} from "../../../util/User";
import {
DmChannelCreateSchema
} from "../../../schema/Channel";
import {
check
} from "../../../util/instanceOf";
const router: Router = Router(); const router: Router = Router();
router.get("/", async (req: Request, res: Response) => { 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({ var channels = await ChannelModel.find({
recipients: req.user_id, $or: [
type: 1 { recipients: req.user_id, type: ChannelType.DM },
{ recipients: req.user_id, type: ChannelType.GROUP_DM },
],
}).exec(); }).exec();
res.json(toObject(channels)); res.json(toObject(channels));
@ -50,20 +30,22 @@ router.get("/", async (req: Request, res: Response) => {
router.post("/", check(DmChannelCreateSchema), async (req, res) => { router.post("/", check(DmChannelCreateSchema), async (req, res) => {
const body = req.body as DmChannelCreateSchema; 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 = { const channel = {
...body, name,
type,
owner_id: req.user_id, owner_id: req.user_id,
id: Snowflake.generate(), id: Snowflake.generate(),
type: ChannelType.DM,
created_at: new Date(), created_at: new Date(),
}; };
await new ChannelModel(channel).save(); await new ChannelModel(channel).save();
/*Event({ event: "CHANNEL_CREATE", data: channel } as ChannelCreateEvent);*/ /*Event({ event: "CHANNEL_CREATE", data: channel } as ChannelCreateEvent);*/
res.json(channel); res.json(channel);
}); });
export default router; export default router;

View File

@ -49,7 +49,7 @@ router.delete("/:id", async (req: Request, res: Response) => {
guild_id: guild_id, guild_id: guild_id,
} as GuildMemberRemoveEvent); } as GuildMemberRemoveEvent);
return res.status(204).send(); return res.sendStatus(204);
}); });
export default router; export default router;

View File

@ -22,21 +22,13 @@ export const ChannelModifySchema = {
}; };
export const DmChannelCreateSchema = { export const DmChannelCreateSchema = {
owner_id: String, $name: String,
$id: String, recipients: [String],
$created_at: Date, };
name: String,
type: Number,
recipients: [String]
}
export interface DmChannelCreateSchema { export interface DmChannelCreateSchema {
owner_id: String; name?: string;
id?: String; recipients: string[];
created_at?: Date;
name: String;
type: Number;
recipients: String[];
} }
export interface ChannelModifySchema { export interface ChannelModifySchema {