|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package phone
-
- import (
- "fmt"
- "time"
-
- "code.gitea.io/gitea/modules/log"
-
- "code.gitea.io/gitea/modules/phone"
- "code.gitea.io/gitea/modules/redis/redis_client"
- "code.gitea.io/gitea/modules/setting"
-
- "github.com/gomodule/redigo/redis"
- )
-
- //验证码存储前缀 使用时%s用手机号替代
- const CODE_PREFIX = "P_C:%s"
-
- //手机号发送验证码次数Hkey,%s对应日期, 存储在hset中,值是hashet,记录手机号和发送次数
- const TIMES_PREFIX = "P_T:%s"
-
- func GetPhoneNumberSendTimes(conn redis.Conn, phoneNumber string) (int, error) {
- i, err := redis_client.HGET(conn, GetPhoneTimesHKey(), phoneNumber)
-
- return redis.Int(i, err)
- }
-
- func GetPhoneCodeTTL(conn redis.Conn, phoneNumber string) (int, error) {
- return redis_client.Ttl(conn, GetPhoneCodeKey(phoneNumber))
-
- }
- func SendVerifyCode(conn redis.Conn, phoneNumber string) error {
- timesKey := GetPhoneTimesHKey()
- exists, err := redis_client.EXISTS(conn, timesKey)
- if err != nil {
- return err
- }
- code := phone.GenerateVerifyCode(setting.PhoneService.VerifyCodeLength)
- err = phone.SendVerifyCode(phoneNumber, code)
- if err != nil {
- return err
- }
- redis_client.SETNX(conn, GetPhoneCodeKey(phoneNumber), code, setting.PhoneService.CodeTimeout)
- if !exists {
- err = redis_client.HSETNX(conn, timesKey, phoneNumber, 1)
- if err != nil {
- return err
- }
- err = redis_client.Expire(conn, timesKey, getRemainSecondOfDay(time.Now()))
- if err != nil {
- return err
- }
-
- } else {
- timesPhoneExists, err := redis_client.HEXISTS(conn, timesKey, phoneNumber)
- if err != nil {
- return err
- }
-
- if timesPhoneExists {
- err = redis_client.HINCRBY(conn, timesKey, phoneNumber, 1)
- } else {
- err = redis_client.HSETNX(conn, timesKey, phoneNumber, 1)
- }
- if err != nil {
- return err
- }
-
- }
- return nil
-
- }
-
- func IsVerifyCodeRight(phoneNumer string, verifyCode string) bool {
- if phoneNumer == "" {
- return false
- }
- value, err := redis_client.Get(GetPhoneCodeKey(phoneNumer))
- if err != nil {
- log.Warn("redis err", err)
- return false
- } else {
- if value==""{
- return false
- }
- return value == verifyCode
- }
- }
-
- func GetPhoneCodeKey(phoneNumber string) string {
- return fmt.Sprintf(CODE_PREFIX, phoneNumber)
- }
-
- func GetPhoneTimesHKey() string {
- today := time.Now().Format("2006-01-02")
- return fmt.Sprintf(TIMES_PREFIX, today)
- }
-
- func getRemainSecondOfDay(t time.Time) int {
- return 86400 - 60*60*t.Hour() + 60*t.Minute() + t.Second()
- }
|