diff options
Diffstat (limited to 'internal/api/activitypub')
-rw-r--r-- | internal/api/activitypub/emoji/emojiget.go | 18 | ||||
-rw-r--r-- | internal/api/activitypub/publickey/publickeyget.go | 20 | ||||
-rw-r--r-- | internal/api/activitypub/users/featured.go | 13 | ||||
-rw-r--r-- | internal/api/activitypub/users/followers.go | 13 | ||||
-rw-r--r-- | internal/api/activitypub/users/following.go | 13 | ||||
-rw-r--r-- | internal/api/activitypub/users/inboxpost.go | 3 | ||||
-rw-r--r-- | internal/api/activitypub/users/outboxget.go | 13 | ||||
-rw-r--r-- | internal/api/activitypub/users/outboxget_test.go | 2 | ||||
-rw-r--r-- | internal/api/activitypub/users/repliesget.go | 14 | ||||
-rw-r--r-- | internal/api/activitypub/users/repliesget_test.go | 9 | ||||
-rw-r--r-- | internal/api/activitypub/users/statusget.go | 13 | ||||
-rw-r--r-- | internal/api/activitypub/users/userget.go | 13 |
12 files changed, 49 insertions, 95 deletions
diff --git a/internal/api/activitypub/emoji/emojiget.go b/internal/api/activitypub/emoji/emojiget.go index c291a500a..5a9f0db72 100644 --- a/internal/api/activitypub/emoji/emojiget.go +++ b/internal/api/activitypub/emoji/emojiget.go @@ -18,7 +18,6 @@ package emoji import ( - "encoding/json" "errors" "net/http" "strings" @@ -36,7 +35,7 @@ func (m *Module) EmojiGetHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return @@ -48,11 +47,12 @@ func (m *Module) EmojiGetHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + // Encode JSON HTTP response. + apiutil.EncodeJSONResponse( + c.Writer, + c.Request, + http.StatusOK, + contentType, + resp, + ) } diff --git a/internal/api/activitypub/publickey/publickeyget.go b/internal/api/activitypub/publickey/publickeyget.go index a7de4efad..083a31961 100644 --- a/internal/api/activitypub/publickey/publickeyget.go +++ b/internal/api/activitypub/publickey/publickeyget.go @@ -18,7 +18,6 @@ package publickey import ( - "encoding/json" "errors" "net/http" "strings" @@ -42,13 +41,13 @@ func (m *Module) PublicKeyGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // redirect to the user's profile c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) return @@ -60,11 +59,12 @@ func (m *Module) PublicKeyGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + // Encode JSON HTTP response. + apiutil.EncodeJSONResponse( + c.Writer, + c.Request, + http.StatusOK, + contentType, + resp, + ) } diff --git a/internal/api/activitypub/users/featured.go b/internal/api/activitypub/users/featured.go index 7a2b73a6f..f256c1e75 100644 --- a/internal/api/activitypub/users/featured.go +++ b/internal/api/activitypub/users/featured.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -67,13 +66,13 @@ func (m *Module) FeaturedCollectionGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // This isn't an ActivityPub request; // redirect to the user's profile. c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) @@ -86,11 +85,5 @@ func (m *Module) FeaturedCollectionGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/followers.go b/internal/api/activitypub/users/followers.go index e93ef8d4d..956cdc71e 100644 --- a/internal/api/activitypub/users/followers.go +++ b/internal/api/activitypub/users/followers.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -39,13 +38,13 @@ func (m *Module) FollowersGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // This isn't an ActivityPub request; // redirect to the user's profile. c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) @@ -68,11 +67,5 @@ func (m *Module) FollowersGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/following.go b/internal/api/activitypub/users/following.go index 54fb3b676..d01b55b57 100644 --- a/internal/api/activitypub/users/following.go +++ b/internal/api/activitypub/users/following.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -39,13 +38,13 @@ func (m *Module) FollowingGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // This isn't an ActivityPub request; // redirect to the user's profile. c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) @@ -68,11 +67,5 @@ func (m *Module) FollowingGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/inboxpost.go b/internal/api/activitypub/users/inboxpost.go index c2d3d79c4..03ba5c5a6 100644 --- a/internal/api/activitypub/users/inboxpost.go +++ b/internal/api/activitypub/users/inboxpost.go @@ -47,6 +47,5 @@ func (m *Module) InboxPOSTHandler(c *gin.Context) { return } - // Inbox POST body was Accepted for processing. - c.JSON(http.StatusAccepted, gin.H{"status": http.StatusText(http.StatusAccepted)}) + apiutil.Data(c, http.StatusAccepted, apiutil.AppJSON, apiutil.StatusAcceptedJSON) } diff --git a/internal/api/activitypub/users/outboxget.go b/internal/api/activitypub/users/outboxget.go index e4617ba90..7dcc354ac 100644 --- a/internal/api/activitypub/users/outboxget.go +++ b/internal/api/activitypub/users/outboxget.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "fmt" "net/http" @@ -93,13 +92,13 @@ func (m *Module) OutboxGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // This isn't an ActivityPub request; // redirect to the user's profile. c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) @@ -135,11 +134,5 @@ func (m *Module) OutboxGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/outboxget_test.go b/internal/api/activitypub/users/outboxget_test.go index 4829a8946..31b7e8e9b 100644 --- a/internal/api/activitypub/users/outboxget_test.go +++ b/internal/api/activitypub/users/outboxget_test.go @@ -209,7 +209,7 @@ func (suite *OutboxGetTestSuite) TestGetOutboxNextPage() { suite.NoError(err) suite.Equal(`{ "@context": "https://www.w3.org/ns/activitystreams", - "id": "http://localhost:8080/users/the_mighty_zork/outbox?page=true\u0026maxID=01F8MHAMCHF6Y650WCRSCP4WMY", + "id": "http://localhost:8080/users/the_mighty_zork/outbox?page=true&maxID=01F8MHAMCHF6Y650WCRSCP4WMY", "orderedItems": [], "partOf": "http://localhost:8080/users/the_mighty_zork/outbox", "type": "OrderedCollectionPage" diff --git a/internal/api/activitypub/users/repliesget.go b/internal/api/activitypub/users/repliesget.go index 3ac4ccbbb..2d3472f35 100644 --- a/internal/api/activitypub/users/repliesget.go +++ b/internal/api/activitypub/users/repliesget.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -107,13 +106,13 @@ func (m *Module) StatusRepliesGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // redirect to the status c.Redirect(http.StatusSeeOther, "/@"+requestedUsername+"/statuses/"+requestedStatusID) return @@ -161,12 +160,5 @@ func (m *Module) StatusRepliesGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - errWithCode := gtserror.NewErrorInternalError(err) - apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/repliesget_test.go b/internal/api/activitypub/users/repliesget_test.go index ac25f3617..d20d8c6c0 100644 --- a/internal/api/activitypub/users/repliesget_test.go +++ b/internal/api/activitypub/users/repliesget_test.go @@ -266,11 +266,16 @@ func toJSON(a any) string { } a = m } - b, err := json.MarshalIndent(a, "", " ") + var dst bytes.Buffer + enc := json.NewEncoder(&dst) + enc.SetIndent("", " ") + enc.SetEscapeHTML(false) + err := enc.Encode(a) if err != nil { panic(err) } - return string(b) + dst.Truncate(dst.Len() - 1) // drop new-line + return dst.String() } // indentJSON will return indented JSON from raw provided JSON. diff --git a/internal/api/activitypub/users/statusget.go b/internal/api/activitypub/users/statusget.go index f7b5ccfd1..27af9c6b4 100644 --- a/internal/api/activitypub/users/statusget.go +++ b/internal/api/activitypub/users/statusget.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -46,13 +45,13 @@ func (m *Module) StatusGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // redirect to the status c.Redirect(http.StatusSeeOther, "/@"+requestedUsername+"/statuses/"+requestedStatusID) return @@ -64,11 +63,5 @@ func (m *Module) StatusGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } diff --git a/internal/api/activitypub/users/userget.go b/internal/api/activitypub/users/userget.go index 61be69836..2deca0fa4 100644 --- a/internal/api/activitypub/users/userget.go +++ b/internal/api/activitypub/users/userget.go @@ -18,7 +18,6 @@ package users import ( - "encoding/json" "errors" "net/http" "strings" @@ -46,13 +45,13 @@ func (m *Module) UsersGETHandler(c *gin.Context) { return } - format, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) + contentType, err := apiutil.NegotiateAccept(c, apiutil.ActivityPubOrHTMLHeaders...) if err != nil { apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) return } - if format == string(apiutil.TextHTML) { + if contentType == string(apiutil.TextHTML) { // redirect to the user's profile c.Redirect(http.StatusSeeOther, "/@"+requestedUsername) return @@ -64,11 +63,5 @@ func (m *Module) UsersGETHandler(c *gin.Context) { return } - b, err := json.Marshal(resp) - if err != nil { - apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1) - return - } - - c.Data(http.StatusOK, format, b) + apiutil.JSONType(c, http.StatusOK, contentType, resp) } |