275 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			275 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package request ...
 | |
| //
 | |
| // Description : gin ...
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 2023-12-29 15:10
 | |
| package request
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 	"sync"
 | |
| 
 | |
| 	"git.zhangdeman.cn/zhangdeman/trace"
 | |
| 	"git.zhangdeman.cn/zhangdeman/wrapper/op_ternary"
 | |
| 
 | |
| 	"git.zhangdeman.cn/zhangdeman/gin/define"
 | |
| 	"git.zhangdeman.cn/zhangdeman/gin/request/parse_body"
 | |
| 	"github.com/gin-gonic/gin"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	WrapperHandle = &wrapperHandle{}
 | |
| )
 | |
| 
 | |
| type wrapperHandle struct {
 | |
| }
 | |
| 
 | |
| // GetHeader 读取header
 | |
| func (wh *wrapperHandle) GetHeader(ctx *gin.Context, headerKey string, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	val := ctx.GetHeader(headerKey)
 | |
| 	return op_ternary.BaseType[string](len(val) > 0, val, defaultVal)
 | |
| }
 | |
| 
 | |
| // GetCookie 读取cookie
 | |
| func (wh *wrapperHandle) GetCookie(ctx *gin.Context, cookieName string, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return ""
 | |
| 	}
 | |
| 	val, err := ctx.Cookie(cookieName)
 | |
| 	if nil != err {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	return op_ternary.BaseType[string](len(val) > 0, val, defaultVal)
 | |
| }
 | |
| 
 | |
| // GetUri 获取请求URI
 | |
| func (wh *wrapperHandle) GetUri(ctx *gin.Context, defaultVal string) string {
 | |
| 	if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
 | |
| 		return ctx.Request.URL.Path
 | |
| 	}
 | |
| 	return defaultVal
 | |
| }
 | |
| 
 | |
| // GetScheme 获取scheme
 | |
| func (wh *wrapperHandle) GetScheme(ctx *gin.Context, defaultVal string) string {
 | |
| 	if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
 | |
| 		return ctx.Request.URL.Scheme
 | |
| 	}
 | |
| 	return defaultVal
 | |
| }
 | |
| 
 | |
| // ParseQuery 获取query参数
 | |
| func (wh *wrapperHandle) ParseQuery(ctx *gin.Context) map[string]string {
 | |
| 	query := make(map[string]string)
 | |
| 	if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
 | |
| 		for paramName, valueList := range ctx.Request.URL.Query() {
 | |
| 			if len(valueList) == 0 {
 | |
| 				query[paramName] = ""
 | |
| 			} else {
 | |
| 				query[paramName] = valueList[0]
 | |
| 			}
 | |
| 		}
 | |
| 		return query
 | |
| 	}
 | |
| 	return query
 | |
| }
 | |
| 
 | |
| // GetMethod 获取请求方法
 | |
