mirror of
https://github.com/safing/portbase
synced 2025-09-01 10:09:50 +00:00
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
// Copyright Safing ICS Technologies GmbH. Use of this source code is governed by the AGPL license that can be found in the LICENSE file.
|
|
|
|
package api
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
_ "github.com/Safing/safing-core/configuration"
|
|
"github.com/Safing/safing-core/database"
|
|
"github.com/Safing/safing-core/formats/dsd"
|
|
|
|
"github.com/ipfs/go-datastore"
|
|
)
|
|
|
|
func Get(session *Session, key string) {
|
|
iterator, err := database.EasyQueryIterator(key)
|
|
if err != nil {
|
|
handleError(session, fmt.Sprintf("error|500|could not query: %s", err))
|
|
return
|
|
}
|
|
|
|
var returnedStuff bool
|
|
|
|
for obj, ok := iterator.NextSync(); ok; obj, ok = iterator.NextSync() {
|
|
bytes, err := database.DumpModel(obj.Value, dsd.JSON)
|
|
|
|
returnedStuff = true
|
|
|
|
if err == nil {
|
|
toSend := []byte(fmt.Sprintf("current|%s|%s", obj.Key, string(bytes)))
|
|
session.send <- toSend
|
|
} else {
|
|
handleError(session, fmt.Sprintf("error|500|dump failed: %s", err))
|
|
}
|
|
}
|
|
|
|
if !returnedStuff {
|
|
handleError(session, "error|400|no results: "+key)
|
|
}
|
|
}
|
|
|
|
func Subscribe(session *Session, key string) {
|
|
session.Subscribe(key)
|
|
Get(session, key)
|
|
}
|
|
|
|
func Unsubscribe(session *Session, key string) {
|
|
session.Unsubscribe(key)
|
|
}
|
|
|
|
func Save(session *Session, key string, create bool, data []byte) {
|
|
var model database.Model
|
|
var err error
|
|
dbKey := datastore.NewKey(key)
|
|
model, err = database.NewWrapper(&dbKey, data)
|
|
if err != nil {
|
|
handleError(session, fmt.Sprintf("error|500|failed to wrap object: %s", err))
|
|
return
|
|
}
|
|
if create {
|
|
err = database.Create(dbKey, model)
|
|
} else {
|
|
err = database.Update(dbKey, model)
|
|
}
|
|
if err != nil {
|
|
handleError(session, fmt.Sprintf("error|500|failed to save to database: %s", err))
|
|
}
|
|
}
|
|
|
|
func Delete(session *Session, key string) {
|
|
dbKey := datastore.NewKey(key)
|
|
err := database.Delete(dbKey)
|
|
if err != nil {
|
|
handleError(session, fmt.Sprintf("error|500|failed to delete from database: %s", err))
|
|
}
|
|
}
|