You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.5 KiB
40 lines
1.5 KiB
package inbox |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"github.com/go-fed/activity/streams/vocab" |
|
"github.com/owncast/owncast/activitypub/persistence" |
|
"github.com/owncast/owncast/core/chat/events" |
|
"github.com/pkg/errors" |
|
) |
|
|
|
func handleLikeRequest(c context.Context, activity vocab.ActivityStreamsLike) error { |
|
object := activity.GetActivityStreamsObject() |
|
actorReference := activity.GetActivityStreamsActor() |
|
objectIRI := object.At(0).GetIRI().String() |
|
actorIRI := actorReference.At(0).GetIRI().String() |
|
|
|
if hasPreviouslyhandled, err := persistence.HasPreviouslyHandledInboundActivity(objectIRI, actorIRI, events.FediverseEngagementLike); hasPreviouslyhandled || err != nil { |
|
return errors.Wrap(err, "inbound activity of like has already been handled") |
|
} |
|
|
|
// Likes need to match a post we had already sent. |
|
_, isLiveNotification, timestamp, err := persistence.GetObjectByIRI(objectIRI) |
|
if err != nil { |
|
return errors.Wrap(err, "Could not find post locally") |
|
} |
|
|
|
// Don't allow old activities to be liked |
|
if time.Since(timestamp) > maxAgeForEngagement { |
|
return errors.New("Activity is too old to be liked") |
|
} |
|
|
|
// Save as an accepted activity |
|
if err := persistence.SaveInboundFediverseActivity(objectIRI, actorIRI, events.FediverseEngagementLike, time.Now()); err != nil { |
|
return errors.Wrap(err, "unable to save inbound like activity") |
|
} |
|
|
|
return handleEngagementActivity(events.FediverseEngagementLike, isLiveNotification, actorReference, events.FediverseEngagementLike) |
|
}
|
|
|