From c17add76c42c70c9f6dd56355eb75816107e15be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sw=C3=A4rd?= Date: Wed, 1 Mar 2023 13:25:22 +0100 Subject: [PATCH] graph: Move token middleware and return proper JSON response on error. Fixes #5661 --- ocis-pkg/service/debug/service.go | 3 ++- {ocis-pkg => services/graph/pkg}/middleware/token.go | 9 +++++---- .../graph/pkg}/middleware/token_test.go | 0 services/graph/pkg/server/http/server.go | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) rename {ocis-pkg => services/graph/pkg}/middleware/token.go (72%) rename {ocis-pkg => services/graph/pkg}/middleware/token_test.go (100%) diff --git a/ocis-pkg/service/debug/service.go b/ocis-pkg/service/debug/service.go index 4a7374220..a0432b865 100644 --- a/ocis-pkg/service/debug/service.go +++ b/ocis-pkg/service/debug/service.go @@ -8,6 +8,7 @@ import ( "github.com/justinas/alice" "github.com/owncloud/ocis/v2/ocis-pkg/cors" "github.com/owncloud/ocis/v2/ocis-pkg/middleware" + graphMiddleware "github.com/owncloud/ocis/v2/services/graph/pkg/middleware" "github.com/prometheus/client_golang/prometheus/promhttp" "go.opencensus.io/zpages" ) @@ -18,7 +19,7 @@ func NewService(opts ...Option) *http.Server { mux := http.NewServeMux() mux.Handle("/metrics", alice.New( - middleware.Token( + graphMiddleware.Token( dopts.Token, ), ).Then( diff --git a/ocis-pkg/middleware/token.go b/services/graph/pkg/middleware/token.go similarity index 72% rename from ocis-pkg/middleware/token.go rename to services/graph/pkg/middleware/token.go index 1039ab040..b75f4be84 100644 --- a/ocis-pkg/middleware/token.go +++ b/services/graph/pkg/middleware/token.go @@ -3,13 +3,14 @@ package middleware import ( "crypto/sha256" "crypto/subtle" - "errors" "net/http" + + "github.com/owncloud/ocis/v2/services/graph/pkg/service/v0/errorcode" ) var ( // ErrInvalidToken is returned when the request token is invalid. - ErrInvalidToken = errors.New("invalid or missing token") + ErrInvalidToken = "invalid or missing token" ) // Token provides a middleware to check access secured by a static token. @@ -26,7 +27,7 @@ func Token(token string) func(http.Handler) http.Handler { header := r.Header.Get("Authorization") if header == "" { - http.Error(w, ErrInvalidToken.Error(), http.StatusUnauthorized) + errorcode.InvalidAuthenticationToken.Render(w, r, http.StatusUnauthorized, ErrInvalidToken) return } @@ -34,7 +35,7 @@ func Token(token string) func(http.Handler) http.Handler { providedTokenHash := h.Sum([]byte(header)) if subtle.ConstantTimeCompare(requiredTokenHash, providedTokenHash) == 0 { - http.Error(w, ErrInvalidToken.Error(), http.StatusUnauthorized) + errorcode.InvalidAuthenticationToken.Render(w, r, http.StatusUnauthorized, ErrInvalidToken) return } diff --git a/ocis-pkg/middleware/token_test.go b/services/graph/pkg/middleware/token_test.go similarity index 100% rename from ocis-pkg/middleware/token_test.go rename to services/graph/pkg/middleware/token_test.go diff --git a/services/graph/pkg/server/http/server.go b/services/graph/pkg/server/http/server.go index 02a7f177a..6f6965630 100644 --- a/services/graph/pkg/server/http/server.go +++ b/services/graph/pkg/server/http/server.go @@ -114,7 +114,7 @@ func Server(opts ...Option) (http.Service, error) { return http.Service{}, errors.Wrap(err, "could not initialize gateway client") } } else { - middlewares = append(middlewares, middleware.Token(options.Config.HTTP.APIToken)) + middlewares = append(middlewares, graphMiddleware.Token(options.Config.HTTP.APIToken)) // use a dummy admin middleware for the chi router requireAdminMiddleware = func(next stdhttp.Handler) stdhttp.Handler { return next