New() — fiber Function Reference
Architecture documentation for the New() function in keyauth.go from the fiber codebase.
Entity Profile
Dependency Diagram
graph TD 9cd0f72a_0552_3e88_2d1e_7cd3df34b0ce["New()"] f568253b_c932_a0b9_3180_470422c31d6f["keyauth.go"] 9cd0f72a_0552_3e88_2d1e_7cd3df34b0ce -->|defined in| f568253b_c932_a0b9_3180_470422c31d6f 47684583_58ca_d76d_1808_a4acc7b0b4a6["getAuthSchemes()"] 9cd0f72a_0552_3e88_2d1e_7cd3df34b0ce -->|calls| 47684583_58ca_d76d_1808_a4acc7b0b4a6 style 9cd0f72a_0552_3e88_2d1e_7cd3df34b0ce fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
middleware/keyauth/keyauth.go lines 26–94
func New(config ...Config) fiber.Handler {
// Init config
cfg := configDefault(config...)
// Determine the auth schemes from the extractor chain.
authSchemes := getAuthSchemes(cfg.Extractor)
// Return middleware handler
return func(c fiber.Ctx) error {
// Filter request to skip middleware
if cfg.Next != nil && cfg.Next(c) {
return c.Next()
}
// Extract and verify key
key, err := cfg.Extractor.Extract(c)
if errors.Is(err, extractors.ErrNotFound) {
// Replace shared extractor not found error with a keyauth specific error
err = ErrMissingOrMalformedAPIKey
}
// If there was no error extracting the key, validate it
if err == nil {
var valid bool
valid, err = cfg.Validator(c, key)
if err == nil && valid {
c.Locals(tokenKey, key)
return cfg.SuccessHandler(c)
}
}
// Execute the error handler first
handlerErr := cfg.ErrorHandler(c, err)
status := c.Response().StatusCode()
if status == fiber.StatusUnauthorized || status == fiber.StatusProxyAuthRequired {
header := fiber.HeaderWWWAuthenticate
if status == fiber.StatusProxyAuthRequired {
header = fiber.HeaderProxyAuthenticate
}
if len(authSchemes) > 0 {
challenges := make([]string, 0, len(authSchemes))
for _, scheme := range authSchemes {
var b strings.Builder
fmt.Fprintf(&b, "%s realm=%q", scheme, cfg.Realm)
if utils.EqualFold(scheme, "Bearer") {
if cfg.Error != "" {
fmt.Fprintf(&b, ", error=%q", cfg.Error)
if cfg.ErrorDescription != "" {
fmt.Fprintf(&b, ", error_description=%q", cfg.ErrorDescription)
}
if cfg.ErrorURI != "" {
fmt.Fprintf(&b, ", error_uri=%q", cfg.ErrorURI)
}
if cfg.Error == ErrorInsufficientScope {
fmt.Fprintf(&b, ", scope=%q", cfg.Scope)
}
}
}
challenges = append(challenges, b.String())
}
c.Set(header, strings.Join(challenges, ", "))
} else if cfg.Challenge != "" {
c.Set(header, cfg.Challenge)
}
}
return handlerErr
}
}
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does New() do?
New() is a function in the fiber codebase, defined in middleware/keyauth/keyauth.go.
Where is New() defined?
New() is defined in middleware/keyauth/keyauth.go at line 26.
What does New() call?
New() calls 1 function(s): getAuthSchemes.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free