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:
+1
-1
@@ -22,7 +22,7 @@ func ApiHandler(ctx *gin.Context) {
|
||||
CheckErr(err)
|
||||
|
||||
var formdata []model.SifApi
|
||||
err = json.Unmarshal([]byte(ctx.PostForm("request_data")), &formdata)
|
||||
err = json.Unmarshal([]byte(ctx.GetString("request_data")), &formdata)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
||||
+3
-3
@@ -39,7 +39,7 @@ func PartyListHandler(ctx *gin.Context) {
|
||||
|
||||
func PlayLiveHandler(ctx *gin.Context) {
|
||||
playReq := model.PlayReq{}
|
||||
err := json.Unmarshal([]byte(ctx.PostForm("request_data")), &playReq)
|
||||
err := json.Unmarshal([]byte(ctx.GetString("request_data")), &playReq)
|
||||
CheckErr(err)
|
||||
|
||||
tDifficultyId := playReq.LiveDifficultyID
|
||||
@@ -459,7 +459,7 @@ func GameOverHandler(ctx *gin.Context) {
|
||||
|
||||
func PlayScoreHandler(ctx *gin.Context) {
|
||||
playScoreReq := model.PlayScoreReq{}
|
||||
err := json.Unmarshal([]byte(ctx.PostForm("request_data")), &playScoreReq)
|
||||
err := json.Unmarshal([]byte(ctx.GetString("request_data")), &playScoreReq)
|
||||
CheckErr(err)
|
||||
|
||||
tDifficultyId := playScoreReq.LiveDifficultyID
|
||||
@@ -557,7 +557,7 @@ func PlayScoreHandler(ctx *gin.Context) {
|
||||
|
||||
func PlayRewardHandler(ctx *gin.Context) {
|
||||
playRewardReq := model.PlayRewardReq{}
|
||||
err := json.Unmarshal([]byte(ctx.PostForm("request_data")), &playRewardReq)
|
||||
err := json.Unmarshal([]byte(ctx.GetString("request_data")), &playRewardReq)
|
||||
CheckErr(err)
|
||||
|
||||
difficultyId := playRewardReq.LiveDifficultyID
|
||||
|
||||
@@ -49,9 +49,9 @@ func main() {
|
||||
// Server APIs
|
||||
m := r.Group("main.php").Use(middleware.Common)
|
||||
{
|
||||
m.POST("/album/seriesAll", handler.AlbumSeriesAllHandler)
|
||||
m.POST("/announce/checkState", handler.AnnounceCheckStateHandler)
|
||||
m.POST("/api", handler.ApiHandler)
|
||||
m.POST("/album/seriesAll", middleware.ParseMultipartForm, handler.AlbumSeriesAllHandler)
|
||||
m.POST("/announce/checkState", middleware.ParseMultipartForm, handler.AnnounceCheckStateHandler)
|
||||
m.POST("/api", middleware.ParseMultipartForm, handler.ApiHandler)
|
||||
m.POST("/award/set", handler.AwardSet)
|
||||
m.POST("/background/set", handler.BackgroundSet)
|
||||
m.POST("/download/additional", handler.DownloadAdditionalHandler)
|
||||
@@ -59,29 +59,29 @@ func main() {
|
||||
m.POST("/download/event", handler.DownloadEventHandler)
|
||||
m.POST("/download/getUrl", handler.DownloadUrlHandler)
|
||||
m.POST("/download/update", handler.DownloadUpdateHandler)
|
||||
m.POST("/event/eventList", handler.EventListHandler)
|
||||
m.POST("/gdpr/get", handler.GdprHandler)
|
||||
m.POST("/event/eventList", middleware.ParseMultipartForm, handler.EventListHandler)
|
||||
m.POST("/gdpr/get", middleware.ParseMultipartForm, handler.GdprHandler)
|
||||
m.POST("/lbonus/execute", handler.LBonusExecuteHandler)
|
||||
m.POST("/live/gameover", handler.GameOverHandler)
|
||||
m.POST("/live/partyList", handler.PartyListHandler)
|
||||
m.POST("/live/play", handler.PlayLiveHandler)
|
||||
m.POST("/live/preciseScore", handler.PlayScoreHandler)
|
||||
m.POST("/live/reward", handler.PlayRewardHandler)
|
||||
m.POST("/live/play", middleware.ParseMultipartForm, handler.PlayLiveHandler)
|
||||
m.POST("/live/preciseScore", middleware.ParseMultipartForm, handler.PlayScoreHandler)
|
||||
m.POST("/live/reward", middleware.ParseMultipartForm, handler.PlayRewardHandler)
|
||||
m.POST("/login/authkey", middleware.AuthKey, handler.AuthKey)
|
||||
m.POST("/login/login", middleware.Login, handler.Login)
|
||||
m.POST("/multiunit/scenarioStartup", handler.MultiUnitStartUpHandler)
|
||||
m.POST("/museum/info", handler.MuseumInfo)
|
||||
m.POST("/notice/noticeFriendGreeting", handler.NoticeFriendGreetingHandler)
|
||||
m.POST("/notice/noticeFriendVariety", handler.NoticeFriendVarietyHandler)
|
||||
m.POST("/museum/info", middleware.ParseMultipartForm, handler.MuseumInfo)
|
||||
m.POST("/notice/noticeFriendGreeting", middleware.ParseMultipartForm, handler.NoticeFriendGreetingHandler)
|
||||
m.POST("/notice/noticeFriendVariety", middleware.ParseMultipartForm, handler.NoticeFriendVarietyHandler)
|
||||
m.POST("/notice/noticeUserGreetingHistory", handler.NoticeUserGreetingHandler)
|
||||
m.POST("/payment/productList", handler.ProductListHandler)
|
||||
m.POST("/personalnotice/get", handler.PersonalNoticeHandler)
|
||||
m.POST("/payment/productList", middleware.ParseMultipartForm, handler.ProductListHandler)
|
||||
m.POST("/personalnotice/get", middleware.ParseMultipartForm, handler.PersonalNoticeHandler)
|
||||
m.POST("/profile/profileRegister", handler.ProfileRegister)
|
||||
m.POST("/scenario/reward", handler.ScenarioRewardHandler)
|
||||
m.POST("/scenario/startup", handler.ScenarioStartupHandler)
|
||||
m.POST("/subscenario/reward", handler.SubScenarioStartupHandler)
|
||||
m.POST("/subscenario/startup", handler.SubScenarioStartupHandler)
|
||||
m.POST("/tos/tosCheck", handler.TosCheckHandler)
|
||||
m.POST("/tos/tosCheck", middleware.ParseMultipartForm, handler.TosCheckHandler)
|
||||
m.POST("/unit/deck", handler.SetDeckHandler)
|
||||
m.POST("/unit/deckName", handler.SetDeckNameHandler)
|
||||
m.POST("/unit/favorite", handler.SetDisplayRankHandler)
|
||||
@@ -91,7 +91,7 @@ func main() {
|
||||
m.POST("/user/changeName", handler.ChangeNameHandler)
|
||||
m.POST("/user/changeNavi", handler.ChangeNaviHandler)
|
||||
m.POST("/user/setNotificationToken", handler.SetNotificationTokenHandler)
|
||||
m.POST("/user/userInfo", handler.UserInfoHandler)
|
||||
m.POST("/user/userInfo", middleware.ParseMultipartForm, handler.UserInfoHandler)
|
||||
}
|
||||
r.GET("/webview.php/announce/index", handler.AnnounceIndexHandler)
|
||||
// Server APIs
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user