package pana import ( ld "sourcery.dny.nu/longdistance" as "sourcery.dny.nu/pana/vocab/w3/activitystreams" ) // Endpoints from ActivityPub. // // Endpoints does not include support for [as.ProvideClientKey] or // [as.SignClientKey] because Linked Data Signatures are a menace and should not // be used. Use HTTP Signatures instead. // // See https://www.w3.org/TR/activitypub/#actor-objects. type Endpoints ld.Node // NewEndpoints initialises a new Endpoints. func NewEndpoints() *Endpoints { return &Endpoints{ Properties: make(ld.Properties, 4), } } // Build finalises the Endpoints. func (ep *Endpoints) Build() Endpoints { return *ep } // GetProxyURL returns the URL in [as.ProxyURL]. func (ep *Endpoints) GetProxyURL() string { if nodes := (*ld.Node)(ep).GetNodes(as.ProxyURL); len(nodes) == 1 { return nodes[0].ID } return "" } // SetProxyURL sets the URL in [as.ProxyURL]. func (ep *Endpoints) SetProxyURL(url string) *Endpoints { (*ld.Node)(ep).SetNodes(as.ProxyURL, ld.Node{ID: url}) return ep } // GetOauthAuthzEndpoint returns the URL in [as.OauthAuthzEndpoint]. func (ep *Endpoints) GetOauthAuthzEndpoint() string { if nodes := (*ld.Node)(ep).GetNodes(as.OauthAuthzEndpoint); len(nodes) == 1 { return nodes[0].ID } return "" } // SetOauthAuthzEndpoint sets the URL in [as.OauthAuthzEndpoint]. func (ep *Endpoints) SetOauthAuthzEndpoint(url string) *Endpoints { (*ld.Node)(ep).SetNodes(as.OauthAuthzEndpoint, ld.Node{ID: url}) return ep } // GetOauthTokenEndpoint returns the URL in [as.OauthTokenEndpoint]. func (ep *Endpoints) GetOauthTokenEndpoint() string { if nodes := (*ld.Node)(ep).GetNodes(as.OauthTokenEndpoint); len(nodes) == 1 { return nodes[0].ID } return "" } // SetOauthTokenEndpoint sets the URL in [as.OauthTokenEndpoint]. func (ep *Endpoints) SetOauthTokenEndpoint(url string) *Endpoints { (*ld.Node)(ep).SetNodes(as.OauthTokenEndpoint, ld.Node{ID: url}) return ep } // GetSharedInbox returns the URL in [as.SharedInbox]. func (ep *Endpoints) GetSharedInbox() string { if nodes := (*ld.Node)(ep).GetNodes(as.SharedInbox); len(nodes) == 1 { return nodes[0].ID } return "" } // SetSharedInbox sets the URL in [as.SharedInbox]. func (ep *Endpoints) SetSharedInbox(url string) *Endpoints { (*ld.Node)(ep).SetNodes(as.SharedInbox, ld.Node{ID: url}) return ep }