diff --git a/internal/handler/api/api.go b/internal/handler/api/api.go index 7e92f22..a49e75c 100644 --- a/internal/handler/api/api.go +++ b/internal/handler/api/api.go @@ -1,7 +1,6 @@ package api import ( - "encoding/json" "fmt" "honoka-chan/internal/handler/api/album" "honoka-chan/internal/handler/api/award" @@ -32,6 +31,7 @@ import ( "honoka-chan/internal/router" apischema "honoka-chan/internal/schema/api" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -41,7 +41,7 @@ func api(ctx *gin.Context) { defer ss.Finalize() apiReq := []apischema.ApiReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &apiReq) + err := honokautils.ParseRequestData(ctx, &apiReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/api/award/info.go b/internal/handler/api/award/info.go index a43cf4c..a39232c 100644 --- a/internal/handler/api/award/info.go +++ b/internal/handler/api/award/info.go @@ -13,14 +13,14 @@ func awardInfo(ctx *gin.Context) (res any, err error) { var awardList []int err = ss.MainEng.Table("award_m").Cols("award_id").Find(&awardList) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } var awardID int _, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("award_id").Get(&awardID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } awardsList := []awardapischema.Info{} diff --git a/internal/handler/api/background/info.go b/internal/handler/api/background/info.go index 470e9ad..d922afd 100644 --- a/internal/handler/api/background/info.go +++ b/internal/handler/api/background/info.go @@ -13,14 +13,14 @@ func backgroundInfo(ctx *gin.Context) (res any, err error) { var backgroundList []int err = ss.MainEng.Table("background_m").Cols("background_id").Find(&backgroundList) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } var backgroundID int _, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("background_id").Get(&backgroundID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } backgroundsList := []backgroundapischema.Info{} diff --git a/internal/handler/api/eventscenario/status.go b/internal/handler/api/eventscenario/status.go index 7b0ed91..0038df8 100644 --- a/internal/handler/api/eventscenario/status.go +++ b/internal/handler/api/eventscenario/status.go @@ -16,8 +16,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) { var eventID []int eventsList := []eventscenarioapischema.EventScenarioList{} err = ss.MainEng.Table("event_scenario_m").Cols("event_id").GroupBy("event_id").OrderBy("event_id DESC").Find(&eventID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range eventID { @@ -30,8 +30,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) { chapsList := []eventscenarioapischema.ChapterList{} err = ss.MainEng.Table("event_scenario_m").Where("event_id = ?", id).Cols("event_scenario_id,chapter,chapter_asset,open_date"). OrderBy("chapter DESC").Find(&eventRes) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, res := range eventRes { diff --git a/internal/handler/api/exchange/owningpoint.go b/internal/handler/api/exchange/owningpoint.go index 6e92c5a..6be051a 100644 --- a/internal/handler/api/exchange/owningpoint.go +++ b/internal/handler/api/exchange/owningpoint.go @@ -14,8 +14,8 @@ func owningPoint(ctx *gin.Context) (res any, err error) { var exchangeID []int exPointsList := []exchangeapischema.ExchangePointList{} err = ss.MainEng.Table("exchange_point_m").Cols("exchange_point_id").OrderBy("exchange_point_id ASC").Find(&exchangeID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range exchangeID { diff --git a/internal/handler/api/live/schedule.go b/internal/handler/api/live/schedule.go index 0cace96..df5f293 100644 --- a/internal/handler/api/live/schedule.go +++ b/internal/handler/api/live/schedule.go @@ -14,8 +14,8 @@ func liveSchedule(ctx *gin.Context) (res any, err error) { var liveID []int err = ss.MainEng.Table("special_live_m"). Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } liveList := []liveapischema.LiveList{} diff --git a/internal/handler/api/live/status.go b/internal/handler/api/live/status.go index 59c37b1..c176e83 100644 --- a/internal/handler/api/live/status.go +++ b/internal/handler/api/live/status.go @@ -14,8 +14,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) { var liveDifficultyID []int normalLives := []liveapischema.NormalLiveStatusList{} err = ss.MainEng.Table("normal_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range liveDifficultyID { normalLive := liveapischema.NormalLiveStatusList{ @@ -31,8 +31,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) { specialLives := []liveapischema.SpecialLiveStatusList{} err = ss.MainEng.Table("special_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range liveDifficultyID { specialLive := liveapischema.SpecialLiveStatusList{ diff --git a/internal/handler/api/multiunit/scenariostatus.go b/internal/handler/api/multiunit/scenariostatus.go index fea27d0..054c00f 100644 --- a/internal/handler/api/multiunit/scenariostatus.go +++ b/internal/handler/api/multiunit/scenariostatus.go @@ -15,8 +15,8 @@ func MultiUnitScenarioStatus(ctx *gin.Context) (res any, err error) { var statusID []int multiUnitsList := []multiunitapischema.StatusList{} err = ss.MainEng.Table("multi_unit_scenario_m").Cols("multi_unit_id").GroupBy("multi_unit_id").OrderBy("multi_unit_id ASC").Find(&statusID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range statusID { @@ -30,8 +30,8 @@ func MultiUnitScenarioStatus(ctx *gin.Context) (res any, err error) { Join("LEFT", "multi_unit_scenario_open_m", "multi_unit_scenario_m.multi_unit_id = multi_unit_scenario_open_m.multi_unit_id"). Cols("multi_unit_scenario_btn_asset,open_date,multi_unit_scenario_id,chapter"). Where("multi_unit_scenario_m.multi_unit_id = ?", id).Get(&multiRes) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } multiUnitsList = append(multiUnitsList, multiunitapischema.StatusList{ diff --git a/internal/handler/api/museum/info.go b/internal/handler/api/museum/info.go index 4d99bee..aaf9816 100644 --- a/internal/handler/api/museum/info.go +++ b/internal/handler/api/museum/info.go @@ -21,8 +21,8 @@ func museumInfo(ctx *gin.Context) (res any, err error) { var smileBuff, pureBuff, coolBuff int err = ss.MainEng.Table("museum_contents_m").Cols("museum_contents_id,smile_buff,pure_buff,cool_buff"). OrderBy("museum_contents_id ASC").Find(&museumRes) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, res := range museumRes { diff --git a/internal/handler/api/scenario/status.go b/internal/handler/api/scenario/status.go index 6ea1b73..ff6b638 100644 --- a/internal/handler/api/scenario/status.go +++ b/internal/handler/api/scenario/status.go @@ -14,8 +14,8 @@ func scenarioStatus(ctx *gin.Context) (res any, err error) { var scenarioID []int scenarioLists := []scenarioapischema.StatusList{} err = ss.MainEng.Table("scenario_m").Cols("scenario_id").OrderBy("scenario_id ASC").Find(&scenarioID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range scenarioID { diff --git a/internal/handler/api/subscenario/status.go b/internal/handler/api/subscenario/status.go index 1da7bc4..a418fcf 100644 --- a/internal/handler/api/subscenario/status.go +++ b/internal/handler/api/subscenario/status.go @@ -14,8 +14,8 @@ func subscenarioStatus(ctx *gin.Context) (res any, err error) { var subScenarioID []int subScenarioLists := []subscenarioapischema.StatusList{} err = ss.MainEng.Table("subscenario_m").Cols("subscenario_id").OrderBy("subscenario_id ASC").Find(&subScenarioID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for _, id := range subScenarioID { diff --git a/internal/handler/api/unit/accessoryall.go b/internal/handler/api/unit/accessoryall.go index a6e2489..3cc8411 100644 --- a/internal/handler/api/unit/accessoryall.go +++ b/internal/handler/api/unit/accessoryall.go @@ -13,8 +13,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) { accessoryList := []unitapischema.AccessoryList{} err = ss.MainEng.Table("common_accessory_m").Find(&accessoryList) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } for k := range accessoryList { accessoryList[k].NextExp = 0 @@ -25,8 +25,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) { } wearingInfo := []unitapischema.WearingInfo{} err = ss.UserEng.Table("user_accessory_wear").Where("user_id = ?", ss.UserID).Find(&wearingInfo) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } res = unitapischema.AccessoryAllResp{ Result: unitapischema.AccessoryAllData{ diff --git a/internal/handler/api/unit/all.go b/internal/handler/api/unit/all.go index dba7dd4..f89315f 100644 --- a/internal/handler/api/unit/all.go +++ b/internal/handler/api/unit/all.go @@ -15,8 +15,8 @@ func unitAll(ctx *gin.Context) (res any, err error) { unitMap := []unitmodel.UnitDataMap{} err = ss.GetBasicUnitInfo(). Where("a.user_id = ?", ss.UserID).Find(&unitMap) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } unitsData := []unitapischema.Active{} diff --git a/internal/handler/api/unit/deckinfo.go b/internal/handler/api/unit/deckinfo.go index 064f07f..7575985 100644 --- a/internal/handler/api/unit/deckinfo.go +++ b/internal/handler/api/unit/deckinfo.go @@ -13,16 +13,16 @@ func unitDeckInfo(ctx *gin.Context) (res any, err error) { userDeck := []unitapischema.UserDeckData{} err = ss.UserEng.Table("user_deck").Where("user_id = ?", ss.UserID).Asc("deck_id").Find(&userDeck) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } unitDeckInfo := []unitapischema.DeckInfoData{} for _, deck := range userDeck { deckUnit := []unitapischema.UnitDeckData{} err = ss.UserEng.Table("user_deck_unit").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } oUID := []unitapischema.UnitOwningUserIds{} diff --git a/internal/handler/api/unit/removableskillinfo.go b/internal/handler/api/unit/removableskillinfo.go index a508479..edb0da5 100644 --- a/internal/handler/api/unit/removableskillinfo.go +++ b/internal/handler/api/unit/removableskillinfo.go @@ -14,14 +14,14 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) { var skillEquipCount []unitapischema.SkillEquipCount err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ?", ss.UserID).Select("unit_removable_skill_id,COUNT(*) AS ct"). GroupBy("unit_removable_skill_id").Find(&skillEquipCount) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } var rmSkillIds []int err = ss.MainEng.Table("unit_removable_skill_m").Where("effect_range = 1").Cols("unit_removable_skill_id").Find(&rmSkillIds) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } owingInfo := []unitapischema.OwningInfo{} @@ -43,8 +43,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) { var unitOwningIds []int err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ?", ss.UserID).Cols("unit_owning_user_id").GroupBy("unit_owning_user_id").Find(&unitOwningIds) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } equipInfo := map[int]any{} @@ -52,8 +52,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) { detail := []unitapischema.SkillEquipDetail{} err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ? AND unit_owning_user_id = ?", ss.UserID, v). Cols("unit_removable_skill_id").Find(&detail) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } equipInfo[v] = unitapischema.SkillEquipList{ diff --git a/internal/handler/api/user/getnavi.go b/internal/handler/api/user/getnavi.go index 8236e29..5cc5f79 100644 --- a/internal/handler/api/user/getnavi.go +++ b/internal/handler/api/user/getnavi.go @@ -13,8 +13,8 @@ func userGetNavi(ctx *gin.Context) (res any, err error) { var uID, oID int _, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("user_id,unit_owning_user_id").Get(&uID, &oID) - if ss.CheckErr(err) { - return + if err != nil { + return nil, err } res = userapischema.GetNaviResp{ diff --git a/internal/handler/download/additional.go b/internal/handler/download/additional.go index 7b254b1..9457562 100644 --- a/internal/handler/download/additional.go +++ b/internal/handler/download/additional.go @@ -1,30 +1,23 @@ package download import ( - "encoding/json" "fmt" "honoka-chan/config" "honoka-chan/internal/middleware" "honoka-chan/internal/router" downloadschema "honoka-chan/internal/schema/download" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) -type PkgInfo struct { - PkgType int `xorm:"pkg_type"` - PkgID int `xorm:"pkg_id"` - Order int `xorm:"pkg_order"` - Size int `xorm:"pkg_size"` -} - func additional(ctx *gin.Context) { ss := session.Get(ctx) defer ss.Finalize() downloadReq := downloadschema.AdditionalReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq) + err := honokautils.ParseRequestData(ctx, &downloadReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/download/batch.go b/internal/handler/download/batch.go index 4153adf..be2d75f 100644 --- a/internal/handler/download/batch.go +++ b/internal/handler/download/batch.go @@ -1,13 +1,13 @@ package download import ( - "encoding/json" "fmt" "honoka-chan/config" "honoka-chan/internal/middleware" "honoka-chan/internal/router" downloadschema "honoka-chan/internal/schema/download" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" "xorm.io/builder" @@ -18,7 +18,7 @@ func batch(ctx *gin.Context) { defer ss.Finalize() downloadReq := downloadschema.BatchReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq) + err := honokautils.ParseRequestData(ctx, &downloadReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/download/geturl.go b/internal/handler/download/geturl.go index 5599c87..bbdf94c 100644 --- a/internal/handler/download/geturl.go +++ b/internal/handler/download/geturl.go @@ -1,13 +1,13 @@ package download import ( - "encoding/json" "fmt" "honoka-chan/config" "honoka-chan/internal/middleware" "honoka-chan/internal/router" downloadschema "honoka-chan/internal/schema/download" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "strings" "github.com/gin-gonic/gin" @@ -18,7 +18,7 @@ func getUrl(ctx *gin.Context) { defer ss.Finalize() downloadReq := downloadschema.UrlReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq) + err := honokautils.ParseRequestData(ctx, &downloadReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/download/types.go b/internal/handler/download/types.go new file mode 100644 index 0000000..76f3ae0 --- /dev/null +++ b/internal/handler/download/types.go @@ -0,0 +1,8 @@ +package download + +type PkgInfo struct { + PkgType int `xorm:"pkg_type"` + PkgID int `xorm:"pkg_id"` + Order int `xorm:"pkg_order"` + Size int `xorm:"pkg_size"` +} diff --git a/internal/handler/download/update.go b/internal/handler/download/update.go index 78bb175..9a9f3c9 100644 --- a/internal/handler/download/update.go +++ b/internal/handler/download/update.go @@ -1,13 +1,13 @@ package download import ( - "encoding/json" "fmt" "honoka-chan/config" "honoka-chan/internal/middleware" "honoka-chan/internal/router" downloadschema "honoka-chan/internal/schema/download" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "io" "net/http" "strings" @@ -23,7 +23,7 @@ func update(ctx *gin.Context) { defer ss.Finalize() downloadReq := downloadschema.UpdateReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq) + err := honokautils.ParseRequestData(ctx, &downloadReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/ghome/account/active.go b/internal/handler/ghome/account/active.go index 5d63f09..10d181c 100644 --- a/internal/handler/ghome/account/active.go +++ b/internal/handler/ghome/account/active.go @@ -9,7 +9,7 @@ import ( ) func active(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() ss.Respond(ghomeschema.ActiveResp{ diff --git a/internal/handler/ghome/account/initialize.go b/internal/handler/ghome/account/initialize.go index 19cc97a..235aff1 100644 --- a/internal/handler/ghome/account/initialize.go +++ b/internal/handler/ghome/account/initialize.go @@ -13,7 +13,7 @@ import ( ) func initialize(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() initData := ghomeschema.InitializeData{ diff --git a/internal/handler/ghome/account/login.go b/internal/handler/ghome/account/login.go index dc33382..6fbeccb 100644 --- a/internal/handler/ghome/account/login.go +++ b/internal/handler/ghome/account/login.go @@ -33,7 +33,7 @@ const ( ) func login(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() data, err := ctx.GetRawData() diff --git a/internal/handler/ghome/account/loginauto.go b/internal/handler/ghome/account/loginauto.go index c1f4eb3..ded4ab8 100644 --- a/internal/handler/ghome/account/loginauto.go +++ b/internal/handler/ghome/account/loginauto.go @@ -15,7 +15,7 @@ import ( ) func loginAuto(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() data, err := ctx.GetRawData() diff --git a/internal/handler/ghome/account/reportrole.go b/internal/handler/ghome/account/reportrole.go index d9cc158..0669c1e 100644 --- a/internal/handler/ghome/account/reportrole.go +++ b/internal/handler/ghome/account/reportrole.go @@ -11,7 +11,7 @@ import ( ) func reportRole(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() randKey, err := ss.Get3DESRandKey() diff --git a/internal/handler/ghome/basic/getcode.go b/internal/handler/ghome/basic/getcode.go index 1ea7e78..d6dd1a8 100644 --- a/internal/handler/ghome/basic/getcode.go +++ b/internal/handler/ghome/basic/getcode.go @@ -10,7 +10,7 @@ import ( ) func getCode(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() codeArray := `{"codeArray":[{"btntext":"好的","code":"-10264022","msg_from":2,"text":"","title":"短信验证码被阻止","type":1},{"btntext":"","code":"-10869623","msg_from":2,"text":"","title":"网络连接失败,无法一键登录","type":2},{"btntext":"","code":"10298300","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298311","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298312","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298313","msg_from":2,"text":"","title":"","type":1},{"btntext":"","code":"10298321","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298322","msg_from":2,"text":"","title":"","type":3}],"codeVersion":"1.0.5"}` diff --git a/internal/handler/ghome/basic/getproductlist.go b/internal/handler/ghome/basic/getproductlist.go index d3c2d7c..ccfddee 100644 --- a/internal/handler/ghome/basic/getproductlist.go +++ b/internal/handler/ghome/basic/getproductlist.go @@ -9,7 +9,7 @@ import ( ) func getProductList(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() getProductListData := ghomeschema.GetProductListData{ diff --git a/internal/handler/ghome/basic/handshake.go b/internal/handler/ghome/basic/handshake.go index 4eac9b1..7835ce1 100644 --- a/internal/handler/ghome/basic/handshake.go +++ b/internal/handler/ghome/basic/handshake.go @@ -17,7 +17,7 @@ import ( ) func handshake(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() data, err := ctx.GetRawData() diff --git a/internal/handler/ghome/basic/loginarea.go b/internal/handler/ghome/basic/loginarea.go index b014051..7ee8ddf 100644 --- a/internal/handler/ghome/basic/loginarea.go +++ b/internal/handler/ghome/basic/loginarea.go @@ -9,7 +9,7 @@ import ( ) func loginArea(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() ss.Respond(ghomeschema.LoginAreaResp{ diff --git a/internal/handler/ghome/basic/publickey.go b/internal/handler/ghome/basic/publickey.go index a4df374..9d3bbfa 100644 --- a/internal/handler/ghome/basic/publickey.go +++ b/internal/handler/ghome/basic/publickey.go @@ -13,7 +13,7 @@ import ( ) func publicKey(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() publicKeyCode := 0 diff --git a/internal/handler/ghome/guest/status.go b/internal/handler/ghome/guest/status.go index ff06ca2..dac27c4 100644 --- a/internal/handler/ghome/guest/status.go +++ b/internal/handler/ghome/guest/status.go @@ -9,7 +9,7 @@ import ( ) func status(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() ss.Respond(ghomeschema.GuestStatusResp{ diff --git a/internal/handler/ghome/misc/agreement.go b/internal/handler/ghome/misc/agreement.go index 6e875c6..c18c54f 100644 --- a/internal/handler/ghome/misc/agreement.go +++ b/internal/handler/ghome/misc/agreement.go @@ -9,7 +9,7 @@ import ( ) func agreement(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() ss.Respond(ghomeschema.AgreementResp{ diff --git a/internal/handler/ghome/misc/integration.go b/internal/handler/ghome/misc/integration.go index 851539b..6ba8991 100644 --- a/internal/handler/ghome/misc/integration.go +++ b/internal/handler/ghome/misc/integration.go @@ -9,7 +9,7 @@ import ( ) func appReport(ctx *gin.Context) { - ss := session.New(ctx) + ss := session.Attach(ctx) defer ss.Finalize() ss.Respond(ghomeschema.AppReportResp{ diff --git a/internal/handler/live/play.go b/internal/handler/live/play.go index bfde8c3..e549ff0 100644 --- a/internal/handler/live/play.go +++ b/internal/handler/live/play.go @@ -7,6 +7,7 @@ import ( "honoka-chan/internal/router" liveschema "honoka-chan/internal/schema/live" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "honoka-chan/pkg/utils" "math" "strconv" @@ -20,7 +21,7 @@ func play(ctx *gin.Context) { defer ss.Finalize() playReq := liveschema.PlayReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playReq) + err := honokautils.ParseRequestData(ctx, &playReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/live/precisescore.go b/internal/handler/live/precisescore.go index 62bd867..78cf8fc 100644 --- a/internal/handler/live/precisescore.go +++ b/internal/handler/live/precisescore.go @@ -8,6 +8,7 @@ import ( "honoka-chan/internal/router" liveschema "honoka-chan/internal/schema/live" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "honoka-chan/pkg/utils" "strconv" "time" @@ -20,7 +21,7 @@ func preciseScore(ctx *gin.Context) { defer ss.Finalize() playScoreReq := liveschema.PlayScoreReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playScoreReq) + err := honokautils.ParseRequestData(ctx, &playScoreReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/live/reward.go b/internal/handler/live/reward.go index 0807627..9bd6046 100644 --- a/internal/handler/live/reward.go +++ b/internal/handler/live/reward.go @@ -1,12 +1,12 @@ package live import ( - "encoding/json" "honoka-chan/internal/middleware" usermodel "honoka-chan/internal/model/user" "honoka-chan/internal/router" liveschema "honoka-chan/internal/schema/live" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "honoka-chan/pkg/utils" "time" @@ -21,7 +21,7 @@ func reward(ctx *gin.Context) { }() playRewardReq := liveschema.RewardReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playRewardReq) + err := honokautils.ParseRequestData(ctx, &playRewardReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/login/login.go b/internal/handler/login/login.go index 264e71c..fc09c0f 100644 --- a/internal/handler/login/login.go +++ b/internal/handler/login/login.go @@ -19,7 +19,10 @@ func login(ctx *gin.Context) { ss := session.Get(ctx) defer ss.Finalize() - has, authKeyData := ss.GetAuthKey(ctx.MustGet("token").(string)) + has, authKeyData, err := ss.GetAuthKey(ctx.MustGet("token").(string)) + if ss.CheckErr(err) { + return + } if !has { ss.Abort(errors.New("invalid token")) return diff --git a/internal/handler/multiunit/scenariostartup.go b/internal/handler/multiunit/scenariostartup.go index 4157d0f..ec84661 100644 --- a/internal/handler/multiunit/scenariostartup.go +++ b/internal/handler/multiunit/scenariostartup.go @@ -1,11 +1,11 @@ package multiunit import ( - "encoding/json" "honoka-chan/internal/middleware" "honoka-chan/internal/router" multiunitschema "honoka-chan/internal/schema/multiunit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "time" "github.com/gin-gonic/gin" @@ -16,7 +16,7 @@ func scenarioStartup(ctx *gin.Context) { defer ss.Finalize() startReq := multiunitschema.ScenarioStartUpReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &startReq) + err := honokautils.ParseRequestData(ctx, &startReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/subscenario/startup.go b/internal/handler/subscenario/startup.go index a6b8e06..5716d62 100644 --- a/internal/handler/subscenario/startup.go +++ b/internal/handler/subscenario/startup.go @@ -1,11 +1,11 @@ package subscenario import ( - "encoding/json" "honoka-chan/internal/middleware" "honoka-chan/internal/router" subscenarioschema "honoka-chan/internal/schema/subscenario" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "time" "github.com/gin-gonic/gin" @@ -16,7 +16,7 @@ func startup(ctx *gin.Context) { defer ss.Finalize() startReq := subscenarioschema.StartUpReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &startReq) + err := honokautils.ParseRequestData(ctx, &startReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/deck.go b/internal/handler/unit/deck.go index ac8d304..7849a95 100644 --- a/internal/handler/unit/deck.go +++ b/internal/handler/unit/deck.go @@ -1,7 +1,6 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" unitmodel "honoka-chan/internal/model/unit" usermodel "honoka-chan/internal/model/user" @@ -9,6 +8,7 @@ import ( unitapischema "honoka-chan/internal/schema/api/unit" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "time" "github.com/gin-gonic/gin" @@ -19,7 +19,7 @@ func deck(ctx *gin.Context) { defer ss.Finalize() deckReq := unitschema.DeckReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq) + err := honokautils.ParseRequestData(ctx, &deckReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/deckname.go b/internal/handler/unit/deckname.go index e6cfbb7..b9387a5 100644 --- a/internal/handler/unit/deckname.go +++ b/internal/handler/unit/deckname.go @@ -1,12 +1,12 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" "honoka-chan/internal/router" unitapischema "honoka-chan/internal/schema/api/unit" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -16,7 +16,7 @@ func deckName(ctx *gin.Context) { defer ss.Finalize() deckReq := unitschema.DeckNameReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq) + err := honokautils.ParseRequestData(ctx, &deckReq) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/favorite.go b/internal/handler/unit/favorite.go index e7b0ec9..abf5be6 100644 --- a/internal/handler/unit/favorite.go +++ b/internal/handler/unit/favorite.go @@ -1,12 +1,12 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" usermodel "honoka-chan/internal/model/user" "honoka-chan/internal/router" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -16,7 +16,7 @@ func favorite(ctx *gin.Context) { defer ss.Finalize() var req unitschema.FavoriteReq - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req) + err := honokautils.ParseRequestData(ctx, &req) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/removableskillequipment.go b/internal/handler/unit/removableskillequipment.go index 367fc46..1c4d284 100644 --- a/internal/handler/unit/removableskillequipment.go +++ b/internal/handler/unit/removableskillequipment.go @@ -1,11 +1,11 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" "honoka-chan/internal/router" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -15,7 +15,7 @@ func removableSkillEquipment(ctx *gin.Context) { defer ss.Finalize() req := unitschema.RemovableSkillEquipmentReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req) + err := honokautils.ParseRequestData(ctx, &req) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/sale.go b/internal/handler/unit/sale.go index ca8b7a8..b16a030 100644 --- a/internal/handler/unit/sale.go +++ b/internal/handler/unit/sale.go @@ -1,12 +1,12 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" usermodel "honoka-chan/internal/model/user" "honoka-chan/internal/router" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "time" "github.com/gin-gonic/gin" @@ -17,7 +17,7 @@ func sale(ctx *gin.Context) { defer ss.Finalize() req := unitschema.SaleReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req) + err := honokautils.ParseRequestData(ctx, &req) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/setdisplayrank.go b/internal/handler/unit/setdisplayrank.go index d1b8aec..18e755f 100644 --- a/internal/handler/unit/setdisplayrank.go +++ b/internal/handler/unit/setdisplayrank.go @@ -1,12 +1,12 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" usermodel "honoka-chan/internal/model/user" "honoka-chan/internal/router" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -16,7 +16,7 @@ func setDisplayRank(ctx *gin.Context) { defer ss.Finalize() var req unitschema.SetDisplayRankReq - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req) + err := honokautils.ParseRequestData(ctx, &req) if ss.CheckErr(err) { return } diff --git a/internal/handler/unit/wearaccessory.go b/internal/handler/unit/wearaccessory.go index 1830157..b0cd5c3 100644 --- a/internal/handler/unit/wearaccessory.go +++ b/internal/handler/unit/wearaccessory.go @@ -1,11 +1,11 @@ package unit import ( - "encoding/json" "honoka-chan/internal/middleware" "honoka-chan/internal/router" unitschema "honoka-chan/internal/schema/unit" "honoka-chan/internal/session" + honokautils "honoka-chan/internal/utils" "github.com/gin-gonic/gin" ) @@ -15,7 +15,7 @@ func wearAccessory(ctx *gin.Context) { defer ss.Finalize() req := unitschema.WearAccessoryReq{} - err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req) + err := honokautils.ParseRequestData(ctx, &req) if ss.CheckErr(err) { return } diff --git a/internal/middleware/common.go b/internal/middleware/common.go index d5ebec5..7cade74 100644 --- a/internal/middleware/common.go +++ b/internal/middleware/common.go @@ -36,7 +36,7 @@ func Common(ctx *gin.Context) { uid := ctx.GetHeader("User-ID") ctx.Set("userid", uid) - ss := session.New(ctx) + ss := session.Attach(ctx) ctx.Set("session", ss) authorize := ctx.GetHeader("Authorize") diff --git a/internal/session/deck.go b/internal/session/deck.go index 7ff6ff2..e3dde81 100644 --- a/internal/session/deck.go +++ b/internal/session/deck.go @@ -4,25 +4,28 @@ import ( usermodel "honoka-chan/internal/model/user" ) -func (ss *Session) GetUserDeck(deckID int) (bool, *usermodel.UserDeck) { +func (ss *Session) GetUserDeck(deckID int) (bool, *usermodel.UserDeck, error) { deckData := usermodel.UserDeck{} has, err := ss.UserEng.Table("user_deck"). Where("user_id = ? AND deck_id = ?", ss.UserID, deckID).Get(&deckData) - if ss.CheckErr(err) { - return false, nil + if err != nil { + return false, nil, err } - return has, &deckData + return has, &deckData, nil } func (ss *Session) GetUserDeckUnit(deckID int) []usermodel.UserDeckUnit { - has, deckData := ss.GetUserDeck(deckID) + has, deckData, err := ss.GetUserDeck(deckID) + if ss.CheckErr(err) { + return []usermodel.UserDeckUnit{} + } if !has { return []usermodel.UserDeckUnit{} } unitData := []usermodel.UserDeckUnit{} - err := ss.UserEng.Table("user_deck_unit"). + err = ss.UserEng.Table("user_deck_unit"). Where("user_deck_id = ?", deckData.ID).Find(&unitData) if ss.CheckErr(err) { return []usermodel.UserDeckUnit{} diff --git a/internal/session/ghome.go b/internal/session/ghome.go index 5cb917a..73556c2 100644 --- a/internal/session/ghome.go +++ b/internal/session/ghome.go @@ -6,26 +6,30 @@ import ( ) func (ss *Session) GetDeviceID() string { - return ss.Ctx.Request.Header.Get("X-DEVICEID") + return ss.deviceID } -func (ss *Session) GetRandKey() []byte { +func (ss *Session) GetRandKey() ([]byte, error) { deviceKey := ghomemodel.DeviceKey{} has, err := ss.UserEng.Table(new(ghomemodel.DeviceKey)). Where("device_id = ?", ss.GetDeviceID()).Get(&deviceKey) - if ss.CheckErr(err) { - return nil + if err != nil { + return nil, err } if !has { - return nil + return nil, nil } - return []byte(deviceKey.RandKey) + return []byte(deviceKey.RandKey), nil } func (ss *Session) SetRandKey(key string) { var err error - if ss.GetRandKey() == nil { + randKey, err := ss.GetRandKey() + if ss.CheckErr(err) { + return + } + if randKey == nil { _, err = ss.UserEng.Insert(&ghomemodel.DeviceKey{ DeviceID: ss.GetDeviceID(), RandKey: key, @@ -40,7 +44,10 @@ func (ss *Session) SetRandKey(key string) { } func (ss *Session) Get3DESRandKey() ([]byte, error) { - randKey := ss.GetRandKey() + randKey, err := ss.GetRandKey() + if err != nil { + return nil, err + } if len(randKey) < 24 { return nil, errors.New("invalid rand key") } diff --git a/internal/session/login.go b/internal/session/login.go index f95feb7..51137d3 100644 --- a/internal/session/login.go +++ b/internal/session/login.go @@ -2,15 +2,15 @@ package session import loginmodel "honoka-chan/internal/model/login" -func (ss *Session) GetAuthKey(token string) (bool, *loginmodel.AuthKey) { +func (ss *Session) GetAuthKey(token string) (bool, *loginmodel.AuthKey, error) { authKeyData := loginmodel.AuthKey{} has, err := ss.UserEng.Table(new(loginmodel.AuthKey)). Where("authorize_token = ?", token).Get(&authKeyData) - if ss.CheckErr(err) { - return false, nil + if err != nil { + return false, nil, err } - return has, &authKeyData + return has, &authKeyData, nil } func (ss *Session) SetAuthKey(authKey *loginmodel.AuthKey) { diff --git a/internal/session/session.go b/internal/session/session.go index 34fc404..9af7c58 100644 --- a/internal/session/session.go +++ b/internal/session/session.go @@ -13,19 +13,36 @@ import ( "xorm.io/xorm" ) -type Session struct { - Ctx *gin.Context +type responseHooks struct { + setHeader func(string, string) + writeJSON func(int, any) + writeBody func(int, string) + abort func() +} +type Session struct { MainEng *xorm.Session UserEng *xorm.Session UserID int UserPref usermodel.UserPref + + deviceID string + resp responseHooks + done bool } func New(ctx *gin.Context) *Session { ss := &Session{ - Ctx: ctx, + deviceID: ctx.GetHeader("X-DEVICEID"), + resp: responseHooks{ + setHeader: ctx.Header, + writeJSON: ctx.JSON, + writeBody: func(code int, body string) { + ctx.String(code, body) + }, + abort: ctx.Abort, + }, } ss.MainEng = db.MainEng.NewSession() @@ -45,21 +62,62 @@ func Get(ctx *gin.Context) *Session { return ctx.MustGet("session").(*Session) } +func Attach(ctx *gin.Context) *Session { + if ss, ok := ctx.Get("session"); ok { + return ss.(*Session) + } + + ss := New(ctx) + ctx.Set("session", ss) + return ss +} + func (ss *Session) Finalize() { - ss.MainEng.Close() - if ss.CheckErr(ss.UserEng.Commit()) { + if ss.done { return } + ss.done = true + + if ss.MainEng != nil { + ss.MainEng.Close() + ss.MainEng = nil + } + + if ss.UserEng == nil { + return + } + + if err := ss.UserEng.Commit(); err != nil { + log.Println(err.Error()) + ss.UserEng.Close() + ss.UserEng = nil + ss.resp.writeJSON(500, gin.H{"error": err.Error()}) + ss.resp.abort() + return + } + ss.UserEng.Close() + ss.UserEng = nil } func (ss *Session) Abort(err error) { - ss.MainEng.Close() - ss.UserEng.Rollback() - ss.UserEng.Close() + if ss.done { + return + } + ss.done = true - ss.Ctx.JSON(500, gin.H{"error": err.Error()}) - ss.Ctx.Abort() + if ss.MainEng != nil { + ss.MainEng.Close() + ss.MainEng = nil + } + if ss.UserEng != nil { + ss.UserEng.Rollback() + ss.UserEng.Close() + ss.UserEng = nil + } + + ss.resp.writeJSON(500, gin.H{"error": err.Error()}) + ss.resp.abort() } func (ss *Session) CheckErr(err error) bool { @@ -77,7 +135,7 @@ func (ss *Session) Respond(resp any) { return } - ss.Ctx.Header("Content-Type", "application/json") - ss.Ctx.Header("X-Message-Sign", base64.StdEncoding.EncodeToString(encrypt.RSASignSHA1(data))) - ss.Ctx.String(http.StatusOK, string(data)) + ss.resp.setHeader("Content-Type", "application/json") + ss.resp.setHeader("X-Message-Sign", base64.StdEncoding.EncodeToString(encrypt.RSASignSHA1(data))) + ss.resp.writeBody(http.StatusOK, string(data)) } diff --git a/internal/utils/request.go b/internal/utils/request.go new file mode 100644 index 0000000..7e4da10 --- /dev/null +++ b/internal/utils/request.go @@ -0,0 +1,11 @@ +package utils + +import ( + "encoding/json" + + "github.com/gin-gonic/gin" +) + +func ParseRequestData(ctx *gin.Context, dst any) error { + return json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), dst) +}