diff --git a/cmd/server.go b/cmd/server.go index 499e7ba..84a2b25 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -388,10 +388,56 @@ func handleAdmin(c echo.Context) error { } func handleAdminDocumentsUpload(c echo.Context) error { - return c.Render(http.StatusOK, "admin-upload-html", nil) + client, err := api.NewApiClientFromViper() + if err != nil { + return c.Render(http.StatusInternalServerError, "documentation-html", nil) + } + + result, err := client.Call(http.MethodGet, "/v1/bucket") + if err != nil { + return c.Render(http.StatusInternalServerError, "documentation-html", nil) + } + + var buckets map[string]string + + err = json.Unmarshal(result, &buckets) + if err != nil { + return c.Render(http.StatusInternalServerError, "documentation-html", nil) + } + + type Bucket struct { + Name string + DisplayName string + Documents []string + } + + var data struct { + Buckets []Bucket + Message string + } + + for bucketName, displayName := range buckets { + data.Buckets = append(data.Buckets, Bucket{ + Name: bucketName, + DisplayName: displayName, + }) + } + + return c.Render(http.StatusOK, "admin-upload-html", data) } func handleAdminDocumentsUploadPOST(c echo.Context) error { + type Bucket struct { + Name string + DisplayName string + Documents []string + } + + var data struct { + Buckets []Bucket + Message string + } + client, err := api.New(cfg.Server.Api.Protocol, cfg.Server.Api.Host, cfg.Server.Port, api.APIOptions{ KeyAuth: cfg.Server.Api.Auth, Key: cfg.Server.Api.Key, @@ -400,29 +446,52 @@ func handleAdminDocumentsUploadPOST(c echo.Context) error { Password: cfg.Server.Admin.Password, }) if err != nil { - return c.Render(http.StatusInternalServerError, "admin-upload-html", struct{ Message string }{Message: fmt.Sprintf("handleAdminDocumentsUploadPOST#api.New: %s", err)}) + data.Message = fmt.Sprintf("handleAdminDocumentsUploadPOST#api.New: %s", err) + return c.Render(http.StatusInternalServerError, "admin-upload-html", data) + } + + result, err := client.Call(http.MethodGet, "/v1/bucket") + if err != nil { + data.Message = "Error during GET /v1/bucket" + return c.Render(http.StatusInternalServerError, "documentation-html", data) + } + + var buckets map[string]string + + err = json.Unmarshal(result, &buckets) + if err != nil { + return c.Render(http.StatusInternalServerError, "documentation-html", nil) + } + + for bucketName, displayName := range buckets { + data.Buckets = append(data.Buckets, Bucket{ + Name: bucketName, + DisplayName: displayName, + }) } bucket := c.FormValue("bucket") document, err := c.FormFile("document") if err != nil { - return c.Render(http.StatusBadRequest, "admin-upload-html", struct{ Message string }{Message: fmt.Sprintf("handleAdminDocumentsUploadPOST#c.FormFile: %s", err)}) + data.Message = fmt.Sprintf("handleAdminDocumentsUploadPOST#c.FormFile: %s", err) + return c.Render(http.StatusBadRequest, "admin-upload-html", data) } response, err := client.UploadDocument(bucket, document) if err != nil { - return c.Render(http.StatusInternalServerError, "admin-upload-html", struct{ Message string }{Message: fmt.Sprintf("handleAdminDocumentsUploadPOST#client.UploadDocument: %s", err)}) + data.Message = fmt.Sprintf("handleAdminDocumentsUploadPOST#client.UploadDocument: %s", err) + return c.Render(http.StatusInternalServerError, "admin-upload-html", data) } // Format response - var message, info, status string + var info, status string info = fmt.Sprintf("[%.0f] /public/documentation/%s/%s", response.Info.Size, response.Info.Bucket, response.Info.Object) status = response.Message - message = fmt.Sprintf("%s - %s", status, info) + data.Message = fmt.Sprintf("%s - %s", status, info) - return c.Render(http.StatusOK, "admin-upload-html", struct{ Message string }{Message: message}) + return c.Render(http.StatusOK, "admin-upload-html", data) } diff --git a/templates/html/admin-upload.gohtml b/templates/html/admin-upload.gohtml index 3c145fb..9200b03 100644 --- a/templates/html/admin-upload.gohtml +++ b/templates/html/admin-upload.gohtml @@ -13,8 +13,9 @@
Document: