From f3b1a897cf4d77cb4fcef573ad6db5313294ddf4 Mon Sep 17 00:00:00 2001 From: Julio Capote Date: Sun, 1 Jan 2023 22:42:39 -0500 Subject: refactor create and note objects in views --- views/outbox.go | 135 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 88 insertions(+), 47 deletions(-) (limited to 'views/outbox.go') diff --git a/views/outbox.go b/views/outbox.go index 47b976d..5c1ade3 100644 --- a/views/outbox.go +++ b/views/outbox.go @@ -6,8 +6,93 @@ import ( "git.capotej.com/capotej/communique/models" "git.capotej.com/capotej/communique/urls" "github.com/go-fed/activity/streams" + "github.com/go-fed/activity/streams/vocab" ) +func activityObjectNote(name, domain string, v models.OutboxItem) (vocab.ActivityStreamsNote, error) { + var err error + note := streams.NewActivityStreamsNote() + + noteUrl, err := urls.UrlNote(name, domain, string(v.Id)) + if err != nil { + return nil, err + } + noteIdProp := streams.NewJSONLDIdProperty() + noteIdProp.Set(noteUrl) + note.SetJSONLDId(noteIdProp) + contentProp := streams.NewActivityStreamsContentProperty() + contentProp.AppendXMLSchemaString(string(v.Content)) + note.SetActivityStreamsContent(contentProp) + + actorUrl, err := urls.UrlProfile(name, domain) + if err != nil { + return nil, err + } + attrProp := streams.NewActivityStreamsAttributedToProperty() + attrProp.AppendIRI(actorUrl) + note.SetActivityStreamsAttributedTo(attrProp) + + summaryProp := streams.NewActivityStreamsSummaryProperty() + summaryProp.AppendXMLSchemaString("") + note.SetActivityStreamsSummary(summaryProp) + + noteUrlProp := streams.NewActivityStreamsUrlProperty() + noteUrlProp.AppendIRI(noteUrl) + note.SetActivityStreamsUrl(noteUrlProp) + + publicUrl, err := url.Parse("https://www.w3.org/ns/activitystreams#Public") + if err != nil { + return nil, err + } + toProp := streams.NewActivityStreamsToProperty() + toProp.AppendIRI(publicUrl) + note.SetActivityStreamsTo(toProp) + + publishedProp := streams.NewActivityStreamsPublishedProperty() + publishedProp.Set(v.CreatedAt) + note.SetActivityStreamsPublished(publishedProp) + return note, err +} + +func activityObjectCreate(name, domain string, v models.OutboxItem, note vocab.ActivityStreamsNote) (vocab.ActivityStreamsCreate, error) { + var err error + crea := streams.NewActivityStreamsCreate() + obj := streams.NewActivityStreamsObjectProperty() + + creaIdProp := streams.NewJSONLDIdProperty() + activityUrl, err := urls.UrlActivity(name, domain, string(v.Id)) + if err != nil { + return nil, err + } + creaIdProp.Set(activityUrl) + crea.SetJSONLDId(creaIdProp) + + crea.SetActivityStreamsObject(obj) + + publicUrl, err := url.Parse("https://www.w3.org/ns/activitystreams#Public") + if err != nil { + return nil, err + } + toProp := streams.NewActivityStreamsToProperty() + toProp.AppendIRI(publicUrl) + crea.SetActivityStreamsTo(toProp) + + publishedProp := streams.NewActivityStreamsPublishedProperty() + publishedProp.Set(v.CreatedAt) + crea.SetActivityStreamsPublished(publishedProp) + + actorUrl, err := urls.UrlProfile(name, domain) + if err != nil { + return nil, err + } + actorProp := streams.NewActivityStreamsActorProperty() + actorProp.AppendIRI(actorUrl) + crea.SetActivityStreamsActor(actorProp) + obj.AppendActivityStreamsNote(note) + + return crea, err +} + // RenderOutboxCollection takes a page of ActivityStream objects as JSON strings and concatenates them together to return an // ActivtyStreamsOrderedCollection func RenderOutboxCollection(name, domain string, page []models.OutboxItem) (map[string]interface{}, error) { @@ -40,59 +125,15 @@ func RenderOutboxCollection(name, domain string, page []models.OutboxItem) (map[ itemsProp := streams.NewActivityStreamsOrderedItemsProperty() for _, v := range page { - publishedProp := streams.NewActivityStreamsPublishedProperty() - publishedProp.Set(v.CreatedAt) - crea := streams.NewActivityStreamsCreate() - obj := streams.NewActivityStreamsObjectProperty() - - creaIdProp := streams.NewJSONLDIdProperty() - activityUrl, err := urls.UrlActivity(name, domain, string(v.Id)) + var err error + note, err := activityObjectNote(name, domain, v) if err != nil { return nil, err } - creaIdProp.Set(activityUrl) - crea.SetJSONLDId(creaIdProp) - - crea.SetActivityStreamsObject(obj) - crea.SetActivityStreamsTo(toProp) - crea.SetActivityStreamsPublished(publishedProp) - - actorUrl, err := urls.UrlProfile(name, domain) + crea, err := activityObjectCreate(name, domain, v, note) if err != nil { return nil, err } - actorProp := streams.NewActivityStreamsActorProperty() - actorProp.AppendIRI(actorUrl) - crea.SetActivityStreamsActor(actorProp) - - noteUrl, err := urls.UrlNote(name, domain, string(v.Id)) - if err != nil { - return nil, err - } - - note := streams.NewActivityStreamsNote() - noteIdProp := streams.NewJSONLDIdProperty() - noteIdProp.Set(noteUrl) - note.SetJSONLDId(noteIdProp) - contentProp := streams.NewActivityStreamsContentProperty() - contentProp.AppendXMLSchemaString(string(v.Content)) - note.SetActivityStreamsContent(contentProp) - - attrProp := streams.NewActivityStreamsAttributedToProperty() - attrProp.AppendIRI(actorUrl) - note.SetActivityStreamsAttributedTo(attrProp) - - summaryProp := streams.NewActivityStreamsSummaryProperty() - summaryProp.AppendXMLSchemaString("") - note.SetActivityStreamsSummary(summaryProp) - - noteUrlProp := streams.NewActivityStreamsUrlProperty() - noteUrlProp.AppendIRI(noteUrl) - note.SetActivityStreamsUrl(noteUrlProp) - - note.SetActivityStreamsTo(toProp) - note.SetActivityStreamsPublished(publishedProp) - obj.AppendActivityStreamsNote(note) itemsProp.AppendActivityStreamsCreate(crea) } -- cgit v1.2.3