diff --git a/apihandler/document.go b/apihandler/document.go index 08b2e52..3f4a2ae 100644 --- a/apihandler/document.go +++ b/apihandler/document.go @@ -12,9 +12,13 @@ import ( ) /* -V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data +V1DocumentsPOST permet d'ajouter un object dans un bucket, par multipart/form-data -WIP +Example: + +Téléverser plusieurs fichiers à cette route avec `curl`: + + curl -F 'documents=@example.pdf' -F 'documents=@example.md;type=text/markdown' */ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) { var request apirequest.V1DocumentsPOST @@ -22,19 +26,36 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) { request.Params.Bucket = c.Param("bucket") + var allowed bool + for allowedBucket := range h.Config.Server.Documents.Buckets { + if request.Params.Bucket == allowedBucket { + allowed = true + } + } + + if !allowed { + return c.JSON(apiresponse.NotFoundResponse()) + } + form, err := c.MultipartForm() if err != nil { - response.StatusCode = http.StatusBadRequest response.Message = fmt.Sprintf("Téléversement invalide: %s", err) + response.StatusCode = http.StatusBadRequest return c.JSON(response.StatusCode, response) } if form == nil { - return c.JSON(http.StatusBadRequest, "MultipartForm pointer vers une addresse mémoire nil") + response.Message = "MultipartForm pointe vers une addresse mémoire nil" + response.StatusCode = http.StatusBadRequest + + return c.JSON(response.StatusCode, response) } if len(form.File) == 0 { - return c.JSON(http.StatusBadRequest, "Veuillez sélectionner au moins 1 document à téléverser") + response.Message = "Veuillez sélectionner au moins 1 document à téléverser" + response.StatusCode = http.StatusBadRequest + + return c.JSON(response.StatusCode, response) } for inputName, inputFileHeaders := range form.File { @@ -44,16 +65,22 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) { } if request.Data.Documents == nil { - return c.JSON(http.StatusBadRequest, "Impossible d'obtenir les documents depuis le formulaire") + response.Message = "Impossible d'obtenir les documents depuis le formulaire" + response.StatusCode = http.StatusBadRequest + + return c.JSON(response.StatusCode, response) } if !request.Complete() { - return c.JSON(http.StatusBadRequest, "Requête V1DocumentsPOST incomplète reçue") + response.Message = "Requête V1DocumentsPOST incomplète reçue" + response.StatusCode = http.StatusBadRequest + + return c.JSON(response.StatusCode, response) } - response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Data.Documents) + response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Params.Bucket, request.Data.Documents) - return c.JSON(response.StatusCode, response.Message) + return c.JSON(response.StatusCode, response) } // V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data