controller.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package controller
  2. import (
  3. "context"
  4. "fmt"
  5. mhayaGin "github.com/mhaya/components/gin"
  6. mhayaTime "github.com/mhaya/extend/time"
  7. "github.com/mhaya/game/game_cluster/internal/code"
  8. "github.com/mhaya/game/game_cluster/internal/constant"
  9. "github.com/mhaya/game/game_cluster/internal/data"
  10. "github.com/mhaya/game/game_cluster/internal/mdb"
  11. "github.com/mhaya/game/game_cluster/internal/param"
  12. "github.com/mhaya/game/game_cluster/internal/token"
  13. "github.com/mhaya/game/game_cluster/nodes/web/sdk"
  14. mhayaLogger "github.com/mhaya/logger"
  15. mhayaActor "github.com/mhaya/net/actor"
  16. "github.com/mhaya/net/parser/simple"
  17. "time"
  18. )
  19. type Controller struct {
  20. mhayaGin.BaseController
  21. User
  22. }
  23. type (
  24. User struct {
  25. simple.ActorBase
  26. }
  27. )
  28. func (*User) AliasID() string {
  29. return "user"
  30. }
  31. func (p *Controller) Init() {
  32. group := p.Group("/")
  33. group.POST("/auth", p.auth)
  34. group.POST("/login", p.login)
  35. group.POST("/start", p.start)
  36. group.POST("/guide", p.guide)
  37. group.POST("/roll", p.roll)
  38. group.POST("/lottery", p.lottery)
  39. group.POST("/getLotteryConfig", p.getLotteryConfig)
  40. group.POST("/signIn", p.signIn)
  41. group.POST("/rank", p.rank)
  42. group.POST("/invite", p.invite)
  43. group.POST("/share", p.share)
  44. group.POST("/claim", p.claim)
  45. group.POST("/weeklyRankConfig", p.weeklyRankConfig)
  46. group.POST("/jump", p.jump)
  47. group.POST("/savex", p.savex)
  48. group.POST("/savetonwall", p.savetonwall)
  49. group.POST("/getLevel", p.getLevel)
  50. group.POST("/cashOut", p.cashOut)
  51. system := mhayaActor.NewSystem()
  52. system.SetApp(p.App)
  53. parentActor := &User{}
  54. system.CreateActor(parentActor.AliasID(), parentActor)
  55. p.User = *parentActor
  56. }
  57. func (p *Controller) Auth(c *mhayaGin.Context) (*token.Token, int32) {
  58. tokenString := c.GetHeader(constant.Token)
  59. if tokenString == "" {
  60. return nil, code.AccountTokenValidateFail
  61. }
  62. userToken, ok := token.DecodeToken(tokenString)
  63. if ok == false {
  64. return nil, code.AccountTokenValidateFail
  65. }
  66. platformRow := data.SdkConfig.Get(userToken.PID)
  67. if platformRow == nil {
  68. return nil, code.AccountTokenValidateFail
  69. }
  70. _, ok = token.Validate(userToken, platformRow.Salt)
  71. if ok == false {
  72. return nil, code.AccountTokenValidateFail
  73. }
  74. oldToken := mdb.RDB.Get(context.Background(), fmt.Sprintf("%v:%v", constant.Token, userToken.OpenID)).Val()
  75. if oldToken != tokenString {
  76. // return nil, code.AccountTokenValidateFail
  77. }
  78. return userToken, code.OK
  79. }
  80. // login 根据pid获取sdkConfig,与第三方进行帐号登陆效验
  81. func (p *Controller) auth(c *mhayaGin.Context) {
  82. var pa param.LoginReq
  83. //body := c.GetBody()
  84. if err := c.BindJSON(&pa); err != nil {
  85. mhayaLogger.Warnf("if login err {. params=%s", pa)
  86. code.RenderResult(c, code.PIDError)
  87. return
  88. }
  89. config := data.SdkConfig.Get(pa.Pid)
  90. if config == nil {
  91. mhayaLogger.Warnf("if platformConfig == nil {. params=%s", c.GetParams())
  92. code.RenderResult(c, code.LoginError)
  93. return
  94. }
  95. sdkInvoke, err := sdk.GetInvoke(config.ID)
  96. if err != nil {
  97. mhayaLogger.Warnf("[pid = %d] get invoke error. params=%s", pa.Pid, pa)
  98. code.RenderResult(c, code.PIDError)
  99. return
  100. }
  101. params := c.GetParams(true)
  102. params["openid"] = pa.OpenID
  103. params["platform"] = pa.Platform
  104. params["channel"] = pa.Channel
  105. params["ip"] = c.ClientIP()
  106. // invoke login
  107. sdkInvoke.Login(config, params, func(statusCode int32, result sdk.Params, error ...error) {
  108. if code.IsFail(statusCode) {
  109. mhayaLogger.Warnf("login validate fail. code = %d, params = %s", statusCode, c.GetParams())
  110. if len(error) > 0 {
  111. mhayaLogger.Warnf("code = %d, error = %s", statusCode, error[0])
  112. }
  113. code.RenderResult(c, statusCode)
  114. return
  115. }
  116. if result == nil {
  117. mhayaLogger.Warnf("callback result map is nil. params= %s", c.GetParams())
  118. code.RenderResult(c, code.LoginError)
  119. return
  120. }
  121. openId, found := result.GetString("open_id")
  122. if found == false {
  123. mhayaLogger.Warnf("callback result map not found `open_id`. result = %s", result)
  124. code.RenderResult(c, code.LoginError)
  125. return
  126. }
  127. playerId, found := result.GetString("player_id")
  128. if found == false {
  129. mhayaLogger.Warnf("callback result map not found `open_id`. result = %s", result)
  130. code.RenderResult(c, code.LoginError)
  131. return
  132. }
  133. targetPath, found := result.GetString("target_path")
  134. if found == false {
  135. mhayaLogger.Warnf("callback result map not found `targetPath`. result = %s", result)
  136. code.RenderResult(c, code.LoginError)
  137. return
  138. }
  139. //重新获取认证 需要段天原来服务器
  140. oldToken := mdb.RDB.Get(context.Background(), fmt.Sprintf("%v:%v", constant.Token, openId)).Val()
  141. if len(oldToken) > 0 {
  142. userToken, ok := token.DecodeToken(oldToken)
  143. if ok == false {
  144. return
  145. }
  146. p.Call(userToken.TargetPath, "sessionClose", nil)
  147. }
  148. base64Token := token.New(pa.Pid, openId, playerId, targetPath, "", config.Salt).ToBase64()
  149. err = mdb.RDB.Set(context.Background(), fmt.Sprintf("%v:%v", constant.Token, openId), base64Token, mhayaTime.SecondsPerWeek*time.Second).Err()
  150. if err != nil {
  151. mhayaLogger.Warnf("callback result set token err. result = %s", result)
  152. code.RenderResult(c, code.LoginError)
  153. return
  154. }
  155. code.RenderResult(c, code.OK, base64Token)
  156. })
  157. }