follow.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package resolvers
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/go-fed/activity/streams/vocab"
  6. "github.com/owncast/owncast/activitypub/apmodels"
  7. "github.com/pkg/errors"
  8. log "github.com/sirupsen/logrus"
  9. )
  10. func getPersonFromFollow(activity vocab.ActivityStreamsFollow) (apmodels.ActivityPubActor, error) {
  11. return GetResolvedActorFromActorProperty(activity.GetActivityStreamsActor())
  12. }
  13. // MakeFollowRequest will convert an inbound Follow request to our internal actor model.
  14. func MakeFollowRequest(c context.Context, activity vocab.ActivityStreamsFollow) (*apmodels.ActivityPubActor, error) {
  15. person, err := getPersonFromFollow(activity)
  16. if err != nil {
  17. return nil, errors.New("unable to resolve person from follow request: " + err.Error())
  18. }
  19. hostname := person.ActorIri.Hostname()
  20. username := person.Username
  21. fullUsername := fmt.Sprintf("%s@%s", username, hostname)
  22. followRequest := apmodels.ActivityPubActor{
  23. ActorIri: person.ActorIri,
  24. FollowRequestIri: activity.GetJSONLDId().Get(),
  25. Inbox: person.Inbox,
  26. Name: person.Name,
  27. Username: fullUsername,
  28. Image: person.Image,
  29. RequestObject: activity,
  30. }
  31. return &followRequest, nil
  32. }
  33. // MakeUnFollowRequest will convert an inbound Unfollow request to our internal actor model.
  34. func MakeUnFollowRequest(c context.Context, activity vocab.ActivityStreamsUndo) *apmodels.ActivityPubActor {
  35. person, err := GetResolvedActorFromActorProperty(activity.GetActivityStreamsActor())
  36. if err != nil {
  37. log.Errorln("unable to resolve person from actor iri", person.ActorIri, err)
  38. return nil
  39. }
  40. unfollowRequest := apmodels.ActivityPubActor{
  41. ActorIri: person.ActorIri,
  42. FollowRequestIri: activity.GetJSONLDId().Get(),
  43. Inbox: person.Inbox,
  44. Name: person.Name,
  45. Image: person.Image,
  46. }
  47. return &unfollowRequest
  48. }