go-common/app/interface/live/web-room/service/v1/captcha.go

106 lines
2.7 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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
}