github.com/gofiber/fiber/v2@v2.47.0/middleware/encryptcookie/encryptcookie.go (about)

     1  package encryptcookie
     2  
     3  import (
     4  	"github.com/gofiber/fiber/v2"
     5  
     6  	"github.com/valyala/fasthttp"
     7  )
     8  
     9  // New creates a new middleware handler
    10  func New(config ...Config) fiber.Handler {
    11  	// Set default config
    12  	cfg := configDefault(config...)
    13  
    14  	// Return new handler
    15  	return func(c *fiber.Ctx) error {
    16  		// Don't execute middleware if Next returns true
    17  		if cfg.Next != nil && cfg.Next(c) {
    18  			return c.Next()
    19  		}
    20  
    21  		// Decrypt request cookies
    22  		c.Request().Header.VisitAllCookie(func(key, value []byte) {
    23  			keyString := string(key)
    24  			if !isDisabled(keyString, cfg.Except) {
    25  				decryptedValue, err := cfg.Decryptor(string(value), cfg.Key)
    26  				if err != nil {
    27  					c.Request().Header.SetCookieBytesKV(key, nil)
    28  				} else {
    29  					c.Request().Header.SetCookie(string(key), decryptedValue)
    30  				}
    31  			}
    32  		})
    33  
    34  		// Continue stack
    35  		err := c.Next()
    36  
    37  		// Encrypt response cookies
    38  		c.Response().Header.VisitAllCookie(func(key, value []byte) {
    39  			keyString := string(key)
    40  			if !isDisabled(keyString, cfg.Except) {
    41  				cookieValue := fasthttp.Cookie{}
    42  				cookieValue.SetKeyBytes(key)
    43  				if c.Response().Header.Cookie(&cookieValue) {
    44  					encryptedValue, err := cfg.Encryptor(string(cookieValue.Value()), cfg.Key)
    45  					if err != nil {
    46  						panic(err)
    47  					}
    48  
    49  					cookieValue.SetValue(encryptedValue)
    50  					c.Response().Header.SetCookie(&cookieValue)
    51  				}
    52  			}
    53  		})
    54  
    55  		return err
    56  	}
    57  }