feat(api): 🚩 Add emoji shortcode size controls

This commit is contained in:
Jesse Wierzbinski 2024-12-09 11:09:40 +01:00
parent cfefd56a55
commit 8796f694bc
No known key found for this signature in database
8 changed files with 15 additions and 3 deletions

View file

@ -35,6 +35,7 @@ remove_on_failure = 31536000
[validation] [validation]
max_emoji_size = 1000000 max_emoji_size = 1000000
max_emoji_shortcode_size = 100
max_emoji_description_size = 1000 max_emoji_description_size = 1000
``` ```

View file

@ -33,7 +33,7 @@ export const schemas = {
.string() .string()
.trim() .trim()
.min(1) .min(1)
.max(64) .max(config.validation.max_emoji_shortcode_size)
.regex( .regex(
emojiValidator, emojiValidator,
"Shortcode must only contain letters (any case), numbers, dashes or underscores.", "Shortcode must only contain letters (any case), numbers, dashes or underscores.",

View file

@ -29,7 +29,7 @@ export const schemas = {
.string() .string()
.trim() .trim()
.min(1) .min(1)
.max(64) .max(config.validation.max_emoji_shortcode_size)
.regex( .regex(
emojiValidator, emojiValidator,
"Shortcode must only contain letters (any case), numbers, dashes or underscores.", "Shortcode must only contain letters (any case), numbers, dashes or underscores.",

View file

@ -202,6 +202,8 @@ export default apiRoute((app) =>
}, },
emojis: { emojis: {
emoji_size_limit: config.validation.max_emoji_size, emoji_size_limit: config.validation.max_emoji_size,
max_emoji_shortcode_characters:
config.validation.max_emoji_shortcode_size,
max_emoji_description_characters: max_emoji_description_characters:
config.validation.max_emoji_description_size, config.validation.max_emoji_description_size,
}, },

View file

@ -165,6 +165,7 @@ max_media_size = 40_000_000
max_media_attachments = 10 max_media_attachments = 10
max_media_description_size = 1000 max_media_description_size = 1000
max_emoji_size = 1000000 max_emoji_size = 1000000
max_emoji_shortcode_size = 100
max_emoji_description_size = 1000 max_emoji_description_size = 1000
max_poll_options = 20 max_poll_options = 20
max_poll_option_size = 500 max_poll_option_size = 500

View file

@ -534,6 +534,10 @@
"type": "integer", "type": "integer",
"default": 1000000 "default": 1000000
}, },
"max_emoji_shortcode_size": {
"type": "integer",
"default": 100
},
"max_emoji_description_size": { "max_emoji_description_size": {
"type": "integer", "type": "integer",
"default": 1000 "default": 1000
@ -1873,6 +1877,7 @@
"max_media_attachments": 10, "max_media_attachments": 10,
"max_media_description_size": 1000, "max_media_description_size": 1000,
"max_emoji_size": 1000000, "max_emoji_size": 1000000,
"max_emoji_shortcode_size": 100,
"max_emoji_description_size": 1000, "max_emoji_description_size": 1000,
"max_poll_options": 20, "max_poll_options": 20,
"max_poll_option_size": 500, "max_poll_option_size": 500,

View file

@ -315,12 +315,13 @@ Single Sign-On (SSO) settings for the instance. This object contains two fields:
Extra attributes have been added to the `/api/v2/instance` endpoint. These are identical to the `/api/v1/instance` endpoint, except that the `banner` attribute uses the normal Mastodon API attribute. Extra attributes have been added to the `/api/v2/instance` endpoint. These are identical to the `/api/v1/instance` endpoint, except that the `banner` attribute uses the normal Mastodon API attribute.
```ts ```ts
type ExtendedInstanceV2 = Instance & { type ExtendedInstanceV2 = InstanceV2 & {
versia_version: string; versia_version: string;
configuration: Instance["configuration"] & { configuration: Instance["configuration"] & {
emojis: { emojis: {
// In bytes // In bytes
emoji_size_limit: number; emoji_size_limit: number;
max_emoji_shortcode_characters: number;
max_emoji_description_characters: number; max_emoji_description_characters: number;
}; };
}; };

View file

@ -295,6 +295,7 @@ export const configValidator = z
max_media_attachments: z.number().int().default(10), max_media_attachments: z.number().int().default(10),
max_media_description_size: z.number().int().default(1000), max_media_description_size: z.number().int().default(1000),
max_emoji_size: z.number().int().default(1000000), max_emoji_size: z.number().int().default(1000000),
max_emoji_shortcode_size: z.number().int().default(100),
max_emoji_description_size: z.number().int().default(1000), max_emoji_description_size: z.number().int().default(1000),
max_poll_options: z.number().int().default(20), max_poll_options: z.number().int().default(20),
max_poll_option_size: z.number().int().default(500), max_poll_option_size: z.number().int().default(500),
@ -386,6 +387,7 @@ export const configValidator = z
max_media_attachments: 10, max_media_attachments: 10,
max_media_description_size: 1000, max_media_description_size: 1000,
max_emoji_size: 1000000, max_emoji_size: 1000000,
max_emoji_shortcode_size: 100,
max_emoji_description_size: 1000, max_emoji_description_size: 1000,
max_poll_options: 20, max_poll_options: 20,
max_poll_option_size: 500, max_poll_option_size: 500,