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

View File

@ -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);

View File

@ -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;

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`);
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);
});

View File

@ -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,19 +30,21 @@ 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);
});

View File

@ -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;

View File

@ -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 {