| func (wh *wrapperHandle) GetMethod(ctx *gin.Context) string {
 | |
| 	if nil != ctx && nil != ctx.Request {
 | |
| 		return ctx.Request.Method
 | |
| 	}
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| // GetContentType 获取请求方式
 | |
| func (wh *wrapperHandle) GetContentType(ctx *gin.Context, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	contentTypeValue := strings.ToLower(ctx.ContentType())
 | |
| 	return op_ternary.BaseType[string](len(contentTypeValue) > 0, contentTypeValue, defaultVal)
 | |
| }
 | |
| 
 | |
| // GetDomain 获取请求Domain
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 15:12 2024/9/19
 | |
| func (wh *wrapperHandle) GetDomain(ctx *gin.Context) string {
 | |
| 	if nil == ctx {
 | |
| 		return ""
 | |
| 	}
 | |
| 	return ctx.Request.Host
 | |
| }
 | |
| 
 | |
| // ParseBody 获取请求body
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 11:25 2024/7/26
 | |
| func (wh *wrapperHandle) ParseBody(ctx *gin.Context) (map[string]any, error) {
 | |
| 	return parse_body.ExecuteForMap(ctx)
 | |
| }
 | |
| 
 | |
| // GetResponseBody 获取响应body
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 15:18 2024/1/2
 | |
| func (wh *wrapperHandle) GetResponseBody(ctx *gin.Context, key string, defaultVal any) any {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	if val, exist := ctx.Get(key); !exist || nil == val {
 | |
| 		return defaultVal
 | |
| 	} else {
 | |
| 		return val
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // GetClientIp 获取请求客户端IP
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:31 2024/7/23
 | |
| func (wh *wrapperHandle) GetClientIp(ctx *gin.Context, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	return ctx.ClientIP()
 | |
| }
 | |
| 
 | |
| // GetUserAgent 获取user_agent
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:32 2024/7/23
 | |
| func (wh *wrapperHandle) GetUserAgent(ctx *gin.Context, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	return ctx.Request.UserAgent()
 | |
| }
 | |
| 
 | |
| // GetCtxData 获取请求上下文数据
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:35 2024/7/23
 | |
| func (wh *wrapperHandle) GetCtxData(ctx *gin.Context, key string, defaultVal any) any {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	if val, exist := ctx.Get(key); !exist || nil == val {
 | |
| 		return defaultVal
 | |
| 	} else {
 | |
| 		return val
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // GetCtxStringData 获取字符串数据
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:37 2024/7/23
 | |
| func (wh *wrapperHandle) GetCtxStringData(ctx *gin.Context, key string, defaultVal string) string {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	val := ctx.GetString(key)
 | |
| 	if len(val) == 0 {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	return val
 | |
| }
 | |
| 
 | |
| // GetCtxIntData 获取int数据
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:39 2024/7/23
 | |
| func (wh *wrapperHandle) GetCtxIntData(ctx *gin.Context, key string, defaultVal int64) int64 {
 | |
| 	if nil == ctx {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	val := wh.GetCtxData(ctx, key, nil)
 | |
| 	if nil == val {
 | |
| 		return defaultVal
 | |
| 	}
 | |
| 	return ctx.GetInt64(key)
 | |
| }
 | |
| 
 | |
| // ParseHeader 解析header数据
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 17:04 2024/9/23
 | |
| func (wh *wrapperHandle) ParseHeader(ctx *gin.Context) map[string]string {
 | |
| 	headerData := map[string]string{}
 | |
| 	if nil == ctx || nil == ctx.Request {
 | |
| 		return headerData
 | |
| 	}
 | |
| 	for headerName, headerVal := range ctx.Request.Header {
 | |
| 		if len(headerVal) > 0 {
 | |
| 			headerData[headerName] = headerVal[0]
 | |
| 		} else {
 | |
| 			headerData[headerName] = ""
 | |
| 		}
 | |
| 	}
 | |
| 	return headerData
 | |
| }
 | |
| 
 | |
| // ParseCookie 解析cookie数据
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 17:06 2024/9/23
 | |
| func (wh *wrapperHandle) ParseCookie(ctx *gin.Context) map[string]string {
 | |
| 	cookieData := map[string]string{}
 | |
| 	if nil == ctx || nil == ctx.Request {
 | |
| 		return cookieData
 | |
| 	}
 | |
| 	for _, itemCookie := range ctx.Request.Cookies() {
 | |
| 		cookieData[itemCookie.Name] = itemCookie.Value
 | |
| 	}
 | |
| 	return cookieData
 | |
| }
 | |
| 
 | |
| // GetLogicAfterResponse ...
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 16:54 2025/2/28
 | |
| func (wh *wrapperHandle) GetLogicAfterResponse(ctx *gin.Context) *define.LogicAfterResponse {
 | |
| 	if nil == ctx || nil == ctx.Request {
 | |
| 		return nil
 | |
| 	}
 | |
| 	l, exist := ctx.Get(define.LogicAfterResponseKey)
 | |
| 	if !exist || nil == l {
 | |
| 		l = &define.LogicAfterResponse{
 | |
| 			SuccessHookFuncList: make([]func(), 0),
 | |
| 			FailureHookFuncList: make([]func(), 0),
 | |
| 			Lock:                &sync.RWMutex{},
 | |
| 		}
 | |
| 		ctx.Set(define.LogicAfterResponseKey, l)
 | |
| 	}
 | |
| 	// 就这么写, key值如果被其他人覆盖成非法值, 此处会直接panic
 | |
| 	return l.(*define.LogicAfterResponse)
 | |
| }
 | |
| 
 | |
| // GetCustomContext 获取自定义context
 | |
| func (wh *wrapperHandle) GetCustomContext(ctx *gin.Context) *define.Context {
 | |
| 	return define.NewContext(ctx)
 | |
| }
 | |
| 
 | |
| // GetTraceInstance 获取trace实例
 | |
| func (wh *wrapperHandle) GetTraceInstance(ctx *gin.Context) *trace.Runtime {
 | |
| 	return define.NewContext(ctx).Trace
 | |
| }
 |