package main import ( "fmt" "github.com/gin-gonic/gin" "pro2d/common" "pro2d/common/db/redisproxy" "pro2d/common/sms" "pro2d/models" "pro2d/pb" ) type AccountAction struct { HttpServer *AccountServer } func (h *AccountAction) Register(c *gin.Context) (int, interface{}) { var register pb.Register if err := c.ShouldBindJSON(®ister); err != nil { return 1, err.Error() } key := fmt.Sprintf(common.SMSCode, register.Phone) relay, err := redisproxy.GET(key) if err != nil { return 2, err.Error() } code := relay.(string) if register.Code != code { return 2, "code error" } account := models.NewAccount(register.Phone) if err := account.Load(); err == nil { return 3, "account exists: " + register.Phone } account.Uid = common.SnowFlack.NextValStr() account.Password = common.Md5V(register.Password) if err := account.Create(); err != nil { return 4, "account register err: " + err.Error() } account.Password = register.Password return 0, "success" } func (h *AccountAction) Login(c *gin.Context) (int, interface{}) { var login pb.Account if err := c.ShouldBindJSON(&login); err != nil { return 1, err.Error() } account := models.NewAccount(login.Phone) if err := account.Load(); err != nil { return 2, err.Error() } if common.Md5V(login.Password) != account.Password { return 3, "password error" } var gs []*pb.ServiceInfo for k, v := range h.HttpServer.EtcdClient.GetByPrefix(common.GlobalConf.GameConf.Name) { gs = append(gs, &pb.ServiceInfo{ Id: k, Name: common.GlobalConf.GameConf.Name, Address: v, }) } rsp := &pb.LoginRsp{ Token: account.Uid, GameService: gs, } return 0, rsp } func (h *AccountAction) Sms(c *gin.Context) (int, interface{}) { c.Request.ParseForm() phone, ok := c.GetPostForm("phone") if !ok { return 1, "phone not exists" } code := common.RandomCode() key := fmt.Sprintf(common.SMSCode, phone) relay, err := redisproxy.SETNX(key, code) if relay.(int64) == 0 { return 2, "send frequently" } redisproxy.ExpireKey(key, 60) err = sms.SendSms(phone, code) if err != nil { redisproxy.DEL(key) return 3, err.Error() } return 0, nil }