diff options
Diffstat (limited to 'vendor/github.com/labstack/echo/middleware/basic_auth.go')
-rw-r--r-- | vendor/github.com/labstack/echo/middleware/basic_auth.go | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/vendor/github.com/labstack/echo/middleware/basic_auth.go b/vendor/github.com/labstack/echo/middleware/basic_auth.go index e98a87e3..c1f34c8f 100644 --- a/vendor/github.com/labstack/echo/middleware/basic_auth.go +++ b/vendor/github.com/labstack/echo/middleware/basic_auth.go @@ -2,6 +2,7 @@ package middleware import ( "encoding/base64" + "strconv" "github.com/labstack/echo" ) @@ -15,20 +16,26 @@ type ( // Validator is a function to validate BasicAuth credentials. // Required. Validator BasicAuthValidator + + // Realm is a string to define realm attribute of BasicAuth. + // Default value "Restricted". + Realm string } // BasicAuthValidator defines a function to validate BasicAuth credentials. - BasicAuthValidator func(string, string, echo.Context) bool + BasicAuthValidator func(string, string, echo.Context) (bool, error) ) const ( - basic = "Basic" + basic = "Basic" + defaultRealm = "Restricted" ) var ( // DefaultBasicAuthConfig is the default BasicAuth middleware config. DefaultBasicAuthConfig = BasicAuthConfig{ Skipper: DefaultSkipper, + Realm: defaultRealm, } ) @@ -52,6 +59,9 @@ func BasicAuthWithConfig(config BasicAuthConfig) echo.MiddlewareFunc { if config.Skipper == nil { config.Skipper = DefaultBasicAuthConfig.Skipper } + if config.Realm == "" { + config.Realm = defaultRealm + } return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { @@ -71,15 +81,25 @@ func BasicAuthWithConfig(config BasicAuthConfig) echo.MiddlewareFunc { for i := 0; i < len(cred); i++ { if cred[i] == ':' { // Verify credentials - if config.Validator(cred[:i], cred[i+1:], c) { + valid, err := config.Validator(cred[:i], cred[i+1:], c) + if err != nil { + return err + } else if valid { return next(c) } } } } + realm := "" + if config.Realm == defaultRealm { + realm = defaultRealm + } else { + realm = strconv.Quote(config.Realm) + } + // Need to return `401` for browsers to pop-up login box. - c.Response().Header().Set(echo.HeaderWWWAuthenticate, basic+" realm=Restricted") + c.Response().Header().Set(echo.HeaderWWWAuthenticate, basic+" realm="+realm) return echo.ErrUnauthorized } } |