From 602911a7dbe753dfa494f63b67872b7dae0e675d Mon Sep 17 00:00:00 2001 From: Marius Orcsik Date: Thu, 4 Oct 2018 20:33:32 +0200 Subject: [PATCH] Refactored elements that were of CollectionInterface type to Item type so we can pass IRIs to them --- activitypub/activity.go | 190 ++++++++++++++++----------------- activitypub/actors.go | 57 +++++----- activitypub/actors_test.go | 1 - activitypub/collections.go | 64 +++++------ activitypub/create_activity.go | 61 ++++++++--- activitypub/inbox.go | 12 +-- activitypub/item.go | 6 -- activitypub/like_activity.go | 71 ++++++++---- activitypub/liked.go | 8 +- activitypub/link.go | 2 +- activitypub/marshalling.go | 4 +- activitypub/object.go | 52 +++++---- activitypub/object_test.go | 10 +- activitypub/outbox.go | 8 +- activitypub/unmarshalling.go | 6 +- activitypub/update_activity.go | 10 +- tests/integration_test.go | 2 +- tests/server_to_server_test.go | 6 +- tests/unmarshalling_test.go | 2 +- 19 files changed, 310 insertions(+), 262 deletions(-) diff --git a/activitypub/activity.go b/activitypub/activity.go index 4bae266..7e5d44c 100644 --- a/activitypub/activity.go +++ b/activitypub/activity.go @@ -85,13 +85,13 @@ type Activity struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -101,13 +101,13 @@ type Activity struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -116,15 +116,15 @@ type Activity struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -135,19 +135,19 @@ type Activity struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -155,28 +155,28 @@ type Activity struct { Duration time.Duration `jsonld:"duration,omitempty"` // Describes one or more entities that either performed or are expected to perform the activity. // Any single activity can have multiple actors. The actor may be specified using an indirect Link. - Actor ObjectOrLink `jsonld:"actor,omitempty"` + Actor Item `jsonld:"actor,omitempty"` // Describes the indirect object, or target, of the activity. // The precise meaning of the target is largely dependent on the type of action being described // but will often be the object of the English preposition "to". // For instance, in the activity "John added a movie to his wishlist", // the target of the activity is John's wishlist. An activity can have more than one target. - Target ObjectOrLink `jsonld:"target,omitempty"` + Target Item `jsonld:"target,omitempty"` // Describes the result of the activity. For instance, if a particular action results in the creation // of a new resource, the result property can be used to describe that new resource. - Result ObjectOrLink `jsonld:"result,omitempty"` + Result Item `jsonld:"result,omitempty"` // Describes an indirect object of the activity from which the activity is directed. // The precise meaning of the origin is the object of the English preposition "from". // For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A". - Origin ObjectOrLink `jsonld:"origin,omitempty"` + Origin Item `jsonld:"origin,omitempty"` // Identifies one or more objects used (or to be used) in the completion of an Activity. - Instrument ObjectOrLink `jsonld:"instrument,omitempty"` - Source Source `jsonld:"source,omitempty"` + Instrument Item `jsonld:"instrument,omitempty"` + Source Source `jsonld:"source,omitempty"` // When used within an Activity, describes the direct object of the activity. // For instance, in the activity "John added a movie to his wishlist", // the object of the activity is the movie added. // When used within a Relationship describes the entity to which the subject is related. - Object ObjectOrLink `jsonld:"object,omitempty"` + Object Item `jsonld:"object,omitempty"` } // IntransitiveActivity Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. @@ -191,13 +191,13 @@ type IntransitiveActivity struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -207,13 +207,13 @@ type IntransitiveActivity struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -222,15 +222,15 @@ type IntransitiveActivity struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -241,19 +241,19 @@ type IntransitiveActivity struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -267,17 +267,17 @@ type IntransitiveActivity struct { // but will often be the object of the English preposition "to". // For instance, in the activity "John added a movie to his wishlist", // the target of the activity is John's wishlist. An activity can have more than one target. - Target ObjectOrLink `jsonld:"target,omitempty"` + Target Item `jsonld:"target,omitempty"` // Describes the result of the activity. For instance, if a particular action results in the creation // of a new resource, the result property can be used to describe that new resource. - Result ObjectOrLink `jsonld:"result,omitempty"` + Result Item `jsonld:"result,omitempty"` // Describes an indirect object of the activity from which the activity is directed. // The precise meaning of the origin is the object of the English preposition "from". // For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A". - Origin ObjectOrLink `jsonld:"origin,omitempty"` + Origin Item `jsonld:"origin,omitempty"` // Identifies one or more objects used (or to be used) in the completion of an Activity. - Instrument ObjectOrLink `jsonld:"instrument,omitempty"` - Source Source `jsonld:"source,omitempty"` + Instrument Item `jsonld:"instrument,omitempty"` + Source Source `jsonld:"source,omitempty"` } type ( @@ -402,13 +402,13 @@ type Question struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -418,13 +418,13 @@ type Question struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -433,15 +433,15 @@ type Question struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -452,19 +452,19 @@ type Question struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -478,36 +478,36 @@ type Question struct { // but will often be the object of the English preposition "to". // For instance, in the activity "John added a movie to his wishlist", // the target of the activity is John's wishlist. An activity can have more than one target. - Target ObjectOrLink `jsonld:"target,omitempty"` + Target Item `jsonld:"target,omitempty"` // Describes the result of the activity. For instance, if a particular action results in the creation // of a new resource, the result property can be used to describe that new resource. - Result ObjectOrLink `jsonld:"result,omitempty"` + Result Item `jsonld:"result,omitempty"` // Describes an indirect object of the activity from which the activity is directed. // The precise meaning of the origin is the object of the English preposition "from". // For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A". - Origin ObjectOrLink `jsonld:"origin,omitempty"` + Origin Item `jsonld:"origin,omitempty"` // Identifies one or more objects used (or to be used) in the completion of an Activity. - Instrument ObjectOrLink `jsonld:"instrument,omitempty"` - Source Source `jsonld:"source,omitempty"` + Instrument Item `jsonld:"instrument,omitempty"` + Source Source `jsonld:"source,omitempty"` // Identifies an exclusive option for a Question. Use of oneOf implies that the Question // can have only a single answer. To indicate that a Question can have multiple answers, use anyOf. - OneOf ObjectOrLink `jsonld:"oneOf,omitempty"` + OneOf Item `jsonld:"oneOf,omitempty"` // Identifies an inclusive option for a Question. Use of anyOf implies that the Question can have multiple answers. // To indicate that a Question can have only one answer, use oneOf. - AnyOf ObjectOrLink `jsonld:"anyOf,omitempty"` + AnyOf Item `jsonld:"anyOf,omitempty"` // Indicates that a question has been closed, and answers are no longer accepted. Closed bool `jsonld:"closed,omitempty"` } // AcceptNew initializes an Accept activity -func AcceptNew(id ObjectID, ob ObjectOrLink) *Accept { +func AcceptNew(id ObjectID, ob Item) *Accept { a := ActivityNew(id, AcceptType, ob) o := Accept(*a) return &o } // AddNew initializes an Add activity -func AddNew(id ObjectID, ob ObjectOrLink, trgt ObjectOrLink) *Add { +func AddNew(id ObjectID, ob Item, trgt Item) *Add { a := ActivityNew(id, AddType, ob) o := Add(*a) o.Target = trgt @@ -515,7 +515,7 @@ func AddNew(id ObjectID, ob ObjectOrLink, trgt ObjectOrLink) *Add { } // AnnounceNew initializes an Announce activity -func AnnounceNew(id ObjectID, ob ObjectOrLink) *Announce { +func AnnounceNew(id ObjectID, ob Item) *Announce { a := ActivityNew(id, AnnounceType, ob) o := Announce(*a) return &o @@ -529,119 +529,119 @@ func ArriveNew(id ObjectID) *Arrive { } // BlockNew initializes a Block activity -func BlockNew(id ObjectID, ob ObjectOrLink) *Block { +func BlockNew(id ObjectID, ob Item) *Block { a := ActivityNew(id, BlockType, ob) o := Block(*a) return &o } // CreateNew initializes a Create activity -func CreateNew(id ObjectID, ob ObjectOrLink) *Create { +func CreateNew(id ObjectID, ob Item) *Create { a := ActivityNew(id, CreateType, ob) o := Create(*a) return &o } // DeleteNew initializes a Delete activity -func DeleteNew(id ObjectID, ob ObjectOrLink) *Delete { +func DeleteNew(id ObjectID, ob Item) *Delete { a := ActivityNew(id, DeleteType, ob) o := Delete(*a) return &o } // DislikeNew initializes a Dislike activity -func DislikeNew(id ObjectID, ob ObjectOrLink) *Dislike { +func DislikeNew(id ObjectID, ob Item) *Dislike { a := ActivityNew(id, DislikeType, ob) o := Dislike(*a) return &o } // FlagNew initializes a Flag activity -func FlagNew(id ObjectID, ob ObjectOrLink) *Flag { +func FlagNew(id ObjectID, ob Item) *Flag { a := ActivityNew(id, FlagType, ob) o := Flag(*a) return &o } // FollowNew initializes a Follow activity -func FollowNew(id ObjectID, ob ObjectOrLink) *Follow { +func FollowNew(id ObjectID, ob Item) *Follow { a := ActivityNew(id, FollowType, ob) o := Follow(*a) return &o } // IgnoreNew initializes an Ignore activity -func IgnoreNew(id ObjectID, ob ObjectOrLink) *Ignore { +func IgnoreNew(id ObjectID, ob Item) *Ignore { a := ActivityNew(id, IgnoreType, ob) o := Ignore(*a) return &o } // InviteNew initializes an Invite activity -func InviteNew(id ObjectID, ob ObjectOrLink) *Invite { +func InviteNew(id ObjectID, ob Item) *Invite { a := ActivityNew(id, InviteType, ob) o := Invite(*a) return &o } // JoinNew initializes a Join activity -func JoinNew(id ObjectID, ob ObjectOrLink) *Join { +func JoinNew(id ObjectID, ob Item) *Join { a := ActivityNew(id, JoinType, ob) o := Join(*a) return &o } // LeaveNew initializes a Leave activity -func LeaveNew(id ObjectID, ob ObjectOrLink) *Leave { +func LeaveNew(id ObjectID, ob Item) *Leave { a := ActivityNew(id, LeaveType, ob) o := Leave(*a) return &o } // LikeNew initializes a Like activity -func LikeNew(id ObjectID, ob ObjectOrLink) *Like { +func LikeNew(id ObjectID, ob Item) *Like { a := ActivityNew(id, LikeType, ob) o := Like(*a) return &o } // ListenNew initializes a Listen activity -func ListenNew(id ObjectID, ob ObjectOrLink) *Listen { +func ListenNew(id ObjectID, ob Item) *Listen { a := ActivityNew(id, ListenType, ob) o := Listen(*a) return &o } // MoveNew initializes a Move activity -func MoveNew(id ObjectID, ob ObjectOrLink) *Move { +func MoveNew(id ObjectID, ob Item) *Move { a := ActivityNew(id, MoveType, ob) o := Move(*a) return &o } // OfferNew initializes an Offer activity -func OfferNew(id ObjectID, ob ObjectOrLink) *Offer { +func OfferNew(id ObjectID, ob Item) *Offer { a := ActivityNew(id, OfferType, ob) o := Offer(*a) return &o } // RejectNew initializes a Reject activity -func RejectNew(id ObjectID, ob ObjectOrLink) *Reject { +func RejectNew(id ObjectID, ob Item) *Reject { a := ActivityNew(id, RejectType, ob) o := Reject(*a) return &o } // ReadNew initializes a Read activity -func ReadNew(id ObjectID, ob ObjectOrLink) *Read { +func ReadNew(id ObjectID, ob Item) *Read { a := ActivityNew(id, ReadType, ob) o := Read(*a) return &o } // RemoveNew initializes a Remove activity -func RemoveNew(id ObjectID, ob ObjectOrLink, trgt ObjectOrLink) *Remove { +func RemoveNew(id ObjectID, ob Item, trgt Item) *Remove { a := ActivityNew(id, RemoveType, ob) o := Remove(*a) o.Target = trgt @@ -649,14 +649,14 @@ func RemoveNew(id ObjectID, ob ObjectOrLink, trgt ObjectOrLink) *Remove { } // TentativeRejectNew initializes a TentativeReject activity -func TentativeRejectNew(id ObjectID, ob ObjectOrLink) *TentativeReject { +func TentativeRejectNew(id ObjectID, ob Item) *TentativeReject { a := ActivityNew(id, TentativeRejectType, ob) o := TentativeReject(*a) return &o } // TentativeAcceptNew initializes a TentativeAccept activity -func TentativeAcceptNew(id ObjectID, ob ObjectOrLink) *TentativeAccept { +func TentativeAcceptNew(id ObjectID, ob Item) *TentativeAccept { a := ActivityNew(id, TentativeAcceptType, ob) o := TentativeAccept(*a) return &o @@ -670,21 +670,21 @@ func TravelNew(id ObjectID) *Travel { } // UndoNew initializes an Undo activity -func UndoNew(id ObjectID, ob ObjectOrLink) *Undo { +func UndoNew(id ObjectID, ob Item) *Undo { a := ActivityNew(id, UndoType, ob) o := Undo(*a) return &o } // UpdateNew initializes an Update activity -func UpdateNew(id ObjectID, ob ObjectOrLink) *Update { +func UpdateNew(id ObjectID, ob Item) *Update { a := ActivityNew(id, UpdateType, ob) u := Update(*a) return &u } // ViewNew initializes a View activity -func ViewNew(id ObjectID, ob ObjectOrLink) *View { +func ViewNew(id ObjectID, ob Item) *View { a := ActivityNew(id, ViewType, ob) o := View(*a) return &o @@ -710,7 +710,7 @@ func ValidActivityType(typ ActivityVocabularyType) bool { } // ActivityNew initializes a basic activity -func ActivityNew(id ObjectID, typ ActivityVocabularyType, ob ObjectOrLink) *Activity { +func ActivityNew(id ObjectID, typ ActivityVocabularyType, ob Item) *Activity { if !ValidActivityType(typ) { typ = ActivityType } @@ -739,21 +739,21 @@ func IntransitiveActivityNew(id ObjectID, typ ActivityVocabularyType) *Intransit // RecipientsDeduplication func (a *Activity) RecipientsDeduplication() { - var actor ObjectsArr + var actor ItemCollection actor.Append(a.Actor) recipientsDeduplication(&actor, &a.To, &a.Bto, &a.CC, &a.BCC) } // RecipientsDeduplication func (i *IntransitiveActivity) RecipientsDeduplication() { - var actor ObjectsArr + var actor ItemCollection actor.Append(i.Actor) recipientsDeduplication(&actor, &i.To, &i.Bto, &i.CC, &i.BCC) } // RecipientsDeduplication func (b *Block) RecipientsDeduplication() { - var dedupObjects ObjectsArr + var dedupObjects ItemCollection dedupObjects.Append(b.Actor) dedupObjects.Append(b.Object) recipientsDeduplication(&dedupObjects, &b.To, &b.Bto, &b.CC, &b.BCC) @@ -761,7 +761,7 @@ func (b *Block) RecipientsDeduplication() { // RecipientsDeduplication func (c *Create) RecipientsDeduplication() { - var dedupObjects ObjectsArr + var dedupObjects ItemCollection dedupObjects.Append(c.Actor) dedupObjects.Append(c.Object) recipientsDeduplication(&dedupObjects, &c.To, &c.Bto, &c.CC, &c.BCC) @@ -769,7 +769,7 @@ func (c *Create) RecipientsDeduplication() { // RecipientsDeduplication func (l *Like) RecipientsDeduplication() { - var dedupObjects ObjectsArr + var dedupObjects ItemCollection dedupObjects.Append(l.Actor) dedupObjects.Append(l.Object) recipientsDeduplication(&dedupObjects, &l.To, &l.Bto, &l.CC, &l.BCC) @@ -777,7 +777,7 @@ func (l *Like) RecipientsDeduplication() { // RecipientsDeduplication func (d *Dislike) RecipientsDeduplication() { - var dedupObjects ObjectsArr + var dedupObjects ItemCollection dedupObjects.Append(d.Actor) dedupObjects.Append(d.Object) recipientsDeduplication(&dedupObjects, &d.To, &d.Bto, &d.CC, &d.BCC) @@ -785,7 +785,7 @@ func (d *Dislike) RecipientsDeduplication() { // RecipientsDeduplication func (u *Update) RecipientsDeduplication() { - var dedupObjects ObjectsArr + var dedupObjects ItemCollection dedupObjects.Append(u.Actor) dedupObjects.Append(u.Object) recipientsDeduplication(&dedupObjects, &u.To, &u.Bto, &u.CC, &u.BCC) @@ -1410,7 +1410,7 @@ func (a *Activity) UnmarshalJSON(data []byte) error { a.Published = getAPTime(data, "published") a.StartTime = getAPTime(data, "startTime") a.Updated = getAPTime(data, "updated") - to := getAPObjectsArr(data, "to") + to := getAPItemCollection(data, "to") if to != nil { a.To = to } diff --git a/activitypub/actors.go b/activitypub/actors.go index b3dcd72..013d1fe 100644 --- a/activitypub/actors.go +++ b/activitypub/actors.go @@ -29,29 +29,29 @@ var validActorTypes = [...]ActivityVocabularyType{ // a JSON-LD document with these properties. type Endpoints struct { // Upload endpoint URI for this user for binary data. - UploadMedia ObjectOrLink `jsonld:"uploadMedia,omitempty"` + UploadMedia Item `jsonld:"uploadMedia,omitempty"` // Endpoint URI so this actor's clients may access remote ActivityStreams objects which require authentication // to access. To use this endpoint, the client posts an x-www-form-urlencoded id parameter with the value being // the id of the requested ActivityStreams object. - OauthAuthorizationEndpoint ObjectOrLink `jsonld:"oauthAuthorizationEndpoint,omitempty"` + OauthAuthorizationEndpoint Item `jsonld:"oauthAuthorizationEndpoint,omitempty"` // If OAuth 2.0 bearer tokens [RFC6749] [RFC6750] are being used for authenticating client to server interactions, // this endpoint specifies a URI at which a browser-authenticated user may obtain a new authorization grant. - OauthTokenEndpoint ObjectOrLink `jsonld:"oauthTokenEndpoint,omitempty"` + OauthTokenEndpoint Item `jsonld:"oauthTokenEndpoint,omitempty"` // If OAuth 2.0 bearer tokens [RFC6749] [RFC6750] are being used for authenticating client to server interactions, // this endpoint specifies a URI at which a client may acquire an access token. - ProvideClientKey ObjectOrLink `jsonld:"provideClientKey,omitempty"` + ProvideClientKey Item `jsonld:"provideClientKey,omitempty"` // If Linked Data Signatures and HTTP Signatures are being used for authentication and authorization, // this endpoint specifies a URI at which browser-authenticated users may authorize a client's public // key for client to server interactions. - SignClientKey ObjectOrLink `jsonld:"signClientKey,omitempty"` + SignClientKey Item `jsonld:"signClientKey,omitempty"` // If Linked Data Signatures and HTTP Signatures are being used for authentication and authorization, // this endpoint specifies a URI at which a client key may be signed by the actor's key for a time window to // act on behalf of the actor in interacting with foreign servers. - SharedInbox ObjectOrLink `jsonld:"sharedInbox,omitempty"` + SharedInbox Item `jsonld:"sharedInbox,omitempty"` } type CanAct interface { - ObjectOrLink + Item Actor() Actor } @@ -69,13 +69,13 @@ type Actor struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -85,13 +85,13 @@ type Actor struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -100,15 +100,15 @@ type Actor struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -119,19 +119,19 @@ type Actor struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -139,19 +139,19 @@ type Actor struct { Duration time.Duration `jsonld:"duration,omitempty"` // A reference to an [ActivityStreams] OrderedCollection comprised of all the messages received by the actor; // see 5.2 Inbox. - Inbox CollectionInterface `jsonld:"inbox,omitempty"` + Inbox Item `jsonld:"inbox,omitempty"` // An [ActivityStreams] OrderedCollection comprised of all the messages produced by the actor; // see 5.1 Outbox. - Outbox CollectionInterface `jsonld:"outbox,omitempty"` + Outbox Item `jsonld:"outbox,omitempty"` // A link to an [ActivityStreams] collection of the actors that this actor is following; // see 5.4 Following Collection - Following CollectionInterface `jsonld:"following,omitempty"` + Following Item `jsonld:"following,omitempty"` // A link to an [ActivityStreams] collection of the actors that follow this actor; // see 5.3 Followers Collection. - Followers CollectionInterface `jsonld:"followers,omitempty"` + Followers Item `jsonld:"followers,omitempty"` // A link to an [ActivityStreams] collection of the actors that follow this actor; // see 5.3 Followers Collection. - Liked CollectionInterface `jsonld:"liked,omitempty"` + Liked Item `jsonld:"liked,omitempty"` // A short username which may be used to refer to the actor, with no uniqueness guarantees. PreferredUsername NaturalLanguageValue `jsonld:"preferredUsername,omitempty,collapsible"` // A json object which maps additional (typically server/domain-wide) endpoints which may be useful either @@ -160,7 +160,7 @@ type Actor struct { // to a JSON-LD document with these properties. Endpoints Endpoints `jsonld:"endpoints,omitempty"` // A list of supplementary Collections which may be of interest. - Streams []CollectionInterface `jsonld:"streams,omitempty"` + Streams []Item `jsonld:"streams,omitempty"` } // ActorInterface @@ -427,14 +427,17 @@ func (a Application) Actor() Actor { func (g Group) Actor() Actor { return Actor(g) } + // Actor returns the underlying Actor type func (o Organization) Actor() Actor { return Actor(o) } + // Actor returns the underlying Actor type func (p Person) Actor() Actor { return Actor(p) } + // Actor returns the underlying Actor type func (s Service) Actor() Actor { return Actor(s) diff --git a/activitypub/actors_test.go b/activitypub/actors_test.go index c340584..60c38ac 100644 --- a/activitypub/actors_test.go +++ b/activitypub/actors_test.go @@ -141,4 +141,3 @@ func TestPerson_IsObject(t *testing.T) { t.Errorf("%T should be a valid object", m) } } - diff --git a/activitypub/collections.go b/activitypub/collections.go index b886147..185d1e5 100644 --- a/activitypub/collections.go +++ b/activitypub/collections.go @@ -7,12 +7,12 @@ import ( var validCollectionTypes = [...]ActivityVocabularyType{CollectionType, OrderedCollectionType} // Page represents a Web Page. -type Page ObjectOrLink +type Page Item type CollectionInterface interface { ObjectOrLink Collection() CollectionInterface - Append(ob ObjectOrLink) error + Append(ob Item) error } // Collection is a subtype of Activity Pub Object that represents ordered or unordered sets of Activity Pub Object or Link instances. @@ -26,13 +26,13 @@ type Collection struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -42,13 +42,13 @@ type Collection struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -57,15 +57,15 @@ type Collection struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -76,19 +76,19 @@ type Collection struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -113,13 +113,13 @@ type OrderedCollection struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -129,13 +129,13 @@ type OrderedCollection struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // The date and time describing the actual or expected ending time of the object. // When used with an Activity object, for instance, the endTime property specifies the moment // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -144,15 +144,15 @@ type OrderedCollection struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -163,19 +163,19 @@ type OrderedCollection struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies an Activity Pub Activity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies an Activity Pub Activity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -265,14 +265,14 @@ func OrderedCollectionPageNew(parent *OrderedCollection) *OrderedCollectionPage } // Append adds an element to an OrderedCollection -func (o *OrderedCollection) Append(ob ObjectOrLink) error { +func (o *OrderedCollection) Append(ob Item) error { o.OrderedItems = append(o.OrderedItems, ob) o.TotalItems++ return nil } // Append adds an element to an Collection -func (c *Collection) Append(ob ObjectOrLink) error { +func (c *Collection) Append(ob Item) error { c.Items = append(c.Items, ob) c.TotalItems++ return nil diff --git a/activitypub/create_activity.go b/activitypub/create_activity.go index 83bbece..0d44253 100644 --- a/activitypub/create_activity.go +++ b/activitypub/create_activity.go @@ -4,64 +4,91 @@ import "time" // CreateActivity is the type for a create activity message type CreateActivity struct { - Activity *Create `jsonld:"activity"` - Published time.Time `jsonld:"published"` - To ObjectsArr `jsonld:"to,omitempty,collapsible"` - CC ObjectsArr `jsonld:"cc,omitempty,collapsible"` + Activity *Create `jsonld:"activity"` + Published time.Time `jsonld:"published"` + To ItemCollection `jsonld:"to,omitempty,collapsible"` + CC ItemCollection `jsonld:"cc,omitempty,collapsible"` } -func loadActorWithInboxObject(a ObjectOrLink, o ObjectOrLink) ObjectOrLink { +func loadActorWithInboxObject(a Item, o Item) Item { typ := a.GetType() switch typ { case ApplicationType: var app Application app, _ = a.(Application) + var inbox *Inbox if app.Inbox == nil { - app.Inbox = InboxNew() + inbox = InboxNew() + } else { + inbox = app.Inbox.(*Inbox) } - app.Inbox.Append(o) + inbox.Append(o) + app.Inbox = inbox return app case GroupType: var grp Group grp, _ = a.(Group) + var inbox *Inbox if grp.Inbox == nil { - grp.Inbox = InboxNew() + inbox = InboxNew() + } else { + inbox = grp.Inbox.(*Inbox) } - grp.Inbox.Append(o) + inbox.Append(o) + grp.Inbox = inbox return grp case OrganizationType: var org Organization org, _ = a.(Organization) + var inbox *Inbox if org.Inbox == nil { - org.Inbox = InboxNew() + inbox = InboxNew() + } else { + inbox = org.Inbox.(*Inbox) } - org.Inbox.Append(o) + inbox.Append(o) + org.Inbox = inbox return org case PersonType: var pers Person pers, _ = a.(Person) + var inbox *Inbox if pers.Inbox == nil { - pers.Inbox = InboxNew() + inbox = InboxNew() + } else { + inbox = pers.Inbox.(*Inbox) } - pers.Inbox.Append(o) + inbox.Append(o) + pers.Inbox = inbox return pers case ServiceType: var serv Service serv, _ = a.(Service) - serv.Inbox.Append(o) + var inbox *Inbox + if serv.Inbox == nil { + inbox = InboxNew() + } else { + inbox = serv.Inbox.(*Inbox) + } + inbox.Append(o) + serv.Inbox = inbox return serv default: actor, _ := a.(Actor) + var inbox *Inbox if actor.Inbox == nil { - actor.Inbox = InboxNew() + inbox = InboxNew() + } else { + inbox = actor.Inbox.(*Inbox) } - actor.Inbox.Append(o) + inbox.Append(o) + actor.Inbox = inbox return actor } } // CreateActivityNew initializes a new CreateActivity message -func CreateActivityNew(id ObjectID, a ObjectOrLink, o ObjectOrLink) CreateActivity { +func CreateActivityNew(id ObjectID, a Item, o Item) CreateActivity { act := CreateNew(id, o) if a != nil { diff --git a/activitypub/inbox.go b/activitypub/inbox.go index ddd8a7d..6d4a7e4 100644 --- a/activitypub/inbox.go +++ b/activitypub/inbox.go @@ -29,7 +29,7 @@ func InboxNew() *Inbox { } // Append adds an element to an InboxStream -func (i *InboxStream) Append(o ObjectOrLink) error { +func (i *InboxStream) Append(o Item) error { if i == nil { return fmt.Errorf("nil ") } @@ -39,7 +39,7 @@ func (i *InboxStream) Append(o ObjectOrLink) error { } // Append adds an element to an Inbox -func (i *Inbox) Append(ob ObjectOrLink) error { +func (i *Inbox) Append(ob Item) error { i.OrderedItems = append(i.OrderedItems, ob) i.TotalItems++ return nil @@ -107,12 +107,12 @@ func (i *Inbox) UnmarshalJSON(data []byte) error { // Collection returns the underlying Collection type func (i *Inbox) Collection() CollectionInterface { - c := OrderedCollection(*i) - return &c + c := OrderedCollection(*i) + return &c } // Collection returns the underlying Collection type func (i *InboxStream) Collection() CollectionInterface { - c := OrderedCollection(*i) - return &c + c := OrderedCollection(*i) + return &c } diff --git a/activitypub/item.go b/activitypub/item.go index 64cd7a4..e7a6442 100644 --- a/activitypub/item.go +++ b/activitypub/item.go @@ -25,9 +25,3 @@ func (i ItemCollection) IsLink() bool { func (i ItemCollection) IsObject() bool { return false } - -// Append adds an element to an Inbox -func (i *ItemCollection) Append(ob ObjectOrLink) error { - *i = append(*i, ob) - return nil -} diff --git a/activitypub/like_activity.go b/activitypub/like_activity.go index c1c37a7..b99b80f 100644 --- a/activitypub/like_activity.go +++ b/activitypub/like_activity.go @@ -4,72 +4,99 @@ import "time" // LikeActivity is the type for a create activity message type LikeActivity struct { - Activity *Like `jsonld:"activity"` - Published time.Time `jsonld:"published"` - To ObjectsArr `jsonld:"to,omitempty,collapsible"` - CC ObjectsArr `jsonld:"cc,omitempty,collapsible"` + Activity *Like `jsonld:"activity"` + Published time.Time `jsonld:"published"` + To ItemCollection `jsonld:"to,omitempty,collapsible"` + CC ItemCollection `jsonld:"cc,omitempty,collapsible"` } // DislikeActivity is the type for a create activity message type DislikeActivity struct { - Activity *Dislike `jsonld:"activity"` - Published time.Time `jsonld:"published"` - To ObjectsArr `jsonld:"to,omitempty,collapsible"` - CC ObjectsArr `jsonld:"cc,omitempty,collapsible"` + Activity *Dislike `jsonld:"activity"` + Published time.Time `jsonld:"published"` + To ItemCollection `jsonld:"to,omitempty,collapsible"` + CC ItemCollection `jsonld:"cc,omitempty,collapsible"` } -func loadActorWithLikedObject(a ObjectOrLink, o ObjectOrLink) ObjectOrLink { +func loadActorWithLikedObject(a Item, o Item) Item { typ := a.GetType() switch typ { case ApplicationType: var app Application app, _ = a.(Application) + var liked *Liked if app.Liked == nil { - app.Liked = LikedNew() + liked = LikedNew() + } else { + liked = app.Liked.(*Liked) } - app.Liked.Append(o) + liked.Append(o) + app.Liked = liked return app case GroupType: var grp Group grp, _ = a.(Group) + var liked *Liked if grp.Liked == nil { - grp.Liked = LikedNew() + liked = LikedNew() + } else { + liked = grp.Liked.(*Liked) } - grp.Liked.Append(o) + liked.Append(o) + grp.Liked = liked return grp case OrganizationType: var org Organization org, _ = a.(Organization) + var liked *Liked if org.Liked == nil { - org.Liked = LikedNew() + liked = LikedNew() + } else { + liked = org.Liked.(*Liked) } - org.Liked.Append(o) + liked.Append(o) + org.Liked = liked return org case PersonType: var pers Person pers, _ = a.(Person) + var liked *Liked if pers.Liked == nil { - pers.Liked = LikedNew() + liked = LikedNew() + } else { + liked = pers.Liked.(*Liked) } - pers.Liked.Append(o) + liked.Append(o) + pers.Liked = liked return pers case ServiceType: var serv Service serv, _ = a.(Service) - serv.Liked.Append(o) + var liked *Liked + if serv.Liked == nil { + liked = LikedNew() + } else { + liked = serv.Liked.(*Liked) + } + liked.Append(o) + serv.Liked = liked return serv default: actor, _ := a.(Actor) + var liked *Liked if actor.Liked == nil { - actor.Liked = LikedNew() + liked = LikedNew() + } else { + liked = actor.Liked.(*Liked) } - actor.Liked.Append(o) + liked.Append(o) + actor.Liked = liked return actor } } // LikeActivityNew initializes a new LikeActivity message -func LikeActivityNew(id ObjectID, a ObjectOrLink, o ObjectOrLink) LikeActivity { +func LikeActivityNew(id ObjectID, a Item, o Item) LikeActivity { act := LikeNew(id, o) if a != nil { @@ -92,7 +119,7 @@ func LikeActivityNew(id ObjectID, a ObjectOrLink, o ObjectOrLink) LikeActivity { } // DislikeActivityNew initializes a new LikeActivity message -func DislikeActivityNew(id ObjectID, a ObjectOrLink, o ObjectOrLink) DislikeActivity { +func DislikeActivityNew(id ObjectID, a Item, o Item) DislikeActivity { act := DislikeNew(id, o) if a != nil { diff --git a/activitypub/liked.go b/activitypub/liked.go index 47eb835..0b972a8 100644 --- a/activitypub/liked.go +++ b/activitypub/liked.go @@ -26,14 +26,14 @@ func LikedNew() *Liked { } // Append adds an element to an LikedCollection -func (l *LikedCollection) Append(o ObjectOrLink) error { +func (l *LikedCollection) Append(o Item) error { l.OrderedItems = append(l.OrderedItems, o) l.TotalItems++ return nil } // Append adds an element to an Outbox -func (l *Liked) Append(ob ObjectOrLink) error { +func (l *Liked) Append(ob Item) error { l.OrderedItems = append(l.OrderedItems, ob) l.TotalItems++ return nil @@ -81,12 +81,12 @@ func (l Liked) IsObject() bool { // Collection returns the underlying Collection type func (l *Liked) Collection() CollectionInterface { - c := OrderedCollection(*l) + c := OrderedCollection(*l) return &c } // Collection returns the underlying Collection type func (l *LikedCollection) Collection() CollectionInterface { - c := OrderedCollection(*l) + c := OrderedCollection(*l) return &c } diff --git a/activitypub/link.go b/activitypub/link.go index 4c8a531..9273b9d 100644 --- a/activitypub/link.go +++ b/activitypub/link.go @@ -30,7 +30,7 @@ type Link struct { // On a Link, specifies a hint as to the rendering width in device-independent pixels of the linked resource. Width uint `jsonld:"width,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The target resource pointed to by a Link. Href URI `jsonld:"href,omitempty"` // Hints as to the language used by the target resource. diff --git a/activitypub/marshalling.go b/activitypub/marshalling.go index 2c73ca4..8c7f660 100644 --- a/activitypub/marshalling.go +++ b/activitypub/marshalling.go @@ -4,8 +4,8 @@ import ( "fmt" ) -func getAPObjectByType(typ ActivityVocabularyType) (ObjectOrLink, error) { - var ret ObjectOrLink +func getAPObjectByType(typ ActivityVocabularyType) (Item, error) { + var ret Item var err error switch typ { diff --git a/activitypub/object.go b/activitypub/object.go index a4d664b..8de3846 100644 --- a/activitypub/object.go +++ b/activitypub/object.go @@ -95,7 +95,7 @@ type ( ActivityObject interface { GetID() *ObjectID } - // ObjectOrLink describes an object of any kind. + // Item describes an object of any kind. ObjectOrLink interface { ActivityObject GetType() ActivityVocabularyType @@ -103,8 +103,6 @@ type ( IsObject() bool //UnmarshalJSON([]byte) error } - // ObjectsArr is a named type for matching an ObjectOrLink slice type to Collection interface - ObjectsArr []ObjectOrLink // LinkOrURI is an interface that Object and Link structs implement, and at the same time // they are kept disjointed LinkOrURI interface { @@ -112,7 +110,7 @@ type ( } // ImageOrLink is an interface that Image and Link structs implement ImageOrLink interface { - ObjectOrLink + Item LinkOrURI } // MimeType is the type for MIME types @@ -262,13 +260,13 @@ type Object struct { Name NaturalLanguageValue `jsonld:"name,omitempty,collapsible"` // Identifies a resource attached or related to an object that potentially requires special handling. // The intent is to provide a model that is at least semantically similar to attachments in email. - Attachment ObjectOrLink `jsonld:"attachment,omitempty"` + Attachment Item `jsonld:"attachment,omitempty"` // Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. // For instance, an object might be attributed to the completion of another activity. - AttributedTo ObjectOrLink `jsonld:"attributedTo,omitempty"` + AttributedTo Item `jsonld:"attributedTo,omitempty"` // Identifies one or more entities that represent the total population of entities // for which the object can considered to be relevant. - Audience ObjectOrLink `jsonld:"audience,omitempty"` + Audience Item `jsonld:"audience,omitempty"` // The content or textual representation of the Activity Pub Object encoded as a JSON string. // By default, the value of content is HTML. // The mediaType property can be used in the object to indicate a different content type. @@ -278,7 +276,7 @@ type Object struct { // The notion of "context" used is intentionally vague. // The intended function is to serve as a means of grouping objects and activities that share a // common originating context or purpose. An example could be all activities relating to a common project or event. - Context ObjectOrLink `jsonld:"context,omitempty"` + Context Item `jsonld:"context,omitempty"` // When used on an Object, identifies the MIME media type of the value of the content property. // If not specified, the content property is assumed to contain text/html content. MediaType MimeType `jsonld:"mediaType,omitempty"` @@ -287,7 +285,7 @@ type Object struct { // the activity concluded or is expected to conclude. EndTime time.Time `jsonld:"endTime,omitempty"` // Identifies the entity (e.g. an application) that generated the object. - Generator ObjectOrLink `jsonld:"generator,omitempty"` + Generator Item `jsonld:"generator,omitempty"` // Indicates an entity that describes an icon for this object. // The image should have an aspect ratio of one (horizontal) to one (vertical) // and should be suitable for presentation at a small size. @@ -296,15 +294,15 @@ type Object struct { // Unlike the icon property, there are no aspect ratio or display size limitations assumed. Image ImageOrLink `jsonld:"image,omitempty"` // Indicates one or more entities for which this object is considered a response. - InReplyTo ObjectOrLink `jsonld:"inReplyTo,omitempty"` + InReplyTo Item `jsonld:"inReplyTo,omitempty"` // Indicates one or more physical or logical locations associated with the object. - Location ObjectOrLink `jsonld:"location,omitempty"` + Location Item `jsonld:"location,omitempty"` // Identifies an entity that provides a preview of this object. - Preview ObjectOrLink `jsonld:"preview,omitempty"` + Preview Item `jsonld:"preview,omitempty"` // The date and time at which the object was published Published time.Time `jsonld:"published,omitempty"` // Identifies a Collection containing objects considered to be responses to this object. - Replies CollectionInterface `jsonld:"replies,omitempty"` + Replies Item `jsonld:"replies,omitempty"` // The date and time describing the actual or expected starting time of the object. // When used with an Activity object, for instance, the startTime property specifies // the moment the activity began or is scheduled to begin. @@ -315,19 +313,19 @@ type Object struct { // One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object. // The key difference between attachment and tag is that the former implies association by inclusion, // while the latter implies associated by reference. - Tag ObjectOrLink `jsonld:"tag,omitempty"` + Tag Item `jsonld:"tag,omitempty"` // The date and time at which the object was updated Updated time.Time `jsonld:"updated,omitempty"` // Identifies one or more links to representations of the object URL LinkOrURI `jsonld:"url,omitempty"` // Identifies an entity considered to be part of the public primary audience of an Activity Pub Object - To ObjectsArr `jsonld:"to,omitempty"` + To ItemCollection `jsonld:"to,omitempty"` // Identifies anActivity Pub Object that is part of the private primary audience of this Activity Pub Object. - Bto ObjectsArr `jsonld:"bto,omitempty"` + Bto ItemCollection `jsonld:"bto,omitempty"` // Identifies anActivity Pub Object that is part of the public secondary audience of this Activity Pub Object. - CC ObjectsArr `jsonld:"cc,omitempty"` + CC ItemCollection `jsonld:"cc,omitempty"` // Identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object. - BCC ObjectsArr `jsonld:"bcc,omitempty"` + BCC ItemCollection `jsonld:"bcc,omitempty"` // When the object describes a time-bound resource, such as an audio or video, a meeting, etc, // the duration property indicates the object's approximate duration. // The value must be expressed as an xsd:duration as defined by [ xmlschema11-2], @@ -387,21 +385,21 @@ func (o Object) GetType() ActivityVocabularyType { return o.Type } -// Append facilitates adding elements to ObjectOrLink arrays -// and ensures ObjectsArr implements the Collection interface -func (c *ObjectsArr) Append(o ObjectOrLink) error { - oldLen := len(*c) - d := make(ObjectsArr, oldLen+1) - for k, it := range *c { +// Append facilitates adding elements to Item arrays +// and ensures ItemCollection implements the Collection interface +func (i *ItemCollection) Append(o Item) error { + oldLen := len(*i) + d := make(ItemCollection, oldLen+1) + for k, it := range *i { d[k] = it } d[oldLen] = o - *c = d + *i = d return nil } // recipientsDeduplication normalizes the received arguments lists -func recipientsDeduplication(recArgs ...*ObjectsArr) error { +func recipientsDeduplication(recArgs ...*ItemCollection) error { recIds := make([]ObjectID, 0) for _, recList := range recArgs { @@ -473,7 +471,7 @@ func (o *Object) UnmarshalJSON(data []byte) error { o.Published = getAPTime(data, "published") o.StartTime = getAPTime(data, "startTime") o.Updated = getAPTime(data, "updated") - to := getAPObjectsArr(data, "to") + to := getAPItemCollection(data, "to") if to != nil { o.To = to } diff --git a/activitypub/object_test.go b/activitypub/object_test.go index 92a4dc9..e118efa 100644 --- a/activitypub/object_test.go +++ b/activitypub/object_test.go @@ -52,7 +52,7 @@ func TestValidObjectType(t *testing.T) { func TestMarshalJSON(t *testing.T) { m := NaturalLanguageValue{ { - "en", "test", + "en", "test", }, { "de", "test", @@ -102,7 +102,7 @@ func TestNaturalLanguageValue_MarshalJSON(t *testing.T) { if js != string(out) { t.Errorf("Different marshal result '%s', instead of '%s'", out, js) } - p1 :=NaturalLanguageValue{ + p1 := NaturalLanguageValue{ { "en", "the test", }, @@ -142,7 +142,7 @@ func TestObject_IsObject(t *testing.T) { } func TestObjectsArr_Append(t *testing.T) { - d := make(ObjectsArr, 0) + d := make(ItemCollection, 0) val := Object{ID: ObjectID("grrr")} @@ -162,7 +162,7 @@ func TestRecipientsDeduplication(t *testing.T) { foo := OrganizationNew("foo") bar := GroupNew("bar") - first := make(ObjectsArr, 0) + first := make(ItemCollection, 0) if len(first) != 0 { t.Errorf("Objects array should have exactly an element") } @@ -188,7 +188,7 @@ func TestRecipientsDeduplication(t *testing.T) { t.Errorf("Objects array should have exactly 4(four) elements, not %d", len(first)) } - second := make(ObjectsArr, 0) + second := make(ItemCollection, 0) second.Append(bar) second.Append(foo) diff --git a/activitypub/outbox.go b/activitypub/outbox.go index 68bbcf8..ade1f31 100644 --- a/activitypub/outbox.go +++ b/activitypub/outbox.go @@ -25,14 +25,14 @@ func OutboxNew() *Outbox { } // Append adds an element to an OutboxStream -func (o *OutboxStream) Append(ob ObjectOrLink) error { +func (o *OutboxStream) Append(ob Item) error { o.OrderedItems = append(o.OrderedItems, ob) o.TotalItems++ return nil } // Append adds an element to an Outbox -func (o *Outbox) Append(ob ObjectOrLink) error { +func (o *Outbox) Append(ob Item) error { o.OrderedItems = append(o.OrderedItems, ob) o.TotalItems++ return nil @@ -100,12 +100,12 @@ func (o *Outbox) UnmarshalJSON(data []byte) error { // Collection returns the underlying Collection type func (o *Outbox) Collection() CollectionInterface { - c := OrderedCollection(*o) + c := OrderedCollection(*o) return &c } // Collection returns the underlying Collection type func (o *OutboxStream) Collection() CollectionInterface { - c := OrderedCollection(*o) + c := OrderedCollection(*o) return &c } diff --git a/activitypub/unmarshalling.go b/activitypub/unmarshalling.go index 203e850..7c56500 100644 --- a/activitypub/unmarshalling.go +++ b/activitypub/unmarshalling.go @@ -13,7 +13,7 @@ import ( ) var ( - apUnmarshalerType = reflect.TypeOf(new(ObjectOrLink)).Elem() + apUnmarshalerType = reflect.TypeOf(new(Item)).Elem() unmarshalerType = reflect.TypeOf(new(jsonld.Unmarshaler)).Elem() textUnmarshalerType = reflect.TypeOf(new(encoding.TextUnmarshaler)).Elem() ) @@ -203,13 +203,13 @@ func getAPItems(data []byte, prop string) ItemCollection { } return it } -func getAPObjectsArr(data []byte, prop string) ObjectsArr { +func getAPItemCollection(data []byte, prop string) ItemCollection { val, typ, _, err := jsonparser.Get(data, prop) if err != nil { return nil } - var it ObjectsArr + var it ItemCollection switch typ { case jsonparser.Array: jsonparser.ArrayEach(data, func(value []byte, dataType jsonparser.ValueType, offset int, err error) { diff --git a/activitypub/update_activity.go b/activitypub/update_activity.go index 103e111..8d56920 100644 --- a/activitypub/update_activity.go +++ b/activitypub/update_activity.go @@ -4,14 +4,14 @@ import "time" // UpdateActivity is the type for a Update activity message type UpdateActivity struct { - Activity *Update `jsonld:"activity"` - Published time.Time `jsonld:"published"` - To ObjectsArr `jsonld:"to,omitempty,collapsible"` - CC ObjectsArr `jsonld:"cc,omitempty,collapsible"` + Activity *Update `jsonld:"activity"` + Published time.Time `jsonld:"published"` + To ItemCollection `jsonld:"to,omitempty,collapsible"` + CC ItemCollection `jsonld:"cc,omitempty,collapsible"` } // UpdateActivityNew initializes a new UpdateActivity message -func UpdateActivityNew(id ObjectID, a ObjectOrLink, o ObjectOrLink) UpdateActivity { +func UpdateActivityNew(id ObjectID, a Item, o Item) UpdateActivity { act := UpdateNew(id, o) if a != nil { diff --git a/tests/integration_test.go b/tests/integration_test.go index d2ed235..718f232 100644 --- a/tests/integration_test.go +++ b/tests/integration_test.go @@ -43,7 +43,7 @@ func TestAcceptSerialization(t *testing.T) { func TestCreateActivityHTTPSerialization(t *testing.T) { id := a.ObjectID("test_object") obj := a.AcceptNew(id, nil) - obj.Name.Set("en","Accept New") + obj.Name.Set("en", "Accept New") uri := string(a.ActivityBaseURI) diff --git a/tests/server_to_server_test.go b/tests/server_to_server_test.go index 13c579a..34ef7a9 100644 --- a/tests/server_to_server_test.go +++ b/tests/server_to_server_test.go @@ -152,7 +152,7 @@ S2S Server: Deduplication of recipient list c.RecipientsDeduplication() - checkDedup := func(list a.ObjectsArr, recIds *[]a.ObjectID) error { + checkDedup := func(list a.ItemCollection, recIds *[]a.ObjectID) error { for _, rec := range list { for _, id := range *recIds { if *rec.GetID() == id { @@ -214,7 +214,7 @@ Activity being notified about c.RecipientsDeduplication() - checkActor := func(list a.ObjectsArr, actor a.ObjectOrLink) error { + checkActor := func(list a.ItemCollection, actor a.Item) error { for _, rec := range list { if rec.GetID() == actor.GetID() { return fmt.Errorf("%T[%s] Actor of activity should not be in the recipients list", rec, *actor.GetID()) @@ -266,7 +266,7 @@ S2S Server: Do-not-deliver considerations b.RecipientsDeduplication() - checkActor := func(list a.ObjectsArr, ob a.ObjectOrLink) error { + checkActor := func(list a.ItemCollection, ob a.Item) error { for _, rec := range list { if rec.GetID() == ob.GetID() { return fmt.Errorf("%T[%s] of activity should not be in the recipients list", rec, *ob.GetID()) diff --git a/tests/unmarshalling_test.go b/tests/unmarshalling_test.go index e10d6b6..da07042 100644 --- a/tests/unmarshalling_test.go +++ b/tests/unmarshalling_test.go @@ -340,7 +340,7 @@ var allTests = tests{ AttributedTo: a.IRI("https://littr.git/api/accounts/anonymous"), InReplyTo: a.IRI("https://littr.git/api/accounts/system/outbox/7ca154ff"), Content: a.NaturalLanguageValue{{a.NilLangRef, "

Hello world

"}}, - To: a.ObjectsArr{a.IRI("https://www.w3.org/ns/activitystreams#Public")}, + To: a.ItemCollection{a.IRI("https://www.w3.org/ns/activitystreams#Public")}, }, }, },