Refactoring and dashboard state in DB

This commit is contained in:
2022-07-01 01:43:11 +02:00
parent 8d8a6ff784
commit fc8bb1c482
13 changed files with 591 additions and 153 deletions
+77 -10
View File
@@ -2,18 +2,84 @@ package routes
import (
"bytes"
"fmt"
"log"
"time"
"git.phc.dm.unipi.it/phc/storage/config"
"git.phc.dm.unipi.it/phc/storage/database"
"git.phc.dm.unipi.it/phc/storage/utils"
"github.com/gofiber/fiber/v2"
)
func (r *Router) Api(api fiber.Router) {
sessions := map[string]struct{}{}
api.Post("/login", func(c *fiber.Ctx) error {
var form struct {
Password string `form:"password"`
}
if err := c.BodyParser(&form); err != nil {
return err
}
if form.Password == config.AdminPassword {
token := utils.GenerateRandomString(32)
sessions[token] = struct{}{}
c.Cookie(&fiber.Cookie{
Name: "sid",
Value: token,
Path: "/",
Expires: time.Now().Add(3 * 24 * time.Hour),
})
}
return c.JSON("ok")
})
api.Get("/status", func(c *fiber.Ctx) error {
return c.JSON("ok")
})
api.Get("/current-user", func(c *fiber.Ctx) error {
if _, found := sessions[c.Cookies("sid")]; !found {
return c.JSON("anonymous")
}
return c.JSON("admin")
})
api.Get("/dashboard-state", func(c *fiber.Ctx) error {
state, err := r.Database.GetDashboardState()
if err != nil {
return err
}
return c.JSON(state)
})
api.Post("/dashboard-state", func(c *fiber.Ctx) error {
if _, found := sessions[c.Cookies("sid")]; !found {
return fmt.Errorf("invalid session token")
}
var state database.DashboardState
if err := c.BodyParser(&state); err != nil {
return err
}
if err := r.Database.SetDashboardState(state); err != nil {
return err
}
return c.JSON("ok")
})
api.Get("/buckets", func(c *fiber.Ctx) error {
buckets, err := r.Database.Buckets()
buckets, err := r.Database.AllBuckets()
if err != nil {
return err
}
@@ -45,14 +111,20 @@ func (r *Router) Api(api fiber.Router) {
return c.JSON("ok")
})
api.Post("/buckets/:bucket", func(c *fiber.Ctx) error {
api.Get("/buckets/:bucket", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
b, err := r.Database.Bucket(bucket)
objects, err := r.Database.AllBucketObjects(bucket)
if err != nil {
return err
}
return c.JSON(objects)
})
api.Post("/buckets/:bucket", func(c *fiber.Ctx) error {
bucket := c.Params("bucket")
ff, err := c.FormFile("file")
if err != nil {
return err
@@ -63,7 +135,7 @@ func (r *Router) Api(api fiber.Router) {
return err
}
id, err := b.Create(mf)
id, err := r.Database.CreateBucketObject(bucket, mf)
if err != nil {
return err
}
@@ -80,12 +152,7 @@ func (r *Router) Api(api fiber.Router) {
buf := &bytes.Buffer{}
b, err := r.Database.Bucket(bucket)
if err != nil {
return err
}
if err := b.Read(id, buf); err != nil {
if err := r.Database.GetBucketObject(bucket, id, buf); err != nil {
return err
}