aboutsummaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rw-r--r--views/outbox.go94
-rw-r--r--views/profile.go21
-rw-r--r--views/webfinger.go32
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
+}