Hack for parsing multipart/form-data from iOS

Well I have no idea~

Signed-off-by: Yuan Si <do4suki@gmail.com>
This commit is contained in:
2023-04-22 22:17:57 +08:00
parent 1e0871a4db
commit 404ae115bc
5 changed files with 54 additions and 26 deletions
-7
View File
@@ -24,13 +24,6 @@ func CheckErr(err error) {
func Common(ctx *gin.Context) {
ctx.Set("req_time", time.Now().Unix())
ctx.Request.ParseMultipartForm(0)
if len(ctx.PostForm("request_data")) == 0 {
// 弱智iOS客户端经常发些空的表单上来...
fmt.Println("Fuck you, iOS!")
ctx.Abort()
}
authorize := ctx.Request.Header.Get("Authorize")
if authorize == "" {
ctx.String(http.StatusForbidden, ErrorMsg)
+35
View File
@@ -0,0 +1,35 @@
package middleware
import (
"io"
"mime/multipart"
"strings"
"github.com/gin-gonic/gin"
)
func ParseMultipartForm(ctx *gin.Context) {
if ctx.Request.Header.Get("OS") != "Android" {
// I don't know why mime.ParseMediaType() is failed
// mime.ParseMediaType(ctx.Request.Header.Get("Content-Type"))
boundary := strings.ReplaceAll(ctx.Request.Header.Get("Content-Type"), "multipart/form-data; boundary=", "")
var reqData []byte
mReader := multipart.NewReader(ctx.Request.Body, boundary)
for {
part, err := mReader.NextPart()
if err == io.EOF {
break
}
CheckErr(err)
data, err := io.ReadAll(part)
CheckErr(err)
reqData = data
}
ctx.Set("request_data", string(reqData))
}
ctx.Next()
}