Adding a lot of comments from ActivityPub/ActivityStreams/ActivityVocabulary specs

To quiet some go lint warnings
This commit is contained in:
Marius Orcsik 2018-03-27 16:16:07 +02:00
parent 5d13db4836
commit b45570c418
No known key found for this signature in database
GPG key ID: 889CE8E4FB2D877A
13 changed files with 85 additions and 40 deletions

View file

@ -17,7 +17,10 @@ var validActorTypes = [...]ActivityVocabularyType{
ServiceType,
}
// Endpoints
// Endpoints a json object which maps additional (typically server/domain-wide)
// endpoints which may be useful either for this actor or someone referencing this actor.
// This mapping may be nested inside the actor document as the value or may be a link to
// a JSON-LD document with these properties.
type Endpoints struct {
// Upload endpoint URI for this user for binary data.
UploadMedia ObjectOrLink `jsonld:"uploadMedia,omitempty"`
@ -41,7 +44,10 @@ type Endpoints struct {
SharedInbox ObjectOrLink `jsonld:"sharedInbox,omitempty"`
}
// Actor types are apObject types that are capable of performing activities.
// Actor is generally one of the ActivityStreams Actor Types, but they don't have to be.
// For example, a Profile object might be used as an actor, or a type from an ActivityStreams extension.
// Actors are retrieved like any other Object in ActivityPub.
// Like other ActivityStreams objects, actors have an id, which is a URI.
type Actor struct {
*apObject
// A reference to an [ActivityStreams] OrderedCollection comprised of all the messages received by the actor;

View file

@ -2,10 +2,10 @@ package activitypub
var validCollectionTypes = [...]ActivityVocabularyType{CollectionType, OrderedCollectionType}
// Page
// Page represents a Web Page.
type Page ObjectOrLink
// Collection
// Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances.
type Collection struct {
*apObject
// A non-negative integer specifying the total number of objects contained by the logical view of the collection.
@ -15,7 +15,8 @@ type Collection struct {
Items ItemCollection `jsonld:"items,omitempty"`
}
// OrderedCollection
// OrderedCollection is a subtype of Collection in which members of the logical
// collection are assumed to always be strictly ordered.
type OrderedCollection struct {
*apObject
// A non-negative integer specifying the total number of objects contained by the logical view of the collection.
@ -25,7 +26,9 @@ type OrderedCollection struct {
OrderedItems ItemCollection `jsonld:"orderedItems,omitempty"`
}
// CollectionPage
// CollectionPage is a Collection that contains a large number of items and when it becomes impractical
// for an implementation to serialize every item contained by a Collection using the items (or orderedItems)
// property alone. In such cases, the items within a Collection can be divided into distinct subsets or "pages".
type CollectionPage struct {
PartOf *Collection
// In a paged Collection, indicates the page that contains the most recently updated member items.
@ -40,7 +43,10 @@ type CollectionPage struct {
Prev Page `jsonld:"prev,omitempty"`
}
// OrderedCollectionPage
// OrderedCollectionPage type extends from both CollectionPage and OrderedCollection.
// In addition to the properties inherited from each of those, the OrderedCollectionPage
// may contain an additional startIndex property whose value indicates the relative index position
// of the first item contained by the page within the OrderedCollection to which the page belongs.
type OrderedCollectionPage struct {
PartOf *OrderedCollection
// In a paged Collection, indicates the page that contains the most recently updated member items.

View file

@ -1,9 +1,11 @@
package activitypub
type (
// FollowingCollection
// FollowingCollection is a list of everybody that the actor has followed, added as a side effect.
// The following collection MUST be either an OrderedCollection or a Collection and MAY
// be filtered on privileges of an authenticated user or as appropriate when no authentication is given.
FollowingCollection Following
// Following
// Following is a type alias for a simple Collection
Following Collection
)

View file

@ -1,9 +1,13 @@
package activitypub
type (
// InboxStream
// InboxStream contains all activities received by the actor.
// The server SHOULD filter content according to the requester's permission.
// In general, the owner of an inbox is likely to be able to access all of their inbox contents.
// Depending on access control, some other content may be public, whereas other content may
// require authentication for non-owner users, if they can access the inbox at all.
InboxStream Inbox
// Inbox
// Inbox is a type alias for an Ordered Collection
Inbox OrderedCollection
)

View file

@ -1,9 +1,12 @@
package activitypub
type (
// LikedCollection
// LikedCollection is a list of every object from all of the actor's Like activities,
// added as a side effect. The liked collection MUST be either an OrderedCollection or
// a Collection and MAY be filtered on privileges of an authenticated user or as
// appropriate when no authentication is given.
LikedCollection Liked
// Liked
// Liked is a type alias for an Ordered Collection
Liked OrderedCollection
)

View file

@ -1,9 +1,12 @@
package activitypub
type (
// LikesCollection
// LikesCollection is a list of all Like activities with this object as the object property,
// added as a side effect. The likes collection MUST be either an OrderedCollection or a Collection
// and MAY be filtered on privileges of an authenticated user or as appropriate when
// no authentication is given.
LikesCollection Likes
// Likes
// Likes is a type alias for an Ordered Collection
Likes OrderedCollection
)

View file

@ -40,7 +40,7 @@ type Link struct {
HrefLang LangRef `jsonld:"hrefLang,omitempty"`
}
// Mention
// Mention is a specialized Link that represents an @mention.
type Mention Link
// ValidLinkType validates a type against the valid link types

View file

@ -5,13 +5,24 @@ import (
"time"
)
// ObjectID
// ObjectID designates an unique global identifier.
// All Objects in [ActivityStreams] should have unique global identifiers.
// ActivityPub extends this requirement; all objects distributed by the ActivityPub protocol MUST
// have unique global identifiers, unless they are intentionally transient
// (short lived activities that are not intended to be able to be looked up,
// such as some kinds of chat messages or game notifications).
// These identifiers must fall into one of the following groups:
//
// 1. Publicly dereferencable URIs, such as HTTPS URIs, with their authority belonging
// to that of their originating server. (Publicly facing content SHOULD use HTTPS URIs).
// 2. An ID explicitly specified as the JSON null object, which implies an anonymous object
// (a part of its parent context)
type ObjectID string
const (
// ActivityBaseURI the basic URI for the activity streams namespaces
ActivityBaseURI URI = URI("https://www.w3.org/ns/activitystreams#")
ObjectType ActivityVocabularyType = "apObject"
ObjectType ActivityVocabularyType = "ActivityPubObject"
LinkType ActivityVocabularyType = "Link"
ActivityType ActivityVocabularyType = "Activity"
IntransitiveActivityType ActivityVocabularyType = "IntransitiveActivity"
@ -19,7 +30,7 @@ const (
CollectionType ActivityVocabularyType = "Collection"
OrderedCollectionType ActivityVocabularyType = "OrderedCollection"
// apObject Types
// Activity Pub Object Types
ArticleType ActivityVocabularyType = "Article"
AudioType ActivityVocabularyType = "Audio"
DocumentType ActivityVocabularyType = "Document"
@ -33,7 +44,7 @@ const (
TombstoneType ActivityVocabularyType = "Tombstone"
VideoType ActivityVocabularyType = "Video"
// Link Types
// MentionType is a link type for @mentions
MentionType ActivityVocabularyType = "Mention"
)
@ -68,33 +79,35 @@ var validObjectTypes = [...]ActivityVocabularyType{
}
type (
// ActivityVocabularyType
// ActivityVocabularyType is the data type for an Activity type object
ActivityVocabularyType string
// ActivityObject
// ActivityObject is a subtype of Object that describes some form of action that may happen,
// is currently happening, or has already happened
ActivityObject interface{}
// ObjectOrLink
// ObjectOrLink describes an object of any kind.
ObjectOrLink interface {
IsLink() bool
IsObject() bool
}
// LinkOrUri
// LinkOrUri is an interface that Object and Link structs implement, and at the same time
// they are kept disjointed
LinkOrUri interface{}
// ImageOrLink
// ImageOrLink is an interface that Image and Link structs implement
ImageOrLink interface{}
// MimeType
// MimeType is the type for MIME types
MimeType string
// LangRef
// LangRef is the type for a language reference, should be ISO 639-1 language specifier.
LangRef string
// NaturalLanguageValue
// NaturalLanguageValue is a mapping for multiple language values
NaturalLanguageValue map[LangRef]string
)
// IsLink validates if current apObject is a Link
// IsLink validates if current Activity Pub Object is a Link
func (o apObject) IsLink() bool {
return ValidLinkType(o.Type)
}
// IsObject validates if current apObject is an Object
// IsObject validates if current Activity Pub Object is an Object
func (o apObject) IsObject() bool {
return ValidObjectType(o.Type)
}
@ -193,10 +206,11 @@ type apObject struct {
Duration time.Duration `jsonld:"duration,omitempty"`
}
// ContentType
// ContentType represents the content type for a Source object
type ContentType string
// Source
// Source is intended to convey some sort of source from which the content markup was derived,
// as a form of provenance, or to support future editing by clients.
type Source struct {
Content ContentType
MediaType string

View file

@ -1,9 +1,11 @@
package activitypub
type (
// OutboxStream
// OutboxStream contains activities the user has published,
// subject to the ability of the requestor to retrieve the activity (that is,
// the contents of the outbox are filtered by the permissions of the person reading it).
OutboxStream Outbox
// Outbox
// Outbox is a type alias for an Ordered Collection
Outbox OrderedCollection
)

View file

@ -1,9 +1,12 @@
package activitypub
type (
// SharesCollection
// SharesCollection is a list of all Announce activities with this object as the object property,
// added as a side effect. The shares collection MUST be either an OrderedCollection or a Collection
// and MAY be filtered on privileges of an authenticated user or as appropriate when no authentication
// is given.
SharesCollection Shares
// Shares
// Shares is a type alias for an Ordered Collection
Shares OrderedCollection
)

View file

@ -1,9 +1,9 @@
package activitypub
type (
// IRI
// IRI is a Internationalized Resource Identifiers (IRIs) RFC3987
IRI URI
// URI
// URI is a Uniform Resource Identifier (URI) RFC3986
URI string
)

View file

@ -17,6 +17,7 @@ type Context struct {
Language activitypub.NaturalLanguageValue `jsonld:"@language,omitempty,collapsible"`
}
// Collapsible is an interface used by the JSON-LD marshaller to collapse a struct to one single value
type Collapsible interface {
Collapse() []byte
}
@ -26,6 +27,7 @@ func (c *Context) Ref() Ref {
return Ref(c.URL)
}
// Collapse returns the plain text collapsed value of the current Context object
func (c *Context) Collapse() []byte {
return []byte(c.URL)
}

View file

@ -42,9 +42,9 @@ func TestCreateActivityHTTPSerialization(t *testing.T) {
obj := activitypub.AcceptNew(id, nil)
obj.Name["en"] = "Accept New"
baseUri := string(activitypub.ActivityBaseURI)
baseURI := string(activitypub.ActivityBaseURI)
ctx := jsonld.Context{
URL: jsonld.Ref(baseUri + string(obj.Type)),
URL: jsonld.Ref(baseURI + string(obj.Type)),
}
data, err := jsonld.Marshal(obj, &ctx)
if err != nil {