Aggiunte tante cose
This commit is contained in:
+175
-102
@@ -13,7 +13,23 @@ import (
|
||||
)
|
||||
|
||||
func (r *Router) Api(api fiber.Router) {
|
||||
sessions := map[string]struct{}{}
|
||||
adminSessions := map[string]struct{}{}
|
||||
|
||||
isAdminMiddleware := func(c *fiber.Ctx) error {
|
||||
if _, found := adminSessions[c.Cookies("sid")]; !found {
|
||||
return fmt.Errorf("invalid session token")
|
||||
}
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
isAPIKeyMiddleware := func(c *fiber.Ctx) error {
|
||||
if _, isAdmin := adminSessions[c.Cookies("sid")]; !isAdmin { // if admin continue
|
||||
if err := r.Database.CheckAPIKey(c.Cookies("token")); err != nil { // otherwise also check api token
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
api.Post("/login", func(c *fiber.Ctx) error {
|
||||
var form struct {
|
||||
@@ -24,19 +40,21 @@ func (r *Router) Api(api fiber.Router) {
|
||||
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),
|
||||
})
|
||||
if form.Password != config.AdminPassword {
|
||||
return c.JSON("invalid credentials")
|
||||
}
|
||||
|
||||
return c.JSON("ok")
|
||||
token := utils.GenerateRandomString(32)
|
||||
adminSessions[token] = struct{}{}
|
||||
|
||||
c.Cookie(&fiber.Cookie{
|
||||
Name: "sid",
|
||||
Value: token,
|
||||
Path: "/",
|
||||
Expires: time.Now().Add(3 * 24 * time.Hour),
|
||||
})
|
||||
|
||||
return c.Redirect("/")
|
||||
})
|
||||
|
||||
api.Get("/status", func(c *fiber.Ctx) error {
|
||||
@@ -44,7 +62,7 @@ func (r *Router) Api(api fiber.Router) {
|
||||
})
|
||||
|
||||
api.Get("/current-user", func(c *fiber.Ctx) error {
|
||||
if _, found := sessions[c.Cookies("sid")]; !found {
|
||||
if _, found := adminSessions[c.Cookies("sid")]; !found {
|
||||
return c.JSON("anonymous")
|
||||
}
|
||||
|
||||
@@ -60,102 +78,157 @@ func (r *Router) Api(api fiber.Router) {
|
||||
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")
|
||||
}
|
||||
api.Post("/dashboard-state",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
|
||||
var state database.DashboardState
|
||||
var state database.DashboardState
|
||||
|
||||
if err := c.BodyParser(&state); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.BodyParser(&state); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := r.Database.SetDashboardState(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.AllBuckets()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(buckets)
|
||||
})
|
||||
|
||||
api.Post("/buckets", func(c *fiber.Ctx) error {
|
||||
var req struct {
|
||||
Bucket string `json:"bucket"`
|
||||
Path string `json:"path"`
|
||||
}
|
||||
|
||||
log.Printf("%v", string(c.Body()))
|
||||
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
opts := []any{}
|
||||
if req.Path != "" {
|
||||
opts = append(opts, req.Path)
|
||||
}
|
||||
|
||||
if err := r.Database.CreateBucket(req.Bucket, opts...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON("ok")
|
||||
})
|
||||
|
||||
api.Get("/buckets/:bucket", func(c *fiber.Ctx) error {
|
||||
bucket := c.Params("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
|
||||
}
|
||||
|
||||
mf, err := ff.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
id, err := r.Database.CreateBucketObject(bucket, mf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"bucket": bucket,
|
||||
"id": id,
|
||||
return c.JSON("ok")
|
||||
})
|
||||
})
|
||||
|
||||
api.Get("/buckets/:bucket/:id", func(c *fiber.Ctx) error {
|
||||
bucket := c.Params("bucket")
|
||||
id := c.Params("id")
|
||||
api.Get("/buckets",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
buckets, err := r.Database.AllBuckets()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
return c.JSON(buckets)
|
||||
})
|
||||
|
||||
if err := r.Database.GetBucketObject(bucket, id, buf); err != nil {
|
||||
return err
|
||||
}
|
||||
api.Post("/buckets",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
var req struct {
|
||||
Bucket string `json:"bucket"`
|
||||
Path string `json:"path"`
|
||||
}
|
||||
|
||||
return c.SendStream(buf)
|
||||
})
|
||||
log.Printf("%v", string(c.Body()))
|
||||
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
opts := []any{}
|
||||
if req.Path != "" {
|
||||
opts = append(opts, req.Path)
|
||||
}
|
||||
|
||||
if err := r.Database.CreateBucket(req.Bucket, opts...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON("ok")
|
||||
})
|
||||
|
||||
api.Get("/buckets/:bucket",
|
||||
isAPIKeyMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
bucket := c.Params("bucket")
|
||||
|
||||
objects, err := r.Database.AllBucketObjects(bucket)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(objects)
|
||||
})
|
||||
|
||||
api.Post("/buckets/:bucket",
|
||||
isAPIKeyMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
bucket := c.Params("bucket")
|
||||
|
||||
ff, err := c.FormFile("file")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mf, err := ff.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
id, err := r.Database.CreateBucketObject(bucket, mf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"bucket": bucket,
|
||||
"id": id,
|
||||
})
|
||||
})
|
||||
|
||||
api.Get("/buckets/:bucket/:id",
|
||||
isAPIKeyMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
bucket := c.Params("bucket")
|
||||
id := c.Params("id")
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
|
||||
if err := r.Database.GetBucketObject(bucket, id, buf); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.SendStream(buf)
|
||||
})
|
||||
|
||||
//
|
||||
// API Keys
|
||||
//
|
||||
|
||||
api.Get("/api-keys",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
apiKeys, err := r.Database.AllAPIKeys()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(apiKeys)
|
||||
})
|
||||
|
||||
api.Post("/api-keys",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
key, err := r.Database.CreateAPIKey()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(key)
|
||||
})
|
||||
|
||||
api.Delete("/api-keys/:key",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
if err := r.Database.RemoveAPIKey(c.Params("key")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON("ok")
|
||||
})
|
||||
|
||||
api.Get("/api-keys/:key",
|
||||
isAdminMiddleware,
|
||||
func(c *fiber.Ctx) error {
|
||||
if err := r.Database.CheckAPIKey(c.Params("key")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON("valid")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user