96 lines
2.4 KiB
Go
96 lines
2.4 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"go-common/app/interface/main/answer/model"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
bm "go-common/library/net/http/blademaster"
|
|
)
|
|
|
|
func validate(c *bm.Context) {
|
|
var (
|
|
mid, _ = c.Get("mid")
|
|
params = c.Request.Form
|
|
challenge = params.Get("geetest_challenge")
|
|
validate = params.Get("geetest_validate")
|
|
seccode = params.Get("geetest_seccode")
|
|
success = params.Get("geetest_success")
|
|
captchaType = params.Get("captcha_type") // typ == "gt"
|
|
cookie = c.Request.Header.Get("cookie")
|
|
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag)
|
|
ct string
|
|
sid string
|
|
)
|
|
if mobile {
|
|
ct = model.PlatH5
|
|
} else {
|
|
ct = model.PlatPC
|
|
}
|
|
successi, err := strconv.Atoi(success)
|
|
if err != nil {
|
|
successi = 1
|
|
}
|
|
sidCookie, err := c.Request.Cookie("sid")
|
|
if err != nil {
|
|
log.Warn("cookie do not contains sid error(%v)", err)
|
|
} else {
|
|
sid = sidCookie.Value
|
|
}
|
|
comargs := map[string]string{
|
|
"ua": c.Request.Header.Get("User-Agent"),
|
|
"buvid": c.Request.Header.Get("Buvid"),
|
|
"refer": c.Request.Header.Get("Referer"),
|
|
"url": c.Request.Header.Get("URL"),
|
|
"sid": sid,
|
|
}
|
|
if captchaType == model.BiliCaptcha {
|
|
validate = params.Get("token")
|
|
seccode = params.Get("code")
|
|
if validate == "" || seccode == "" {
|
|
log.Error("validate(%+v) ", params)
|
|
c.JSON(nil, ecode.RequestErr)
|
|
}
|
|
}
|
|
req, err := svc.Validate(c, challenge, validate, seccode, ct, successi, mid.(int64), cookie, captchaType, comargs)
|
|
if err != nil {
|
|
log.Error("svc.Validate(%d,%d,%s,%s,%s,%s,%s,%s) error(%+v)", mid.(int64), successi, challenge, validate, seccode, ct,
|
|
cookie, comargs, err)
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
cool, err := svc.Cool(c, req.HistoryID, mid.(int64))
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
cool.Hid = req.HistoryID
|
|
cool.URL = fmt.Sprintf(model.ProPassed, req.HistoryID)
|
|
c.JSON(cool, nil)
|
|
}
|
|
|
|
// captcha get captcha
|
|
func captcha(c *bm.Context) {
|
|
var (
|
|
err error
|
|
mid, _ = c.Get("mid")
|
|
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag)
|
|
ct string
|
|
)
|
|
if mobile {
|
|
ct = model.PlatH5
|
|
} else {
|
|
ct = model.PlatPC
|
|
}
|
|
req, err := svc.Captcha(c, mid.(int64), ct, 1)
|
|
if err != nil {
|
|
log.Error("svc.QueCaptcha(%d,%s) error(%+v)", mid.(int64), ct, err)
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
c.JSON(req, nil)
|
|
}
|