package activitypub import "time" const ( Namespace = "https://www.w3.org/ns/activitystreams" toPublic = "https://www.w3.org/ns/activitystreams#Public" ) var Extensions = map[string]string{ "sc": "http://schema.org#", "commentsEnabled": "sc:Boolean", } // Activity describes actions that have either already occurred, are in the // process of occurring, or may occur in the future. type Activity struct { BaseObject Actor string `json:"actor"` Published time.Time `json:"published,omitempty"` To []string `json:"to,omitempty"` CC []string `json:"cc,omitempty"` Object *Object `json:"object"` } type FollowActivity struct { BaseObject Actor string `json:"actor"` Published time.Time `json:"published,omitempty"` To []string `json:"to,omitempty"` CC []string `json:"cc,omitempty"` Object string `json:"object"` } // NewCreateActivity builds a basic Create activity that includes the given // Object and the Object's AttributedTo property as the Actor. func NewCreateActivity(o *Object) *Activity { a := Activity{ BaseObject: BaseObject{ Context: []interface{}{ Namespace, Extensions, }, ID: o.ID, Type: "Create", }, Actor: o.AttributedTo, Object: o, Published: o.Published, } return &a } // NewUpdateActivity builds a basic Update activity that includes the given // Object and the Object's AttributedTo property as the Actor. func NewUpdateActivity(o *Object) *Activity { a := Activity{ BaseObject: BaseObject{ Context: []interface{}{ Namespace, Extensions, }, ID: o.ID, Type: "Update", }, Actor: o.AttributedTo, Object: o, Published: o.Published, } return &a } // NewDeleteActivity builds a basic Delete activity that includes the given // Object and the Object's AttributedTo property as the Actor. func NewDeleteActivity(o *Object) *Activity { a := Activity{ BaseObject: BaseObject{ Context: []interface{}{ Namespace, }, ID: o.ID, Type: "Delete", }, Actor: o.AttributedTo, Object: o, } return &a } // NewFollowActivity builds a basic Follow activity. func NewFollowActivity(actorIRI, followeeIRI string) *FollowActivity { a := FollowActivity{ BaseObject: BaseObject{ Context: []interface{}{ Namespace, }, Type: "Follow", }, Actor: actorIRI, Object: followeeIRI, } return &a } // NewNoteObject creates a basic Note object that includes the public // namespace in IRIs it's addressed to. func NewNoteObject() *Object { o := Object{ BaseObject: BaseObject{ Type: "Note", }, To: []string{ toPublic, }, } return &o } // NewArticleObject creates a basic Article object that includes the public // namespace in IRIs it's addressed to. func NewArticleObject() *Object { o := Object{ BaseObject: BaseObject{ Type: "Article", }, To: []string{ toPublic, }, } return &o } // NewAnounceObject creates a basic Anounce object that includes the public // namespace in IRIs it's addressed to. func NewAnounceObject() *Object { o := Object{ BaseObject: BaseObject{ Type: "Anounce", }, To: []string{ toPublic, }, } return &o }