auth.go 4.6 KB

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