diff options
Diffstat (limited to 'views')
-rw-r--r-- | views/outbox.go | 94 | ||||
-rw-r--r-- | views/profile.go | 21 | ||||
-rw-r--r-- | views/webfinger.go | 32 |
3 files changed, 147 insertions, 0 deletions
diff --git a/views/outbox.go b/views/outbox.go new file mode 100644 index 0000000..fe87e24 --- /dev/null +++ b/views/outbox.go @@ -0,0 +1,94 @@ +package views + +import ( + "git.capotej.com/capotej/communique/urls" + "github.com/go-fed/activity/streams" +) + +func RenderOutboxPage(name, domain string) (map[string]interface{}, error) { + id, err := urls.UrlOutboxPage(name, domain) + if err != nil { + return nil, err + } + + partOf, err := urls.UrlOutbox(name, domain) + if err != nil { + return nil, err + } + + oc := streams.NewActivityStreamsOrderedCollectionPage() + + idProp := streams.NewJSONLDIdProperty() + idProp.Set(id) + oc.SetJSONLDId(idProp) + + partOfProp := streams.NewActivityStreamsPartOfProperty() + partOfProp.SetIRI(partOf) + oc.SetActivityStreamsPartOf(partOfProp) + + itemsProp := streams.NewActivityStreamsOrderedItemsProperty() + + // err = db.View(func(txn *badger.Txn) error { + // opts := badger.DefaultIteratorOptions + // opts.PrefetchValues = false + // it := txn.NewIterator(opts) + // defer it.Close() + // prefix := []byte("outbox:sample") // TODO + // for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + // item := it.Item() + // err := item.Value(func(v []byte) error { + // crea := streams.NewActivityStreamsCreate() + // obj := streams.NewActivityStreamsObjectProperty() + // crea.SetActivityStreamsObject(obj) + + // note := streams.NewActivityStreamsNote() + // contentProp := streams.NewActivityStreamsContentProperty() + // contentProp.AppendXMLSchemaString(string(v)) + // note.SetActivityStreamsContent(contentProp) + // obj.AppendActivityStreamsNote(note) + + // itemsProp.AppendActivityStreamsCreate(crea) + // return nil + // }) + // if err != nil { + // return err + // } + // } + // return nil + // }) + // if err != nil { + // return nil, err + // } + + oc.SetActivityStreamsOrderedItems(itemsProp) + return streams.Serialize(oc) +} + +func RenderOutbox(name, domain string, totalItems int) (map[string]interface{}, error) { + id, err := urls.UrlOutbox(name, domain) + + if err != nil { + return nil, err + } + + first, err := urls.UrlOutboxPage(name, domain) + if err != nil { + return nil, err + } + + oc := streams.NewActivityStreamsOrderedCollection() + + idProp := streams.NewJSONLDIdProperty() + idProp.Set(id) + oc.SetJSONLDId(idProp) + + itemsProp := streams.NewActivityStreamsTotalItemsProperty() + itemsProp.Set(totalItems) + oc.SetActivityStreamsTotalItems(itemsProp) + + ocProp := streams.NewActivityStreamsFirstProperty() + ocProp.SetIRI(first) + oc.SetActivityStreamsFirst(ocProp) + + return streams.Serialize(oc) +} diff --git a/views/profile.go b/views/profile.go new file mode 100644 index 0000000..12aae54 --- /dev/null +++ b/views/profile.go @@ -0,0 +1,21 @@ +package views + +import ( + "git.capotej.com/capotej/communique/urls" + "github.com/go-fed/activity/streams" +) + +func RenderProfile(name, domain string) (map[string]interface{}, error) { + u, err := urls.UrlInbox(name, domain) + if err != nil { + return nil, err + } + + inb := streams.NewActivityStreamsInboxProperty() + inb.SetIRI(u) + + p := streams.NewActivityStreamsService() + p.SetActivityStreamsInbox(inb) + + return streams.Serialize(p) +} diff --git a/views/webfinger.go b/views/webfinger.go new file mode 100644 index 0000000..4252bae --- /dev/null +++ b/views/webfinger.go @@ -0,0 +1,32 @@ +package views + +import ( + "fmt" + "path" +) + +type Link struct { + Rel string `json:"rel"` + Type string `json:"type"` + Href string `json:"href"` +} + +type WebfingerResource struct { + Subject string `json:"subject"` + Aliases []string `json:"aliases"` + Links []Link `json:"links"` +} + +func RenderWebfingerResource(name, domain string) (*WebfingerResource, error) { + rs := WebfingerResource{ + // TODO clean up + Subject: fmt.Sprintf("acct:%s@%s", name, domain), + Aliases: []string{}, + Links: []Link{{ + Rel: "self", + Href: path.Join("https://", domain, "actors", name), + Type: "application/activity+json", + }}, + } + return &rs, nil +} |