acceptFollow.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package requests
  2. import (
  3. "encoding/json"
  4. "net/url"
  5. "github.com/go-fed/activity/streams"
  6. "github.com/go-fed/activity/streams/vocab"
  7. "github.com/owncast/owncast/activitypub/apmodels"
  8. "github.com/owncast/owncast/activitypub/crypto"
  9. "github.com/owncast/owncast/activitypub/workerpool"
  10. "github.com/teris-io/shortid"
  11. )
  12. // SendFollowAccept will send an accept activity to a follow request from a specified local user.
  13. func SendFollowAccept(inbox *url.URL, originalFollowActivity vocab.ActivityStreamsFollow, fromLocalAccountName string) error {
  14. followAccept := makeAcceptFollow(originalFollowActivity, fromLocalAccountName)
  15. localAccountIRI := apmodels.MakeLocalIRIForAccount(fromLocalAccountName)
  16. var jsonmap map[string]interface{}
  17. jsonmap, _ = streams.Serialize(followAccept)
  18. b, _ := json.Marshal(jsonmap)
  19. req, err := crypto.CreateSignedRequest(b, inbox, localAccountIRI)
  20. if err != nil {
  21. return err
  22. }
  23. workerpool.AddToOutboundQueue(req)
  24. return nil
  25. }
  26. func makeAcceptFollow(originalFollowActivity vocab.ActivityStreamsFollow, fromAccountName string) vocab.ActivityStreamsAccept {
  27. acceptIDString := shortid.MustGenerate()
  28. acceptID := apmodels.MakeLocalIRIForResource(acceptIDString)
  29. actorID := apmodels.MakeLocalIRIForAccount(fromAccountName)
  30. accept := streams.NewActivityStreamsAccept()
  31. idProperty := streams.NewJSONLDIdProperty()
  32. idProperty.SetIRI(acceptID)
  33. accept.SetJSONLDId(idProperty)
  34. actor := apmodels.MakeActorPropertyWithID(actorID)
  35. accept.SetActivityStreamsActor(actor)
  36. object := streams.NewActivityStreamsObjectProperty()
  37. object.AppendActivityStreamsFollow(originalFollowActivity)
  38. accept.SetActivityStreamsObject(object)
  39. return accept
  40. }