From 22ef1a44adbbfa4edf26521f50198f5c28890139 Mon Sep 17 00:00:00 2001 From: simon987 Date: Sun, 24 Mar 2019 18:32:29 -0400 Subject: [PATCH] Upload slot info endpoint --- api/api.go | 1 + api/models.go | 4 ++++ api/slot.go | 22 ++++++++++++++++++++++ test/slot_test.go | 29 +++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/api/api.go b/api/api.go index 55a21d7..057733d 100644 --- a/api/api.go +++ b/api/api.go @@ -79,6 +79,7 @@ func New(db *gorm.DB) *WebApi { router.POST("/slot", LogRequestMiddleware(api.AllocateUploadSlot)) router.GET("/slot", LogRequestMiddleware(api.ReadUploadSlot)) + router.GET("/slot_info", LogRequestMiddleware(api.UploadSlotInfo)) router.GET("/upload", LogRequestMiddleware(api.Upload)) api.server = fasthttp.Server{ diff --git a/api/models.go b/api/models.go index 3d17dea..c852bfa 100644 --- a/api/models.go +++ b/api/models.go @@ -11,6 +11,10 @@ type GenericResponse struct { Message string `json:"message,omitempty"` } +type GetUploadSlotResponse struct { + UploadSlot `json:"upload_slot"` +} + type AllocateUploadSlotRequest struct { Token string `json:"token"` MaxSize int64 `json:"max_size"` diff --git a/api/slot.go b/api/slot.go index c7e5859..256a9c6 100644 --- a/api/slot.go +++ b/api/slot.go @@ -166,6 +166,28 @@ func executeUploadHook(slot UploadSlot) { }).Info("Execute upload hook") } +func (api *WebApi) UploadSlotInfo(ctx *fasthttp.RequestCtx) { + tokenStr := string(ctx.Request.Header.Peek("X-Upload-Token")) + if tokenStr == "" { + tokenStr = string(ctx.Request.URI().QueryArgs().Peek("token")) + } + + slot := UploadSlot{} + err := api.db.Where("token=?", tokenStr).First(&slot).Error + + if err != nil { + ctx.Response.Header.SetStatusCode(404) + logrus.WithError(err).WithFields(logrus.Fields{ + "token": tokenStr, + }).Warning("Upload slot not found") + return + } + + Json(GetUploadSlotResponse{ + UploadSlot: slot, + }, ctx) + return +} func (api *WebApi) ReadUploadSlot(ctx *fasthttp.RequestCtx) { tokenStr := string(ctx.Request.Header.Peek("X-Upload-Token")) diff --git a/test/slot_test.go b/test/slot_test.go index 2123956..816a101 100644 --- a/test/slot_test.go +++ b/test/slot_test.go @@ -97,8 +97,37 @@ func TestTokenInQueryString(t *testing.T) { } +func TestUploadSlotInfo(t *testing.T) { + + if allocateUploadSlot(api.AllocateUploadSlotRequest{ + FileName: "testuploadslotinfo.png", + Token: "testuploadslotinfo", + MaxSize: 123, + }).Ok != true { + t.Error() + } + + resp := getSlotInfo("testuploadslotinfo") + + if resp.FileName != "testuploadslotinfo.png" { + t.Error() + } + if resp.Token != "testuploadslotinfo" { + t.Error() + } + if resp.MaxSize != 123 { + t.Error() + } +} + func allocateUploadSlot(request api.AllocateUploadSlotRequest) (ar *api.GenericResponse) { resp := Post("/slot", request) UnmarshalResponse(resp, &ar) return } + +func getSlotInfo(token string) (ar *api.GetUploadSlotResponse) { + resp := Get("/slot_info", token) + UnmarshalResponse(resp, &ar) + return +}