新增了接口

This commit is contained in:
2024-12-30 16:34:26 +08:00
parent e6e78ad658
commit 60850d98da
153 changed files with 10293 additions and 5 deletions
+93
View File
@@ -0,0 +1,93 @@
package middlewares
import (
"case-open-api/api/dao"
"case-open-api/api/responses"
"case-open-api/consts"
"case-open-api/utils"
"encoding/json"
"github.com/gin-gonic/gin"
"net/http"
)
// Auth Auth认证
func Auth() gin.HandlerFunc {
return func(c *gin.Context) {
platformKey := c.Request.Header.Get("platformKey")
sign := c.Request.Header.Get("sign")
timestamp := c.Request.Header.Get("timestamp")
if platformKey == "" || sign == "" || timestamp == "" {
c.JSON(http.StatusOK, gin.H{
"message": "非法请求",
"code": consts.ClientHttpError,
"data": "",
})
c.Abort()
return
}
// 获取平台数据
platformDao := dao.PlatformDao{}
maps := make(map[string]interface{})
maps["platform_key"] = platformKey
platform, err := platformDao.GetPlatform(maps)
if err != nil || platform == nil {
responses.FailWithMessage("非法请求", c)
c.Abort()
return
}
if platform.PlatformStatus != 1 {
responses.FailWithMessage("非法请求", c)
c.Abort()
return
}
// 获取请求参数
paramsRaw, ok := c.Get("params")
if !ok {
c.JSON(http.StatusOK, gin.H{
"message": "Invalid params",
"code": consts.ClientHttpError,
"data": "",
})
c.Abort()
return
}
paramsJsonData, err := json.Marshal(paramsRaw)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "Invalid params",
"code": consts.ClientHttpError,
"data": "",
})
c.Abort()
return
}
paramsMap := make(map[string]interface{})
err = json.Unmarshal(paramsJsonData, &paramsMap)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "Invalid params",
"code": consts.ClientHttpError,
"data": "",
})
c.Abort()
return
}
// 验证签名
err = utils.VerifySignature(paramsMap, timestamp, sign, platform.PlatformSecret)
if err != nil {
responses.FailWithMessage(err.Error(), c)
c.Abort()
return
}
c.Set("platformId", platform.PlatformId) // 平台id
c.Next()
}
}
+29
View File
@@ -0,0 +1,29 @@
package middlewares
import (
"github.com/gin-gonic/gin"
"net/http"
)
// Cors
// @Description: 跨域中间件
// @return gin.HandlerFunc
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin")
if origin != "" {
c.Header("Access-Control-Allow-Origin", origin)
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")
c.Header("Access-Control-Allow-Credentials", "false")
c.Set("content-type", "application/json")
}
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
return
}
c.Next()
}
}
+60
View File
@@ -0,0 +1,60 @@
package middlewares
import (
"case-open-api/global"
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"time"
)
// Logrus 日志中间件
func Logrus() gin.HandlerFunc {
return func(c *gin.Context) {
// 开始时间
startTime := time.Now()
// 处理请求
c.Next()
// 获取 请求 参数
params := make(map[string]string)
paramsRaw, ok := c.Get("params")
if ok {
requestParams, ok := paramsRaw.(map[string]string)
if ok || len(requestParams) > 0 {
params = requestParams
}
}
// 结束时间
endTime := time.Now()
// 执行时间
latencyTime := fmt.Sprintf("%6v", endTime.Sub(startTime))
// 请求方式
reqMethod := c.Request.Method
// 请求路由
reqUri := c.Request.RequestURI
// 状态码
statusCode := c.Writer.Status()
// 请求IP
clientIP := c.ClientIP()
// 日志格式
global.Logger.WithFields(logrus.Fields{
"http_status": statusCode,
"total_time": latencyTime,
"ip": clientIP,
"method": reqMethod,
"uri": reqUri,
"params": params,
}).Info("access")
}
}
@@ -0,0 +1,92 @@
package middlewares
import (
"bytes"
"case-open-api/consts"
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"io"
"net/http"
)
// RequestParamsMiddleware 获取请求参数中间件
func RequestParamsMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
contentType := c.Request.Header.Get("Content-Type")
params := make(map[string]string)
// 判断请求参数类型
switch contentType {
case "application/json":
// 解析 application/json 请求体
bodyBytes, err := io.ReadAll(c.Request.Body)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"})
c.Abort()
return
}
// 创建新的请求对象,并设置请求体数据
c.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
var jsonParams map[string]interface{}
err = json.Unmarshal(bodyBytes, &jsonParams)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": "Invalid JSON data",
"code": consts.HttpError,
"data": "",
})
c.Abort()
return
}
for key, value := range jsonParams {
params[key] = fmt.Sprintf("%v", value)
}
// 存储参数到上下文
c.Set("params", params)
case "multipart/form-data", "application/form-data", "application/x-www-form-urlencoded":
// 解析 Form 表单参数
err := c.Request.ParseForm()
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": "Invalid form data",
"code": consts.HttpError,
"data": "",
})
c.Abort()
return
}
for key, values := range c.Request.Form {
if len(values) > 0 {
params[key] = fmt.Sprintf("%v", values[0])
}
}
// 存储参数到上下文
c.Set("params", params)
default:
// 解析 URL 参数
queryParams := c.Request.URL.Query()
for key, values := range queryParams {
if len(values) > 0 {
params[key] = fmt.Sprintf("%v", values[0])
}
}
// 存储参数到上下文
c.Set("params", params)
}
// 继续处理请求
c.Next()
}
}