static-hoster/src/api/api.go
2023-01-24 15:50:38 +01:00

59 lines
1.2 KiB
Go

package api
import (
"archive/tar"
"compress/gzip"
"io"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
func PostUpdate(ctx *gin.Context) {
siteUpdate, err := ctx.FormFile("Hello")
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"message": "File not recieved",
})
return
}
if err := ctx.SaveUploadedFile(siteUpdate, "./"+siteUpdate.Filename); err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
"message": "Unable to save file",
})
return
}
unTar("/", "./"+siteUpdate.Filename, ctx)
ctx.JSON(http.StatusOK, gin.H{"data": siteUpdate.Filename, "err": err})
}
func unTar(dst string, src string, ctx *gin.Context) error {
file, err := os.Open(src)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
"message": "Unable to open saved file",
})
}
gzr, err := gzip.NewReader(file)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
"message": "Unable to unzip file",
})
}
defer gzr.Close()
tar := tar.NewReader(gzr)
for {
header, err := tar.Next()
switch {
case err == io.EOF:
return nil
case err != nil:
return err
case header == nil:
continue
}
}
}