diff --git a/api/src/routes/channels/#channel_id/index.ts b/api/src/routes/channels/#channel_id/index.ts
index 61c851e8..2fca4fdf 100644
--- a/api/src/routes/channels/#channel_id/index.ts
+++ b/api/src/routes/channels/#channel_id/index.ts
@@ -62,8 +62,8 @@ export interface ChannelModifySchema {
permission_overwrites?: {
id: string;
type: ChannelPermissionOverwriteType;
- allow: bigint;
- deny: bigint;
+ allow: string;
+ deny: string;
}[];
parent_id?: string;
id?: string; // is not used (only for guild create)
diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts
index fab20977..d3321fae 100644
--- a/api/src/routes/channels/#channel_id/messages/index.ts
+++ b/api/src/routes/channels/#channel_id/messages/index.ts
@@ -3,6 +3,7 @@ import {
Attachment,
Channel,
ChannelType,
+ Config,
DmChannelDTO,
Embed,
emitEvent,
@@ -15,6 +16,7 @@ import { HTTPError } from "lambert-server";
import { handleMessage, postHandleMessage, route } from "@fosscord/api";
import multer from "multer";
import { FindManyOptions, LessThan, MoreThan } from "typeorm";
+import { URL } from "url";
const router: Router = Router();
@@ -111,6 +113,9 @@ router.get("/", async (req: Request, res: Response) => {
});
// @ts-ignore
if (!x.author) x.author = { discriminator: "0000", username: "Deleted User", public_flags: "0", avatar: null };
+ x.attachments?.forEach((x) => {
+ x.proxy_url = `${Config.get().cdn.endpointPublic || "http://localhost:3003"}${new URL(x.proxy_url).pathname}`;
+ });
return x;
})
diff --git a/api/src/routes/channels/#channel_id/permissions.ts b/api/src/routes/channels/#channel_id/permissions.ts
index bc7ad5b8..6ebf721a 100644
--- a/api/src/routes/channels/#channel_id/permissions.ts
+++ b/api/src/routes/channels/#channel_id/permissions.ts
@@ -1,4 +1,13 @@
-import { Channel, ChannelPermissionOverwrite, ChannelUpdateEvent, emitEvent, getPermission, Member, Role } from "@fosscord/util";
+import {
+ Channel,
+ ChannelPermissionOverwrite,
+ ChannelPermissionOverwriteType,
+ ChannelUpdateEvent,
+ emitEvent,
+ getPermission,
+ Member,
+ Role
+} from "@fosscord/util";
import { Router, Response, Request } from "express";
import { HTTPError } from "lambert-server";
@@ -14,7 +23,7 @@ router.put(
route({ body: "ChannelPermissionOverwriteSchema", permission: "MANAGE_ROLES" }),
async (req: Request, res: Response) => {
const { channel_id, overwrite_id } = req.params;
- const body = req.body as { allow: bigint; deny: bigint; type: number; id: string };
+ const body = req.body as ChannelPermissionOverwriteSchema;
var channel = await Channel.findOneOrFail({ id: channel_id });
if (!channel.guild_id) throw new HTTPError("Channel not found", 404);
@@ -31,14 +40,12 @@ router.put(
// @ts-ignore
overwrite = {
id: overwrite_id,
- type: body.type,
- allow: body.allow,
- deny: body.deny
+ type: body.type
};
channel.permission_overwrites!.push(overwrite);
}
- overwrite.allow = body.allow;
- overwrite.deny = body.deny;
+ overwrite.allow = String(req.permission!.bitfield & (BigInt(body.allow) || 0n));
+ overwrite.deny = String(req.permission!.bitfield & (BigInt(body.deny) || 0n));
await Promise.all([
channel.save(),
diff --git a/api/src/routes/gateway.ts b/api/src/routes/gateway.ts
index 88d9dfda..4b3a0ea6 100644
--- a/api/src/routes/gateway.ts
+++ b/api/src/routes/gateway.ts
@@ -5,14 +5,14 @@ import { route } from "@fosscord/api";
const router = Router();
router.get("/", route({}), (req: Request, res: Response) => {
- const { endpoint } = Config.get().gateway;
- res.json({ url: endpoint || process.env.GATEWAY || "ws://localhost:3002" });
+ const { endpointPublic } = Config.get().gateway;
+ res.json({ url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002" });
});
router.get("/bot", route({}), (req: Request, res: Response) => {
- const { endpoint } = Config.get().gateway;
+ const { endpointPublic } = Config.get().gateway;
res.json({
- url: endpoint || process.env.GATEWAY || "ws://localhost:3002",
+ url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002",
shards: 1,
session_start_limit: {
total: 1000,
diff --git a/api/src/routes/guilds/index.ts b/api/src/routes/guilds/index.ts
index abde147d..6a325ae2 100644
--- a/api/src/routes/guilds/index.ts
+++ b/api/src/routes/guilds/index.ts
@@ -87,19 +87,21 @@ router.post("/", route({ body: "GuildCreateSchema" }), async (req: Request, res:
});
await Promise.all(
- body.channels?.map((x) => {
- var id = ids.get(x.id) || Snowflake.generate();
-
- // TODO: should we abort if parent_id is a category? (to disallow sub category channels)
- var parent_id = ids.get(x.parent_id);
-
- return Channel.createChannel({ ...x, guild_id, id, parent_id }, req.user_id, {
- keepId: true,
- skipExistsCheck: true,
- skipPermissionCheck: true,
- skipEventEmit: true
- });
- })
+ body.channels
+ ?.sort((a, b) => (a.parent_id ? -1 : 1))
+ .map((x) => {
+ var id = ids.get(x.id) || Snowflake.generate();
+
+ // TODO: should we abort if parent_id is a category? (to disallow sub category channels)
+ var parent_id = ids.get(x.parent_id);
+
+ return Channel.createChannel({ ...x, guild_id, id, parent_id }, req.user_id, {
+ keepId: true,
+ skipExistsCheck: true,
+ skipPermissionCheck: true,
+ skipEventEmit: true
+ });
+ })
);
await Member.addToGuild(req.user_id, guild_id);
|