Home / Function/ New() — fiber Function Reference

New() — fiber Function Reference

Architecture documentation for the New() function in csrf.go from the fiber codebase.

Entity Profile

Dependency Diagram

graph TD
  c524454a_687b_b78d_a451_724040543641["New()"]
  57b9eed3_6274_c073_f0db_e3c30b2a59fe["csrf.go"]
  c524454a_687b_b78d_a451_724040543641 -->|defined in| 57b9eed3_6274_c073_f0db_e3c30b2a59fe
  97fdc719_ea3c_26dd_8b1a_dfc224a8cd49["getRawFromStorage()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 97fdc719_ea3c_26dd_8b1a_dfc224a8cd49
  9b825ced_c480_49aa_3be3_aaf1dc052ea3["validateSecFetchSite()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 9b825ced_c480_49aa_3be3_aaf1dc052ea3
  24ad66d8_6fe0_d570_4d4c_a6f8875f7c69["originMatchesHost()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 24ad66d8_6fe0_d570_4d4c_a6f8875f7c69
  8e520adf_724d_ccaf_25dc_1249dfbbf5bb["refererMatchesHost()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 8e520adf_724d_ccaf_25dc_1249dfbbf5bb
  8f86bb5b_23e7_bcf2_9102_29c4d4ce5898["expireCSRFCookie()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 8f86bb5b_23e7_bcf2_9102_29c4d4ce5898
  e1b0d803_02b8_700b_1db4_12c8038e8775["deleteTokenFromStorage()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| e1b0d803_02b8_700b_1db4_12c8038e8775
  09f204be_3064_6994_5216_1164d8d3f054["createOrExtendTokenInStorage()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| 09f204be_3064_6994_5216_1164d8d3f054
  a54cc94c_ec5f_7f46_d976_515ae08619ab["updateCSRFCookie()"]
  c524454a_687b_b78d_a451_724040543641 -->|calls| a54cc94c_ec5f_7f46_d976_515ae08619ab
  style c524454a_687b_b78d_a451_724040543641 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

middleware/csrf/csrf.go lines 48–220

func New(config ...Config) fiber.Handler {
	// Set default config
	cfg := configDefault(config...)

	redactKeys := !cfg.DisableValueRedaction

	maskValue := func(value string) string {
		if redactKeys {
			return redactedKey
		}
		return value
	}

	// Create manager to simplify storage operations ( see *_manager.go )
	var sessionManager *sessionManager
	var storageManager *storageManager
	if cfg.Session != nil {
		sessionManager = newSessionManager(cfg.Session)
	} else {
		storageManager = newStorageManager(cfg.Storage, redactKeys)
	}

	// Pre-parse trusted origins
	trustedOrigins := []string{}
	trustedSubOrigins := []subdomain{}

	for _, origin := range cfg.TrustedOrigins {
		trimmedOrigin := utils.TrimSpace(origin)
		if i := strings.Index(trimmedOrigin, "://*."); i != -1 {
			withoutWildcard := trimmedOrigin[:i+len("://")] + trimmedOrigin[i+len("://*."):]
			isValid, normalizedOrigin := normalizeOrigin(withoutWildcard)
			if !isValid {
				panic("[CSRF] Invalid origin format in configuration:" + maskValue(origin))
			}
			schemeSep := strings.Index(normalizedOrigin, "://") + len("://")
			sd := subdomain{prefix: normalizedOrigin[:schemeSep], suffix: normalizedOrigin[schemeSep:]}
			trustedSubOrigins = append(trustedSubOrigins, sd)
		} else {
			isValid, normalizedOrigin := normalizeOrigin(trimmedOrigin)
			if !isValid {
				panic("[CSRF] Invalid origin format in configuration:" + maskValue(origin))
			}
			trustedOrigins = append(trustedOrigins, normalizedOrigin)
		}
	}

	// Create the handler outside of the returned function
	handler := &Handler{
		config:         cfg,
		sessionManager: sessionManager,
		storageManager: storageManager,
	}

	// 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()
		}

		// Store the CSRF handler in the context
		c.Locals(handlerKey, handler)

		var token string

		// Action depends on the HTTP method
		switch c.Method() {
		case fiber.MethodGet, fiber.MethodHead, fiber.MethodOptions, fiber.MethodTrace:
			cookieToken := c.Cookies(cfg.CookieName)

			if cookieToken != "" {
				raw, err := getRawFromStorage(c, cookieToken, &cfg, sessionManager, storageManager)
				if err != nil {
					return cfg.ErrorHandler(c, err)
				}

				if raw != nil {
					token = cookieToken // Token is valid, safe to set it
				}
			}
		default:

Subdomains

Frequently Asked Questions

What does New() do?
New() is a function in the fiber codebase, defined in middleware/csrf/csrf.go.
Where is New() defined?
New() is defined in middleware/csrf/csrf.go at line 48.
What does New() call?
New() calls 8 function(s): createOrExtendTokenInStorage, deleteTokenFromStorage, expireCSRFCookie, getRawFromStorage, originMatchesHost, refererMatchesHost, updateCSRFCookie, validateSecFetchSite.

Analyze Your Own Codebase

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

Try Supermodel Free