mirror of https://github.com/gofiber/fiber.git
🧽 clean code structure
parent
b29d500fc0
commit
ec8fdb32de
|
@ -49,29 +49,29 @@ func New(config ...Config) fiber.Handler {
|
||||||
dummyVal := []byte{'+'}
|
dummyVal := []byte{'+'}
|
||||||
|
|
||||||
// Return new handler
|
// Return new handler
|
||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) (err error) {
|
||||||
// Don't execute middleware if Next returns true
|
// Don't execute middleware if Next returns true
|
||||||
if cfg.Next != nil && cfg.Next(c) {
|
if cfg.Next != nil && cfg.Next(c) {
|
||||||
return c.Next()
|
return c.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var token string
|
||||||
|
|
||||||
// Action depends on the HTTP method
|
// Action depends on the HTTP method
|
||||||
switch c.Method() {
|
switch c.Method() {
|
||||||
case fiber.MethodGet:
|
case fiber.MethodGet:
|
||||||
// Generate CSRF token if not exist
|
// Generate CSRF token if not exist
|
||||||
|
|
||||||
// Declare empty token and try to get existing CSRF from cookie
|
// Declare empty token and try to get existing CSRF from cookie
|
||||||
token, key := "", c.Cookies(cfg.Cookie.Name)
|
token = c.Cookies(cfg.Cookie.Name)
|
||||||
|
|
||||||
// Do we have an existing CSRF token?
|
// Do we have an existing CSRF token?
|
||||||
if key != "" {
|
if token == "" {
|
||||||
token = key
|
|
||||||
} else {
|
|
||||||
// Generate new CSRF token
|
// Generate new CSRF token
|
||||||
token = cfg.KeyGenerator()
|
token = cfg.KeyGenerator()
|
||||||
|
|
||||||
// Add token to Storage
|
// Add token to Storage
|
||||||
if err := cfg.Storage.Set(token, dummyVal, cfg.Expiration); err != nil {
|
if err = cfg.Storage.Set(token, dummyVal, cfg.Expiration); err != nil {
|
||||||
fmt.Println("[CSRF]", err.Error())
|
fmt.Println("[CSRF]", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,27 +90,17 @@ func New(config ...Config) fiber.Handler {
|
||||||
|
|
||||||
// Set cookie to response
|
// Set cookie to response
|
||||||
c.Cookie(cookie)
|
c.Cookie(cookie)
|
||||||
|
|
||||||
// Protect clients from caching the response by telling the browser
|
|
||||||
// a new header value is generated
|
|
||||||
c.Vary(fiber.HeaderCookie)
|
|
||||||
|
|
||||||
// Store token in context if set
|
|
||||||
if cfg.ContextKey != "" {
|
|
||||||
c.Locals(cfg.ContextKey, token)
|
|
||||||
}
|
|
||||||
|
|
||||||
case fiber.MethodPost, fiber.MethodDelete, fiber.MethodPatch, fiber.MethodPut:
|
case fiber.MethodPost, fiber.MethodDelete, fiber.MethodPatch, fiber.MethodPut:
|
||||||
// Verify CSRF token
|
// Verify CSRF token
|
||||||
// Extract token from client request i.e. header, query, param, form or cookie
|
// Extract token from client request i.e. header, query, param, form or cookie
|
||||||
csrf, err := extractor(c)
|
token, err = extractor(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.ErrForbidden
|
return fiber.ErrForbidden
|
||||||
}
|
}
|
||||||
// We have a problem extracting the csrf token from Storage
|
// We have a problem extracting the csrf token from Storage
|
||||||
if _, err = cfg.Storage.Get(csrf); err != nil {
|
if _, err = cfg.Storage.Get(token); err != nil {
|
||||||
// The token is invalid, let client generate a new one
|
// The token is invalid, let client generate a new one
|
||||||
if err = cfg.Storage.Delete(csrf); err != nil {
|
if err = cfg.Storage.Delete(token); err != nil {
|
||||||
fmt.Println("[CSRF]", err.Error())
|
fmt.Println("[CSRF]", err.Error())
|
||||||
}
|
}
|
||||||
// Expire cookie
|
// Expire cookie
|
||||||
|
@ -127,6 +117,15 @@ func New(config ...Config) fiber.Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Protect clients from caching the response by telling the browser
|
||||||
|
// a new header value is generated
|
||||||
|
c.Vary(fiber.HeaderCookie)
|
||||||
|
|
||||||
|
// Store token in context if set
|
||||||
|
if cfg.ContextKey != "" {
|
||||||
|
c.Locals(cfg.ContextKey, token)
|
||||||
|
}
|
||||||
|
|
||||||
// Continue stack
|
// Continue stack
|
||||||
return c.Next()
|
return c.Next()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue