diff options
author | Julio Capote <jcapote@gmail.com> | 2022-12-31 02:20:02 +0000 |
---|---|---|
committer | Julio Capote <jcapote@gmail.com> | 2022-12-31 02:20:02 +0000 |
commit | c500a2be38afcbb5688537d97c7c3ee30a57dba4 (patch) | |
tree | 79cf1884ca7529299646b567b7705378bdf08fd3 /models/activity_streams_object.go | |
parent | 74ffcfe6b2c80b7cf459798dc42bd278075ccb50 (diff) | |
download | communique-c500a2be38afcbb5688537d97c7c3ee30a57dba4.tar.gz |
parse and persist feeds from handlers
Diffstat (limited to '')
-rw-r--r-- | models/activity_streams_object.go | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/models/activity_streams_object.go b/models/activity_streams_object.go deleted file mode 100644 index 98c69bb..0000000 --- a/models/activity_streams_object.go +++ /dev/null @@ -1,54 +0,0 @@ -package models - -import ( - "bytes" - "encoding/json" - "fmt" - "time" - - "git.capotej.com/capotej/communique/config" - "github.com/dgraph-io/badger/v3" - "github.com/go-fed/activity/streams/vocab" - "github.com/segmentio/ksuid" -) - -// ActivityStreamsObject is our internal model for storing activity streams objects -// For every object we receive, we create 2+N copies of it in Badger: -// - the original object -// - a copy for dedupe with an optional TTL (specified by handler response) TODO -// - a temporary copy for every subscriber until it is delivered TODO -type ActivityStreamsObject struct { - wrappedObject vocab.ActivityStreamsNote // OPTIONAL, not always wrapped (think .count) - handler config.Handler -} - -func NewActivityStreamsObject(obj vocab.ActivityStreamsNote, h config.Handler) *ActivityStreamsObject { - aso := &ActivityStreamsObject{wrappedObject: obj, handler: h} - return aso -} - -func (a *ActivityStreamsObject) keyName() []byte { - k, _ := ksuid.NewRandomWithTime(time.Now()) - key := fmt.Sprintf("%s:%s", a.Keybase(), k.String()) - return []byte(key) -} - -func (a *ActivityStreamsObject) Keybase() string { - keyBase := fmt.Sprintf("outboxes:%s", a.handler.Name) - return keyBase -} - -func (a *ActivityStreamsObject) content() []byte { - objMap, _ := a.wrappedObject.Serialize() - buffer := &bytes.Buffer{} - encoder := json.NewEncoder(buffer) - encoder.SetEscapeHTML(false) - encoder.Encode(objMap) - return bytes.TrimRight(buffer.Bytes(), "\n") -} - -func (a *ActivityStreamsObject) Save(txn *badger.Txn) error { - content := a.content() - e := badger.NewEntry(a.keyName(), content) - return txn.SetEntry(e) -} |