- added describe command
- fixed v4+v6 handling
This commit is contained in:
2023-03-09 20:24:20 +01:00
parent 01a0dc054d
commit d6792dd6c8
15 changed files with 215 additions and 21 deletions

View File

@@ -157,3 +157,31 @@ func (db *Db) List(apicontext string) (*Uploads, error) {
return uploads, err
}
// we only return one obj here, but could return more later
func (db *Db) Get(id string) (*Uploads, error) {
uploads := &Uploads{}
err := db.bolt.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(Bucket))
if bucket == nil {
return nil
}
j := bucket.Get([]byte(id))
if j == nil {
return fmt.Errorf("No upload object found with id %s", id)
}
upload := &Upload{}
if err := json.Unmarshal(j, &upload); err != nil {
return fmt.Errorf("unable to unmarshal json: %s", err)
}
uploads.Entries = append(uploads.Entries, upload)
return nil
})
return uploads, err
}

View File

@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package api
import (
"github.com/alecthomas/repr"
//"github.com/alecthomas/repr"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
"github.com/tlinden/up/upd/cfg"
@@ -161,11 +161,13 @@ func DeleteUpload(c *fiber.Ctx, cfg *cfg.Config, db *Db) error {
id, err := Untaint(c.Params("id"), cfg.RegKey)
if err != nil {
return fiber.NewError(403, "Invalid id provided!")
return JsonStatus(c, fiber.StatusForbidden,
"Invalid id provided!")
}
if len(id) == 0 {
return fiber.NewError(403, "No id given!")
return JsonStatus(c, fiber.StatusForbidden,
"No id specified!")
}
cleanup(filepath.Join(cfg.StorageDir, id))
@@ -173,7 +175,8 @@ func DeleteUpload(c *fiber.Ctx, cfg *cfg.Config, db *Db) error {
err = db.Delete(id)
if err != nil {
// non existent db entry with that id, or other db error, see logs
return fiber.NewError(404, "No upload with that id could be found!")
return JsonStatus(c, fiber.StatusForbidden,
"No upload with that id could be found!")
}
return nil
@@ -188,7 +191,6 @@ func List(c *fiber.Ctx, cfg *cfg.Config, db *Db) error {
}
uploads, err := db.List(apicontext)
repr.Print(uploads)
if err != nil {
return JsonStatus(c, fiber.StatusForbidden,
"Unable to list uploads: "+err.Error())
@@ -200,3 +202,24 @@ func List(c *fiber.Ctx, cfg *cfg.Config, db *Db) error {
return c.Status(fiber.StatusOK).JSON(uploads)
}
// returns just one upload obj + error code, no post processing by server
func Describe(c *fiber.Ctx, cfg *cfg.Config, db *Db) error {
id, err := Untaint(c.Params("id"), cfg.RegKey)
if err != nil {
return JsonStatus(c, fiber.StatusForbidden,
"Invalid id provided!")
}
uploads, err := db.Get(id)
if err != nil {
return JsonStatus(c, fiber.StatusForbidden,
"No upload with that id could be found!")
}
// if we reached this point we can signal success
uploads.Success = true
uploads.Code = fiber.StatusOK
return c.Status(fiber.StatusOK).JSON(uploads)
}

View File

@@ -76,6 +76,10 @@ func Runserver(conf *cfg.Config, args []string) error {
api.Get("/list/", auth, func(c *fiber.Ctx) error {
return List(c, conf, db)
})
api.Get("/upload/:id/", auth, func(c *fiber.Ctx) error {
return Describe(c, conf, db)
})
}
// public routes