From 6607e1c9444d0814b72762a46814ff0812d96343 Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 18 Sep 2025 16:33:23 +0200 Subject: [feature] add paging support to rss feed endpoint, and support JSON / atom feed types (#4442) originally based on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4396 hope this is okay https://codeberg.org/zordsdavini ! closes https://codeberg.org/superseriousbusiness/gotosocial/issues/4411 closes https://codeberg.org/superseriousbusiness/gotosocial/issues/3407 Co-authored-by: Arnas Udovic Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4442 Co-authored-by: kim Co-committed-by: kim --- internal/api/util/mime.go | 2 ++ internal/api/util/response.go | 13 +++++++++++++ 2 files changed, 15 insertions(+) (limited to 'internal/api') diff --git a/internal/api/util/mime.go b/internal/api/util/mime.go index da96be786..6159d4b79 100644 --- a/internal/api/util/mime.go +++ b/internal/api/util/mime.go @@ -26,6 +26,8 @@ const ( appXMLText = `text/xml` // AppXML is only *recommended* in RFC7303 AppXMLXRD = `application/xrd+xml` AppRSSXML = `application/rss+xml` + AppAtomXML = `application/atom+xml` + AppFeedJSON = `application/feed+json` AppActivityJSON = `application/activity+json` appActivityLDJSON = `application/ld+json` // without profile AppActivityLDJSON = appActivityLDJSON + `; profile="https://www.w3.org/ns/activitystreams"` diff --git a/internal/api/util/response.go b/internal/api/util/response.go index 105537f36..ff58b68e3 100644 --- a/internal/api/util/response.go +++ b/internal/api/util/response.go @@ -71,6 +71,18 @@ func JSONType(c *gin.Context, code int, contentType string, data any) { EncodeJSONResponse(c.Writer, c.Request, code, contentType, data) } +// XML calls EncodeJSONResponse() using gin.Context{}, with content-type = AppXML, +// This function handles the case of XML unmarshal errors and pools read buffers. +func XML(c *gin.Context, code int, data any) { + EncodeXMLResponse(c.Writer, c.Request, code, AppXML, data) +} + +// XML calls EncodeXMLResponse() using gin.Context{}, with given content-type. +// This function handles the case of XML unmarshal errors and pools read buffers. +func XMLType(c *gin.Context, code int, contentType string, data any) { + EncodeXMLResponse(c.Writer, c.Request, code, contentType, data) +} + // Data calls WriteResponseBytes() using gin.Context{}, with given content-type. func Data(c *gin.Context, code int, contentType string, data []byte) { WriteResponseBytes(c.Writer, c.Request, code, contentType, data) @@ -230,6 +242,7 @@ func EncodeCSVResponse( // Write all the records to the buffer. if err := csvWriter.WriteAll(records); err == nil { + // Respond with the now-known // size byte slice within buf. WriteResponseBytes(rw, r, -- cgit v1.2.3