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

     1  package keyauth
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/gofiber/fiber/v2"
     7  )
     8  
     9  // Config defines the config for middleware.
    10  type Config struct {
    11  	// Next defines a function to skip middleware.
    12  	// Optional. Default: nil
    13  	Next func(*fiber.Ctx) bool
    14  
    15  	// SuccessHandler defines a function which is executed for a valid key.
    16  	// Optional. Default: nil
    17  	SuccessHandler fiber.Handler
    18  
    19  	// ErrorHandler defines a function which is executed for an invalid key.
    20  	// It may be used to define a custom error.
    21  	// Optional. Default: 401 Invalid or expired key
    22  	ErrorHandler fiber.ErrorHandler
    23  
    24  	// KeyLookup is a string in the form of "<source>:<name>" that is used
    25  	// to extract key from the request.
    26  	// Optional. Default value "header:Authorization".
    27  	// Possible values:
    28  	// - "header:<name>"
    29  	// - "query:<name>"
    30  	// - "form:<name>"
    31  	// - "param:<name>"
    32  	// - "cookie:<name>"
    33  	KeyLookup string
    34  
    35  	// AuthScheme to be used in the Authorization header.
    36  	// Optional. Default value "Bearer".
    37  	AuthScheme string
    38  
    39  	// Validator is a function to validate key.
    40  	Validator func(*fiber.Ctx, string) (bool, error)
    41  
    42  	// Context key to store the bearertoken from the token into context.
    43  	// Optional. Default: "token".
    44  	ContextKey string
    45  }
    46  
    47  // ConfigDefault is the default config
    48  var ConfigDefault = Config{
    49  	SuccessHandler: func(c *fiber.Ctx) error {
    50  		return c.Next()
    51  	},
    52  	ErrorHandler: func(c *fiber.Ctx, err error) error {
    53  		if errors.Is(err, ErrMissingOrMalformedAPIKey) {
    54  			return c.Status(fiber.StatusUnauthorized).SendString(err.Error())
    55  		}
    56  		return c.Status(fiber.StatusUnauthorized).SendString("Invalid or expired API Key")
    57  	},
    58  	KeyLookup:  "header:" + fiber.HeaderAuthorization,
    59  	AuthScheme: "Bearer",
    60  	ContextKey: "token",
    61  }
    62  
    63  // Helper function to set default values
    64  func configDefault(config ...Config) Config {
    65  	// Return default config if nothing provided
    66  	if len(config) < 1 {
    67  		return ConfigDefault
    68  	}
    69  
    70  	// Override default config
    71  	cfg := config[0]
    72  
    73  	// Set default values
    74  	if cfg.SuccessHandler == nil {
    75  		cfg.SuccessHandler = ConfigDefault.SuccessHandler
    76  	}
    77  	if cfg.ErrorHandler == nil {
    78  		cfg.ErrorHandler = ConfigDefault.ErrorHandler
    79  	}
    80  	if cfg.KeyLookup == "" {
    81  		cfg.KeyLookup = ConfigDefault.KeyLookup
    82  		// set AuthScheme as "Bearer" only if KeyLookup is set to default.
    83  		if cfg.AuthScheme == "" {
    84  			cfg.AuthScheme = ConfigDefault.AuthScheme
    85  		}
    86  	}
    87  	if cfg.Validator == nil {
    88  		panic("fiber: keyauth middleware requires a validator function")
    89  	}
    90  	if cfg.ContextKey == "" {
    91  		cfg.ContextKey = ConfigDefault.ContextKey
    92  	}
    93  
    94  	return cfg
    95  }