package main import ( "net/http" "sparrow/pkg/models" "sparrow/pkg/rpcs" "sparrow/pkg/server" "time" jwt "github.com/dgrijalva/jwt-go" "github.com/martini-contrib/render" ) // SignedString 签名 const SignedString = "www.yehaoji.com" // UserToken 用户token结构体 type UserToken struct { UserID uint UserName string UserType string RoleCode int VendorID uint jwt.StandardClaims } // UserLogin 用户登陆 func UserLogin(loginRequest models.LoginRequest, r render.Render) { reply := models.User{} err := server.RPCCallByName("registry", "Registry.Login", &loginRequest, &reply) if err != nil { r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } usertype := "member" if reply.UserType == 1 { usertype = "admin" } claims := UserToken{ UserID: reply.ID, UserName: reply.UserName, UserType: usertype, RoleCode: reply.UserRoleID, VendorID: reply.VendorID, } claims.ExpiresAt = time.Now().Add(time.Hour * 24).Unix() token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) ser, _ := token.SignedString([]byte(SignedString)) result := map[string]interface{}{ "username": reply.UserName, "userkey": reply.UserKey, "company": reply.Vendor.VendorName, "access_token": ser, } r.JSON(http.StatusOK, result) return } // UserRegister 用户注册 func UserRegister(req models.Reqrequest, r render.Render) { vargs := models.Vendor{ VendorName: req.VendorName, } vreply := &models.Vendor{} err := server.RPCCallByName("registry", "Registry.SaveVendor", &vargs, vreply) if err != nil { r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } uargs := &models.User{ UserName: req.UserName, UserPass: req.PassWord, VendorID: vreply.ID, Phone: req.Phone, Email: req.Email, } ureply := &models.User{} err = server.RPCCallByName("registry", "Registry.Register", &uargs, ureply) if err != nil { r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } res := map[string]interface{}{ "username": uargs.UserName, "phone": uargs.Phone, "email": uargs.Email, } r.JSON(http.StatusOK, res) return } // ModifyPassword 用户修改密码 func ModifyPassword(req *http.Request, r render.Render, user *UserToken) { newpass := req.URL.Query().Get("newpass") oldpass := req.URL.Query().Get("oldpass") if len(newpass) == 0 || len(oldpass) == 0 { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, errBadRequestString)) return } args := rpcs.ArgsUserModifyPass{ UserID: user.UserID, NewPass: newpass, OldPass: oldpass, } err := server.RPCCallByName("registry", "Registry.ModifyPass", &args, nil) if err != nil { r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } r.JSON(http.StatusOK, done("修改成功")) return }