|
|
package CheckHandler
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"io/ioutil"
|
|
|
"os"
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
func init() {
|
|
|
//0、读取swagger json文件
|
|
|
inter := readSwaggerJson()
|
|
|
//1、初始化参数长度检查器
|
|
|
lengthLimitMap = lengthLimitInit(inter)
|
|
|
//2、初始化非空检查器
|
|
|
emptyLimitMap = emptyLimitInit(inter)
|
|
|
//3、初始化整数检查器
|
|
|
intLimitMap = intLimitInit(inter)
|
|
|
//4、初始化浮点数检查器
|
|
|
floatLimitMap = floatLimitInit(inter)
|
|
|
//5、初始化手机号检查器
|
|
|
telLimitMap = telLimitInit(inter)
|
|
|
//6、初始化邮箱检查器
|
|
|
emailLimitMap = emailLimitInit(inter)
|
|
|
//7、初始化身份证检查器
|
|
|
idcardLimitMap = idcardLimitInit(inter)
|
|
|
//8、加载日期格式检查器
|
|
|
dateTimeLimitMap = dateTimeLimitInit(inter)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
功能:当错误发生时,返回的结构体
|
|
|
*/
|
|
|
type ResultStruct struct {
|
|
|
InterfaceName string
|
|
|
HttpType string
|
|
|
Parameter string
|
|
|
Message string
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断接口请求是不是合法
|
|
|
作者:黄海
|
|
|
时间:2020-03-16
|
|
|
*/
|
|
|
func IsLegal(c *gin.Context) (bool, ResultStruct) {
|
|
|
//纯接口名称,不要get后面的参数
|
|
|
jkName := strings.Split(c.Request.RequestURI, "?")[0]
|
|
|
//1、长度检查
|
|
|
success, resultStruct := lengthLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//2、非空检查
|
|
|
success, resultStruct = emptyLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//3、整数检查
|
|
|
success, resultStruct = intLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//4、浮点数
|
|
|
success, resultStruct = floatLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//5、手机号
|
|
|
success, resultStruct = telLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//6、邮箱
|
|
|
success, resultStruct = emailLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//7、身份证
|
|
|
success, resultStruct = idcardLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
//8、时间格式
|
|
|
success, resultStruct = datetimeLimitIsLegal(c, jkName)
|
|
|
if !success {
|
|
|
return success, resultStruct
|
|
|
}
|
|
|
|
|
|
return true, resultStruct
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:读取swagger的生成json
|
|
|
作者:黄海
|
|
|
时间:2020-03-16
|
|
|
*/
|
|
|
func readSwaggerJson() interface{} {
|
|
|
//读取doc目录下的swagger.json
|
|
|
f, err := os.Open("./docs/swagger.json")
|
|
|
if err != nil {
|
|
|
fmt.Println("读取swagger.json失败!")
|
|
|
return nil
|
|
|
}
|
|
|
content, _ := ioutil.ReadAll(f)
|
|
|
var jsonBody interface{}
|
|
|
err = json.Unmarshal(content, &jsonBody)
|
|
|
if err != nil {
|
|
|
fmt.Println("ERROR: ", err.Error())
|
|
|
return nil
|
|
|
}
|
|
|
return jsonBody
|
|
|
}
|