diff options
author | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2022-07-13 17:58:48 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-13 17:58:48 +1000 |
commit | 5e2c5fc9b72bb6f86e2f49483e324248386ff648 (patch) | |
tree | da3ee2cadfc172f16b2a0fa83cdc3ab6c2bd8b43 | |
parent | Check if email required in PATCH @me (diff) | |
parent | Relax some of the limits (diff) | |
download | server-5e2c5fc9b72bb6f86e2f49483e324248386ff648.tar.xz |
Merge branch 'master' into fix/claim_accounts
-rw-r--r-- | api/assets/schemas.json | 6 | ||||
-rw-r--r-- | api/scripts/generate_schema.js | 22 | ||||
-rw-r--r-- | api/src/routes/channels/#channel_id/messages/index.ts | 23 | ||||
-rw-r--r-- | api/src/util/handlers/Message.ts | 9 | ||||
-rw-r--r-- | util/src/entities/Config.ts | 37 |
5 files changed, 64 insertions, 33 deletions
diff --git a/api/assets/schemas.json b/api/assets/schemas.json index 03c240a0..f474fee6 100644 --- a/api/assets/schemas.json +++ b/api/assets/schemas.json @@ -2,12 +2,18 @@ "MessageCreateSchema": { "type": "object", "properties": { + "type": { + "type": "integer" + }, "content": { "type": "string" }, "nonce": { "type": "string" }, + "channel_id": { + "type": "string" + }, "tts": { "type": "boolean" }, diff --git a/api/scripts/generate_schema.js b/api/scripts/generate_schema.js index 7e742ec1..b56c3fbc 100644 --- a/api/scripts/generate_schema.js +++ b/api/scripts/generate_schema.js @@ -27,7 +27,16 @@ const Excluded = [ "Response", "e.Response", "request.Response", - "supertest.Response" + "supertest.Response", + + // TODO: Figure out how to exclude schemas from node_modules? + "SomeJSONSchema", + "UncheckedPartialSchema", + "PartialSchema", + "UncheckedPropertiesSchema", + "PropertiesSchema", + "AsyncSchema", + "AnySchema", ]; function modify(obj) { @@ -39,11 +48,18 @@ function modify(obj) { } function main() { - const program = TJS.getProgramFromFiles(walk(path.join(__dirname, "..", "src", "routes")), compilerOptions); + const files = [ + ...walk(path.join(__dirname, "..", "src", "routes")), + ...walk(path.join(__dirname, "..", "..", "util", "src")), + ]; + const program = TJS.getProgramFromFiles( + files, + compilerOptions + ); const generator = TJS.buildGenerator(program, settings); if (!generator || !program) return; - const schemas = generator.getUserSymbols().filter((x) => (x.endsWith("Schema") || x.endsWith("Response")) && !Excluded.includes(x)); + let schemas = generator.getUserSymbols().filter((x) => (x.endsWith("Schema") || x.endsWith("Response")) && !Excluded.includes(x)); console.log(schemas); var definitions = {}; diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts index 2d6a2977..54e6edcc 100644 --- a/api/src/routes/channels/#channel_id/messages/index.ts +++ b/api/src/routes/channels/#channel_id/messages/index.ts @@ -50,8 +50,10 @@ export function isTextChannel(type: ChannelType): boolean { } export interface MessageCreateSchema { + type?: number; content?: string; nonce?: string; + channel_id?: string; tts?: boolean; flags?: string; embeds?: Embed[]; @@ -161,7 +163,7 @@ const messageUpload = multer({ limits: { fileSize: 1024 * 1024 * 100, fields: 10, - files: 1 + // files: 1 }, storage: multer.memoryStorage() }); // max upload 50 mb @@ -176,7 +178,7 @@ const messageUpload = multer({ // Send message router.post( "/", - messageUpload.single("file"), + messageUpload.any(), async (req, res, next) => { if (req.body.payload_json) { req.body = JSON.parse(req.body.payload_json); @@ -190,18 +192,21 @@ router.post( var body = req.body as MessageCreateSchema; const attachments: Attachment[] = []; - if (req.file) { + const channel = await Channel.findOneOrFail({ where: { id: channel_id }, relations: ["recipients", "recipients.user"] }); + if (!channel.isWritable()) { + throw new HTTPError(`Cannot send messages to channel of type ${channel.type}`, 400) + } + + const files = req.files as Express.Multer.File[] ?? []; + for (var currFile of files) { try { - const file = await uploadFile(`/attachments/${req.params.channel_id}`, req.file); + const file = await uploadFile(`/attachments/${channel.id}`, currFile); attachments.push({ ...file, proxy_url: file.url }); - } catch (error) { + } + catch (error) { return res.status(400).json(error); } } - const channel = await Channel.findOneOrFail({ where: { id: channel_id }, relations: ["recipients", "recipients.user"] }); - if (!channel.isWritable()) { - throw new HTTPError(`Cannot send messages to channel of type ${channel.type}`, 400) - } const embeds = body.embeds || []; if (body.embed) embeds.push(body.embed); diff --git a/api/src/util/handlers/Message.ts b/api/src/util/handlers/Message.ts index e9f0ac55..48f87dfe 100644 --- a/api/src/util/handlers/Message.ts +++ b/api/src/util/handlers/Message.ts @@ -38,7 +38,7 @@ const DEFAULT_FETCH_OPTIONS: any = { headers: { "user-agent": "Mozilla/5.0 (compatible; Fosscord/1.0; +https://github.com/fosscord/fosscord)" }, - size: 1024 * 1024 * 1, + // size: 1024 * 1024 * 5, // grabbed from config later compress: true, method: "GET" }; @@ -154,7 +154,10 @@ export async function postHandleMessage(message: Message) { for (const link of links) { try { - const request = await fetch(link, DEFAULT_FETCH_OPTIONS); + const request = await fetch(link, { + ...DEFAULT_FETCH_OPTIONS, + size: Config.get().limits.message.maxEmbedDownloadSize, + }); const text = await request.text(); const $ = cheerio.load(text); @@ -191,7 +194,7 @@ export async function postHandleMessage(message: Message) { channel_id: message.channel_id, data } as MessageUpdateEvent), - Message.update({ id: message.id, channel_id: message.channel_id }, data) + Message.update({ id: message.id, channel_id: message.channel_id }, { embeds: data.embeds }) ]); } diff --git a/util/src/entities/Config.ts b/util/src/entities/Config.ts index 063a4d4d..3756d686 100644 --- a/util/src/entities/Config.ts +++ b/util/src/entities/Config.ts @@ -85,6 +85,7 @@ export interface ConfigValue { maxReactions: number; maxAttachmentSize: number; maxBulkDelete: number; + maxEmbedDownloadSize: number; }; channel: { maxPins: number; @@ -232,29 +233,30 @@ export const DefaultConfigOptions: ConfigValue = { }, limits: { user: { - maxGuilds: 100, - maxUsername: 32, - maxFriends: 1000, + maxGuilds: 1048576, + maxUsername: 127, + maxFriends: 5000, }, guild: { - maxRoles: 250, - maxEmojis: 50, // TODO: max emojis per guild per nitro level - maxMembers: 250000, - maxChannels: 500, - maxChannelsInCategory: 50, - hideOfflineMember: 1000, + maxRoles: 1000, + maxEmojis: 2000, + maxMembers: 25000000, + maxChannels: 65535, + maxChannelsInCategory: 65535, + hideOfflineMember: 3, }, message: { - maxCharacters: 2000, - maxTTSCharacters: 200, - maxReactions: 20, - maxAttachmentSize: 8388608, - maxBulkDelete: 100, + maxCharacters: 1048576, + maxTTSCharacters: 160, + maxReactions: 2048, + maxAttachmentSize: 1024 * 1024 * 1024, + maxEmbedDownloadSize: 1024 * 1024 * 5, + maxBulkDelete: 1000, }, channel: { - maxPins: 50, + maxPins: 500, maxTopic: 1024, - maxWebhooks: 10, + maxWebhooks: 100, }, rate: { disabled: true, @@ -263,9 +265,8 @@ export const DefaultConfigOptions: ConfigValue = { window: 5, }, global: { - count: 20, + count: 250, window: 5, - bot: 250, }, error: { count: 10, |