42 lines
1.2 KiB
42 lines
1.2 KiB
package controllers |
|
|
|
import ( |
|
"net/http" |
|
"strings" |
|
|
|
"github.com/owncast/owncast/activitypub/apmodels" |
|
"github.com/owncast/owncast/activitypub/crypto" |
|
"github.com/owncast/owncast/activitypub/persistence" |
|
"github.com/owncast/owncast/activitypub/requests" |
|
"github.com/owncast/owncast/core/data" |
|
log "github.com/sirupsen/logrus" |
|
) |
|
|
|
// ObjectHandler handles requests for a single federated ActivityPub object. |
|
func ObjectHandler(w http.ResponseWriter, r *http.Request) { |
|
if !data.GetFederationEnabled() { |
|
w.WriteHeader(http.StatusMethodNotAllowed) |
|
return |
|
} |
|
|
|
// If private federation mode is enabled do not allow access to objects. |
|
if data.GetFederationIsPrivate() { |
|
w.WriteHeader(http.StatusNotFound) |
|
return |
|
} |
|
|
|
iri := strings.Join([]string{strings.TrimSuffix(data.GetServerURL(), "/"), r.URL.Path}, "") |
|
object, _, _, err := persistence.GetObjectByIRI(iri) |
|
if err != nil { |
|
w.WriteHeader(http.StatusNotFound) |
|
return |
|
} |
|
|
|
accountName := data.GetDefaultFederationUsername() |
|
actorIRI := apmodels.MakeLocalIRIForAccount(accountName) |
|
publicKey := crypto.GetPublicKey(actorIRI) |
|
|
|
if err := requests.WriteResponse([]byte(object), w, publicKey); err != nil { |
|
log.Errorln(err) |
|
} |
|
}
|
|
|