MCPcopy Index your code
hub / github.com/labstack/echo / ToMiddleware

Method ToMiddleware

middleware/key_auth.go:138–205  ·  view source on GitHub ↗

ToMiddleware converts KeyAuthConfig to middleware or returns an error for invalid configuration

()

Source from the content-addressed store, hash-verified

136
137// ToMiddleware converts KeyAuthConfig to middleware or returns an error for invalid configuration
138func (config KeyAuthConfig) ToMiddleware() (echo.MiddlewareFunc, error) {
139 if config.Skipper == nil {
140 config.Skipper = DefaultKeyAuthConfig.Skipper
141 }
142 if config.KeyLookup == "" {
143 config.KeyLookup = DefaultKeyAuthConfig.KeyLookup
144 }
145 if config.Validator == nil {
146 return nil, errors.New("echo key-auth middleware requires a validator function")
147 }
148
149 limit := cmp.Or(config.AllowedCheckLimit, 1)
150
151 extractors, cErr := createExtractors(config.KeyLookup, limit)
152 if cErr != nil {
153 return nil, fmt.Errorf("echo key-auth middleware could not create key extractor: %w", cErr)
154 }
155 if len(extractors) == 0 {
156 return nil, errors.New("echo key-auth middleware could not create extractors from KeyLookup string")
157 }
158
159 return func(next echo.HandlerFunc) echo.HandlerFunc {
160 return func(c *echo.Context) error {
161 if config.Skipper(c) {
162 return next(c)
163 }
164
165 var lastExtractorErr error
166 var lastValidatorErr error
167 for _, extractor := range extractors {
168 keys, source, extrErr := extractor(c)
169 if extrErr != nil {
170 lastExtractorErr = extrErr
171 continue
172 }
173 for _, key := range keys {
174 valid, err := config.Validator(c, key, source)
175 if err != nil {
176 lastValidatorErr = err
177 continue
178 }
179 if !valid {
180 lastValidatorErr = ErrInvalidKey
181 continue
182 }
183 return next(c)
184 }
185 }
186
187 // prioritize validator errors over extracting errors
188 err := lastValidatorErr
189 if err == nil {
190 err = lastExtractorErr
191 }
192 if config.ErrorHandler != nil {
193 tmpErr := config.ErrorHandler(c, err)
194 if config.ContinueOnIgnoredError && tmpErr == nil {
195 return next(c)

Callers

nothing calls this directly

Calls 2

createExtractorsFunction · 0.85
WrapMethod · 0.45

Tested by

no test coverage detected