user.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package api
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "strings"
  7. "../../pkg/app"
  8. "../../pkg/e"
  9. "../../pkg/util"
  10. "../../routers/restful"
  11. "../../service/user_service"
  12. "github.com/Anderson-Lu/gofasion/gofasion"
  13. "github.com/astaxie/beego/logs"
  14. "github.com/astaxie/beego/validation"
  15. "github.com/gin-gonic/gin"
  16. )
  17. type auth struct {
  18. Id int `json:"id"`
  19. Username string `json:"username"`
  20. Password string `json:"password"`
  21. CaptchaKey string `json:"CaptchaKey"`
  22. Role int `json:"role_id"`
  23. Imei string `json:"imei"`
  24. PastureId string `json:"pastureid"`
  25. TypeIn int `json:"typein"`
  26. }
  27. // @Summary 获取登录token 信息
  28. // @Tags auth
  29. // @Accept json
  30. // @Produce json
  31. // @Param username formData string true "admin"
  32. // @Param password formData string true "123456"
  33. // @Success 200 {string} json "{ "code": 200e, "data": { "token": "xxx" }, "msg": "ok" }"
  34. // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}"
  35. // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}"
  36. // @Router /auth [POST]
  37. func Auth(c *gin.Context) {
  38. appG := app.Gin{C: c}
  39. var reqInfo auth
  40. err := c.BindJSON(&reqInfo)
  41. //c.Request.ParseForm()
  42. //reqInfo.Username = c.PostForm("username")
  43. //reqInfo.Password = c.PostForm("pwd")
  44. valid := validation.Validation{}
  45. valid.MaxSize(reqInfo.Username, 100, "username").Message("最长为100字符")
  46. valid.MaxSize(reqInfo.Password, 100, "password").Message("最长为100字符")
  47. if valid.HasErrors() {
  48. app.MarkErrors(valid.Errors)
  49. appG.Response(http.StatusInternalServerError, e.ERROR_ADD_FAIL, valid.Errors)
  50. return
  51. }
  52. authService := user_service.User{Username: reqInfo.Username, Password: reqInfo.Password}
  53. isExist, err := authService.Check()
  54. if err != nil {
  55. appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_CHECK_TOKEN_FAIL, err)
  56. return
  57. }
  58. if !isExist {
  59. //appG.Response(http.StatusUnauthorized, e.ERROR_AUTH, nil)
  60. appG.Response(http.StatusOK, e.ERROR_AUTH, "用户名或密码错误")
  61. return
  62. }
  63. token, err := util.GenerateToken(reqInfo.Username, reqInfo.Password)
  64. if err != nil {
  65. appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)
  66. return
  67. }
  68. appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
  69. "token": token,
  70. })
  71. }
  72. // @Summary 获取登录token 信息
  73. // @Tags auth
  74. // @Accept json
  75. // @Produce json
  76. // @Param username formData string true "admin"
  77. // @Param password formData string true "123456"
  78. // @Success 200 {string} json "{ "code": 200e, "data": { "token": "xxx" }, "msg": "ok" }"
  79. // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}"
  80. // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}"
  81. // @Router /auth [POST]
  82. func AuthLogin(c *gin.Context) {
  83. appG := app.Gin{C: c}
  84. var reqInfo auth
  85. err := c.BindJSON(&reqInfo)
  86. fmt.Println("++++++++++++++++", reqInfo)
  87. valid := validation.Validation{}
  88. valid.MaxSize(reqInfo.Username, 100, "username").Message("最长为100字符")
  89. if valid.HasErrors() {
  90. app.MarkErrors(valid.Errors)
  91. appG.Response(http.StatusInternalServerError, e.ERROR_ADD_FAIL, valid.Errors)
  92. return
  93. }
  94. err = restful.CheckUserFace(reqInfo.Username, reqInfo.Imei, reqInfo.TypeIn)
  95. if err != nil {
  96. appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_CHECK_TOKEN_FAIL, err.Error())
  97. return
  98. }
  99. token, err := util.GenerateToken(reqInfo.Username, reqInfo.Password)
  100. if err != nil {
  101. appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err.Error())
  102. return
  103. }
  104. appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
  105. "token": token,
  106. })
  107. }
  108. // @Summary 获取单个用户信息
  109. // @Tags users
  110. // @Accept json
  111. // @Produce json
  112. // @Param id body int true "id"
  113. // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }"
  114. // @Router /authdata/userinfo [GET]
  115. func UserLogout(c *gin.Context) {
  116. appG := app.Gin{C: c}
  117. data := make(map[string]interface{})
  118. data["name"] = ""
  119. data["avatar"] = ""
  120. data["introduction"] = ""
  121. appG.Response(http.StatusOK, e.SUCCESS, data)
  122. }
  123. // @Summary 获取单个用户信息
  124. // @Tags users
  125. // @Accept json
  126. // @Produce json
  127. // @Param id path int true "iddd"
  128. // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }"
  129. // @Router /authdata/userinfo [GET]
  130. func GetUserinfo(c *gin.Context) {
  131. appG := app.Gin{C: c}
  132. data := restful.GetUserInfo(c.MustGet("jwt_username").(string))
  133. appG.Response(http.StatusOK, e.SUCCESS, data)
  134. }
  135. func GetOpenID(c *gin.Context) {
  136. code := c.Param("code")
  137. appG := app.Gin{C: c}
  138. openid, err := util.SendWxAuthAPI(code)
  139. if err != nil {
  140. appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
  141. "err": "openid 获取失败 :" + err.Error(),
  142. })
  143. return
  144. }
  145. appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
  146. "openid": openid,
  147. })
  148. }
  149. func UserWXOpenIDBinding(c *gin.Context) {
  150. appG := app.Gin{C: c}
  151. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  152. fsion := gofasion.NewFasion(string(dataByte))
  153. openid := fsion.Get("openid").ValueStr()
  154. // pastureid := fsion.Get("pastureid").ValueStr()
  155. userinfo := fsion.Get("userinfo").ValueStr()
  156. tx := restful.Engine.NewSession()
  157. defer tx.Close()
  158. userlist := strings.Split(userinfo, ".")
  159. if len(userlist) < 3 {
  160. logs.Error("UserWXOpenIDBinding-error1:", nil)
  161. appG.Response(http.StatusInternalServerError, e.ERROR, false)
  162. return
  163. }
  164. _, err := tx.SQL(` replace into user_wx(userid,pastureid,openid,name) VALUES (?,(select pastureid from user where username = ?),?,?)`, userlist[1], userlist[1], openid, userlist[2]).Execute()
  165. if err != nil {
  166. logs.Error("UserWXOpenIDBinding-error2:", err)
  167. appG.Response(http.StatusInternalServerError, e.ERROR, false)
  168. return
  169. }
  170. appG.Response(http.StatusOK, e.SUCCESS, true)
  171. }