package controller import ( "f1-game/internal/code" "f1-game/internal/component/sdk" sdkFacade "f1-game/internal/component/sdk/define/facade" "f1-game/internal/data" "f1-game/internal/extend/token" nameKey "f1-game/internal/name/key" cstring "github.com/cherry-game/cherry/extend/string" clog "github.com/cherry-game/cherry/logger" cgin "github.com/cherry-game/components/gin" ) type LoginController struct { cgin.BaseController } func (p *LoginController) Init() { allowRegister := p.App.Settings().GetBool("allow_register", false) if allowRegister { p.Any("/login", p.login) } } // login 根据pid获取SdkConfig,与第三方进行帐号登录效验 // http://127.0.0.1/login?pid=2188001&account=test1&password=test1 func (p *LoginController) login(c *cgin.Context) { pid := c.GetInt32(nameKey.PID, 0, true) if pid < 1 { clog.Warnf("if pid < 1 {. params=%s", c.GetParams()) code.JSONResult(c, code.PIDError) return } sdkRow := data.SDK.Get(pid) if sdkRow == nil { clog.Warnf("if sdkConfig == nil {. params=%s", c.GetParams()) code.JSONResult(c, code.AccountLoginSDKNotFound) return } sdkInvoke, err := sdk.GetInvoke(sdkRow.SdkID) if err != nil { clog.Warnf("[pid = %d] get invoke error. params=%s", pid, c.GetParams()) code.JSONResult(c, code.PIDError) return } paramsMap := c.GetParams(true) paramsMap[nameKey.PID] = cstring.ToString(pid) // invoke login sdkInvoke.Login(sdkRow, paramsMap, func(statusCode int32, paramsMap sdkFacade.ParamsMap, error ...error) { if code.IsFail(statusCode) { clog.Warnf("login validate fail. code = %d, params = %s", statusCode, c.GetParams()) if len(error) > 0 { clog.Warnf("code = %d, error = %s", statusCode, error[0]) } code.JSONResult(c, statusCode) return } if paramsMap == nil { clog.Warnf("callback paramsMap is nil. params= %s", c.GetParams()) code.JSONResult(c, code.AccountLoginResponseError) return } openID := paramsMap.Get(nameKey.OpenID) if cstring.IsBlank(openID) { clog.Warnf("callback result map not found `open_id`. paramsMap = %v", paramsMap) code.JSONResult(c, code.AccountLoginResponseError) return } base64Token := token.New(pid, openID, sdkRow.Salt).ToBase64() code.JSONResult(c, code.OK, base64Token) }) }