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