You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.7 KiB
105 lines
2.7 KiB
package v1 |
|
|
|
import ( |
|
v1pb "go-common/app/interface/live/web-room/api/http/v1" |
|
"go-common/app/interface/live/web-room/conf" |
|
xCaptcha "go-common/app/service/live/xcaptcha/api/grpc/v1" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/net/metadata" |
|
|
|
"context" |
|
) |
|
|
|
// CaptchaService struct |
|
type CaptchaService struct { |
|
conf *conf.Config |
|
xCaptcha *xCaptcha.Client |
|
// optionally add other properties here, such as dao |
|
// dao *dao.Dao |
|
} |
|
|
|
//NewCaptchaService init |
|
func NewCaptchaService(c *conf.Config) (s *CaptchaService) { |
|
s = &CaptchaService{ |
|
conf: c, |
|
} |
|
client, err := xCaptcha.NewClient(c.XCaptcha) |
|
if err != nil { |
|
log.Error("[web-room][captcha][new XCaptcha error] init XCaptcha error, %+v", err) |
|
} |
|
s.xCaptcha = client |
|
return s |
|
} |
|
|
|
// captcha 相关服务 |
|
|
|
// Create implementation |
|
// 创建验证码 |
|
func (s *CaptchaService) Create(ctx context.Context, req *v1pb.CreateCaptchaReq) (resp *v1pb.CreateCaptchaResp, err error) { |
|
resp = &v1pb.CreateCaptchaResp{} |
|
uid, _ := metadata.Value(ctx, "mid").(int64) |
|
if uid <= 0 { |
|
err = ecode.Error(ecode.NoLogin, "未登录") |
|
return |
|
} |
|
XCaptchaReq := &xCaptcha.XCreateCaptchaReq{ |
|
Type: req.GetType(), |
|
ClientType: req.GetClientType(), |
|
Height: req.GetHeight(), |
|
Width: req.GetWidth(), |
|
Uid: uid, |
|
ClientIp: metadata.String(ctx, metadata.RemoteIP), |
|
} |
|
if s.xCaptcha == nil { |
|
err = ecode.Error(ecode.ServerErr, "创建验证码失败") |
|
return |
|
} |
|
XCaptchaResp, err := s.xCaptcha.Create(ctx, XCaptchaReq) |
|
if err != nil || XCaptchaResp == nil { |
|
return |
|
} |
|
|
|
resp = &v1pb.CreateCaptchaResp{ |
|
Type: XCaptchaResp.Type, |
|
Geetest: &v1pb.GeeTest{}, |
|
Image: &v1pb.Image{}, |
|
} |
|
resp.Geetest.Challenge = XCaptchaResp.Geetest.Challenge |
|
resp.Geetest.Gt = XCaptchaResp.Geetest.Gt |
|
resp.Image.Token = XCaptchaResp.Image.Token |
|
resp.Image.Content = XCaptchaResp.Image.Content |
|
resp.Image.Tips = XCaptchaResp.Image.Tips |
|
return |
|
} |
|
|
|
// Verify implementation |
|
// 校验接口 `midware:"auth" method:"POST"` |
|
func (s *CaptchaService) Verify(ctx context.Context, req *v1pb.VerifyReq) (resp *v1pb.VerifyResp, err error) { |
|
resp = &v1pb.VerifyResp{} |
|
uid, _ := metadata.Value(ctx, "mid").(int64) |
|
if uid <= 0 { |
|
err = ecode.Error(ecode.NoLogin, "未登录") |
|
return |
|
} |
|
if req.GetAnti() == "" { |
|
err = ecode.Error(ecode.ParamInvalid, "参数错误") |
|
return |
|
} |
|
XCaptchaReq := &xCaptcha.CheckReq{ |
|
Anti: req.GetAnti(), |
|
Uid: uid, |
|
ClientIp: metadata.String(ctx, metadata.RemoteIP), |
|
} |
|
if s.xCaptcha == nil { |
|
err = ecode.Error(ecode.ServerErr, "创建验证码失败") |
|
return |
|
} |
|
XCaptchaResp, err := s.xCaptcha.Check(ctx, XCaptchaReq) |
|
if err != nil || XCaptchaResp == nil { |
|
return |
|
} |
|
resp.Type = XCaptchaResp.Type |
|
resp.Token = XCaptchaResp.Token |
|
return |
|
}
|
|
|