barometer: update DMA's vendoring packages
[barometer.git] / src / dma / vendor / github.com / labstack / echo / echo.go
index 41ac6b5..9828651 100644 (file)
@@ -62,7 +62,7 @@ import (
 type (
        // Echo is the top-level framework instance.
        Echo struct {
-               stdLogger        *stdLog.Logger
+               StdLogger        *stdLog.Logger
                colorer          *color.Color
                premiddleware    []MiddlewareFunc
                middleware       []MiddlewareFunc
@@ -103,7 +103,7 @@ type (
        // MiddlewareFunc defines a function to process middleware.
        MiddlewareFunc func(HandlerFunc) HandlerFunc
 
-       // HandlerFunc defines a function to server HTTP requests.
+       // HandlerFunc defines a function to serve HTTP requests.
        HandlerFunc func(Context) error
 
        // HTTPErrorHandler is a centralized HTTP error handler.
@@ -129,17 +129,18 @@ type (
 )
 
 // HTTP methods
+// NOTE: Deprecated, please use the stdlib constants directly instead.
 const (
-       CONNECT  = "CONNECT"
-       DELETE   = "DELETE"
-       GET      = "GET"
-       HEAD     = "HEAD"
-       OPTIONS  = "OPTIONS"
-       PATCH    = "PATCH"
-       POST     = "POST"
-       PROPFIND = "PROPFIND"
-       PUT      = "PUT"
-       TRACE    = "TRACE"
+       CONNECT = http.MethodConnect
+       DELETE  = http.MethodDelete
+       GET     = http.MethodGet
+       HEAD    = http.MethodHead
+       OPTIONS = http.MethodOptions
+       PATCH   = http.MethodPatch
+       POST    = http.MethodPost
+       // PROPFIND = "PROPFIND"
+       PUT   = http.MethodPut
+       TRACE = http.MethodTrace
 )
 
 // MIME types
@@ -165,6 +166,8 @@ const (
 
 const (
        charsetUTF8 = "charset=UTF-8"
+       // PROPFIND Method can be used on collection and property resources.
+       PROPFIND = "PROPFIND"
 )
 
 // Headers
@@ -217,7 +220,8 @@ const (
 )
 
 const (
-       Version = "3.3.5"
+       // Version of Echo
+       Version = "3.3.10-dev"
        website = "https://echo.labstack.com"
        // http://patorjk.com/software/taag/#p=display&f=Small%20Slant&t=Echo
        banner = `
@@ -234,16 +238,16 @@ ____________________________________O/_______
 
 var (
        methods = [...]string{
-               CONNECT,
-               DELETE,
-               GET,
-               HEAD,
-               OPTIONS,
-               PATCH,
-               POST,
+               http.MethodConnect,
+               http.MethodDelete,
+               http.MethodGet,
+               http.MethodHead,
+               http.MethodOptions,
+               http.MethodPatch,
+               http.MethodPost,
                PROPFIND,
-               PUT,
-               TRACE,
+               http.MethodPut,
+               http.MethodTrace,
        }
 )
 
@@ -255,6 +259,12 @@ var (
        ErrForbidden                   = NewHTTPError(http.StatusForbidden)
        ErrMethodNotAllowed            = NewHTTPError(http.StatusMethodNotAllowed)
        ErrStatusRequestEntityTooLarge = NewHTTPError(http.StatusRequestEntityTooLarge)
+       ErrTooManyRequests             = NewHTTPError(http.StatusTooManyRequests)
+       ErrBadRequest                  = NewHTTPError(http.StatusBadRequest)
+       ErrBadGateway                  = NewHTTPError(http.StatusBadGateway)
+       ErrInternalServerError         = NewHTTPError(http.StatusInternalServerError)
+       ErrRequestTimeout              = NewHTTPError(http.StatusRequestTimeout)
+       ErrServiceUnavailable          = NewHTTPError(http.StatusServiceUnavailable)
        ErrValidatorNotRegistered      = errors.New("validator not registered")
        ErrRendererNotRegistered       = errors.New("renderer not registered")
        ErrInvalidRedirectCode         = errors.New("invalid redirect status code")
@@ -289,7 +299,7 @@ func New() (e *Echo) {
        e.HTTPErrorHandler = e.DefaultHTTPErrorHandler
        e.Binder = &DefaultBinder{}
        e.Logger.SetLevel(log.ERROR)
-       e.stdLogger = stdLog.New(e.Logger.Output(), e.Logger.Prefix()+": ", 0)
+       e.StdLogger = stdLog.New(e.Logger.Output(), e.Logger.Prefix()+": ", 0)
        e.pool.New = func() interface{} {
                return e.NewContext(nil, nil)
        }
@@ -326,7 +336,7 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
                code = he.Code
                msg = he.Message
                if he.Internal != nil {
-                       msg = fmt.Sprintf("%v, %v", err, he.Internal)
+                       err = fmt.Errorf("%v, %v", err, he.Internal)
                }
        } else if e.Debug {
                msg = err.Error()
@@ -337,11 +347,9 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
                msg = Map{"message": msg}
        }
 
-       e.Logger.Error(err)
-
        // Send response
        if !c.Response().Committed {
-               if c.Request().Method == HEAD { // Issue #608
+               if c.Request().Method == http.MethodHead { // Issue #608
                        err = c.NoContent(code)
                } else {
                        err = c.JSON(code, msg)
@@ -365,55 +373,55 @@ func (e *Echo) Use(middleware ...MiddlewareFunc) {
 // CONNECT registers a new CONNECT route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) CONNECT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(CONNECT, path, h, m...)
+       return e.Add(http.MethodConnect, path, h, m...)
 }
 
 // DELETE registers a new DELETE route for a path with matching handler in the router
 // with optional route-level middleware.
 func (e *Echo) DELETE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(DELETE, path, h, m...)
+       return e.Add(http.MethodDelete, path, h, m...)
 }
 
 // GET registers a new GET route for a path with matching handler in the router
 // with optional route-level middleware.
 func (e *Echo) GET(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(GET, path, h, m...)
+       return e.Add(http.MethodGet, path, h, m...)
 }
 
 // HEAD registers a new HEAD route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) HEAD(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(HEAD, path, h, m...)
+       return e.Add(http.MethodHead, path, h, m...)
 }
 
 // OPTIONS registers a new OPTIONS route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) OPTIONS(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(OPTIONS, path, h, m...)
+       return e.Add(http.MethodOptions, path, h, m...)
 }
 
 // PATCH registers a new PATCH route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) PATCH(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(PATCH, path, h, m...)
+       return e.Add(http.MethodPatch, path, h, m...)
 }
 
 // POST registers a new POST route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) POST(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(POST, path, h, m...)
+       return e.Add(http.MethodPost, path, h, m...)
 }
 
 // PUT registers a new PUT route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) PUT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(PUT, path, h, m...)
+       return e.Add(http.MethodPut, path, h, m...)
 }
 
 // TRACE registers a new TRACE route for a path with matching handler in the
 // router with optional route-level middleware.
 func (e *Echo) TRACE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route {
-       return e.Add(TRACE, path, h, m...)
+       return e.Add(http.MethodTrace, path, h, m...)
 }
 
 // Any registers a new route for all HTTP methods and path with matching handler
@@ -462,11 +470,11 @@ func static(i i, prefix, root string) *Route {
        return i.GET(prefix+"/*", h)
 }
 
-// File registers a new route with path to serve a static file.
-func (e *Echo) File(path, file string) *Route {
+// File registers a new route with path to serve a static file with optional route-level middleware.
+func (e *Echo) File(path, file string, m ...MiddlewareFunc) *Route {
        return e.GET(path, func(c Context) error {
                return c.File(file)
-       })
+       }, m...)
 }
 
 // Add registers a new route for an HTTP method and path with matching handler
@@ -559,26 +567,17 @@ func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
        c := e.pool.Get().(*context)
        c.Reset(r, w)
 
-       m := r.Method
        h := NotFoundHandler
 
        if e.premiddleware == nil {
-               path := r.URL.RawPath
-               if path == "" {
-                       path = r.URL.Path
-               }
-               e.router.Find(m, getPath(r), c)
+               e.router.Find(r.Method, getPath(r), c)
                h = c.Handler()
                for i := len(e.middleware) - 1; i >= 0; i-- {
                        h = e.middleware[i](h)
                }
        } else {
                h = func(c Context) error {
-                       path := r.URL.RawPath
-                       if path == "" {
-                               path = r.URL.Path
-                       }
-                       e.router.Find(m, getPath(r), c)
+                       e.router.Find(r.Method, getPath(r), c)
                        h := c.Handler()
                        for i := len(e.middleware) - 1; i >= 0; i-- {
                                h = e.middleware[i](h)
@@ -622,10 +621,6 @@ func (e *Echo) StartTLS(address string, certFile, keyFile string) (err error) {
 
 // StartAutoTLS starts an HTTPS server using certificates automatically installed from https://letsencrypt.org.
 func (e *Echo) StartAutoTLS(address string) error {
-       if e.Listener == nil {
-               go http.ListenAndServe(":http", e.AutoTLSManager.HTTPHandler(nil))
-       }
-
        s := e.TLSServer
        s.TLSConfig = new(tls.Config)
        s.TLSConfig.GetCertificate = e.AutoTLSManager.GetCertificate
@@ -645,7 +640,7 @@ func (e *Echo) startTLS(address string) error {
 func (e *Echo) StartServer(s *http.Server) (err error) {
        // Setup
        e.colorer.SetOutput(e.Logger.Output())
-       s.ErrorLog = e.stdLogger
+       s.ErrorLog = e.StdLogger
        s.Handler = e
        if e.Debug {
                e.Logger.SetLevel(log.DEBUG)
@@ -689,7 +684,7 @@ func (e *Echo) Close() error {
        return e.Server.Close()
 }
 
-// Shutdown stops server the gracefully.
+// Shutdown stops the server gracefully.
 // It internally calls `http.Server#Shutdown()`.
 func (e *Echo) Shutdown(ctx stdContext.Context) error {
        if err := e.TLSServer.Shutdown(ctx); err != nil {
@@ -712,6 +707,12 @@ func (he *HTTPError) Error() string {
        return fmt.Sprintf("code=%d, message=%v", he.Code, he.Message)
 }
 
+// SetInternal sets error to HTTPError.Internal
+func (he *HTTPError) SetInternal(err error) *HTTPError {
+       he.Internal = err
+       return he
+}
+
 // WrapHandler wraps `http.Handler` into `echo.HandlerFunc`.
 func WrapHandler(h http.Handler) HandlerFunc {
        return func(c Context) error {