add comment verification

This commit is contained in:
landaiqing
2024-09-26 01:13:06 +08:00
parent 97175c3d67
commit 372835296d
14 changed files with 228 additions and 98 deletions

66
utils/check_captcha.go Normal file
View File

@@ -0,0 +1,66 @@
package utils
import (
"encoding/json"
"fmt"
"github.com/wenlng/go-captcha/v2/rotate"
"github.com/wenlng/go-captcha/v2/slide"
"schisandra-cloud-album/common/constant"
"schisandra-cloud-album/common/redis"
"schisandra-cloud-album/global"
"strconv"
)
// CheckSlideData 校验滑动验证码
func CheckSlideData(point []int64, key string) bool {
if point == nil || key == "" {
return false
}
cacheDataByte, err := redis.Get(constant.CommentSubmitCaptchaRedisKey + key).Bytes()
if len(cacheDataByte) == 0 || err != nil {
return false
}
var dct *slide.Block
if err = json.Unmarshal(cacheDataByte, &dct); err != nil {
return false
}
chkRet := false
if 2 == len(point) {
sx, _ := strconv.ParseFloat(fmt.Sprintf("%v", point[0]), 64)
sy, _ := strconv.ParseFloat(fmt.Sprintf("%v", point[1]), 64)
chkRet = slide.CheckPoint(int64(sx), int64(sy), int64(dct.X), int64(dct.Y), 4)
}
if chkRet {
return true
}
return false
}
// CheckRotateData 校验旋转验证码
func CheckRotateData(angle string, key string) bool {
if angle == "" || key == "" {
return false
}
cacheDataByte, err := redis.Get(constant.UserLoginCaptchaRedisKey + key).Bytes()
if err != nil || len(cacheDataByte) == 0 {
global.LOG.Error(err)
return false
}
var dct *rotate.Block
if err = json.Unmarshal(cacheDataByte, &dct); err != nil {
global.LOG.Error(err)
return false
}
sAngle, err := strconv.ParseFloat(fmt.Sprintf("%v", angle), 64)
if err != nil {
global.LOG.Error(err)
return false
}
chkRet := rotate.CheckAngle(int64(sAngle), int64(dct.Angle), 2)
if chkRet {
return true
}
return false
}

View File

@@ -1,20 +1,25 @@
package utils
import (
"encoding/gob"
"encoding/json"
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api/user_api/dto"
"schisandra-cloud-album/global"
)
// SetSession sets session data with key and data
func SetSession(c *gin.Context, key string, data interface{}) error {
session, err := global.Session.Get(c.Request, key)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
return err
}
gob.Register(data)
session.Values[key] = data
jsonData, err := json.Marshal(data)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
return err
}
session.Values[key] = jsonData
err = session.Save(c.Request, c.Writer)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
@@ -23,26 +28,28 @@ func SetSession(c *gin.Context, key string, data interface{}) error {
return nil
}
func GetSession(c *gin.Context, key string) interface{} {
// GetSession gets session data with key
func GetSession(c *gin.Context, key string) dto.ResponseData {
session, err := global.Session.Get(c.Request, key)
if err != nil {
global.LOG.Error("GetSession failed: ", err)
return nil
return dto.ResponseData{}
}
jsonData, ok := session.Values[key]
if !ok {
global.LOG.Error("GetSession failed: ", "key not found")
return nil
return dto.ResponseData{}
}
var data interface{}
var data dto.ResponseData
err = json.Unmarshal(jsonData.([]byte), &data)
if err != nil {
global.LOG.Error("GetSession failed: ", err)
return nil
return dto.ResponseData{}
}
return data
}
// DelSession deletes session data with key
func DelSession(c *gin.Context, key string) {
session, err := global.Session.Get(c.Request, key)
if err != nil {