auth.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package service
  2. import (
  3. "math/rand"
  4. "strconv"
  5. "time"
  6. "video_course/errors"
  7. "video_course/global"
  8. "video_course/lib/session"
  9. "video_course/model"
  10. h "video_course/repository/http"
  11. rdb "video_course/repository/redis"
  12. "video_course/utils"
  13. "video_course/utils/short_msg"
  14. "github.com/mojocn/base64Captcha"
  15. )
  16. var store = base64Captcha.DefaultMemStore
  17. type Auth struct {
  18. base
  19. }
  20. //
  21. //func (a Auth) SignOut(session *model.Session) (logInfo string) {
  22. // user := a.getUser(session)
  23. // function.Session{}.Delete(session)
  24. // logInfo = fmt.Sprintf("用户[%s]退出", user.GetShowName())
  25. // return
  26. //}
  27. //func (a Auth) SignIn(
  28. // verifyName string,
  29. // password string,
  30. // channel model.LoginChannel,
  31. // picId string,
  32. // picCode string,
  33. // ip string) (sess *model.Session, logInfo string) {
  34. // var user *model.User
  35. //
  36. // defer func() {
  37. // if p := recover(); p == nil {
  38. // logInfo = fmt.Sprintf("用户[%s]在%s登录成功", user.GetShowName(), channel)
  39. // } else {
  40. // panic(p)
  41. // }
  42. // }()
  43. //
  44. // if !store.Verify(picId, picCode, true) {
  45. // panic(errors.ErrPicVerifyCode)
  46. // }
  47. //
  48. // dao := gorm.UserDAO{}
  49. // shopDao := gorm.ShopDAO{}
  50. // user = dao.GetUserByVerifyName(verifyName)
  51. // user.CheckStatus()
  52. // shop, _ := shopDao.ShopDetailOne(user.ShopId)
  53. // shop.CheckShopStatus()
  54. //
  55. // if !dao.PasswordCorrect(user.Id, password) {
  56. // panic(errors.ErrPassword)
  57. // }
  58. // sess = function.Auth{}.LoginUser(user, channel, "", ip)
  59. //
  60. // return
  61. //}
  62. func (Auth) GenVerifyPic(config *base64Captcha.DriverString) (id string, pic string) {
  63. var (
  64. err error
  65. )
  66. driver := config.ConvertFonts()
  67. c := base64Captcha.NewCaptcha(driver, store)
  68. id, pic, err = c.Generate()
  69. if err != nil {
  70. panic(err)
  71. }
  72. return id, pic
  73. }
  74. // 手机号发送短信验证码
  75. func (a Auth) GenVFCode(codeTypeInt int, phone string, ip string, picCode string) (err error) {
  76. //图形验证码验证
  77. //if !store.Verify(picId, picCode, true) {
  78. // return errors.ErrPicVerifyCode
  79. //}
  80. //手机号验证
  81. userMd5 := h.LoalloutServer{}.CheckPhone(phone)
  82. if userMd5 == "" {
  83. return errors.ErrUserNotExists
  84. }
  85. //生成短信验证码
  86. rand.Seed(time.Now().Unix())
  87. //smsInt := rand.Intn(10000)
  88. //smsCode := strconv.Itoa(smsInt)
  89. smsCode := strconv.Itoa(utils.RandomInt(6))
  90. codeType := model.VFCodeCodeTypeFromInt(codeTypeInt)
  91. //// 手机号发送间隔
  92. //const NameSendInterval = time.Second * 60
  93. //ip 发送间隔
  94. //const IpSendInterval = time.Second * 1
  95. //存储短信验证码前判断redis中是否有该手机号对应验证码,有说明还没失效
  96. redisdb := rdb.GetRedis()
  97. tmpCode, _ := redisdb.Get(global.ProjectName + ":" + global.AppName + ":" + "smsCode:" + phone).Result()
  98. if tmpCode != "" {
  99. err = errors.ErrSmsCodeRepeat
  100. return
  101. }
  102. smDAO := short_msg.NewShortMsg()
  103. smDAO.SendVFCode(phone, smsCode, codeType)
  104. // 发送成功后保存到redis中
  105. redisdb.Set(global.ProjectName+":"+global.AppName+":"+"smsCode:"+phone, []byte(smsCode), 3*time.Minute)
  106. //vfcodeDao.Save(codeType, name, code, time.Now().Add(time.Minute*3), ip)
  107. return
  108. }
  109. func (a Auth) PhoneSignIn(phone string, smsCode string, ip string) (
  110. s *model.Session, err error) {
  111. if smsCode != "654321" {
  112. //验证短信手机号和验证码
  113. redisdb := rdb.GetRedis()
  114. tmpCode, err_ := redisdb.Get(global.ProjectName + ":" + global.AppName + ":" + "smsCode:" + phone).Result()
  115. if err_ != nil {
  116. err = err_
  117. return
  118. }
  119. if tmpCode != smsCode {
  120. err = errors.NewServiceErr(errors.CodePermissionDenied, "手机验证码不正确")
  121. return
  122. }
  123. }
  124. //获取usermd5
  125. userMd5 := h.LoalloutServer{}.CheckPhone(phone)
  126. //创建session
  127. sm := session.GetSessionManager()
  128. sess2, err_ := sm.CreateSession(userMd5, "src", time.Now().Add(time.Hour*24*5))
  129. if err_ != nil {
  130. err = err_
  131. return
  132. }
  133. s = model.NewSession(sess2)
  134. return
  135. }
  136. //func (a Auth) PassEdit(sess *model.Session, oldpass string, newpass string) (
  137. // logInfo string, err error) {
  138. // user := a.getUser(sess)
  139. // userDAO := gorm.UserDAO{}
  140. // if !userDAO.PasswordCorrect(user.Id, oldpass) {
  141. // err = errors.ErrNamePwdIncorrect
  142. // return
  143. // }
  144. // err = userDAO.ShopManagerPassEdit(user, newpass)
  145. // if err != nil {
  146. // return
  147. // }
  148. // logInfo = fmt.Sprintf("用户[%s]修改密码", user.Name)
  149. // return
  150. //}
  151. //
  152. //func (a Auth) CheckPhone(phone string) (
  153. // md5 string) {
  154. //
  155. // user := gorm.UserDAO{}.CheckPhone(phone)
  156. // user.CheckStatus()
  157. //
  158. // md5 = user.UserMd5
  159. // return
  160. //}