LocalAI/core/http/routes/peerguard.go

80 lines
1.8 KiB
Go

package routes
import (
"context"
"time"
"github.com/gofiber/fiber/v2"
"github.com/mudler/edgevpn/pkg/node"
)
const DefaultInterval = 5 * time.Second
const Timeout = 20 * time.Second
// TODO connect routes and write a middleware for authorization based on p2p auth providers private keys
func RegisterPeerguardAuthRoutes(app *fiber.App, e *node.Node) {
app.Get("ledger/:bucket/:key", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
key := c.Params("key")
ledger, err := e.Ledger()
if err != nil {
return err
}
return c.JSON(ledger.CurrentData()[bucket][key])
})
app.Get("ledger/:bucket", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
ledger, err := e.Ledger()
if err != nil {
return err
}
return c.JSON(ledger.CurrentData()[bucket])
})
announcing := struct{ State string }{"Announcing"}
// Store arbitrary data
app.Get("ledger/:bucket/:key/:value", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
key := c.Params("key")
value := c.Params("value")
ledger, err := e.Ledger()
if err != nil {
return err
}
ledger.Persist(context.Background(), DefaultInterval, Timeout, bucket, key, value)
return c.JSON(announcing)
})
// Delete data from ledger
app.Get("ledger/:bucket", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
ledger, err := e.Ledger()
if err != nil {
return err
}
ledger.AnnounceDeleteBucket(context.Background(), DefaultInterval, Timeout, bucket)
return c.JSON(announcing)
})
app.Get("ledger/:bucket/:key", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
key := c.Params("key")
ledger, err := e.Ledger()
if err != nil {
return err
}
ledger.AnnounceDeleteBucketKey(context.Background(), DefaultInterval, Timeout, bucket, key)
return c.JSON(announcing)
})
}