Merge pull request #180 from writeas/cache-control
Add Cache-Control headers on AP endpoints Closes T693
This commit is contained in:
commit
ff33c59f27
|
@ -37,6 +37,8 @@ import (
|
||||||
const (
|
const (
|
||||||
// TODO: delete. don't use this!
|
// TODO: delete. don't use this!
|
||||||
apCustomHandleDefault = "blog"
|
apCustomHandleDefault = "blog"
|
||||||
|
|
||||||
|
apCacheTime = time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
type RemoteUser struct {
|
type RemoteUser struct {
|
||||||
|
@ -92,6 +94,7 @@ func handleFetchCollectionActivities(app *App, w http.ResponseWriter, r *http.Re
|
||||||
|
|
||||||
p := c.PersonObject()
|
p := c.PersonObject()
|
||||||
|
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, p, http.StatusOK)
|
return impart.RenderActivityJSON(w, p, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,6 +156,7 @@ func handleFetchCollectionOutbox(app *App, w http.ResponseWriter, r *http.Reques
|
||||||
ocp.OrderedItems = append(ocp.OrderedItems, *a)
|
ocp.OrderedItems = append(ocp.OrderedItems, *a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,6 +211,7 @@ func handleFetchCollectionFollowers(app *App, w http.ResponseWriter, r *http.Req
|
||||||
ocp.OrderedItems = append(ocp.OrderedItems, f.ActorID)
|
ocp.OrderedItems = append(ocp.OrderedItems, f.ActorID)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,6 +256,7 @@ func handleFetchCollectionFollowing(app *App, w http.ResponseWriter, r *http.Req
|
||||||
// Return outbox page
|
// Return outbox page
|
||||||
ocp := activitystreams.NewOrderedCollectionPage(accountRoot, "following", 0, p)
|
ocp := activitystreams.NewOrderedCollectionPage(accountRoot, "following", 0, p)
|
||||||
ocp.OrderedItems = []interface{}{}
|
ocp.OrderedItems = []interface{}{}
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
return impart.RenderActivityJSON(w, ocp, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -743,3 +749,7 @@ func unmarshalActor(actorResp []byte, actor *activitystreams.Person) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setCacheControl(w http.ResponseWriter, ttl time.Duration) {
|
||||||
|
w.Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%.0f", ttl.Seconds()))
|
||||||
|
}
|
||||||
|
|
|
@ -764,6 +764,7 @@ func handleViewCollection(app *App, w http.ResponseWriter, r *http.Request) erro
|
||||||
if strings.Contains(r.Header.Get("Accept"), "application/activity+json") {
|
if strings.Contains(r.Header.Get("Accept"), "application/activity+json") {
|
||||||
ac := c.PersonObject()
|
ac := c.PersonObject()
|
||||||
ac.Context = []interface{}{activitystreams.Namespace}
|
ac.Context = []interface{}{activitystreams.Namespace}
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, ac, http.StatusOK)
|
return impart.RenderActivityJSON(w, ac, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
posts.go
2
posts.go
|
@ -1089,6 +1089,7 @@ func fetchPost(app *App, w http.ResponseWriter, r *http.Request) error {
|
||||||
p.Collection = &CollectionObj{Collection: *coll}
|
p.Collection = &CollectionObj{Collection: *coll}
|
||||||
po := p.ActivityObject(app.cfg)
|
po := p.ActivityObject(app.cfg)
|
||||||
po.Context = []interface{}{activitystreams.Namespace}
|
po.Context = []interface{}{activitystreams.Namespace}
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, po, http.StatusOK)
|
return impart.RenderActivityJSON(w, po, http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1430,6 +1431,7 @@ Are you sure it was ever here?`,
|
||||||
p.extractData()
|
p.extractData()
|
||||||
ap := p.ActivityObject(app.cfg)
|
ap := p.ActivityObject(app.cfg)
|
||||||
ap.Context = []interface{}{activitystreams.Namespace}
|
ap.Context = []interface{}{activitystreams.Namespace}
|
||||||
|
setCacheControl(w, apCacheTime)
|
||||||
return impart.RenderActivityJSON(w, ap, http.StatusOK)
|
return impart.RenderActivityJSON(w, ap, http.StatusOK)
|
||||||
} else {
|
} else {
|
||||||
p.extractData()
|
p.extractData()
|
||||||
|
|
Loading…
Reference in New Issue