mirror of
https://github.com/yusing/godoxy.git
synced 2026-01-16 08:26:49 +01:00
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package fileapi
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
apitypes "github.com/yusing/goutils/apitypes"
|
|
)
|
|
|
|
type SetFileContentRequest GetFileContentRequest
|
|
|
|
// @x-id "set"
|
|
// @BasePath /api/v1
|
|
// @Summary Set file content
|
|
// @Description Set file content
|
|
// @Tags file
|
|
// @Accept text/plain
|
|
// @Produce json
|
|
// @Param type query FileType true "Type"
|
|
// @Param filename query string true "Filename"
|
|
// @Param file body string true "File"
|
|
// @Success 200 {object} apitypes.SuccessResponse
|
|
// @Failure 400 {object} apitypes.ErrorResponse
|
|
// @Failure 403 {object} apitypes.ErrorResponse
|
|
// @Failure 500 {object} apitypes.ErrorResponse
|
|
// @Router /file/content [put]
|
|
func Set(c *gin.Context) {
|
|
var request SetFileContentRequest
|
|
if err := c.ShouldBindQuery(&request); err != nil {
|
|
c.JSON(http.StatusBadRequest, apitypes.Error("invalid request", err))
|
|
return
|
|
}
|
|
|
|
content, err := c.GetRawData()
|
|
if err != nil {
|
|
c.Error(apitypes.InternalServerError(err, "failed to read file"))
|
|
return
|
|
}
|
|
|
|
if valErr := validateFile(request.FileType, content); valErr != nil {
|
|
c.JSON(http.StatusBadRequest, apitypes.Error("invalid file", valErr))
|
|
return
|
|
}
|
|
|
|
err = os.WriteFile(request.FileType.GetPath(request.Filename), content, 0o644)
|
|
if err != nil {
|
|
c.Error(apitypes.InternalServerError(err, "failed to write file"))
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, apitypes.Success("file set"))
|
|
}
|