From cf93d3af0ace59fa618a51537a77f7912e5f1610 Mon Sep 17 00:00:00 2001 From: tobi Date: Tue, 6 May 2025 09:58:47 +0000 Subject: [PATCH] [feature] Add `description_limit` to `/api/v2/instance`, increase default limit to 5k (#4140) Closes https://codeberg.org/superseriousbusiness/gotosocial/issues/4131 by adding `description_limit` to the `api/v2/instance` response. Also increases default sizes to default status length to allow people to more easily describe things like screenshots of text. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4140 Co-authored-by: tobi Co-committed-by: tobi --- docs/api/swagger.yaml | 17 +++++++++++++++++ docs/configuration/media.md | 6 +++--- example/config.yaml | 6 +++--- internal/api/model/instance.go | 11 +++++++++++ internal/typeutils/internaltofrontend.go | 2 ++ internal/typeutils/internaltofrontend_test.go | 3 ++- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index 59e698596..851106398 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -1593,6 +1593,23 @@ definitions: x-go-package: code.superseriousbusiness.org/gotosocial/internal/api/model instanceConfigurationMediaAttachments: properties: + description_limit: + description: |- + The maximum size of a description, in characters. + Omitted for /api/v1/instance response. + example: 5000 + format: int64 + type: integer + x-go-name: DescriptionLimit + description_minimum: + description: |- + The minimum size required for a description, in characters. + Omitted if zero/not set. + Omitted for /api/v1/instance response. + example: 200 + format: int64 + type: integer + x-go-name: DescriptionMinimum image_matrix_limit: description: |- Max allowed image size in pixels as height*width. diff --git a/docs/configuration/media.md b/docs/configuration/media.md index e49b59dd3..b75a94d15 100644 --- a/docs/configuration/media.md +++ b/docs/configuration/media.md @@ -50,9 +50,9 @@ media-remote-max-size: 40MiB media-description-min-chars: 0 # Int. Maximum amount of characters permitted in an image or video description. -# Examples: [1000, 1500, 3000] -# Default: 1500 -media-description-max-chars: 1500 +# Examples: [1000, 5000, 10000] +# Default: 5000 +media-description-max-chars: 5000 # Size. Max size in bytes of emojis uploaded to this instance via the admin API. # diff --git a/example/config.yaml b/example/config.yaml index c2f9667c3..acabd4e22 100644 --- a/example/config.yaml +++ b/example/config.yaml @@ -580,9 +580,9 @@ media-remote-max-size: 40MiB media-description-min-chars: 0 # Int. Maximum amount of characters permitted in an image or video description. -# Examples: [1000, 1500, 3000] -# Default: 1500 -media-description-max-chars: 1500 +# Examples: [1000, 5000, 10000] +# Default: 5000 +media-description-max-chars: 5000 # Size. Max size in bytes of emojis uploaded to this instance via the admin API. # diff --git a/internal/api/model/instance.go b/internal/api/model/instance.go index 2a085c082..73aa8ef82 100644 --- a/internal/api/model/instance.go +++ b/internal/api/model/instance.go @@ -120,6 +120,17 @@ type InstanceConfigurationMediaAttachments struct { // // example: 16777216 VideoMatrixLimit int `json:"video_matrix_limit"` + // The maximum size of a description, in characters. + // Omitted for /api/v1/instance response. + // + // example: 5000 + DescriptionLimit int `json:"description_limit,omitempty"` + // The minimum size required for a description, in characters. + // Omitted if zero/not set. + // Omitted for /api/v1/instance response. + // + // example: 200 + DescriptionMinimum int `json:"description_minimum,omitempty"` } // InstanceConfigurationPolls models instance poll config parameters. diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 659f47ab4..ffd971040 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -1966,6 +1966,8 @@ func (c *Converter) InstanceToAPIV2Instance(ctx context.Context, i *gtsmodel.Ins instance.Configuration.Statuses.CharactersReservedPerURL = instanceStatusesCharactersReservedPerURL instance.Configuration.Statuses.SupportedMimeTypes = instanceStatusesSupportedMimeTypes instance.Configuration.MediaAttachments.SupportedMimeTypes = media.SupportedMIMETypes + instance.Configuration.MediaAttachments.DescriptionLimit = config.GetMediaDescriptionMaxChars() + instance.Configuration.MediaAttachments.DescriptionMinimum = config.GetMediaDescriptionMinChars() // NOTE: we use the local max sizes here // as it hints to apps like Tusky for image diff --git a/internal/typeutils/internaltofrontend_test.go b/internal/typeutils/internaltofrontend_test.go index f38e815f9..63e242f79 100644 --- a/internal/typeutils/internaltofrontend_test.go +++ b/internal/typeutils/internaltofrontend_test.go @@ -2501,7 +2501,8 @@ func (suite *InternalToFrontendTestSuite) TestInstanceV2ToFrontend() { "image_matrix_limit": 2147483647, "video_size_limit": 41943040, "video_frame_rate_limit": 2147483647, - "video_matrix_limit": 2147483647 + "video_matrix_limit": 2147483647, + "description_limit": 500 }, "polls": { "max_options": 6,