package user import ( . "config" "errors" "github.com/gorilla/sessions" "log" "qfw/util" "time" thisModel "github.com/baiy/Cadmin-server-go/models/user" "github.com/baiy/Cadmin-server-go/models/userGroup" "github.com/baiy/Cadmin-server-go/system/utils" "github.com/baiy/Cadmin-server-go/admin" index_ "github.com/baiy/Cadmin-server-go/system/index" "github.com/doug-martin/goqu/v9" ) var store = sessions.NewCookieStore([]byte("something-very-secret-save")) func Lists(context *admin.Context) (interface{}, error) { userId := context.User.Id param := new(struct { utils.Page Keyword string `form:"keyword"` }) err := context.Form(param) if err != nil { return nil, err } updateAuth := false delAuth := false if updateError := thisModel.CheckAuth(userId, 11); updateError == nil { updateAuth = true } if delError := thisModel.CheckAuth(userId, 12); delError == nil { delAuth = true } lists := make([]struct { thisModel.Model UserGroup []*userGroup.Model `db:"-" json:"userGroup"` }, 0) where := make(goqu.Ex) if param.Keyword != "" { where["username"] = goqu.Op{"like": "%" + param.Keyword + "%"} } total, err := param.Select("admin_user", &lists, where) if err != nil { return nil, err } for index := range lists { lists[index].UserGroup, _ = userGroup.GetLists(lists[index].UserGroupIds()) } return map[string]interface{}{ "lists": lists, "total": total, "updateAuth": updateAuth, "delAuth": delAuth, }, nil } func Save(context *admin.Context) (interface{}, error) { param := new(struct { Id int `form:"id"` Username string `form:"username" validate:"required"` Password string `form:"password"` Description string `form:"description"` Status int `form:"status" validate:"required"` Phone string `form:"phone" ` PhoneCode string `form:"phoneCode"` LoginType string `form:"loginType"` }) err := context.Form(param) if err != nil { return nil, err } password := "" if param.Password != "" { password = string(admin.Passworder.Hash([]byte(param.Password))) } if param.LoginType == "2" { //点击发送手机验证码 phoneExist, _ := thisModel.GetByPhone(param.Phone) if phoneExist.Id > 0 { if phoneExist.Id != param.Id { return nil, errors.New("手机号已绑定其他账号") } else { return nil, errors.New("手机号与原手机号一致") } } if SendPhoneIdentCode(context, param.Phone) { return map[string]interface{}{"status": 3}, nil } else { return nil, errors.New("手机验证码发送失败") } } else if param.LoginType == "3" { //验证手机验证码 session, err := store.Get(context.HttpRequest, "qmx_phone_code_save") if err != nil { log.Println("phone-session2获取失败") return nil, nil } if param.PhoneCode == "" { return nil, errors.New("手机验证码不能为空") } phoneCode := util.ObjToString(session.Values["code"]) phone := util.ObjToString(session.Values["phone"]) if phone != param.Phone || phoneCode != param.PhoneCode { return nil, errors.New("手机验证码错误") } } if param.Id == 0 { if param.Password == "" { return nil, errors.New("添加用户密码不能为空") } if param.Phone == "" { return nil, errors.New("添加用户手机号不能为空") } return nil, thisModel.Add(param.Username, password, param.Status, param.Description, param.Phone) } return nil, thisModel.Updata(param.Id, param.Username, password, param.Status, param.Description, param.Phone) } //发送验证码 func SendPhoneIdentCode(context *admin.Context, phone string) bool { r := context.HttpRequest w := context.HttpResponseWriter session, err := store.Get(r, "qmx_phone_code_save") if err != nil { log.Println("phone-session1获取失败") return false } lastSentTime := util.Int64All(session.Values["identCodeTime"]) //60秒之内不允许重复发 if lastSentTime > 0 && time.Now().Unix()-lastSentTime <= 60 { return false } s_ranNum := util.GetRandom(6) //生成随机数 session.Values["code"] = s_ranNum session.Values["phone"] = phone session.Values["identCodeTime"] = time.Now().Unix() session.Options.MaxAge = 300 if err := session.Save(r, w); err != nil { log.Println("session1保存错误,验证码") } //发送短信 //param := map[string]string{"code": s_ranNum} log.Println("短信验证码", phone, s_ranNum) index_.SendSMS(SysConfigs.SmsServiceRpc, phone, s_ranNum) return true } func Remove(context *admin.Context) (interface{}, error) { id, err := context.InputInt("id") if err != nil { return nil, err } return nil, thisModel.Remove(id) }