diff options
-rw-r--r-- | api/package-lock.json | 8 | ||||
-rw-r--r-- | api/src/routes/channels/#channel_id/invites.ts | 7 | ||||
-rw-r--r-- | api/src/routes/channels/#channel_id/messages/index.ts | 5 | ||||
-rw-r--r-- | api/src/routes/guilds/#guild_id/invites.ts | 4 | ||||
-rw-r--r-- | api/src/routes/guilds/#guild_id/members/#member_id/index.ts | 15 | ||||
-rw-r--r-- | api/src/routes/invites/index.ts | 4 | ||||
-rw-r--r-- | cdn/package-lock.json | 8 | ||||
-rw-r--r-- | gateway/package-lock.json | 8 | ||||
-rw-r--r-- | gateway/src/opcodes/Identify.ts | 15 | ||||
-rw-r--r-- | util/src/entities/Guild.ts | 10 | ||||
-rw-r--r-- | util/src/entities/Invite.ts | 2 | ||||
-rw-r--r-- | util/src/entities/Member.ts | 1 | ||||
-rw-r--r-- | util/src/util/Permissions.ts | 7 | ||||
-rw-r--r-- | webrtc/package-lock.json | 8 |
14 files changed, 59 insertions, 43 deletions
diff --git a/api/package-lock.json b/api/package-lock.json index da41d26d..7b1e000b 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -7569,7 +7569,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -7619,7 +7619,7 @@ }, "node_modules/mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", "engines": { "node": ">=4.0.0" @@ -18668,7 +18668,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -18704,7 +18704,7 @@ }, "mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" }, "mquery": { diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index fcc8a1ad..fe22d3bc 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -1,12 +1,9 @@ import { Router, Request, Response } from "express"; import { HTTPError } from "lambert-server"; - import { check } from "../../../util/instanceOf"; import { random } from "../../../util/RandomInviteID"; - import { InviteCreateSchema } from "../../../schema/Invite"; - -import { getPermission, Channel, Invite, InviteCreateEvent, emitEvent, User, Guild } from "@fosscord/util"; +import { getPermission, Channel, Invite, InviteCreateEvent, emitEvent, User, Guild, PublicInviteRelation } from "@fosscord/util"; import { isTextChannel } from "./messages"; const router: Router = Router(); @@ -74,7 +71,7 @@ router.get("/", async (req: Request, res: Response) => { const permission = await getPermission(user_id, guild_id); permission.hasThrow("MANAGE_CHANNELS"); - const invites = await Invite.find({ guild_id }); + const invites = await Invite.find({ where: { guild_id }, relations: PublicInviteRelation }); res.status(200).send(invites); }); diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts index 86de6de8..1a3150cf 100644 --- a/api/src/routes/channels/#channel_id/messages/index.ts +++ b/api/src/routes/channels/#channel_id/messages/index.ts @@ -15,13 +15,13 @@ export default router; export function isTextChannel(type: ChannelType): boolean { switch (type) { + case ChannelType.GUILD_STORE: case ChannelType.GUILD_VOICE: case ChannelType.GUILD_CATEGORY: throw new HTTPError("not a text channel", 400); case ChannelType.DM: case ChannelType.GROUP_DM: case ChannelType.GUILD_NEWS: - case ChannelType.GUILD_STORE: case ChannelType.GUILD_TEXT: return true; } @@ -48,8 +48,7 @@ router.get("/", async (req: Request, res: Response) => { if (!limit) limit = 50; var halfLimit = Math.floor(limit / 2); - // @ts-ignore - const permissions = await getPermission(req.user_id, channel.guild_id, channel_id, { channel }); + const permissions = await getPermission(req.user_id, channel.guild_id, channel_id); permissions.hasThrow("VIEW_CHANNEL"); if (!permissions.has("READ_MESSAGE_HISTORY")) return res.json([]); diff --git a/api/src/routes/guilds/#guild_id/invites.ts b/api/src/routes/guilds/#guild_id/invites.ts index 1843b689..39a934ee 100644 --- a/api/src/routes/guilds/#guild_id/invites.ts +++ b/api/src/routes/guilds/#guild_id/invites.ts @@ -1,4 +1,4 @@ -import { getPermission, Invite } from "@fosscord/util"; +import { getPermission, Invite, PublicInviteRelation } from "@fosscord/util"; import { Request, Response, Router } from "express"; const router = Router(); @@ -9,7 +9,7 @@ router.get("/", async (req: Request, res: Response) => { const permissions = await getPermission(req.user_id, guild_id); permissions.hasThrow("MANAGE_GUILD"); - const invites = await Invite.find({ guild_id }); + const invites = await Invite.find({ where: { guild_id }, relations: PublicInviteRelation }); return res.json(invites); }); diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts index 7e79caad..0d62e555 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts @@ -38,14 +38,13 @@ router.patch("/", check(MemberChangeSchema), async (req: Request, res: Response) member.roles = body.roles.map((x) => new Role({ id: x })); // foreign key constraint will fail if role doesn't exist } - Promise.all([ - member.save(), - emitEvent({ - event: "GUILD_MEMBER_UPDATE", - guild_id, - data: { ...member, roles: member.roles.map((x) => x.id) } - } as GuildMemberUpdateEvent) - ]); + await member.save(); + // do not use promise.all as we have to first write to db before emitting the event + await emitEvent({ + event: "GUILD_MEMBER_UPDATE", + guild_id, + data: { ...member, roles: member.roles.map((x) => x.id) } + } as GuildMemberUpdateEvent); res.json(member); }); diff --git a/api/src/routes/invites/index.ts b/api/src/routes/invites/index.ts index 23fa3aec..b8c24c1f 100644 --- a/api/src/routes/invites/index.ts +++ b/api/src/routes/invites/index.ts @@ -1,12 +1,12 @@ import { Router, Request, Response } from "express"; -import { getPermission, Guild, Invite, Member } from "@fosscord/util"; +import { getPermission, Guild, Invite, Member, PublicInviteRelation } from "@fosscord/util"; import { HTTPError } from "lambert-server"; const router: Router = Router(); router.get("/:code", async (req: Request, res: Response) => { const { code } = req.params; - const invite = await Invite.findOneOrFail({ code }); + const invite = await Invite.findOneOrFail({ where: { code }, relations: PublicInviteRelation }); res.status(200).send(invite); }); diff --git a/cdn/package-lock.json b/cdn/package-lock.json index ec638f86..541ee77c 100644 --- a/cdn/package-lock.json +++ b/cdn/package-lock.json @@ -4040,7 +4040,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -4099,7 +4099,7 @@ }, "node_modules/mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", "engines": { "node": ">=4.0.0" @@ -8596,7 +8596,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -8631,7 +8631,7 @@ }, "mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" }, "mquery": { diff --git a/gateway/package-lock.json b/gateway/package-lock.json index fc5d3bf2..340f595d 100644 --- a/gateway/package-lock.json +++ b/gateway/package-lock.json @@ -1210,7 +1210,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -1253,7 +1253,7 @@ }, "node_modules/mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", "peer": true, "engines": { @@ -2893,7 +2893,7 @@ "kareem": "2.3.2", "mongodb": "3.6.11", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -2926,7 +2926,7 @@ }, "mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", "peer": true }, diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index cd09653f..adfd98da 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -12,6 +12,8 @@ import { EVENTEnum, Config, dbConnection, + PublicMemberProjection, + PublicMember, } from "@fosscord/util"; import { setupListener } from "../listener/listener"; import { IdentifySchema } from "../schema/Identify"; @@ -68,9 +70,16 @@ export async function onIdentify(this: WebSocket, data: Payload) { "roles", ], }); - const merged_members = members.map((x: any) => { - return [x]; - }) as Member[][]; + const merged_members = members.map((x: Member) => { + return [ + { + ...x, + roles: x.roles.map((x) => x.id), + settings: undefined, + guild: undefined, + }, + ]; + }) as PublicMember[][]; const guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); const user_guild_settings_entries = members.map((x) => x.settings); diff --git a/util/src/entities/Guild.ts b/util/src/entities/Guild.ts index 14bf1637..029a1b0b 100644 --- a/util/src/entities/Guild.ts +++ b/util/src/entities/Guild.ts @@ -53,7 +53,15 @@ import { Webhook } from "./Webhook"; // "Gacha" // ], -export const PublicGuildRelations = ["channels", "emojis", "members", "roles", "stickers", "voice_states"]; +export const PublicGuildRelations = [ + "channels", + "emojis", + "members", + "roles", + "stickers", + "voice_states", + "members.user", +]; @Entity("guilds") export class Guild extends BaseClass { diff --git a/util/src/entities/Invite.ts b/util/src/entities/Invite.ts index 01e22294..afad9c02 100644 --- a/util/src/entities/Invite.ts +++ b/util/src/entities/Invite.ts @@ -4,6 +4,8 @@ import { Channel } from "./Channel"; import { Guild } from "./Guild"; import { User } from "./User"; +export const PublicInviteRelation = ["inviter", "guild", "channel"]; + @Entity("invites") export class Invite extends BaseClass { @PrimaryColumn() diff --git a/util/src/entities/Member.ts b/util/src/entities/Member.ts index 8f391af3..66f5d9a1 100644 --- a/util/src/entities/Member.ts +++ b/util/src/entities/Member.ts @@ -24,7 +24,6 @@ import { } from "../interfaces"; import { HTTPError } from "lambert-server"; import { Role } from "./Role"; -import { Snowflake } from "../util/Snowflake"; import { BaseClassWithoutId } from "./BaseClass"; import { Ban, PublicGuildRelations } from "."; import { DiscordApiErrors } from "../util/Constants"; diff --git a/util/src/util/Permissions.ts b/util/src/util/Permissions.ts index 94fb3b51..ab8dd9b1 100644 --- a/util/src/util/Permissions.ts +++ b/util/src/util/Permissions.ts @@ -254,7 +254,7 @@ export async function getPermission( if (guild.owner_id === user_id) return new Permissions(Permissions.FLAGS.ADMINISTRATOR); member = await Member.findOneOrFail({ - where: { guild_id, user_id }, + where: { guild_id, id: user_id }, relations: ["roles", ...(opts.member_relations || [])], select: [ "id", @@ -265,6 +265,9 @@ export async function getPermission( }); } + let recipient_ids: any = channel?.recipients?.map((x) => x.id); + if (!recipient_ids?.length) recipient_ids = null; + // TODO: remove guild.roles and convert recipient_ids to recipients var permission = Permissions.finalPermission({ user: { @@ -277,7 +280,7 @@ export async function getPermission( channel: { overwrites: channel?.permission_overwrites, owner_id: channel?.owner_id, - recipient_ids: channel?.recipients?.map((x) => x.id), + recipient_ids, }, }); diff --git a/webrtc/package-lock.json b/webrtc/package-lock.json index bcc22d24..8419f0a9 100644 --- a/webrtc/package-lock.json +++ b/webrtc/package-lock.json @@ -647,7 +647,7 @@ "kareem": "2.3.2", "mongodb": "3.6.8", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "regexp-clone": "1.0.0", @@ -724,7 +724,7 @@ }, "node_modules/mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", "engines": { "node": ">=4.0.0" @@ -1515,7 +1515,7 @@ "kareem": "2.3.2", "mongodb": "3.6.8", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "regexp-clone": "1.0.0", @@ -1558,7 +1558,7 @@ }, "mpath": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" }, "mquery": { |