Home / File/ encryptcookie.go — fiber Source File

encryptcookie.go — fiber Source File

Architecture documentation for encryptcookie.go, a go file in the fiber codebase. 1 imports, 0 dependents.

File go FiberCore Adapters 1 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  7b5895a3_fa50_acec_859c_a9b46015d9a6["encryptcookie.go"]
  fcef1725_af89_d6cd_36cd_b228cdcc5acd["errors"]
  7b5895a3_fa50_acec_859c_a9b46015d9a6 --> fcef1725_af89_d6cd_36cd_b228cdcc5acd
  style 7b5895a3_fa50_acec_859c_a9b46015d9a6 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

package encryptcookie

import (
	"errors"

	"github.com/valyala/fasthttp"

	"github.com/gofiber/fiber/v3"
)

// 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
		cookiesToDelete := make([][]byte, 0, 4)

		for key, value := range c.Request().Header.Cookies() {
			keyString := string(key)
			if !isDisabled(keyString, cfg.Except) {
				decryptedValue, err := cfg.Decryptor(keyString, string(value), cfg.Key)
				if err != nil {
					cookiesToDelete = append(cookiesToDelete, key)
				} else {
					c.Request().Header.SetCookie(keyString, decryptedValue)
				}
			}
		}

		// Delete cookies that failed to decrypt - outside the loop to avoid mutation during iteration
		for _, key := range cookiesToDelete {
			c.Request().Header.DelCookieBytes(key)
		}

		// Continue stack
		err := c.Next()

		// Encrypt response cookies
		for key := range c.Response().Header.Cookies() {
			keyString := string(key)
			if !isDisabled(keyString, cfg.Except) {
				cookieValue := fasthttp.Cookie{}
				cookieValue.SetKeyBytes(key)
				if c.Response().Header.Cookie(&cookieValue) {
					encryptedValue, encErr := cfg.Encryptor(keyString, string(cookieValue.Value()), cfg.Key)
					if encErr != nil {
						return errors.Join(err, encErr)
					}

					cookieValue.SetValue(encryptedValue)
					c.Response().Header.SetCookie(&cookieValue)
				}
			}
		}

		return err
	}
}

Domain

Subdomains

Functions

Dependencies

  • errors

Frequently Asked Questions

What does encryptcookie.go do?
encryptcookie.go is a source file in the fiber codebase, written in go. It belongs to the FiberCore domain, Adapters subdomain.
What functions are defined in encryptcookie.go?
encryptcookie.go defines 1 function(s): New.
What does encryptcookie.go depend on?
encryptcookie.go imports 1 module(s): errors.
Where is encryptcookie.go in the architecture?
encryptcookie.go is located at middleware/encryptcookie/encryptcookie.go (domain: FiberCore, subdomain: Adapters, directory: middleware/encryptcookie).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free