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 }