package user // //import ( // "context" // "demo/configs" // "demo/data/dao/manage" // "demo/data/domain" // "demo/router" // "demo/share" // "demo/util" // "fmt" // "github.com/gin-gonic/gin" // "github.com/mojocn/base64Captcha" // "github.com/spf13/cast" // "log" // "math/big" // "net/http" // "regexp" // "strconv" // "time" //) // //var ctx = context.Background() // //func UserRouth(engine *gin.RouterGroup) { // user := engine.Group("/user") // { // user.POST("/login", login) // user.POST("/register", register) // user.POST("/registerCode", registerCode) // // user.POST("/sendSms", SendVerificationCode) // user.GET("/captcha", VerificationCode) // } //} // //func VerificationCode(c *gin.Context) { // // 配置 // driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80) // store := base64Captcha.DefaultMemStore // captcha := base64Captcha.NewCaptcha(driver, store) // // // 生成验证码 // id, b64s, answer, err := captcha.Generate() // if err != nil { // c.JSON(500, gin.H{"error": err.Error()}) // return // } // fmt.Println(answer) // err = configs.RedisDb.Set(ctx, "VerificationCode_"+id, answer, 0).Err() // if err != nil { // fmt.Println(err) // } // err = configs.RedisDb.Expire(ctx, "VerificationCode_"+id, 60*time.Second).Err() // if err != nil { // panic(err) // } // // 返回验证码图片 // c.JSON(200, gin.H{ // "message": "获取成功!!!", // "expires": time.Now().Add(time.Minute * 5).Unix(), // "code": 200, // "data": map[string]string{"id": id, "image": b64s}, // }) // //} // //func login(c *gin.Context) { // data := share.GetJsonAnyParam(c) // var user configs.User // var err error // username, _ := data("username") // password, _ := data("password") // t, _ := data("type") // // 定义正则表达式 // // if cast.ToString(t) == "email" { // regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` // // 编译正则表达式 // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("编译正则表达式时出错:", err) // return // } // //判断是否为邮箱格式 // matched := reg.MatchString(cast.ToString(username)) // // if !matched { // fmt.Println("无效的电子邮件格式.") // c.JSON(http.StatusOK, router.CreateResultError(400, "邮箱格式错误!!!")) // return // } // } else if cast.ToString(t) == "phone" { // regexPattern := `^1[3-9]\d{9}$` // // 编译正则表达式 // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("编译正则表达式时出错:", err) // return // } // //判断是否为邮箱格式 // matched := reg.MatchString(cast.ToString(username)) // // if !matched { // fmt.Println("无效的手机号格式.") // c.JSON(http.StatusOK, router.CreateResultError(400, "手机格式错误!!!")) // return // } // } // // user, err = logins(cast.ToString(username), cast.ToString(password), cast.ToString(t)) // // if err == nil && user.Id != 0 { // fmt.Println("用户登录成功!!!") // token, err := share.GenerateToken(cast.ToString(user.Id)) // if err == nil { // c.Header("auth-sign", token) // c.JSON(http.StatusOK, router.CreateResultData(map[string]string{"token": token})) // } else { // c.JSON(http.StatusOK, router.CreateResultError(400, "生成token失败!!!")) // } // } else { // fmt.Println("用户登录失败!!!") // c.JSON(http.StatusOK, router.CreateResultError(401, "用户密码错误!!!")) // } //} // //func registerCode(c *gin.Context) { // data := share.GetJsonAnyParam(c) // phone, _ := data("phone") // //判断是否为手机格式 // if !checkPhone(c, cast.ToString(phone)) { // return // } // //判断是否已经注册 // b, err := existsPhone(cast.ToString(phone)) // if err != nil { // fmt.Println(err) // c.JSON(http.StatusOK, router.CreateResultError(200, "数据库错误!!!")) // return // } // if b { // c.JSON(http.StatusOK, router.CreateResultError(200, "手机号已注册!!!")) // return // } // //判断是否重复注册 // get := configs.RedisDb.Exists(ctx, "PhoneVerificationCodeTime_"+cast.ToString(phone)) // if get.Val() == 1 { // c.JSON(http.StatusOK, router.CreateResultError(200, "验证码已经发送,请等待")) // return // } // // //发送短信 // //sms := sendSms(b, cast.ToString(phone)) // //TODO 模拟发送短信 // sms := testSendSms() // fmt.Println("发送成功!!!:验证码为:", sms) // configs.RedisDb.Set(ctx, "PhoneVerificationCode_"+cast.ToString(phone), sms, 60*5*time.Second) // configs.RedisDb.Set(ctx, "PhoneVerificationCodeTime_"+cast.ToString(phone), time.Now(), 60*time.Second) // c.JSON(http.StatusOK, router.CreateResult()) // //} // //func testSendSms() string { // mins := big.NewInt(100000) // maxs := big.NewInt(999999) // randomNum := share.RandomInt(mins, maxs) // //if matched { // // //bools, err = configs.Engine.Table("user").Where("username = ?", username).Exist(&user) // // // // share.SendMail(username, strconv.Itoa(int(randomNum.Int64()))) // // // //} else { // // share.SendSms(strconv.Itoa(int(randomNum.Int64())), username) // //} // return randomNum.String() //} // //func register(c *gin.Context) { // // data := share.GetJsonAnyParam(c) // // username, _ := data("username") // password, _ := data("password") // code, _ := data("code") // phone, _ := data("phone") // // if !checkEmail(c, cast.ToString(username)) { // return // } // if !checkPhone(c, cast.ToString(phone)) { // return // } // if !checkCode(c, cast.ToString(code)) { // return // } // if !checkPassword(c, cast.ToString(password)) { // return // } // // 验证验证码 // get := configs.RedisDb.Get(ctx, "PhoneVerificationCode_"+cast.ToString(phone)) // fmt.Println(code, get.Val()) // if code != get.Val() { // c.JSON(http.StatusOK, router.CreateResultError(400, "验证码错误!")) // return // } // configs.RedisDb.Del(ctx, "PhoneVerificationCode_"+cast.ToString(phone)) // // //判断是否已经注册 // b, err := GetUserByPhoneOrEmail(cast.ToString(phone), cast.ToString(username)) // if err != nil { // c.JSON(http.StatusOK, router.CreateResultError(400, "验证手机号及用户名,数据错误")) // return // } // if b { // c.JSON(http.StatusOK, router.CreateResultError(400, "手机号或邮箱已注册!!!")) // return // } // // timestamp := time.Now().Unix() // user := configs.User{ // Username: cast.ToString(username), // Password: cast.ToString(password), // Creation_time: int(timestamp), // Status: 0, // Role_id: 2, // Phone: cast.ToString(phone), // Email: cast.ToString(username), // Name: cast.ToString(username), // RecommendCode: fmt.Sprint(strconv.FormatInt(timestamp, 16), util.RandomArrays(13, 62)), // } // // user, err = SaveNewUser(user) // if err != nil { // fmt.Println(err) // c.JSON(http.StatusOK, router.CreateResultError(400, "数据库错误!!!")) // return // } // if user.Id != 0 { // fmt.Println("用户注册成功!!!") // c.JSON(http.StatusOK, router.CreateResultData(map[string]any{"user": user})) // //用户钱包添加 // manage.SaveUserWallet(&domain.UserWallet{UserId: user.Id}) // // return // } else { // fmt.Println("用户注册失败!!!") // c.JSON(http.StatusOK, router.CreateResultError(400, "用户注册失败!!!")) // return // } //} // //func checkEmail(c *gin.Context, email string) bool { // //// 定义正则表达式 // regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "邮箱格式错误!!!")) // return false // } // //判断是否为邮箱格式 // matched := reg.MatchString(cast.ToString(email)) // if !matched { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "邮箱格式错误!!!")) // return false // } // return true //} //func checkPhone(c *gin.Context, phone string) bool { // //// 定义正则表达式 // regexPattern := `^1[3-9]\d{9}$` // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("1 Error compiling regex:", err) // c.JSON(200, router.CreateResultError(500, "手机号格式错误!!!")) // return false // } // matched := reg.MatchString(cast.ToString(phone)) // if !matched { // fmt.Println("2 Error compiling regex:", err) // c.JSON(200, router.CreateResultError(500, "手机号格式错误!!!")) // return false // } // return true //} //func checkPassword(c *gin.Context, email string) bool { // //// 定义正则表达式 // regexPattern := `^[a-zA-Z0-9,./<>?;'\\:"|\[\]{}~!@#$%^&*()_+=-]{6,32}$` // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "密码格式错误!!!")) // return false // } // //判断是否为邮箱格式 // matched := reg.MatchString(cast.ToString(email)) // if !matched { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "密码格式错误!!!")) // return false // } // return true //} //func checkCode(c *gin.Context, code string) bool { // //// 定义正则表达式 // regexPattern := `^\d{6}$` // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "验证码格式错误!!!")) // return false // } // //判断是否为邮箱格式 // matched := reg.MatchString(cast.ToString(code)) // if !matched { // fmt.Println("Error compiling regex:", err) // c.JSON(500, router.CreateResultError(500, "验证码格式错误!!!")) // return false // } // // return true //} // //// SendVerificationCode 发送验证码 //func SendVerificationCode(c *gin.Context) { // data := share.GetJsonAnyParam(c) // var err error // username, _ := data("username") // code, _ := data("code") // codeId, _ := data("codeId") // val, err := configs.RedisDb.Get(ctx, cast.ToString(codeId)).Result() // if err != nil { // log.Fatal(err) // } // if val != cast.ToString(code) { // c.JSON(200, gin.H{"code": 400, "message": "验证码错误!!!"}) // c.Abort() // return // } // // 定义正则表达式 // regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` // // // 编译正则表达式 // reg, err := regexp.Compile(regexPattern) // if err != nil { // fmt.Println("Error compiling regex:", err) // return // } // matched := reg.MatchString(cast.ToString(username)) // sendSms(matched, cast.ToString(username)) // c.JSON(200, gin.H{"code": 200, "message": "发送成功!!!"}) //}