Correctly respond to application/ld+json requests

This returns ActivityStreams objects when the Accept header is
`application/ld+json; profile="https://www.w3.org/ns/activitystreams"`,
per the ActivityPub spec.

Fixes #564
This commit is contained in:
Matt Baer 2023-09-21 16:16:57 -04:00
parent fe1f821422
commit 8f03da0ec1
3 changed files with 9 additions and 4 deletions

View file

@ -496,8 +496,7 @@ func apiCheckCollectionPermissions(app *App, r *http.Request, c *Collection) (in
// fetchCollection handles the API endpoint for retrieving collection data.
func fetchCollection(app *App, w http.ResponseWriter, r *http.Request) error {
accept := r.Header.Get("Accept")
if strings.Contains(accept, "application/activity+json") {
if IsActivityPubRequest(r) {
return handleFetchCollectionActivities(app, w, r)
}

View file

@ -1119,8 +1119,7 @@ func fetchPost(app *App, w http.ResponseWriter, r *http.Request) error {
p.extractData()
accept := r.Header.Get("Accept")
if strings.Contains(accept, "application/activity+json") {
if IsActivityPubRequest(r) {
if coll == nil {
// This is a draft post; 404 for now
// TODO: return ActivityObject

View file

@ -13,6 +13,7 @@ package writefreely
import (
"mime"
"net/http"
"strings"
)
func IsJSON(r *http.Request) bool {
@ -20,3 +21,9 @@ func IsJSON(r *http.Request) bool {
accept := r.Header.Get("Accept")
return ct == "application/json" || accept == "application/json"
}
func IsActivityPubRequest(r *http.Request) bool {
accept := r.Header.Get("Accept")
return strings.Contains(accept, "application/activity+json") ||
accept == "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""
}