1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-22 23:43:39 +00:00
fiber/middleware/encryptcookie/encryptcookie.go
amir bff8843abd
🔥 Feature: Add encrypt cookies middleware (#1343)
* 🔥 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>
2021-08-23 08:31:51 +02:00

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
}
}