From ef4e573e42f0f9b4a28f1976f3da7c236462ee09 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Thu, 3 Dec 2020 11:53:19 +0100 Subject: [PATCH] split string by reversing it --- proxy/pkg/command/server.go | 33 +++++++++++++++++++++--------- storage/pkg/command/frontend.go | 36 ++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/proxy/pkg/command/server.go b/proxy/pkg/command/server.go index 5735707688..3780808528 100644 --- a/proxy/pkg/command/server.go +++ b/proxy/pkg/command/server.go @@ -20,6 +20,7 @@ import ( openzipkin "github.com/openzipkin/zipkin-go" zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http" acc "github.com/owncloud/ocis/accounts/pkg/proto/v0" + "github.com/owncloud/ocis/ocis-pkg/conversions" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/service/grpc" "github.com/owncloud/ocis/proxy/pkg/config" @@ -49,15 +50,8 @@ func Server(cfg *config.Config) *cli.Command { } cfg.PreSignedURL.AllowedHTTPMethods = ctx.StringSlice("presignedurl-allow-method") - cfg.Reva.Middleware.Auth.CredentialsByUserAgent = make(map[string]string, 0) - uaw := ctx.StringSlice("proxy-user-agent-whitelist") - for _, v := range uaw { - parts := strings.Split(v, ":") - if len(parts) != 2 { - return fmt.Errorf("unexpected config value for user-agent whitelist: %v, expected format is userAgent:challenge", v) - } - - cfg.Reva.Middleware.Auth.CredentialsByUserAgent[parts[0]] = parts[1] + if err := loadUserAgent(ctx, cfg); err != nil { + return err } return ParseConfig(ctx, cfg) @@ -322,3 +316,24 @@ func loadMiddlewares(ctx context.Context, l log.Logger, cfg *config.Config) alic ), ) } + +// loadUserAgent reads the proxy-user-agent-whitelist, since it is a string flag, and attempts to construct a map of +// "user-agent":"challenge" locks in for Reva. +// Modifies cfg. Spaces don't need to be trimmed as urfavecli takes care of it. User agents with spaces are valid. i.e: +// Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:83.0) Gecko/20100101 Firefox/83.0 +func loadUserAgent(c *cli.Context, cfg *config.Config) error { + cfg.Reva.Middleware.Auth.CredentialsByUserAgent = make(map[string]string, 0) + locks := c.StringSlice("proxy-user-agent-whitelist") + + for _, v := range locks { + vv := conversions.Reverse(v) + parts := strings.SplitN(vv, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("unexpected config value for user-agent lock-in: %v, expected format is user-agent:challenge", v) + } + + cfg.Reva.Middleware.Auth.CredentialsByUserAgent[conversions.Reverse(parts[1])] = conversions.Reverse(parts[0]) + } + + return nil +} diff --git a/storage/pkg/command/frontend.go b/storage/pkg/command/frontend.go index f377658775..06c7fcc684 100644 --- a/storage/pkg/command/frontend.go +++ b/storage/pkg/command/frontend.go @@ -13,6 +13,7 @@ import ( "github.com/gofrs/uuid" "github.com/micro/cli/v2" "github.com/oklog/run" + "github.com/owncloud/ocis/ocis-pkg/conversions" "github.com/owncloud/ocis/storage/pkg/config" "github.com/owncloud/ocis/storage/pkg/flagset" "github.com/owncloud/ocis/storage/pkg/server/debug" @@ -26,20 +27,7 @@ func Frontend(cfg *config.Config) *cli.Command { Flags: flagset.FrontendWithConfig(cfg), Before: func(c *cli.Context) error { cfg.Reva.Frontend.Services = c.StringSlice("service") - - cfg.Reva.Frontend.Middleware.Auth.CredentialsByUserAgent = make(map[string]string, 0) - uaw := c.StringSlice("user-agent-whitelist") - fmt.Printf("\n\n%v\n\n", uaw) - for _, v := range uaw { - parts := strings.Split(v, ":") - if len(parts) != 2 { - return fmt.Errorf("unexpected config value for user-agent whitelist: %v, expected format is user-agent:challenge", v) - } - - cfg.Reva.Frontend.Middleware.Auth.CredentialsByUserAgent[parts[0]] = parts[1] - } - - return nil + return loadUserAgent(c, cfg) }, Action: func(c *cli.Context) error { logger := NewLogger(cfg) @@ -313,3 +301,23 @@ func Frontend(cfg *config.Config) *cli.Command { }, } } + +// loadUserAgent reads the user-agent-whitelist, since it is a string flag, and attempts to construct a map of +// "user-agent":"challenge" locks in for Reva. +// Modifies cfg. Spaces don't need to be trimmed as urfavecli takes care of it. +func loadUserAgent(c *cli.Context, cfg *config.Config) error { + cfg.Reva.Frontend.Middleware.Auth.CredentialsByUserAgent = make(map[string]string, 0) + locks := c.StringSlice("user-agent-whitelist") + + for _, v := range locks { + vv := conversions.Reverse(v) + parts := strings.SplitN(vv, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("unexpected config value for user-agent lock-in: %v, expected format is user-agent:challenge", v) + } + + cfg.Reva.Frontend.Middleware.Auth.CredentialsByUserAgent[conversions.Reverse(parts[1])] = conversions.Reverse(parts[0]) + } + + return nil +}