package middleware // // import ( // "encoding/base64" // "errors" // "strings" // // "github.com/dgrijalva/jwt-go" // "github.com/labstack/echo" // ) // // type ( // BasicAuthFunc func(string, string) bool // AuthorizedHandler echo.HandlerFunc // UnauthorizedHandler func(*echo.Context, error) // JwtKeyFunc func(string) ([]byte, error) // Claims map[string]interface{} // ) // // var ( // ErrBasicAuth = errors.New("echo: basic auth error") // ErrJwtAuth = errors.New("echo: jwt auth error") // ) // // func BasicAuth(ah AuthorizedHandler, uah UnauthorizedHandler, fn BasicAuthFunc) echo.HandlerFunc { // return func(c *echo.Context) { // auth := strings.Fields(c.Request.Header.Get("Authorization")) // if len(auth) == 2 { // scheme := auth[0] // s, err := base64.StdEncoding.DecodeString(auth[1]) // if err != nil { // uah(c, err) // return // } // cred := strings.Split(string(s), ":") // if scheme == "Basic" && len(cred) == 2 { // if ok := fn(cred[0], cred[1]); ok { // ah(c) // return // } // } // } // uah(c, ErrBasicAuth) // } // } // // func JwtAuth(ah AuthorizedHandler, uah UnauthorizedHandler, fn JwtKeyFunc) echo.HandlerFunc { // return func(c *echo.Context) { // auth := strings.Fields(c.Request.Header.Get("Authorization")) // if len(auth) == 2 { // t, err := jwt.Parse(auth[1], func(token *jwt.Token) (interface{}, error) { // if kid := token.Header["kid"]; kid != nil { // return fn(kid.(string)) // } // return fn("") // }) // if t.Valid { // c.Set("claims", Claims(t.Claims)) // ah(c) // // c.Next() // } else { // // TODO: capture errors // uah(c, err) // } // return // } // uah(c, ErrJwtAuth) // } // }