captcha.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package v1
  2. import (
  3. v1pb "go-common/app/interface/live/web-room/api/http/v1"
  4. "go-common/app/interface/live/web-room/conf"
  5. xCaptcha "go-common/app/service/live/xcaptcha/api/grpc/v1"
  6. "go-common/library/ecode"
  7. "go-common/library/log"
  8. "go-common/library/net/metadata"
  9. "context"
  10. )
  11. // CaptchaService struct
  12. type CaptchaService struct {
  13. conf *conf.Config
  14. xCaptcha *xCaptcha.Client
  15. // optionally add other properties here, such as dao
  16. // dao *dao.Dao
  17. }
  18. //NewCaptchaService init
  19. func NewCaptchaService(c *conf.Config) (s *CaptchaService) {
  20. s = &CaptchaService{
  21. conf: c,
  22. }
  23. client, err := xCaptcha.NewClient(c.XCaptcha)
  24. if err != nil {
  25. log.Error("[web-room][captcha][new XCaptcha error] init XCaptcha error, %+v", err)
  26. }
  27. s.xCaptcha = client
  28. return s
  29. }
  30. // captcha 相关服务
  31. // Create implementation
  32. // 创建验证码
  33. func (s *CaptchaService) Create(ctx context.Context, req *v1pb.CreateCaptchaReq) (resp *v1pb.CreateCaptchaResp, err error) {
  34. resp = &v1pb.CreateCaptchaResp{}
  35. uid, _ := metadata.Value(ctx, "mid").(int64)
  36. if uid <= 0 {
  37. err = ecode.Error(ecode.NoLogin, "未登录")
  38. return
  39. }
  40. XCaptchaReq := &xCaptcha.XCreateCaptchaReq{
  41. Type: req.GetType(),
  42. ClientType: req.GetClientType(),
  43. Height: req.GetHeight(),
  44. Width: req.GetWidth(),
  45. Uid: uid,
  46. ClientIp: metadata.String(ctx, metadata.RemoteIP),
  47. }
  48. if s.xCaptcha == nil {
  49. err = ecode.Error(ecode.ServerErr, "创建验证码失败")
  50. return
  51. }
  52. XCaptchaResp, err := s.xCaptcha.Create(ctx, XCaptchaReq)
  53. if err != nil || XCaptchaResp == nil {
  54. return
  55. }
  56. resp = &v1pb.CreateCaptchaResp{
  57. Type: XCaptchaResp.Type,
  58. Geetest: &v1pb.GeeTest{},
  59. Image: &v1pb.Image{},
  60. }
  61. resp.Geetest.Challenge = XCaptchaResp.Geetest.Challenge
  62. resp.Geetest.Gt = XCaptchaResp.Geetest.Gt
  63. resp.Image.Token = XCaptchaResp.Image.Token
  64. resp.Image.Content = XCaptchaResp.Image.Content
  65. resp.Image.Tips = XCaptchaResp.Image.Tips
  66. return
  67. }
  68. // Verify implementation
  69. // 校验接口 `midware:"auth" method:"POST"`
  70. func (s *CaptchaService) Verify(ctx context.Context, req *v1pb.VerifyReq) (resp *v1pb.VerifyResp, err error) {
  71. resp = &v1pb.VerifyResp{}
  72. uid, _ := metadata.Value(ctx, "mid").(int64)
  73. if uid <= 0 {
  74. err = ecode.Error(ecode.NoLogin, "未登录")
  75. return
  76. }
  77. if req.GetAnti() == "" {
  78. err = ecode.Error(ecode.ParamInvalid, "参数错误")
  79. return
  80. }
  81. XCaptchaReq := &xCaptcha.CheckReq{
  82. Anti: req.GetAnti(),
  83. Uid: uid,
  84. ClientIp: metadata.String(ctx, metadata.RemoteIP),
  85. }
  86. if s.xCaptcha == nil {
  87. err = ecode.Error(ecode.ServerErr, "创建验证码失败")
  88. return
  89. }
  90. XCaptchaResp, err := s.xCaptcha.Check(ctx, XCaptchaReq)
  91. if err != nil || XCaptchaResp == nil {
  92. return
  93. }
  94. resp.Type = XCaptchaResp.Type
  95. resp.Token = XCaptchaResp.Token
  96. return
  97. }