Add a layer of safety around required ActivityPub Actor fields (#4703)
* fix(ap): add safe constructors, getters, and validators to ActivityPub actors to address #4701 * chore: replace nil check with the new Validate() method * chore(test): added test to verify the values extracted from actors * fix: return the specific error type + test for it * fix(ap): add recovery for each AP inbox worker for a worst case scenario * fix(ap): add additional safe accessor methods to other AP entities other than actors * chore(tests): add tests for the new safe accessors * fix(ap): handle empty public keys in AP actors
This commit is contained in:
@@ -33,23 +33,26 @@ func Setup(datastore *data.Datastore) {
|
||||
|
||||
// AddFollow will save a follow to the datastore.
|
||||
func AddFollow(follow apmodels.ActivityPubActor, approved bool) error {
|
||||
log.Traceln("Saving", follow.ActorIri, "as a follower.")
|
||||
var image string
|
||||
if follow.Image != nil {
|
||||
image = follow.Image.String()
|
||||
if err := follow.Validate(); err != nil {
|
||||
return errors.Wrap(err, "cannot add invalid follow")
|
||||
}
|
||||
|
||||
log.Traceln("Saving", follow.ActorIriString(), "as a follower.")
|
||||
|
||||
followRequestObject, err := apmodels.Serialize(follow.RequestObject)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error serializing follow request object")
|
||||
}
|
||||
|
||||
return createFollow(follow.ActorIri.String(), follow.Inbox.String(), follow.FollowRequestIri.String(), follow.Name, follow.Username, image, followRequestObject, approved)
|
||||
return createFollow(follow.ActorIriString(), follow.InboxString(), follow.FollowRequestIriString(), follow.Name, follow.Username, follow.ImageString(), followRequestObject, approved)
|
||||
}
|
||||
|
||||
// RemoveFollow will remove a follow from the datastore.
|
||||
func RemoveFollow(unfollow apmodels.ActivityPubActor) error {
|
||||
log.Traceln("Removing", unfollow.ActorIri, "as a follower.")
|
||||
if err := unfollow.Validate(); err != nil {
|
||||
return errors.Wrap(err, "cannot remove invalid follow")
|
||||
}
|
||||
log.Traceln("Removing", unfollow.ActorIriString(), "as a follower.")
|
||||
return removeFollow(unfollow.ActorIri)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user