safing-portbase/api/old/actions.go
2018-09-21 16:38:18 +02:00

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))
}
}