@@ -0,0 +1,58 @@ | |||||
package activitystreams | |||||
import ( | |||||
"time" | |||||
) | |||||
const ( | |||||
toPublic = "https://www.w3.org/ns/activitystreams#Public" | |||||
) | |||||
type Activity struct { | |||||
BaseObject | |||||
Actor string `json:"actor"` | |||||
Published time.Time `json:"published"` | |||||
To []string `json:"to"` | |||||
CC []string `json:"cc"` | |||||
Object *Object `json:"object"` | |||||
} | |||||
func NewCreateActivity(o *Object) *Activity { | |||||
a := Activity{ | |||||
BaseObject: BaseObject{ | |||||
ID: o.ID + "/activity", | |||||
Type: "Create", | |||||
}, | |||||
Actor: o.AttributedTo, | |||||
Published: o.Published, | |||||
To: o.To, | |||||
CC: o.CC, | |||||
Object: o, | |||||
} | |||||
return &a | |||||
} | |||||
type Object struct { | |||||
BaseObject | |||||
Published time.Time `json:"published"` | |||||
Summary *string `json:"summary"` | |||||
InReplyTo *string `json:"inReplyTo"` | |||||
URL string `json:"url"` | |||||
AttributedTo string `json:"attributedTo"` | |||||
To []string `json:"to"` | |||||
CC []string `json:"cc"` | |||||
Content string `json:"content"` | |||||
ContentMap map[string]string `json:"contentMap"` | |||||
} | |||||
func NewNoteObject() *Object { | |||||
o := Object{ | |||||
BaseObject: BaseObject{ | |||||
Type: "Note", | |||||
}, | |||||
To: []string{ | |||||
toPublic, | |||||
}, | |||||
} | |||||
return &o | |||||
} |
@@ -1,5 +1,7 @@ | |||||
package activitystreams | package activitystreams | ||||
import "fmt" | |||||
type ( | type ( | ||||
BaseObject struct { | BaseObject struct { | ||||
Context []string `json:"@context"` | Context []string `json:"@context"` | ||||
@@ -41,3 +43,28 @@ func NewOrderedCollection(accountRoot string, items int) *OrderedCollection { | |||||
} | } | ||||
return &oc | return &oc | ||||
} | } | ||||
type OrderedCollectionPage struct { | |||||
BaseObject | |||||
TotalItems int `json:"totalItems"` | |||||
PartOf string `json:"partOf"` | |||||
Next string `json:"next,omitempty"` | |||||
Prev string `json:"prev,omitempty"` | |||||
OrderedItems []Activity `json:"orderedItems"` | |||||
} | |||||
func NewOrderedCollectionPage(accountRoot string, items, page int) *OrderedCollectionPage { | |||||
ocp := OrderedCollectionPage{ | |||||
BaseObject: BaseObject{ | |||||
Context: []string{ | |||||
"https://www.w3.org/ns/activitystreams", | |||||
}, | |||||
ID: fmt.Sprintf("%s/outbox?page=%d", accountRoot, page), | |||||
Type: "OrderedCollectionPage", | |||||
}, | |||||
TotalItems: items, | |||||
PartOf: accountRoot + "/outbox", | |||||
Next: fmt.Sprintf("%s/outbox?page=%d", accountRoot, page+1), | |||||
} | |||||
return &ocp | |||||
} |