twink/vendor/sourcery.dny.nu/pana/actor.go

384 lines
9.7 KiB
Go
Raw Normal View History

2025-12-05 12:20:05 +01:00
package pana
import (
"encoding/json"
"iter"
ld "sourcery.dny.nu/longdistance"
"sourcery.dny.nu/pana/vocab/mastodon"
as "sourcery.dny.nu/pana/vocab/w3/activitystreams"
ldp "sourcery.dny.nu/pana/vocab/w3/ldp"
secv1 "sourcery.dny.nu/pana/vocab/w3id/securityv1"
)
// Actor is the ActivityStreams Actor type.
//
// See https://www.w3.org/TR/activitypub/#actor-objects.
type Actor Object
type Application = Actor
type Group = Actor
type Organisation = Actor
type Organization = Organisation
type Person = Actor
type Service = Actor
// NewActor initialises a new Actor.
func NewActor() *Actor {
return &Actor{
Properties: make(ld.Properties),
Type: []string{as.TypePerson},
}
}
// Build finalises the Actor.
//
// This returns [Any] since that's what [Activity.SetObject] expects.
func (a *Actor) Build() Any {
return Any(*a)
}
// See [Object.GetType].
func (a *Actor) GetType() string {
return (*Object)(a).GetType()
}
// See [Object.SetType].
func (a *Actor) SetType(typ string) *Actor {
(*Object)(a).SetType(typ)
return a
}
// See [Object.GetName].
func (a *Actor) GetName() iter.Seq[*Localised] {
return (*Object)(a).GetName()
}
// See [Object.AddName].
func (a *Actor) AddName(ls ...Localised) *Actor {
(*Object)(a).AddName(ls...)
return a
}
// GetMemorial returns the value in [mastodon.Memorial].
//
// It returns false if the property was absent.
func (a *Actor) GetMemorial() json.RawMessage {
if nodes := (*ld.Node)(a).GetNodes(mastodon.Memorial); len(nodes) == 1 {
return nodes[0].Value
}
return json.RawMessage(`false`)
}
// SetMemorial sets the value in [mastodon.Memorial].
func (a *Actor) SetMemorial(v json.RawMessage) *Actor {
(*ld.Node)(a).SetNodes(mastodon.Memorial, ld.Node{Value: v})
return a
}
// See [Object.GetSummary].
func (a *Actor) GetSummary() iter.Seq[*Localised] {
return (*Object)(a).GetSummary()
}
// See [Object.AddSummary].
func (a *Actor) AddSummary(ls ...Localised) *Actor {
(*Object)(a).AddSummary(ls...)
return a
}
// GetIcon returns the [Image] in [as.Icon].
//
// See https://www.w3.org/TR/activitystreams-vocabulary/#dfn-icon.
func (a *Actor) GetIcon() *Image {
if nodes := (*ld.Node)(a).GetNodes(as.Icon); len(nodes) == 1 {
return (*Image)(&nodes[0])
}
return nil
}
// SetIcon sets the [Image] in [as.Icon].
func (a *Actor) SetIcon(img Image) *Actor {
(*ld.Node)(a).SetNodes(as.Icon, ld.Node(img))
return a
}
// GetImage returns the [Image] in [as.Image].
//
// See https://www.w3.org/TR/activitystreams-vocabulary/#dfn-image.
func (a *Actor) GetImage() *Image {
if nodes := (*ld.Node)(a).GetNodes(as.Image); len(nodes) == 1 {
return (*Image)(&nodes[0])
}
return nil
}
// SetImage sets the [Image] in [as.Image].
func (a *Actor) SetImage(img Image) *Actor {
(*ld.Node)(a).SetNodes(as.Image, ld.Node(img))
return a
}
// GetDiscoverable returns the value in [mastodon.Discoverable].
//
// When discoverable is absent this returns false. We treat discoverable as
// opt-in, not opt-out.
//
// See https://docs.joinmastodon.org/spec/activitypub/#toot.
func (a *Actor) GetDiscoverable() json.RawMessage {
if nodes := (*ld.Node)(a).GetNodes(mastodon.Discoverable); len(nodes) == 1 {
return nodes[0].Value
}
return json.RawMessage(`false`)
}
// SetDiscoverable sets the value in [mastodon.Discoverable].
func (a *Actor) SetDiscoverable(v json.RawMessage) *Actor {
(*ld.Node)(a).SetNodes(mastodon.Discoverable, ld.Node{Value: v})
return a
}
// GetFeatured returns the [Collection] stored in [mastodon.Featured].
//
// See https://docs.joinmastodon.org/spec/activitypub/#toot.
func (a *Actor) GetFeatured() *Collection {
if nodes := (*ld.Node)(a).GetNodes(mastodon.Featured); len(nodes) == 1 {
return (*Collection)(&nodes[0])
}
return nil
}
// SetFeatured sets the [Collection] in [mastodon.Featured].
func (a *Actor) SetFeatured(c Collection) *Actor {
(*ld.Node)(a).SetNodes(mastodon.Featured, ld.Node(c))
return a
}
// GetFeaturedTags returns the [Collection] stored in [mastodon.FeaturedTags].
//
// See https://docs.joinmastodon.org/spec/activitypub/#toot.
func (a *Actor) GetFeaturedTags() *Collection {
if nodes := (*ld.Node)(a).GetNodes(mastodon.FeaturedTags); len(nodes) == 1 {
return (*Collection)(&nodes[0])
}
return nil
}
// SetFeaturedTags sets the [Collection] in [mastodon.FeaturedTags].
func (a *Actor) SetFeaturedTags(c Collection) *Actor {
(*ld.Node)(a).SetNodes(mastodon.FeaturedTags, ld.Node(c))
return a
}
// GetFollowers returns the [Collection] stored in [as.Followers].
//
// See https://www.w3.org/TR/activitypub/#followers.
func (a *Actor) GetFollowers() *Collection {
if nodes := (*ld.Node)(a).GetNodes(as.Followers); len(nodes) == 1 {
return (*Collection)(&nodes[0])
}
return nil
}
// SetFollowers sets the [Collection] in [as.Followers].
func (a *Actor) SetFollowers(c Collection) *Actor {
(*ld.Node)(a).SetNodes(as.Followers, ld.Node(c))
return a
}
// GetFollowing returns the [Collection] stored in [as.Following].
//
// See https://www.w3.org/TR/activitypub/#following.
func (a *Actor) GetFollowing() *Collection {
if nodes := (*ld.Node)(a).GetNodes(as.Following); len(nodes) == 1 {
return (*Collection)(&nodes[0])
}
return nil
}
// SetFollowing sets the [Collection] in [as.Following].
func (a *Actor) SetFollowing(c Collection) *Actor {
(*ld.Node)(a).SetNodes(as.Following, ld.Node(c))
return a
}
// GetLiked returns the [Collection] stored in [as.Liked].
//
// See https://www.w3.org/TR/activitypub/#liked.
func (a *Actor) GetLiked() *Collection {
if nodes := (*ld.Node)(a).GetNodes(as.Liked); len(nodes) == 1 {
return (*Collection)(&nodes[0])
}
return nil
}
// SetLiked sets the [Collection] in [as.Liked].
func (a *Actor) SetLiked(c Collection) *Actor {
(*ld.Node)(a).SetNodes(as.Liked, ld.Node(c))
return a
}
// GetEndpoints returns the [Endpoints] from [as.Endpoints].
func (a *Actor) GetEndpoints() *Endpoints {
if nodes := (*ld.Node)(a).GetNodes(as.Endpoints); len(nodes) == 1 {
return (*Endpoints)(&nodes[0])
}
return nil
}
// SetEndpoints sets the [Endpoints] in [as.Endpoints].
func (a *Actor) SetEndpoints(ep Endpoints) *Actor {
(*ld.Node)(a).SetNodes(as.Endpoints, ld.Node(ep))
return a
}
// GetIndox returns the URL in [ldp.Inbox].
func (a *Actor) GetInbox() string {
if nodes := (*ld.Node)(a).GetNodes(ldp.Inbox); len(nodes) == 1 {
return nodes[0].ID
}
return ""
}
// SetInbox sets the URL in [ldp.Inbox].
func (a *Actor) SetInbox(url string) *Actor {
(*ld.Node)(a).SetNodes(ldp.Inbox, ld.Node{ID: url})
return a
}
// GetIndox returns the URL in [as.Outbox].
func (a *Actor) GetOutbox() string {
if nodes := (*ld.Node)(a).GetNodes(as.Outbox); len(nodes) == 1 {
return nodes[0].ID
}
return ""
}
// SetOutbox sets the URL in [as.Outbox].
func (a *Actor) SetOutbox(url string) *Actor {
(*ld.Node)(a).SetNodes(as.Outbox, ld.Node{ID: url})
return a
}
// GetIndexable returns the value in [mastodon.Indexable].
//
// When discoverable is absent this returns false. We treat indexable as
// opt-in, not opt-out.
//
// See https://docs.joinmastodon.org/spec/activitypub/#toot.
func (a *Actor) GetIndexable() json.RawMessage {
if nodes := (*ld.Node)(a).GetNodes(mastodon.Indexable); len(nodes) == 1 {
return nodes[0].Value
}
return json.RawMessage(`false`)
}
// SetIndexable sets the value in [mastodon.Indexable].
func (a *Actor) SetIndexable(v json.RawMessage) *Actor {
(*ld.Node)(a).SetNodes(mastodon.Indexable, ld.Node{Value: v})
return a
}
// GetManuallyApprovesFollowers returns the value in
// [as.ManuallyApprovesFollowers].
//
// See https://swicg.github.io/miscellany/#manuallyApprovesFollowers.
func (a *Actor) GetManuallyApprovesFollowers() json.RawMessage {
if nodes := (*ld.Node)(a).GetNodes(as.ManuallyApprovesFollowers); len(nodes) == 1 {
return nodes[0].Value
}
return json.RawMessage(`false`)
}
// SetManuallyApprovesFollowers sets the value in
// [as.ManuallyApprovesFollowers].
func (a *Actor) SetManuallyApprovesFollowers(v json.RawMessage) *Actor {
(*ld.Node)(a).SetNodes(as.ManuallyApprovesFollowers, ld.Node{Value: v})
return a
}
// GetMovedTo returns the URL from [as.MovedTo].
//
// See https://swicg.github.io/miscellany/#movedTo.
func (a *Actor) GetMovedTo() string {
if nodes := (*ld.Node)(a).GetNodes(as.MovedTo); len(nodes) == 1 {
return nodes[0].ID
}
return ""
}
// SetMovedTo sets the URL in [as.MovedTo].
func (a *Actor) SetMovedTo(url string) *Actor {
(*ld.Node)(a).SetNodes(as.MovedTo, ld.Node{ID: url})
return a
}
// GetPreferredUsername returns the value in [as.PreferredUsername].
//
// See https://www.w3.org/TR/activitypub/#actor-objects.
func (a *Actor) GetPreferredUsername() json.RawMessage {
if nodes := (*ld.Node)(a).GetNodes(as.PreferredUsername); len(nodes) == 1 {
return nodes[0].Value
}
return nil
}
// SetPreferredUsername sets the value in [as.PreferredUsername].
func (a *Actor) SetPreferredUsername(v json.RawMessage) *Actor {
(*ld.Node)(a).SetNodes(as.PreferredUsername, ld.Node{Value: v})
return a
}
// See [Object.GetPublished].
func (a *Actor) GetPublished() json.RawMessage {
return (*Object)(a).GetPublished()
}
// See [Object.SetPublished].
func (a *Actor) SetPublished(v json.RawMessage) *Actor {
(*Object)(a).SetPublished(v)
return a
}
// GetPublickKey returns the [PublicKey] stored in [secv1.PublicKey].
func (a *Actor) GetPublicKey() *PublicKey {
if nodes := (*ld.Node)(a).GetNodes(secv1.PublicKey); len(nodes) == 1 {
return (*PublicKey)(&nodes[0])
}
return nil
}
// SetPublicKey sets the [PublicKey] in [secv1.PublicKey].
func (a *Actor) SetPublicKey(pk PublicKey) *Actor {
(*ld.Node)(a).SetNodes(secv1.PublicKey, ld.Node(pk))
return a
}
// See [Object.GetURL].
func (a *Actor) GetURL() string {
return (*Object)(a).GetURL()
}
// See [Object.SetURL].
func (a *Actor) SetURL(url string) *Actor {
(*Object)(a).SetURL(url)
return a
}