summaryrefslogtreecommitdiff
path: root/internal/api/activitypub
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/activitypub')
-rw-r--r--internal/api/activitypub/emoji/emojiget.go18
-rw-r--r--internal/api/activitypub/publickey/publickeyget.go20
-rw-r--r--internal/api/activitypub/users/featured.go13
-rw-r--r--internal/api/activitypub/users/followers.go13
-rw-r--r--internal/api/activitypub/users/following.go13
-rw-r--r--internal/api/activitypub/users/inboxpost.go3
-rw-r--r--internal/api/activitypub/users/outboxget.go13
-rw-r--r--internal/api/activitypub/users/outboxget_test.go2
-rw-r--r--internal/api/activitypub/users/repliesget.go14
-rw-r--r--internal/api/activitypub/users/repliesget_test.go9
-rw-r--r--internal/api/activitypub/users/statusget.go13
-rw-r--r--internal/api/activitypub/users/userget.go13
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)
}