Browse Source

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
pull/766/head
Matt Baer 7 months ago
parent
commit
8f03da0ec1
3 changed files with 9 additions and 4 deletions
  1. +1
    -2
      collections.go
  2. +1
    -2
      posts.go
  3. +7
    -0
      request.go

+ 1
- 2
collections.go 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)
}



+ 1
- 2
posts.go 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


+ 7
- 0
request.go 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\""
}

Loading…
Cancel
Save