aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulio Capote <jcapote@gmail.com>2022-12-19 03:55:34 +0000
committerJulio Capote <jcapote@gmail.com>2022-12-19 03:55:34 +0000
commita5a1907249d2666966c6c412f8be17e5b2c67e57 (patch)
tree615929dc0419935664b15b4f63235e46cc1e86fc
parent3761f85966a554cb750809da21995354fb9f9ceb (diff)
downloadcommunique-a5a1907249d2666966c6c412f8be17e5b2c67e57.tar.gz
start of outbox page
-rw-r--r--cgi/servers.go1
-rw-r--r--http/server.go7
-rw-r--r--persister/persister.go1
-rw-r--r--registry/registry.go8
-rw-r--r--resources/outbox.go67
5 files changed, 71 insertions, 13 deletions
diff --git a/cgi/servers.go b/cgi/servers.go
index 84d6ffe..55bc5d2 100644
--- a/cgi/servers.go
+++ b/cgi/servers.go
@@ -61,7 +61,6 @@ func startCGIServer(h config.Handler) {
}
func startTicker(h config.Handler, db *badger.DB, log *zap.SugaredLogger) {
- // TODO add config for this
ticker := time.NewTicker(h.Interval)
done := make(chan bool)
func() {
diff --git a/http/server.go b/http/server.go
index bec683e..5d0a689 100644
--- a/http/server.go
+++ b/http/server.go
@@ -61,7 +61,12 @@ func (s *Server) Start(zapWriter io.Writer) {
// Outbox
router.GET("/actors/:actor/outbox", func(c *gin.Context) {
actorParam := c.Param("actor")
- resource, _ := s.registry.Outbox(actorParam)
+ var resource map[string]interface{}
+ if c.Query("page") == "true" {
+ resource, _ = s.registry.OutboxPage(actorParam)
+ } else {
+ resource, _ = s.registry.Outbox(actorParam)
+ }
if resource != nil {
c.JSON(http.StatusOK, resource)
} else {
diff --git a/persister/persister.go b/persister/persister.go
deleted file mode 100644
index 4510fcb..0000000
--- a/persister/persister.go
+++ /dev/null
@@ -1 +0,0 @@
-package persister
diff --git a/registry/registry.go b/registry/registry.go
index 8d047ff..4dbacc7 100644
--- a/registry/registry.go
+++ b/registry/registry.go
@@ -43,6 +43,14 @@ func (r *Registry) Outbox(name string) (map[string]interface{}, error) {
return resources.RenderOutbox(handler.handlerCfg.Name, r.cfg.Domain, r.db)
}
+func (r *Registry) OutboxPage(name string) (map[string]interface{}, error) {
+ handler := r.findByName(name)
+ if handler == nil {
+ return nil, nil
+ }
+ return resources.RenderOutboxPage(handler.handlerCfg.Name, r.cfg.Domain, r.db)
+}
+
func (r *Registry) WebfingerResource(fqn string) (*resources.WebfingerResource, error) {
handler := r.findByFQN(fqn)
if handler == nil {
diff --git a/resources/outbox.go b/resources/outbox.go
index 046ec6a..2656da4 100644
--- a/resources/outbox.go
+++ b/resources/outbox.go
@@ -9,35 +9,49 @@ import (
"github.com/go-fed/activity/streams"
)
-func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) {
- id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox"))
-
+func RenderOutboxPage(name, domain string, db *badger.DB) (map[string]interface{}, error) {
+ id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true")
if err != nil {
return nil, fmt.Errorf("could not partse url: %w", err)
}
- first, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox", "?=page=true"))
+ partOf, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox"))
if err != nil {
return nil, fmt.Errorf("could not partse url: %w", err)
}
- oc := streams.NewActivityStreamsOrderedCollection()
+ oc := streams.NewActivityStreamsOrderedCollectionPage()
idProp := streams.NewJSONLDIdProperty()
idProp.Set(id)
oc.SetJSONLDId(idProp)
- var i int
+ partOfProp := streams.NewActivityStreamsPartOfProperty()
+ partOfProp.SetIRI(partOf)
+ oc.SetActivityStreamsPartOf(partOfProp)
+
+ itemsProp := streams.NewActivityStreamsOrderedItemsProperty()
+
db.View(func(txn *badger.Txn) error {
it := txn.NewIterator(badger.DefaultIteratorOptions)
defer it.Close()
- prefix := []byte("outbox:sample")
+ prefix := []byte("outbox:sample") // TODO
for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
item := it.Item()
- // k := item.Key()
+ k := item.Key()
err := item.Value(func(v []byte) error {
- i++
- // fmt.Printf("key=%s, value=%s\n", k, v)
+ fmt.Printf("key=%s, value=%s\n", k, v)
+ crea := streams.NewActivityStreamsCreate()
+ obj := streams.NewActivityStreamsObjectProperty()
+ crea.SetActivityStreamsObject(obj)
+
+ note := streams.NewActivityStreamsNote()
+ contentProp := streams.NewActivityStreamsContentProperty()
+ contentProp.AppendIRI(id)
+ note.SetActivityStreamsContent(contentProp)
+ obj.AppendActivityStreamsNote(note)
+
+ itemsProp.AppendActivityStreamsCreate(crea)
return nil
})
if err != nil {
@@ -47,6 +61,39 @@ func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, e
return nil
})
+ oc.SetActivityStreamsOrderedItems(itemsProp)
+ return streams.Serialize(oc)
+}
+
+func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) {
+ id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true")
+
+ if err != nil {
+ return nil, fmt.Errorf("could not partse url: %w", err)
+ }
+
+ first, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true")
+ if err != nil {
+ return nil, fmt.Errorf("could not partse url: %w", err)
+ }
+
+ oc := streams.NewActivityStreamsOrderedCollection()
+
+ idProp := streams.NewJSONLDIdProperty()
+ idProp.Set(id)
+ oc.SetJSONLDId(idProp)
+
+ var i int
+ db.View(func(txn *badger.Txn) error {
+ it := txn.NewIterator(badger.DefaultIteratorOptions)
+ defer it.Close()
+ prefix := []byte("outbox:sample")
+ for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
+ i++
+ }
+ return nil
+ })
+
itemsProp := streams.NewActivityStreamsTotalItemsProperty()
itemsProp.Set(i)
oc.SetActivityStreamsTotalItems(itemsProp)