123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package apmodels
- import (
- "net/url"
- "time"
- "github.com/go-fed/activity/streams"
- "github.com/go-fed/activity/streams/vocab"
- "github.com/owncast/owncast/core/data"
- )
- // PrivacyAudience represents the audience for an activity.
- type PrivacyAudience = string
- const (
- // PUBLIC is an audience meaning anybody can view the item.
- PUBLIC PrivacyAudience = "https://www.w3.org/ns/activitystreams#Public"
- )
- // MakeNotePublic ses the required proeprties to make this note seen as public.
- func MakeNotePublic(note vocab.ActivityStreamsNote) vocab.ActivityStreamsNote {
- public, _ := url.Parse(PUBLIC)
- to := streams.NewActivityStreamsToProperty()
- to.AppendIRI(public)
- note.SetActivityStreamsTo(to)
- audience := streams.NewActivityStreamsAudienceProperty()
- audience.AppendIRI(public)
- note.SetActivityStreamsAudience(audience)
- return note
- }
- // MakeNoteDirect sets the required properties to make this note seen as a
- // direct message.
- func MakeNoteDirect(note vocab.ActivityStreamsNote, toIRI *url.URL) vocab.ActivityStreamsNote {
- to := streams.NewActivityStreamsCcProperty()
- to.AppendIRI(toIRI)
- to.AppendIRI(toIRI)
- note.SetActivityStreamsCc(to)
- // Mastodon requires a tag with a type of "mention" and href of the account
- // for a message to be a "Direct Message".
- tagProperty := streams.NewActivityStreamsTagProperty()
- tag := streams.NewTootHashtag()
- tagTypeProperty := streams.NewJSONLDTypeProperty()
- tagTypeProperty.AppendXMLSchemaString("Mention")
- tag.SetJSONLDType(tagTypeProperty)
- tagHrefProperty := streams.NewActivityStreamsHrefProperty()
- tagHrefProperty.Set(toIRI)
- tag.SetActivityStreamsHref(tagHrefProperty)
- tagProperty.AppendTootHashtag(tag)
- tagProperty.AppendTootHashtag(tag)
- note.SetActivityStreamsTag(tagProperty)
- return note
- }
- // MakeActivityDirect sets the required properties to make this activity seen
- // as a direct message.
- func MakeActivityDirect(activity vocab.ActivityStreamsCreate, toIRI *url.URL) vocab.ActivityStreamsCreate {
- to := streams.NewActivityStreamsCcProperty()
- to.AppendIRI(toIRI)
- to.AppendIRI(toIRI)
- activity.SetActivityStreamsCc(to)
- // Mastodon requires a tag with a type of "mention" and href of the account
- // for a message to be a "Direct Message".
- tagProperty := streams.NewActivityStreamsTagProperty()
- tag := streams.NewTootHashtag()
- tagTypeProperty := streams.NewJSONLDTypeProperty()
- tagTypeProperty.AppendXMLSchemaString("Mention")
- tag.SetJSONLDType(tagTypeProperty)
- tagHrefProperty := streams.NewActivityStreamsHrefProperty()
- tagHrefProperty.Set(toIRI)
- tag.SetActivityStreamsHref(tagHrefProperty)
- tagProperty.AppendTootHashtag(tag)
- tagProperty.AppendTootHashtag(tag)
- activity.SetActivityStreamsTag(tagProperty)
- return activity
- }
- // MakeActivityPublic sets the required properties to make this activity
- // seen as public.
- func MakeActivityPublic(activity vocab.ActivityStreamsCreate) vocab.ActivityStreamsCreate {
- // TO the public if we're not treating ActivityPub as "private".
- if !data.GetFederationIsPrivate() {
- public, _ := url.Parse(PUBLIC)
- to := streams.NewActivityStreamsToProperty()
- to.AppendIRI(public)
- activity.SetActivityStreamsTo(to)
- audience := streams.NewActivityStreamsAudienceProperty()
- audience.AppendIRI(public)
- activity.SetActivityStreamsAudience(audience)
- }
- return activity
- }
- // MakeCreateActivity will return a new Create activity with the provided ID.
- func MakeCreateActivity(activityID *url.URL) vocab.ActivityStreamsCreate {
- activity := streams.NewActivityStreamsCreate()
- id := streams.NewJSONLDIdProperty()
- id.Set(activityID)
- activity.SetJSONLDId(id)
- return activity
- }
- // MakeUpdateActivity will return a new Update activity with the provided aID.
- func MakeUpdateActivity(activityID *url.URL) vocab.ActivityStreamsUpdate {
- activity := streams.NewActivityStreamsUpdate()
- id := streams.NewJSONLDIdProperty()
- id.Set(activityID)
- activity.SetJSONLDId(id)
- // CC the public if we're not treating ActivityPub as "private".
- if !data.GetFederationIsPrivate() {
- public, _ := url.Parse(PUBLIC)
- cc := streams.NewActivityStreamsCcProperty()
- cc.AppendIRI(public)
- activity.SetActivityStreamsCc(cc)
- }
- return activity
- }
- // MakeNote will return a new Note object.
- func MakeNote(text string, noteIRI *url.URL, attributedToIRI *url.URL) vocab.ActivityStreamsNote {
- note := streams.NewActivityStreamsNote()
- content := streams.NewActivityStreamsContentProperty()
- content.AppendXMLSchemaString(text)
- note.SetActivityStreamsContent(content)
- id := streams.NewJSONLDIdProperty()
- id.Set(noteIRI)
- note.SetJSONLDId(id)
- published := streams.NewActivityStreamsPublishedProperty()
- published.Set(time.Now())
- note.SetActivityStreamsPublished(published)
- attributedTo := attributedToIRI
- attr := streams.NewActivityStreamsAttributedToProperty()
- attr.AppendIRI(attributedTo)
- note.SetActivityStreamsAttributedTo(attr)
- return note
- }
|