user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package main
  2. import (
  3. "net/http"
  4. "sparrow/pkg/models"
  5. "sparrow/pkg/rpcs"
  6. "sparrow/pkg/server"
  7. "time"
  8. jwt "github.com/dgrijalva/jwt-go"
  9. "github.com/martini-contrib/render"
  10. )
  11. // SignedString 签名
  12. const SignedString = "www.yehaoji.com"
  13. // UserToken 用户token结构体
  14. type UserToken struct {
  15. UserID uint
  16. UserName string
  17. UserType string
  18. RoleCode int
  19. VendorID uint
  20. jwt.StandardClaims
  21. }
  22. // UserLogin 用户登陆
  23. func UserLogin(loginRequest models.LoginRequest, r render.Render) {
  24. reply := models.User{}
  25. err := server.RPCCallByName("registry", "Registry.Login", &loginRequest, &reply)
  26. if err != nil {
  27. r.JSON(http.StatusOK, renderError(ErrSystemFault, err))
  28. return
  29. }
  30. usertype := "member"
  31. if reply.UserType == 1 {
  32. usertype = "admin"
  33. }
  34. claims := UserToken{
  35. UserID: reply.ID,
  36. UserName: reply.UserName,
  37. UserType: usertype,
  38. RoleCode: reply.UserRoleID,
  39. VendorID: reply.VendorID,
  40. }
  41. claims.ExpiresAt = time.Now().Add(time.Hour * 24).Unix()
  42. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  43. ser, _ := token.SignedString([]byte(SignedString))
  44. result := map[string]interface{}{
  45. "username": reply.UserName,
  46. "userkey": reply.UserKey,
  47. "company": reply.Vendor.VendorName,
  48. "access_token": ser,
  49. }
  50. r.JSON(http.StatusOK, result)
  51. return
  52. }
  53. // UserRegister 用户注册
  54. func UserRegister(req models.Reqrequest, r render.Render) {
  55. vargs := models.Vendor{
  56. VendorName: req.VendorName,
  57. }
  58. vreply := &models.Vendor{}
  59. err := server.RPCCallByName("registry", "Registry.SaveVendor", &vargs, vreply)
  60. if err != nil {
  61. r.JSON(http.StatusOK, renderError(ErrSystemFault, err))
  62. return
  63. }
  64. uargs := &models.User{
  65. UserName: req.UserName,
  66. UserPass: req.PassWord,
  67. VendorID: vreply.ID,
  68. Phone: req.Phone,
  69. Email: req.Email,
  70. }
  71. ureply := &models.User{}
  72. err = server.RPCCallByName("registry", "Registry.Register", &uargs, ureply)
  73. if err != nil {
  74. r.JSON(http.StatusOK, renderError(ErrSystemFault, err))
  75. return
  76. }
  77. res := map[string]interface{}{
  78. "username": uargs.UserName,
  79. "phone": uargs.Phone,
  80. "email": uargs.Email,
  81. }
  82. r.JSON(http.StatusOK, res)
  83. return
  84. }
  85. // ModifyPassword 用户修改密码
  86. func ModifyPassword(req *http.Request, r render.Render, user *UserToken) {
  87. newpass := req.URL.Query().Get("newpass")
  88. oldpass := req.URL.Query().Get("oldpass")
  89. if len(newpass) == 0 || len(oldpass) == 0 {
  90. r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, errBadRequestString))
  91. return
  92. }
  93. args := rpcs.ArgsUserModifyPass{
  94. UserID: user.UserID,
  95. NewPass: newpass,
  96. OldPass: oldpass,
  97. }
  98. err := server.RPCCallByName("registry", "Registry.ModifyPass", &args, nil)
  99. if err != nil {
  100. r.JSON(http.StatusOK, renderError(ErrSystemFault, err))
  101. return
  102. }
  103. r.JSON(http.StatusOK, done("修改成功"))
  104. return
  105. }