mirror of
https://github.com/gofiber/fiber.git
synced 2025-02-22 23:43:39 +00:00
* 🔥 Feature: Add encrypt cookies middleware
* Encrypt cookies when error happens
* Improve encrypt cookie middleware
* Fix errors
* Update encryptcookie config doc blocks
* Change `SetCookie` to `SetCookieBytesKV` for invalid cookies
* Update middleware/encryptcookie/config.go
* Update README.md
* Remove `GenerateKey` parameter
* Update README.md
Co-authored-by: hi019 <65871571+hi019@users.noreply.github.com>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package encryptcookie
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
// New creates a new middleware handler
|
|
func New(config ...Config) fiber.Handler {
|
|
// Set default config
|
|
cfg := configDefault(config...)
|
|
|
|
// Return new handler
|
|
return func(c *fiber.Ctx) error {
|
|
// Don't execute middleware if Next returns true
|
|
if cfg.Next != nil && cfg.Next(c) {
|
|
return c.Next()
|
|
}
|
|
|
|
// Decrypt request cookies
|
|
c.Request().Header.VisitAllCookie(func(key, value []byte) {
|
|
keyString := string(key)
|
|
if !isDisabled(keyString, cfg.Except) {
|
|
decryptedValue, err := cfg.Decryptor(string(value), cfg.Key)
|
|
if err != nil {
|
|
c.Request().Header.SetCookieBytesKV(key, nil)
|
|
} else {
|
|
c.Request().Header.SetCookie(string(key), decryptedValue)
|
|
}
|
|
}
|
|
})
|
|
|
|
// Continue stack
|
|
err := c.Next()
|
|
|
|
// Encrypt response cookies
|
|
c.Response().Header.VisitAllCookie(func(key, value []byte) {
|
|
keyString := string(key)
|
|
if !isDisabled(keyString, cfg.Except) {
|
|
cookieValue := fasthttp.Cookie{}
|
|
cookieValue.SetKeyBytes(key)
|
|
if c.Response().Header.Cookie(&cookieValue) {
|
|
encryptedValue, err := cfg.Encryptor(string(cookieValue.Value()), cfg.Key)
|
|
if err == nil {
|
|
cookieValue.SetValue(encryptedValue)
|
|
c.Response().Header.SetCookie(&cookieValue)
|
|
} else {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
return err
|
|
}
|
|
}
|