代码拉取完成,页面将自动刷新
package app
import (
"gitee.com/zhucheer/orange/cfg"
"gitee.com/zhucheer/orange/encrypt"
"gitee.com/zhucheer/orange/internal"
"gitee.com/zhucheer/orange/logger"
"gitee.com/zhucheer/orange/prome"
"gitee.com/zhucheer/orange/session"
"time"
)
// MiddlewareFunc defines a function to process middleware.
type MiddlewareFunc func(HandlerFunc) HandlerFunc
type HandlerFunc func(*Context) error
type MiddleWare interface {
Func() MiddlewareFunc
}
// 翻转中间件,因执行时是从最外层函数开始,定义时需要从最后一个中间件开始定义
func reverseMiddleWare(middlewares []MiddleWare) []MiddleWare {
length := len(middlewares)
for i := 0; i < length/2; i++ {
middlewares[length-1-i], middlewares[i] = middlewares[i], middlewares[length-1-i]
}
return middlewares
}
func startCsrfToken(session session.Store) string {
csrfToken := internal.GetAppKey() + time.Now().String()
csrfTokenMd5 := encrypt.Md5ToUpper(csrfToken)
sessionKey := "CSRF-TOKEN"
if token := session.Get(sessionKey); token != nil {
return token.(string)
}
session.Set(sessionKey, csrfTokenMd5)
return csrfTokenMd5
}
func checkCsrfToken(next HandlerFunc) HandlerFunc {
return func(c *Context) error {
tokenInHeader := c.request.Header.Get("CSRF-TOKEN")
if c.request.Method == "POST" && tokenInHeader != c.CsrfToken {
return c.ResponseWrite([]byte("csrf token verify error"))
}
return next(c)
}
}
// accessLog 请求日志
func accessLog(next HandlerFunc) HandlerFunc {
return func(c *Context) error {
appName := cfg.GetString("app.name", cfg.ConfigDef.GetString("app.name"))
c.AddDelayAfterDo(func(c *Context) {
if cfg.GetBool("prome.open", false) {
promeHandler := prome.PromeHandler()
promeHandler.ReqCnt.WithLabelValues(c.Request().Method, c.RoutePath()).Inc()
promeHandler.DurSummary.WithLabelValues(c.Request().Method, c.RoutePath()).Observe(float64(c.GetMs().Milliseconds()))
}
if cfg.GetBool("app.accessLog", cfg.ConfigDef.GetBool("app.accessLog")) {
reqBody := getSplitString(string(c.OrangeInput.FormBody), 500)
responseBody := getSplitString(string(c.ResponseBody()), 500)
logger.Infow("ACCESS-LOG",
"appName", appName,
"method", c.request.Method,
"routePath", c.RoutePath(),
"host", c.OrangeInput.Host(),
"uri", c.OrangeInput.URI(),
"costMilli", c.GetMs().Milliseconds(),
"requestRaw", reqBody,
"response", responseBody)
}
}, 0)
return next(c)
}
}
func getSplitString(val string, maxLen int) (resp string) {
if len(val) > maxLen {
resp = val[:maxLen] + "...EOF"
} else {
resp = val
}
return resp
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。