84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package api
|
||
|
||
import (
|
||
"fmt"
|
||
"net/http"
|
||
"reflect"
|
||
"strconv"
|
||
"time"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"gopkg.in/go-playground/validator.v8"
|
||
)
|
||
|
||
// 处理跨域请求,支持options访问
|
||
func Cors() gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
method := c.Request.Method
|
||
c.Header("Access-Control-Allow-Origin", "*")
|
||
c.Header("Access-Control-Allow-Headers", "*") //Content-Type,AccessToken,X-CSRF-Token,Authorization,Token,FZM-APP-ID
|
||
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
|
||
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
|
||
c.Header("Access-Control-Allow-Credentials", "true")
|
||
|
||
// 放行所有OPTIONS方法,因为有的模板是要请求两次的
|
||
if method == "OPTIONS" {
|
||
c.AbortWithStatus(http.StatusNoContent)
|
||
}
|
||
|
||
// 处理请求
|
||
c.Next()
|
||
}
|
||
}
|
||
|
||
// defaultLogFormatter is the default log format function Logger middleware uses.
|
||
var Chat33GinLogFormatter = func(param gin.LogFormatterParams) string {
|
||
var statusColor, methodColor, resetColor string
|
||
if param.IsOutputColor() {
|
||
statusColor = param.StatusCodeColor()
|
||
methodColor = param.MethodColor()
|
||
resetColor = param.ResetColor()
|
||
}
|
||
|
||
if param.Latency > time.Minute {
|
||
// Truncate in a golang < 1.8 safe way
|
||
param.Latency = param.Latency - param.Latency%time.Second
|
||
}
|
||
return fmt.Sprintf("[GIN] %v |%s %3d %s| %13v | %15s |%s %-7s %s %s\n%s",
|
||
param.TimeStamp.Format("2006/01/02 - 15:04:05"),
|
||
statusColor, param.StatusCode, resetColor,
|
||
param.Latency,
|
||
param.ClientIP,
|
||
methodColor, param.Method, resetColor,
|
||
param.Path,
|
||
//param.Keys[DeviceType], param.Keys[Version], param.Keys[AppId], param.Keys[UserId], param.Keys[Uuid],
|
||
param.ErrorMessage,
|
||
)
|
||
}
|
||
|
||
func CheckNumber(
|
||
v *validator.Validate, topStruct reflect.Value, currentStructOrField reflect.Value,
|
||
field reflect.Value, fieldType reflect.Type, fieldKind reflect.Kind, param string,
|
||
) bool {
|
||
val := field.Interface()
|
||
|
||
switch val.(type) {
|
||
case int:
|
||
return true
|
||
case string:
|
||
if val.(string) == "" {
|
||
return true
|
||
}
|
||
_, err := strconv.ParseInt(val.(string), 10, 64)
|
||
if err != nil {
|
||
return false
|
||
}
|
||
return true
|
||
case int64:
|
||
return true
|
||
default:
|
||
//utility_log.Error("func ToInt error unknow type")
|
||
return false
|
||
}
|
||
}
|