diff --git a/changelog/unreleased/init-log.md b/changelog/unreleased/init-log.md new file mode 100644 index 0000000000..507d24ccec --- /dev/null +++ b/changelog/unreleased/init-log.md @@ -0,0 +1,3 @@ +Enhancement: Add init time logging to all services + +https://github.com/cs3org/reva/pull/3407 diff --git a/cmd/revad/runtime/option.go b/cmd/revad/runtime/option.go index dd49966424..758cb5fd78 100644 --- a/cmd/revad/runtime/option.go +++ b/cmd/revad/runtime/option.go @@ -19,6 +19,8 @@ package runtime import ( + "context" + "github.com/cs3org/reva/pkg/registry" "github.com/rs/zerolog" ) @@ -31,6 +33,7 @@ type Options struct { Logger *zerolog.Logger Registry registry.Registry PidFile string + Ctx context.Context } // newOptions initializes the available default options. @@ -38,6 +41,7 @@ func newOptions(opts ...Option) Options { l := zerolog.Nop() opt := Options{ Logger: &l, + Ctx: context.TODO(), } for _, o := range opts { @@ -67,3 +71,10 @@ func WithRegistry(r registry.Registry) Option { o.Registry = r } } + +// WithContext sets the context to use. +func WithContext(ctx context.Context) Option { + return func(o *Options) { + o.Ctx = ctx + } +} diff --git a/cmd/revad/runtime/runtime.go b/cmd/revad/runtime/runtime.go index 3a4b601109..d895b122f1 100644 --- a/cmd/revad/runtime/runtime.go +++ b/cmd/revad/runtime/runtime.go @@ -19,6 +19,7 @@ package runtime import ( + "context" "fmt" "net" "runtime" @@ -29,8 +30,10 @@ import ( "github.com/cs3org/reva/cmd/revad/pkg/config" "github.com/cs3org/reva/cmd/revad/pkg/grace" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rhttp" + "github.com/cs3org/reva/pkg/rhttp/global" "github.com/cs3org/reva/pkg/rserverless" "github.com/cs3org/reva/pkg/sharedconf" @@ -44,6 +47,7 @@ import ( // Reva represents a full instance of reva. type Reva struct { + ctx context.Context config *config.Config servers []*Server @@ -73,6 +77,8 @@ func New(config *config.Config, opt ...Option) (*Reva, error) { opts := newOptions(opt...) log := opts.Logger + ctx := appctx.WithLogger(opts.Ctx, log) + if err := initCPUCount(config.Core, log); err != nil { return nil, err } @@ -103,7 +109,7 @@ func New(config *config.Config, opt ...Option) (*Reva, error) { grpc := groupGRPCByAddress(config) http := groupHTTPByAddress(config) - servers, err := newServers(grpc, http, listeners, log) + servers, err := newServers(ctx, grpc, http, listeners, log) if err != nil { watcher.Clean() return nil, err @@ -116,6 +122,7 @@ func New(config *config.Config, opt ...Option) (*Reva, error) { } return &Reva{ + ctx: ctx, config: config, servers: servers, serverless: serverless, @@ -357,10 +364,12 @@ func listenerFromAddress(lns map[string]net.Listener, network string, address co panic(fmt.Sprintf("listener not found for address %s:%s", network, address)) } -func newServers(grpc []*config.GRPC, http []*config.HTTP, lns map[string]net.Listener, log *zerolog.Logger) ([]*Server, error) { +func newServers(ctx context.Context, grpc []*config.GRPC, http []*config.HTTP, lns map[string]net.Listener, log *zerolog.Logger) ([]*Server, error) { servers := make([]*Server, 0, len(grpc)+len(http)) for _, cfg := range grpc { - services, err := rgrpc.InitServices(cfg.Services) + logger := log.With().Str("pkg", "grpc").Logger() + ctx := appctx.WithLogger(ctx, &logger) + services, err := rgrpc.InitServices(ctx, cfg.Services) if err != nil { return nil, err } @@ -371,7 +380,7 @@ func newServers(grpc []*config.GRPC, http []*config.HTTP, lns map[string]net.Lis s, err := rgrpc.NewServer( rgrpc.EnableReflection(cfg.EnableReflection), rgrpc.WithShutdownDeadline(cfg.ShutdownDeadline), - rgrpc.WithLogger(log.With().Str("pkg", "grpc").Logger()), + rgrpc.WithLogger(logger), rgrpc.WithServices(services), rgrpc.WithUnaryServerInterceptors(unaryChain), rgrpc.WithStreamServerInterceptors(streamChain), @@ -391,18 +400,19 @@ func newServers(grpc []*config.GRPC, http []*config.HTTP, lns map[string]net.Lis servers = append(servers, server) } for _, cfg := range http { - log := log.With().Str("pkg", "http").Logger() - services, err := rhttp.InitServices(cfg.Services, &log) + logger := log.With().Str("pkg", "http").Logger() + ctx := appctx.WithLogger(ctx, &logger) + services, err := rhttp.InitServices(ctx, cfg.Services) if err != nil { return nil, err } - middlewares, err := initHTTPMiddlewares(cfg.Middlewares, httpUnprotected(services), &log) + middlewares, err := initHTTPMiddlewares(cfg.Middlewares, httpUnprotected(services), &logger) if err != nil { return nil, err } s, err := rhttp.New( rhttp.WithServices(services), - rhttp.WithLogger(log), + rhttp.WithLogger(logger), rhttp.WithCertAndKeyFiles(cfg.CertFile, cfg.KeyFile), rhttp.WithMiddlewares(middlewares), ) diff --git a/internal/grpc/services/applicationauth/applicationauth.go b/internal/grpc/services/applicationauth/applicationauth.go index 47f4c24680..e05bd38a70 100644 --- a/internal/grpc/services/applicationauth/applicationauth.go +++ b/internal/grpc/services/applicationauth/applicationauth.go @@ -56,9 +56,9 @@ func (s *service) Register(ss *grpc.Server) { appauthpb.RegisterApplicationsAPIServer(ss, s) } -func getAppAuthManager(c *config) (appauth.Manager, error) { +func getAppAuthManager(ctx context.Context, c *config) (appauth.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -73,14 +73,14 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a app auth provider svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.init() - am, err := getAppAuthManager(c) + am, err := getAppAuthManager(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/appprovider/appprovider.go b/internal/grpc/services/appprovider/appprovider.go index be1365885e..1589e034a4 100644 --- a/internal/grpc/services/appprovider/appprovider.go +++ b/internal/grpc/services/appprovider/appprovider.go @@ -32,8 +32,8 @@ import ( types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" "github.com/cs3org/reva/pkg/app" "github.com/cs3org/reva/pkg/app/provider/registry" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" - "github.com/cs3org/reva/pkg/logger" "github.com/cs3org/reva/pkg/mime" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" @@ -82,7 +82,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new AppProviderService. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -94,7 +94,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { return nil, err } - provider, err := getProvider(c) + provider, err := getProvider(ctx, c) if err != nil { return nil, err } @@ -104,7 +104,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { provider: provider, } - go service.registerProvider() + go service.registerProvider(ctx) return service, nil } @@ -129,13 +129,12 @@ func registerMimeTypes(mappingFile string) error { return nil } -func (s *service) registerProvider() { +func (s *service) registerProvider(ctx context.Context) { // Give the appregistry service time to come up // TODO(lopresti) we should register the appproviders after all other microservices time.Sleep(3 * time.Second) - ctx := context.Background() - log := logger.New().With().Int("pid", os.Getpid()).Logger() + log := appctx.GetLogger(ctx) pInfo, err := s.provider.GetAppProviderInfo(ctx) if err != nil { log.Error().Err(err).Msgf("error registering app provider: could not get provider info") @@ -195,7 +194,7 @@ func (s *service) Register(ss *grpc.Server) { providerpb.RegisterProviderAPIServer(ss, s) } -func getProvider(c *config) (app.Provider, error) { +func getProvider(ctx context.Context, c *config) (app.Provider, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { driverConf := c.Drivers[c.Driver] if c.MimeTypes != nil { @@ -205,7 +204,7 @@ func getProvider(c *config) (app.Provider, error) { } driverConf["mime_types"] = c.MimeTypes } - return f(driverConf) + return f(ctx, driverConf) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } diff --git a/internal/grpc/services/appregistry/appregistry.go b/internal/grpc/services/appregistry/appregistry.go index d70b9e7746..0ba769ff94 100644 --- a/internal/grpc/services/appregistry/appregistry.go +++ b/internal/grpc/services/appregistry/appregistry.go @@ -63,13 +63,13 @@ func (c *config) init() { } // New creates a new StorageRegistryService. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } - reg, err := getRegistry(c) + reg, err := getRegistry(ctx, c) if err != nil { return nil, err } @@ -90,9 +90,9 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getRegistry(c *config) (app.Registry, error) { +func getRegistry(ctx context.Context, c *config) (app.Registry, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("appregistrysvc: driver not found: " + c.Driver) } diff --git a/internal/grpc/services/appregistry/appregistry_test.go b/internal/grpc/services/appregistry/appregistry_test.go index 34b8c5d3d1..f56dad5997 100644 --- a/internal/grpc/services/appregistry/appregistry_test.go +++ b/internal/grpc/services/appregistry/appregistry_test.go @@ -122,7 +122,7 @@ func Test_ListAppProviders(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - rr, err := static.New(map[string]interface{}{"providers": tt.providers, "mime_types": tt.mimeTypes}) + rr, err := static.New(context.Background(), map[string]interface{}{"providers": tt.providers, "mime_types": tt.mimeTypes}) if err != nil { t.Errorf("could not create registry error = %v", err) return @@ -296,7 +296,7 @@ func Test_GetAppProviders(t *testing.T) { }, } - rr, err := static.New(map[string]interface{}{"providers": providers, "mime_types": mimeTypes}) + rr, err := static.New(context.Background(), map[string]interface{}{"providers": providers, "mime_types": mimeTypes}) if err != nil { t.Errorf("could not create registry error = %v", err) return @@ -355,7 +355,7 @@ func TestNew(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := New(tt.m) + got, err := New(context.Background(), tt.m) if err != nil { assert.Equal(t, tt.wantErr, err.Error()) assert.Nil(t, got) diff --git a/internal/grpc/services/authprovider/authprovider.go b/internal/grpc/services/authprovider/authprovider.go index 135af03745..58765c4dad 100644 --- a/internal/grpc/services/authprovider/authprovider.go +++ b/internal/grpc/services/authprovider/authprovider.go @@ -72,7 +72,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getAuthManager(manager string, m map[string]map[string]interface{}) (auth.Manager, *plugin.RevaPlugin, error) { +func getAuthManager(ctx context.Context, manager string, m map[string]map[string]interface{}) (auth.Manager, *plugin.RevaPlugin, error) { if manager == "" { return nil, nil, errtypes.InternalError("authsvc: driver not configured for auth manager") } @@ -90,7 +90,7 @@ func getAuthManager(manager string, m map[string]map[string]interface{}) (auth.M return authManager, p, nil } else if _, ok := err.(errtypes.NotFound); ok { if f, ok := registry.NewFuncs[manager]; ok { - authmgr, err := f(m[manager]) + authmgr, err := f(ctx, m[manager]) return authmgr, nil, err } } else { @@ -100,13 +100,13 @@ func getAuthManager(manager string, m map[string]map[string]interface{}) (auth.M } // New returns a new AuthProviderServiceServer. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } - authManager, plug, err := getAuthManager(c.AuthManager, c.AuthManagers) + authManager, plug, err := getAuthManager(ctx, c.AuthManager, c.AuthManagers) if err != nil { return nil, err } diff --git a/internal/grpc/services/authregistry/authregistry.go b/internal/grpc/services/authregistry/authregistry.go index dcbbd1b471..267ea3b6b0 100644 --- a/internal/grpc/services/authregistry/authregistry.go +++ b/internal/grpc/services/authregistry/authregistry.go @@ -66,7 +66,7 @@ func (c *config) init() { } // New creates a new AuthRegistry. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -74,7 +74,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { c.init() - reg, err := getRegistry(c) + reg, err := getRegistry(ctx, c) if err != nil { return nil, err } @@ -94,9 +94,9 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getRegistry(c *config) (auth.Registry, error) { +func getRegistry(ctx context.Context, c *config) (auth.Registry, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("authregistrysvc: driver not found: " + c.Driver) } diff --git a/internal/grpc/services/datatx/datatx.go b/internal/grpc/services/datatx/datatx.go index ce82fa5c36..98bf545b65 100644 --- a/internal/grpc/services/datatx/datatx.go +++ b/internal/grpc/services/datatx/datatx.go @@ -64,16 +64,16 @@ func (s *service) Register(ss *grpc.Server) { datatx.RegisterTxAPIServer(ss, s) } -func getDatatxManager(c *config) (txdriver.Manager, error) { +func getDatatxManager(ctx context.Context, c *config) (txdriver.Manager, error) { if f, ok := txregistry.NewFuncs[c.TxDriver]; ok { - return f(c.TxDrivers[c.TxDriver]) + return f(ctx, c.TxDrivers[c.TxDriver]) } return nil, errtypes.NotFound("datatx service: driver not found: " + c.TxDriver) } -func getStorageManager(c *config) (txdriver.Repository, error) { +func getStorageManager(ctx context.Context, c *config) (txdriver.Repository, error) { if f, ok := repoRegistry.NewFuncs[c.StorageDriver]; ok { - return f(c.StorageDrivers[c.StorageDriver]) + return f(ctx, c.StorageDrivers[c.StorageDriver]) } return nil, errtypes.NotFound("datatx service: driver not found: " + c.StorageDriver) } @@ -88,19 +88,19 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new datatx svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.init() - txManager, err := getDatatxManager(c) + txManager, err := getDatatxManager(ctx, c) if err != nil { return nil, err } - storageDriver, err := getStorageManager(c) + storageDriver, err := getStorageManager(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/gateway/gateway.go b/internal/grpc/services/gateway/gateway.go index 445ae7b13a..d766b00c5e 100644 --- a/internal/grpc/services/gateway/gateway.go +++ b/internal/grpc/services/gateway/gateway.go @@ -19,6 +19,7 @@ package gateway import ( + "context" "fmt" "net/url" "strings" @@ -124,7 +125,7 @@ type svc struct { // New creates a new gateway svc that acts as a proxy for any grpc operation. // The gateway is responsible for high-level controls: rate-limiting, coordination between svcs // like sharing and storage acls, asynchronous transactions, ... -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/internal/grpc/services/groupprovider/groupprovider.go b/internal/grpc/services/groupprovider/groupprovider.go index 7e23c2f97b..b72704b95c 100644 --- a/internal/grpc/services/groupprovider/groupprovider.go +++ b/internal/grpc/services/groupprovider/groupprovider.go @@ -59,22 +59,22 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getDriver(c *config) (group.Manager, error) { +func getDriver(ctx context.Context, c *config) (group.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound(fmt.Sprintf("driver %s not found for group manager", c.Driver)) } // New returns a new GroupProviderServiceServer. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } - groupManager, err := getDriver(c) + groupManager, err := getDriver(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/helloworld/helloworld.go b/internal/grpc/services/helloworld/helloworld.go index 40aecaa356..3249457f59 100644 --- a/internal/grpc/services/helloworld/helloworld.go +++ b/internal/grpc/services/helloworld/helloworld.go @@ -43,7 +43,7 @@ type service struct { // New returns a new PreferencesServiceServer // It can be tested like this: // prototool grpc --address 0.0.0.0:9999 --method 'revad.helloworld.HelloWorldService/Hello' --data '{"name": "Alice"}'. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c := &conf{} if err := mapstructure.Decode(m, c); err != nil { err = errors.Wrap(err, "helloworld: error decoding conf") diff --git a/internal/grpc/services/ocmcore/ocmcore.go b/internal/grpc/services/ocmcore/ocmcore.go index 16686bc9fd..c9f8dfe71b 100644 --- a/internal/grpc/services/ocmcore/ocmcore.go +++ b/internal/grpc/services/ocmcore/ocmcore.go @@ -61,9 +61,9 @@ func (s *service) Register(ss *grpc.Server) { ocmcore.RegisterOcmCoreAPIServer(ss, s) } -func getShareRepository(c *config) (share.Repository, error) { +func getShareRepository(ctx context.Context, c *config) (share.Repository, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound(fmt.Sprintf("driver not found: %s", c.Driver)) } @@ -78,14 +78,14 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new ocm core svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.init() - repo, err := getShareRepository(c) + repo, err := getShareRepository(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go index 38cf922c5a..e4a3989cbe 100644 --- a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go +++ b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go @@ -86,9 +86,9 @@ func (s *service) Register(ss *grpc.Server) { invitepb.RegisterInviteAPIServer(ss, s) } -func getInviteRepository(c *config) (invite.Repository, error) { +func getInviteRepository(ctx context.Context, c *config) (invite.Repository, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -103,7 +103,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new OCM invite manager svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -112,7 +112,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { return nil, err } - repo, err := getInviteRepository(c) + repo, err := getInviteRepository(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go b/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go index e14645fe5a..fe26f8ebe1 100644 --- a/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go +++ b/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go @@ -57,9 +57,9 @@ func (s *service) Register(ss *grpc.Server) { ocmprovider.RegisterProviderAPIServer(ss, s) } -func getProviderAuthorizer(c *config) (provider.Authorizer, error) { +func getProviderAuthorizer(ctx context.Context, c *config) (provider.Authorizer, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -74,14 +74,14 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new OCM provider authorizer svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.init() - pa, err := getProviderAuthorizer(c) + pa, err := getProviderAuthorizer(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go index c8f39962f0..6bd9f73011 100644 --- a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go +++ b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go @@ -93,9 +93,9 @@ func (s *service) Register(ss *grpc.Server) { ocm.RegisterOcmAPIServer(ss, s) } -func getShareRepository(c *config) (share.Repository, error) { +func getShareRepository(ctx context.Context, c *config) (share.Repository, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -110,14 +110,14 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new ocm share provider svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.init() - repo, err := getShareRepository(c) + repo, err := getShareRepository(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/permissions/permissions.go b/internal/grpc/services/permissions/permissions.go index 428e5457f1..cc1b75786b 100644 --- a/internal/grpc/services/permissions/permissions.go +++ b/internal/grpc/services/permissions/permissions.go @@ -55,7 +55,7 @@ type service struct { } // New returns a new PermissionsServiceServer. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -65,7 +65,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { if !ok { return nil, fmt.Errorf("could not get permission manager '%s'", c.Driver) } - manager, err := f(c.Drivers[c.Driver]) + manager, err := f(ctx, c.Drivers[c.Driver]) if err != nil { return nil, err } diff --git a/internal/grpc/services/preferences/preferences.go b/internal/grpc/services/preferences/preferences.go index f2b096cbf7..b5e0003241 100644 --- a/internal/grpc/services/preferences/preferences.go +++ b/internal/grpc/services/preferences/preferences.go @@ -52,9 +52,9 @@ type service struct { pm preferences.Manager } -func getPreferencesManager(c *config) (preferences.Manager, error) { +func getPreferencesManager(ctx context.Context, c *config) (preferences.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -69,7 +69,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a new PreferencesServiceServer. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -77,7 +77,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { c.init() - pm, err := getPreferencesManager(c) + pm, err := getPreferencesManager(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/publicshareprovider/publicshareprovider.go b/internal/grpc/services/publicshareprovider/publicshareprovider.go index 1d513e5554..b30f6653c6 100644 --- a/internal/grpc/services/publicshareprovider/publicshareprovider.go +++ b/internal/grpc/services/publicshareprovider/publicshareprovider.go @@ -58,9 +58,9 @@ type service struct { allowedPathsForShares []*regexp.Regexp } -func getShareManager(c *config) (publicshare.Manager, error) { +func getShareManager(ctx context.Context, c *config) (publicshare.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -87,7 +87,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new user share provider svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -95,7 +95,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { c.init() - sm, err := getShareManager(c) + sm, err := getShareManager(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go index 43c141e6bf..85e541fc02 100644 --- a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go +++ b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go @@ -83,7 +83,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new IsPublic Storage Provider service. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 9bb1011817..da0f826d91 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -162,7 +162,7 @@ func registerMimeTypes(mappingFile string) error { } // New creates a new storage provider svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -177,7 +177,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { mountPath := c.MountPath mountID := c.MountID - fs, err := getFS(c) + fs, err := getFS(ctx, c) if err != nil { return nil, err } @@ -1538,9 +1538,9 @@ func (s *service) GetQuota(ctx context.Context, req *provider.GetQuotaRequest) ( return res, nil } -func getFS(c *config) (storage.FS, error) { +func getFS(ctx context.Context, c *config) (storage.FS, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } diff --git a/internal/grpc/services/storageregistry/storageregistry.go b/internal/grpc/services/storageregistry/storageregistry.go index 685a8c0004..391347670b 100644 --- a/internal/grpc/services/storageregistry/storageregistry.go +++ b/internal/grpc/services/storageregistry/storageregistry.go @@ -64,7 +64,7 @@ func (c *config) init() { } // New creates a new StorageBrokerService. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -72,7 +72,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { c.init() - reg, err := getRegistry(c) + reg, err := getRegistry(ctx, c) if err != nil { return nil, err } @@ -92,9 +92,9 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getRegistry(c *config) (storage.Registry, error) { +func getRegistry(ctx context.Context, c *config) (storage.Registry, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } diff --git a/internal/grpc/services/userprovider/userprovider.go b/internal/grpc/services/userprovider/userprovider.go index fa6cb78abc..a8a7ae774a 100644 --- a/internal/grpc/services/userprovider/userprovider.go +++ b/internal/grpc/services/userprovider/userprovider.go @@ -61,7 +61,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { return c, nil } -func getDriver(c *config) (user.Manager, *plugin.RevaPlugin, error) { +func getDriver(ctx context.Context, c *config) (user.Manager, *plugin.RevaPlugin, error) { p, err := plugin.Load("userprovider", c.Driver) if err == nil { manager, ok := p.Plugin.(user.Manager) @@ -77,7 +77,7 @@ func getDriver(c *config) (user.Manager, *plugin.RevaPlugin, error) { } else if _, ok := err.(errtypes.NotFound); ok { // plugin not found, fetch the driver from the in-memory registry if f, ok := registry.NewFuncs[c.Driver]; ok { - mgr, err := f(c.Drivers[c.Driver]) + mgr, err := f(ctx, c.Drivers[c.Driver]) return mgr, nil, err } } else { @@ -87,12 +87,12 @@ func getDriver(c *config) (user.Manager, *plugin.RevaPlugin, error) { } // New returns a new UserProviderServiceServer. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err } - userManager, plug, err := getDriver(c) + userManager, plug, err := getDriver(ctx, c) if err != nil { return nil, err } diff --git a/internal/grpc/services/usershareprovider/usershareprovider.go b/internal/grpc/services/usershareprovider/usershareprovider.go index 074397364e..81965b3db3 100644 --- a/internal/grpc/services/usershareprovider/usershareprovider.go +++ b/internal/grpc/services/usershareprovider/usershareprovider.go @@ -59,9 +59,9 @@ type service struct { allowedPathsForShares []*regexp.Regexp } -func getShareManager(c *config) (share.Manager, error) { +func getShareManager(ctx context.Context, c *config) (share.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, errtypes.NotFound("driver not found: " + c.Driver) } @@ -89,7 +89,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New creates a new user share provider svc. -func New(m map[string]interface{}) (rgrpc.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -97,7 +97,7 @@ func New(m map[string]interface{}) (rgrpc.Service, error) { c.init() - sm, err := getShareManager(c) + sm, err := getShareManager(ctx, c) if err != nil { return nil, err } diff --git a/internal/http/interceptors/loader/loader.go b/internal/http/interceptors/loader/loader.go index bb00e89319..f063179431 100644 --- a/internal/http/interceptors/loader/loader.go +++ b/internal/http/interceptors/loader/loader.go @@ -21,6 +21,5 @@ package loader import ( // Load core HTTP middlewares. _ "github.com/cs3org/reva/internal/http/interceptors/cors" - _ "github.com/cs3org/reva/internal/http/interceptors/providerauthorizer" // Add your own middleware. ) diff --git a/internal/http/interceptors/providerauthorizer/providerauthorizer.go b/internal/http/interceptors/providerauthorizer/providerauthorizer.go deleted file mode 100644 index a18dcf9ef4..0000000000 --- a/internal/http/interceptors/providerauthorizer/providerauthorizer.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018-2023 CERN -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// In applying this license, CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - -package providerauthorizer - -import ( - "fmt" - "net/http" - "net/url" - "strings" - - ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" - "github.com/cs3org/reva/pkg/appctx" - ctxpkg "github.com/cs3org/reva/pkg/ctx" - "github.com/cs3org/reva/pkg/ocm/provider" - "github.com/cs3org/reva/pkg/ocm/provider/authorizer/registry" - "github.com/cs3org/reva/pkg/rhttp/global" - "github.com/cs3org/reva/pkg/rhttp/router" - "github.com/cs3org/reva/pkg/utils" - "github.com/mitchellh/mapstructure" -) - -type config struct { - Driver string `mapstructure:"driver"` - Drivers map[string]map[string]interface{} `mapstructure:"drivers"` -} - -func (c *config) init() { - if c.Driver == "" { - c.Driver = "json" - } -} - -func getDriver(c *config) (provider.Authorizer, error) { - if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) - } - - return nil, fmt.Errorf("driver %s not found for provider authorizer", c.Driver) -} - -// New returns a new HTTP middleware that verifies that the provider is registered in OCM. -func New(m map[string]interface{}, unprotected []string, ocmPrefix string) (global.Middleware, error) { - if ocmPrefix == "" { - ocmPrefix = "ocm" - } - - conf := &config{} - if err := mapstructure.Decode(m, conf); err != nil { - return nil, err - } - conf.init() - - authorizer, err := getDriver(conf) - if err != nil { - return nil, err - } - - handler := func(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - log := appctx.GetLogger(ctx) - head, _ := router.ShiftPath(r.URL.Path) - - if r.Method == http.MethodOptions || head != ocmPrefix || utils.Skip(r.URL.Path, unprotected) { - log.Info().Msg("skipping provider authorizer check for: " + r.URL.Path) - h.ServeHTTP(w, r) - return - } - - userIdp := ctxpkg.ContextMustGetUser(ctx).Id.Idp - if !(strings.Contains(userIdp, "://")) { - userIdp = "https://" + userIdp - } - userIdpURL, err := url.Parse(userIdp) - if err != nil { - log.Error().Err(err).Msg("error parsing user idp in provider authorizer") - w.WriteHeader(http.StatusUnauthorized) - return - } - - err = authorizer.IsProviderAllowed(ctx, &ocmprovider.ProviderInfo{ - Domain: userIdpURL.Hostname(), - }) - if err != nil { - log.Error().Err(err).Msg("provider not registered in OCM") - w.WriteHeader(http.StatusUnauthorized) - return - } - - h.ServeHTTP(w, r) - }) - } - - return handler, nil -} diff --git a/internal/http/services/appprovider/appprovider.go b/internal/http/services/appprovider/appprovider.go index edca9afe21..6b6b68afb6 100644 --- a/internal/http/services/appprovider/appprovider.go +++ b/internal/http/services/appprovider/appprovider.go @@ -19,6 +19,7 @@ package appprovider import ( + "context" "encoding/json" "net/http" "path" @@ -42,7 +43,6 @@ import ( ua "github.com/mileusna/useragent" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" - "github.com/rs/zerolog" ) func init() { @@ -69,7 +69,7 @@ type svc struct { } // New returns a new ocmd object. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &Config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/archiver/handler.go b/internal/http/services/archiver/handler.go index 9f30b2270f..c1dd6768f5 100644 --- a/internal/http/services/archiver/handler.go +++ b/internal/http/services/archiver/handler.go @@ -44,13 +44,11 @@ import ( "github.com/gdexlab/go-render/render" ua "github.com/mileusna/useragent" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) type svc struct { config *Config gtwClient gateway.GatewayAPIClient - log *zerolog.Logger walker walker.Walker downloader downloader.Downloader @@ -74,7 +72,7 @@ func init() { } // New creates a new archiver service. -func New(conf map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, conf map[string]interface{}) (global.Service, error) { c := &Config{} err := mapstructure.Decode(conf, c) if err != nil { @@ -103,7 +101,6 @@ func New(conf map[string]interface{}, log *zerolog.Logger) (global.Service, erro gtwClient: gtw, downloader: downloader.NewDownloader(gtw, rhttp.Insecure(c.Insecure), rhttp.Timeout(time.Duration(c.Timeout*int64(time.Second)))), walker: walker.NewWalker(gtw), - log: log, allowedFolders: allowedFolderRegex, }, nil } @@ -188,21 +185,22 @@ func (s *svc) allAllowed(paths []string) error { return nil } -func (s *svc) writeHTTPError(rw http.ResponseWriter, err error) { - s.log.Error().Msg(err.Error()) +func (s *svc) writeHTTPError(ctx context.Context, w http.ResponseWriter, err error) { + log := appctx.GetLogger(ctx) + log.Error().Msg(err.Error()) switch err.(type) { case errtypes.NotFound: - rw.WriteHeader(http.StatusNotFound) + w.WriteHeader(http.StatusNotFound) case manager.ErrMaxSize, manager.ErrMaxFileCount: - rw.WriteHeader(http.StatusRequestEntityTooLarge) + w.WriteHeader(http.StatusRequestEntityTooLarge) case errtypes.BadRequest: - rw.WriteHeader(http.StatusBadRequest) + w.WriteHeader(http.StatusBadRequest) default: - rw.WriteHeader(http.StatusInternalServerError) + w.WriteHeader(http.StatusInternalServerError) } - _, _ = rw.Write([]byte(err.Error())) + _, _ = w.Write([]byte(err.Error())) } func (s *svc) Handler() http.Handler { @@ -223,7 +221,7 @@ func (s *svc) Handler() http.Handler { files, err := s.getFiles(ctx, paths, ids) if err != nil { - s.writeHTTPError(rw, err) + s.writeHTTPError(ctx, rw, err) return } @@ -232,7 +230,7 @@ func (s *svc) Handler() http.Handler { MaxSize: s.config.MaxSize, }) if err != nil { - s.writeHTTPError(rw, err) + s.writeHTTPError(ctx, rw, err) return } @@ -268,7 +266,7 @@ func (s *svc) Handler() http.Handler { } if err != nil { - s.writeHTTPError(rw, err) + s.writeHTTPError(ctx, rw, err) return } }) diff --git a/internal/http/services/datagateway/datagateway.go b/internal/http/services/datagateway/datagateway.go index 57a5a6134a..9795b5cee5 100644 --- a/internal/http/services/datagateway/datagateway.go +++ b/internal/http/services/datagateway/datagateway.go @@ -35,7 +35,6 @@ import ( "github.com/golang-jwt/jwt" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" - "github.com/rs/zerolog" ) const ( @@ -77,7 +76,7 @@ type svc struct { } // New returns a new datagateway. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/dataprovider/dataprovider.go b/internal/http/services/dataprovider/dataprovider.go index f4277b6ce9..df35db7fa6 100644 --- a/internal/http/services/dataprovider/dataprovider.go +++ b/internal/http/services/dataprovider/dataprovider.go @@ -19,6 +19,7 @@ package dataprovider import ( + "context" "fmt" "net/http" @@ -29,7 +30,6 @@ import ( "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -62,7 +62,7 @@ type svc struct { } // New returns a new datasvc. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err @@ -70,12 +70,12 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) conf.init() - fs, err := getFS(conf) + fs, err := getFS(ctx, conf) if err != nil { return nil, err } - dataTXs, err := getDataTXs(conf, fs) + dataTXs, err := getDataTXs(ctx, conf, fs) if err != nil { return nil, err } @@ -90,14 +90,14 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) return s, err } -func getFS(c *config) (storage.FS, error) { +func getFS(ctx context.Context, c *config) (storage.FS, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { - return f(c.Drivers[c.Driver]) + return f(ctx, c.Drivers[c.Driver]) } return nil, fmt.Errorf("driver not found: %s", c.Driver) } -func getDataTXs(c *config, fs storage.FS) (map[string]http.Handler, error) { +func getDataTXs(ctx context.Context, c *config, fs storage.FS) (map[string]http.Handler, error) { if c.DataTXs == nil { c.DataTXs = make(map[string]map[string]interface{}) } @@ -110,7 +110,7 @@ func getDataTXs(c *config, fs storage.FS) (map[string]http.Handler, error) { txs := make(map[string]http.Handler) for t := range c.DataTXs { if f, ok := datatxregistry.NewFuncs[t]; ok { - if tx, err := f(c.DataTXs[t]); err == nil { + if tx, err := f(ctx, c.DataTXs[t]); err == nil { if handler, err := tx.Handler(fs); err == nil { txs[t] = handler } diff --git a/internal/http/services/helloworld/helloworld.go b/internal/http/services/helloworld/helloworld.go index 03aea8880e..c136aeb6a8 100644 --- a/internal/http/services/helloworld/helloworld.go +++ b/internal/http/services/helloworld/helloworld.go @@ -19,12 +19,12 @@ package helloworld import ( + "context" "net/http" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -32,7 +32,7 @@ func init() { } // New returns a new helloworld service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/mentix/mentix.go b/internal/http/services/mentix/mentix.go index 00c9db606a..f7c8a78845 100644 --- a/internal/http/services/mentix/mentix.go +++ b/internal/http/services/mentix/mentix.go @@ -19,8 +19,10 @@ package mentix import ( + "context" "net/http" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/mentix" "github.com/cs3org/reva/pkg/mentix/config" "github.com/cs3org/reva/pkg/mentix/exchangers" @@ -166,7 +168,7 @@ func applyDefaultConfig(conf *config.Configuration) { } // New returns a new Mentix service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { // Prepare the configuration conf, err := parseConfig(m) if err != nil { @@ -176,6 +178,7 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) conf.Init() // Create the Mentix instance + log := appctx.GetLogger(ctx) mntx, err := mentix.New(conf, log) if err != nil { return nil, errors.Wrap(err, "mentix: error creating Mentix") diff --git a/internal/http/services/metrics/metrics.go b/internal/http/services/metrics/metrics.go index 61f6a33ca6..fb02a01bf7 100644 --- a/internal/http/services/metrics/metrics.go +++ b/internal/http/services/metrics/metrics.go @@ -22,6 +22,7 @@ package metrics This service initializes the metrics package according to the metrics configuration. */ import ( + "context" "net/http" "os" @@ -30,7 +31,6 @@ import ( "github.com/cs3org/reva/pkg/metrics/config" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -69,7 +69,7 @@ func (s *svc) Handler() http.Handler { } // New returns a new metrics service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { // Prepare the configuration conf := &config.Config{} if err := mapstructure.Decode(m, conf); err != nil { diff --git a/internal/http/services/ocmd/ocm.go b/internal/http/services/ocmd/ocm.go index 8cbb4821a0..4570178aef 100644 --- a/internal/http/services/ocmd/ocm.go +++ b/internal/http/services/ocmd/ocm.go @@ -19,6 +19,7 @@ package ocmd import ( + "context" "net/http" "github.com/cs3org/reva/pkg/appctx" @@ -26,7 +27,6 @@ import ( "github.com/cs3org/reva/pkg/sharedconf" "github.com/go-chi/chi/v5" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -53,7 +53,7 @@ type svc struct { // New returns a new ocmd object, that implements // the OCM APIs specified in https://cs3org.github.io/OCM-API/docs.html -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/ocmprovider/ocmprovider.go b/internal/http/services/ocmprovider/ocmprovider.go index 8ed83cf116..f2f7afb71e 100644 --- a/internal/http/services/ocmprovider/ocmprovider.go +++ b/internal/http/services/ocmprovider/ocmprovider.go @@ -19,6 +19,7 @@ package ocmprovider import ( + "context" "encoding/json" "fmt" "net/http" @@ -26,7 +27,6 @@ import ( "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -125,7 +125,7 @@ func (c *config) prepare() *discoveryData { // New returns a new ocmprovider object, that implements // the OCM discovery endpoint specified in // https://cs3org.github.io/OCM-API/docs.html?repo=OCM-API&user=cs3org#/paths/~1ocm-provider/get -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/owncloud/ocdav/ocdav.go b/internal/http/services/owncloud/ocdav/ocdav.go index 7f6d7ca366..6374a6a29a 100644 --- a/internal/http/services/owncloud/ocdav/ocdav.go +++ b/internal/http/services/owncloud/ocdav/ocdav.go @@ -44,7 +44,6 @@ import ( "github.com/cs3org/reva/pkg/storage/utils/templates" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" - "github.com/rs/zerolog" ) type ctxKey int @@ -145,7 +144,7 @@ func getFavoritesManager(c *Config) (favorite.Manager, error) { } // New returns a new ocdav. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &Config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err @@ -158,6 +157,7 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) return nil, err } + log := appctx.GetLogger(ctx) s := &svc{ c: conf, webDavHandler: new(WebDavHandler), diff --git a/internal/http/services/owncloud/ocs/conversions/main.go b/internal/http/services/owncloud/ocs/conversions/main.go index 1650ab3182..1a12638367 100644 --- a/internal/http/services/owncloud/ocs/conversions/main.go +++ b/internal/http/services/owncloud/ocs/conversions/main.go @@ -346,18 +346,18 @@ func LocalGroupIDToString(groupID *grouppb.GroupId) string { } // GetUserManager returns a connection to a user share manager. -func GetUserManager(manager string, m map[string]map[string]interface{}) (user.Manager, error) { +func GetUserManager(ctx context.Context, manager string, m map[string]map[string]interface{}) (user.Manager, error) { if f, ok := usermgr.NewFuncs[manager]; ok { - return f(m[manager]) + return f(ctx, m[manager]) } return nil, fmt.Errorf("driver %s not found for user manager", manager) } // GetPublicShareManager returns a connection to a public share manager. -func GetPublicShareManager(manager string, m map[string]map[string]interface{}) (publicshare.Manager, error) { +func GetPublicShareManager(ctx context.Context, manager string, m map[string]map[string]interface{}) (publicshare.Manager, error) { if f, ok := publicsharemgr.NewFuncs[manager]; ok { - return f(m[manager]) + return f(ctx, m[manager]) } return nil, fmt.Errorf("driver %s not found for public shares manager", manager) diff --git a/internal/http/services/owncloud/ocs/ocs.go b/internal/http/services/owncloud/ocs/ocs.go index 5aef6c9ffb..05ce3f8819 100644 --- a/internal/http/services/owncloud/ocs/ocs.go +++ b/internal/http/services/owncloud/ocs/ocs.go @@ -19,6 +19,7 @@ package ocs import ( + "context" "net/http" "time" @@ -48,7 +49,7 @@ type svc struct { warmupCacheTracker *ttlcache.Cache } -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config.Config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err @@ -62,6 +63,7 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) router: r, } + log := appctx.GetLogger(ctx) if err := s.routerInit(log); err != nil { return nil, err } diff --git a/internal/http/services/preferences/preferences.go b/internal/http/services/preferences/preferences.go index eefec9c07a..d5f8bdf506 100644 --- a/internal/http/services/preferences/preferences.go +++ b/internal/http/services/preferences/preferences.go @@ -19,6 +19,7 @@ package preferences import ( + "context" "encoding/json" "net/http" @@ -30,7 +31,6 @@ import ( "github.com/cs3org/reva/pkg/sharedconf" "github.com/go-chi/chi/v5" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -56,7 +56,7 @@ type svc struct { } // New returns a new ocmd object. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &Config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/prometheus/prometheus.go b/internal/http/services/prometheus/prometheus.go index bc7986b253..88c18d81fe 100644 --- a/internal/http/services/prometheus/prometheus.go +++ b/internal/http/services/prometheus/prometheus.go @@ -19,13 +19,13 @@ package prometheus import ( + "context" "net/http" "contrib.go.opencensus.io/exporter/prometheus" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" - "github.com/rs/zerolog" "go.opencensus.io/stats/view" ) @@ -34,7 +34,7 @@ func init() { } // New returns a new prometheus service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/reverseproxy/reverseproxy.go b/internal/http/services/reverseproxy/reverseproxy.go index b1df580f3e..2922e3b449 100644 --- a/internal/http/services/reverseproxy/reverseproxy.go +++ b/internal/http/services/reverseproxy/reverseproxy.go @@ -19,6 +19,7 @@ package reverseproxy import ( + "context" "encoding/json" "net/http" "net/http/httputil" @@ -29,7 +30,6 @@ import ( "github.com/cs3org/reva/pkg/rhttp/global" "github.com/go-chi/chi/v5" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -56,7 +56,7 @@ type svc struct { } // New returns an instance of the reverse proxy service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/sciencemesh/sciencemesh.go b/internal/http/services/sciencemesh/sciencemesh.go index 14aafc6619..a728c82a77 100644 --- a/internal/http/services/sciencemesh/sciencemesh.go +++ b/internal/http/services/sciencemesh/sciencemesh.go @@ -19,6 +19,7 @@ package sciencemesh import ( + "context" "errors" "net/http" @@ -28,7 +29,6 @@ import ( "github.com/cs3org/reva/pkg/smtpclient" "github.com/go-chi/chi/v5" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -36,7 +36,7 @@ func init() { } // New returns a new sciencemesh service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/internal/http/services/siteacc/siteacc.go b/internal/http/services/siteacc/siteacc.go index e735cdb3c4..9f44535c7e 100644 --- a/internal/http/services/siteacc/siteacc.go +++ b/internal/http/services/siteacc/siteacc.go @@ -19,8 +19,10 @@ package siteacc import ( + "context" "net/http" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/cs3org/reva/pkg/siteacc" "github.com/cs3org/reva/pkg/siteacc/config" @@ -103,7 +105,7 @@ func applyDefaultConfig(conf *config.Configuration) { } // New returns a new Site Accounts service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { // Prepare the configuration conf, err := parseConfig(m) if err != nil { @@ -111,6 +113,7 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) } // Create the sites accounts instance + log := appctx.GetLogger(ctx) siteacc, err := siteacc.New(conf, log) if err != nil { return nil, errors.Wrap(err, "error creating the sites accounts service") diff --git a/internal/http/services/sysinfo/sysinfo.go b/internal/http/services/sysinfo/sysinfo.go index e4dbfafcb4..d28e98dd35 100644 --- a/internal/http/services/sysinfo/sysinfo.go +++ b/internal/http/services/sysinfo/sysinfo.go @@ -19,6 +19,7 @@ package sysinfo import ( + "context" "net/http" "github.com/cs3org/reva/pkg/appctx" @@ -26,7 +27,6 @@ import ( "github.com/cs3org/reva/pkg/sysinfo" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" - "github.com/rs/zerolog" ) func init() { @@ -94,7 +94,7 @@ func applyDefaultConfig(conf *config) { } // New returns a new SysInfo service. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { // Prepare the configuration conf, err := parseConfig(m) if err != nil { diff --git a/internal/http/services/wellknown/wellknown.go b/internal/http/services/wellknown/wellknown.go index 04c201332d..159a8d9ed7 100644 --- a/internal/http/services/wellknown/wellknown.go +++ b/internal/http/services/wellknown/wellknown.go @@ -19,13 +19,13 @@ package wellknown import ( + "context" "net/http" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rhttp/global" "github.com/cs3org/reva/pkg/rhttp/router" "github.com/mitchellh/mapstructure" - "github.com/rs/zerolog" ) func init() { @@ -56,7 +56,7 @@ type svc struct { } // New returns a new webuisvc. -func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { conf := &config{} if err := mapstructure.Decode(m, conf); err != nil { return nil, err diff --git a/pkg/app/provider/demo/demo.go b/pkg/app/provider/demo/demo.go index 0c0f610e41..359fb81b2a 100644 --- a/pkg/app/provider/demo/demo.go +++ b/pkg/app/provider/demo/demo.go @@ -72,7 +72,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { // New returns an implementation to of the app.Provider interface that // connects to an application in the backend. -func New(m map[string]interface{}) (app.Provider, error) { +func New(ctx context.Context, m map[string]interface{}) (app.Provider, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/app/provider/registry/registry.go b/pkg/app/provider/registry/registry.go index f3f46ee6b7..6fd3ef8037 100644 --- a/pkg/app/provider/registry/registry.go +++ b/pkg/app/provider/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/app" +import ( + "context" + + "github.com/cs3org/reva/pkg/app" +) // NewFunc is the function that app provider implementations // should register to at init time. -type NewFunc func(map[string]interface{}) (app.Provider, error) +type NewFunc func(context.Context, map[string]interface{}) (app.Provider, error) // NewFuncs is a map containing all the registered app providers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/app/provider/wopi/wopi.go b/pkg/app/provider/wopi/wopi.go index 6a80c556a2..b2262ed248 100644 --- a/pkg/app/provider/wopi/wopi.go +++ b/pkg/app/provider/wopi/wopi.go @@ -106,7 +106,7 @@ type wopiProvider struct { // New returns an implementation of the app.Provider interface that // connects to an application in the backend. -func New(m map[string]interface{}) (app.Provider, error) { +func New(ctx context.Context, m map[string]interface{}) (app.Provider, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/app/registry/registry/registry.go b/pkg/app/registry/registry/registry.go index dc8bff6291..fc5b3cdf3f 100644 --- a/pkg/app/registry/registry/registry.go +++ b/pkg/app/registry/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/app" +import ( + "context" + + "github.com/cs3org/reva/pkg/app" +) // NewFunc is the function that app provider implementations // should register to at init time. -type NewFunc func(map[string]interface{}) (app.Registry, error) +type NewFunc func(context.Context, map[string]interface{}) (app.Registry, error) // NewFuncs is a map containing all the registered app registry backends. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/app/registry/static/static.go b/pkg/app/registry/static/static.go index 682c7c1d3f..9890f6d25c 100644 --- a/pkg/app/registry/static/static.go +++ b/pkg/app/registry/static/static.go @@ -78,7 +78,7 @@ type manager struct { } // New returns an implementation of the app.Registry interface. -func New(m map[string]interface{}) (app.Registry, error) { +func New(ctx context.Context, m map[string]interface{}) (app.Registry, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/app/registry/static/static_test.go b/pkg/app/registry/static/static_test.go index 09fabc802a..3600432995 100644 --- a/pkg/app/registry/static/static_test.go +++ b/pkg/app/registry/static/static_test.go @@ -175,7 +175,7 @@ func TestFindProviders(t *testing.T) { t.Run(tt.name, func(t *testing.T) { ctx := context.TODO() - registry, err := New(map[string]interface{}{ + registry, err := New(ctx, map[string]interface{}{ "mime_types": tt.mimeTypes, "providers": tt.regProviders, }) @@ -474,7 +474,7 @@ func TestFindProvidersWithPriority(t *testing.T) { t.Run(tt.name, func(t *testing.T) { ctx := context.TODO() - registry, err := New(map[string]interface{}{ + registry, err := New(ctx, map[string]interface{}{ "mime_types": tt.mimeTypes, }) if err != nil { @@ -763,7 +763,7 @@ func TestAddProvider(t *testing.T) { t.Run(tt.name, func(t *testing.T) { ctx := context.TODO() - registry, err := New(map[string]interface{}{ + registry, err := New(ctx, map[string]interface{}{ "providers": tt.initProviders, "mime_types": tt.mimeTypes, }) @@ -1014,7 +1014,7 @@ func TestListSupportedMimeTypes(t *testing.T) { t.Run(tt.name, func(t *testing.T) { ctx := context.TODO() - registry, err := New(map[string]interface{}{ + registry, err := New(ctx, map[string]interface{}{ "mime_types": tt.mimeTypes, }) if err != nil { @@ -1141,7 +1141,7 @@ func TestSetDefaultProviderForMimeType(t *testing.T) { t.Run(tt.name, func(t *testing.T) { ctx := context.TODO() - registry, err := New(map[string]interface{}{ + registry, err := New(ctx, map[string]interface{}{ "providers": tt.initProviders, "mime_types": tt.mimeTypes, }) diff --git a/pkg/appauth/manager/json/json.go b/pkg/appauth/manager/json/json.go index 4a37cad515..0a488c6cb9 100644 --- a/pkg/appauth/manager/json/json.go +++ b/pkg/appauth/manager/json/json.go @@ -58,7 +58,7 @@ type jsonManager struct { } // New returns a new mgr. -func New(m map[string]interface{}) (appauth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (appauth.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, errors.Wrap(err, "error creating a new manager") diff --git a/pkg/appauth/manager/json/json_test.go b/pkg/appauth/manager/json/json_test.go index a6a8c1136a..e20d1cd585 100644 --- a/pkg/appauth/manager/json/json_test.go +++ b/pkg/appauth/manager/json/json_test.go @@ -123,7 +123,7 @@ func TestNewManager(t *testing.T) { for _, test := range testCases { t.Run(test.description, func(t *testing.T) { - manager, err := New(test.configMap) + manager, err := New(context.Background(), test.configMap) if test.expected == nil { if err == nil { t.Fatalf("no error (but we expected one) while get manager") @@ -239,7 +239,7 @@ func TestGenerateAppPassword(t *testing.T) { tmpFile := createTempFile(t, tempDir, "test.json") defer tmpFile.Close() fill(t, tmpFile, test.prevStateJSON) - manager, err := New(map[string]interface{}{ + manager, err := New(context.Background(), map[string]interface{}{ "file": tmpFile.Name(), "token_strength": len(token), "password_hash_cost": 11, @@ -393,7 +393,7 @@ func TestListAppPasswords(t *testing.T) { if test.stateJSON != "" { fill(t, tmpFile, test.stateJSON) } - manager, err := New(map[string]interface{}{ + manager, err := New(context.Background(), map[string]interface{}{ "file": tmpFile.Name(), "token_strength": len(token), }) @@ -514,7 +514,7 @@ func TestInvalidateAppPassword(t *testing.T) { // initialize temp file with `state_json` content tmpFile := createTempFile(t, tempDir, "test.json") fill(t, tmpFile, test.stateJSON) - manager, err := New(map[string]interface{}{ + manager, err := New(context.Background(), map[string]interface{}{ "file": tmpFile.Name(), "token_strength": 4, }) @@ -669,7 +669,7 @@ func TestGetAppPassword(t *testing.T) { // initialize temp file with `state_json` content tmpFile := createTempFile(t, tempDir, "test.json") fill(t, tmpFile, test.stateJSON) - manager, err := New(map[string]interface{}{ + manager, err := New(context.Background(), map[string]interface{}{ "file": tmpFile.Name(), "token_strength": 4, }) diff --git a/pkg/appauth/manager/registry/registry.go b/pkg/appauth/manager/registry/registry.go index bc3ec41533..21cdcdea10 100644 --- a/pkg/appauth/manager/registry/registry.go +++ b/pkg/appauth/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/appauth" +import ( + "context" + + "github.com/cs3org/reva/pkg/appauth" +) // NewFunc is the function that application auth implementations // should register at init time. -type NewFunc func(map[string]interface{}) (appauth.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (appauth.Manager, error) // NewFuncs is a map containing all the registered application auth managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/auth/manager/appauth/appauth.go b/pkg/auth/manager/appauth/appauth.go index 9cf208523a..daf292a739 100644 --- a/pkg/auth/manager/appauth/appauth.go +++ b/pkg/auth/manager/appauth/appauth.go @@ -42,7 +42,7 @@ type manager struct { } // New returns a new auth Manager. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/auth/manager/demo/demo.go b/pkg/auth/manager/demo/demo.go index 26fa5731e8..fc44c1ddaf 100644 --- a/pkg/auth/manager/demo/demo.go +++ b/pkg/auth/manager/demo/demo.go @@ -44,7 +44,7 @@ type Credentials struct { } // New returns a new auth Manager. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { // m not used mgr := &manager{} err := mgr.Configure(m) diff --git a/pkg/auth/manager/demo/demo_test.go b/pkg/auth/manager/demo/demo_test.go index 82f9e9e245..3ae7ab89c9 100644 --- a/pkg/auth/manager/demo/demo_test.go +++ b/pkg/auth/manager/demo/demo_test.go @@ -27,7 +27,7 @@ var ctx = context.Background() func TestUserManager(t *testing.T) { // get manager - manager, _ := New(nil) + manager, _ := New(context.Background(), nil) // Authenticate - positive test _, _, err := manager.Authenticate(ctx, "einstein", "relativity") diff --git a/pkg/auth/manager/impersonator/impersonator.go b/pkg/auth/manager/impersonator/impersonator.go index 8c20f77fb7..dbb1a58cca 100644 --- a/pkg/auth/manager/impersonator/impersonator.go +++ b/pkg/auth/manager/impersonator/impersonator.go @@ -36,7 +36,7 @@ func init() { type mgr struct{} // New returns an auth manager implementation that allows to authenticate with any credentials. -func New(c map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, c map[string]interface{}) (auth.Manager, error) { return &mgr{}, nil } diff --git a/pkg/auth/manager/impersonator/impersonator_test.go b/pkg/auth/manager/impersonator/impersonator_test.go index 82b0d9042e..db65f0c954 100644 --- a/pkg/auth/manager/impersonator/impersonator_test.go +++ b/pkg/auth/manager/impersonator/impersonator_test.go @@ -25,7 +25,7 @@ import ( func TestImpersonator(t *testing.T) { ctx := context.Background() - i, _ := New(nil) + i, _ := New(ctx, nil) u, _, err := i.Authenticate(ctx, "admin", "pwd") if err != nil { t.Fatal(err) diff --git a/pkg/auth/manager/json/json.go b/pkg/auth/manager/json/json.go index 1a691170fe..5e095c062b 100644 --- a/pkg/auth/manager/json/json.go +++ b/pkg/auth/manager/json/json.go @@ -78,7 +78,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a new auth Manager. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/auth/manager/json/json_test.go b/pkg/auth/manager/json/json_test.go index ce1793f37f..45cda03f6f 100644 --- a/pkg/auth/manager/json/json_test.go +++ b/pkg/auth/manager/json/json_test.go @@ -60,7 +60,7 @@ func TestGetManagerWithInvalidUser(t *testing.T) { "users": tt.user, } - manager, err := New(input) + manager, err := New(ctx, input) assert.Empty(t, manager) assert.EqualError(t, err, tt.expectedError) @@ -117,7 +117,7 @@ func TestGetManagerWithJSONObject(t *testing.T) { "users": tmpFile.Name(), } - manager, err := New(input) + manager, err := New(ctx, input) if tt.expectManager { assert.Equal(t, nil, err) @@ -180,7 +180,7 @@ func TestGetAuthenticatedManager(t *testing.T) { input := map[string]interface{}{ "users": tempFile.Name(), } - manager, _ := New(input) + manager, _ := New(ctx, input) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/auth/manager/ldap/ldap.go b/pkg/auth/manager/ldap/ldap.go index d309350b31..e9f871720d 100644 --- a/pkg/auth/manager/ldap/ldap.go +++ b/pkg/auth/manager/ldap/ldap.go @@ -99,7 +99,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns an auth manager implementation that connects to a LDAP server to validate the user. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { manager := &mgr{} err := manager.Configure(m) if err != nil { diff --git a/pkg/auth/manager/machine/machine.go b/pkg/auth/manager/machine/machine.go index 2146d33e4b..6d557e24c2 100644 --- a/pkg/auth/manager/machine/machine.go +++ b/pkg/auth/manager/machine/machine.go @@ -60,7 +60,7 @@ func (m *manager) Configure(conf map[string]interface{}) error { } // New creates a new manager for the 'machine' authentication. -func New(conf map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, conf map[string]interface{}) (auth.Manager, error) { m := &manager{} err := m.Configure(conf) if err != nil { diff --git a/pkg/auth/manager/nextcloud/nextcloud.go b/pkg/auth/manager/nextcloud/nextcloud.go index d148e80cff..502016b61d 100644 --- a/pkg/auth/manager/nextcloud/nextcloud.go +++ b/pkg/auth/manager/nextcloud/nextcloud.go @@ -76,7 +76,7 @@ func parseConfig(m map[string]interface{}) (*AuthManagerConfig, error) { } // New returns an auth manager implementation that verifies against a Nextcloud backend. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/auth/manager/nextcloud/nextcloud_test.go b/pkg/auth/manager/nextcloud/nextcloud_test.go index 2dc74e2ec0..b1998d4106 100644 --- a/pkg/auth/manager/nextcloud/nextcloud_test.go +++ b/pkg/auth/manager/nextcloud/nextcloud_test.go @@ -113,7 +113,7 @@ var _ = Describe("Nextcloud", func() { Describe("New", func() { It("returns a new instance", func() { fmt.Println(options) - _, err := nextcloud.New(options) + _, err := nextcloud.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/auth/manager/ocmshares/ocmshares.go b/pkg/auth/manager/ocmshares/ocmshares.go index 17f46c592c..b290964bee 100644 --- a/pkg/auth/manager/ocmshares/ocmshares.go +++ b/pkg/auth/manager/ocmshares/ocmshares.go @@ -59,7 +59,7 @@ func (c *config) init() { } // New creates a new ocmshares authentication manager. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { var mgr manager if err := mgr.Configure(m); err != nil { return nil, err diff --git a/pkg/auth/manager/oidc/oidc.go b/pkg/auth/manager/oidc/oidc.go index d55b6cd420..656077111d 100644 --- a/pkg/auth/manager/oidc/oidc.go +++ b/pkg/auth/manager/oidc/oidc.go @@ -104,7 +104,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns an auth manager implementation that verifies the oidc token and obtains the user claims. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { manager := &mgr{ providers: make(map[string]*oidc.Provider), } diff --git a/pkg/auth/manager/owncloudsql/owncloudsql.go b/pkg/auth/manager/owncloudsql/owncloudsql.go index d8e214d48f..2c7d9277bd 100644 --- a/pkg/auth/manager/owncloudsql/owncloudsql.go +++ b/pkg/auth/manager/owncloudsql/owncloudsql.go @@ -65,7 +65,7 @@ type config struct { } // NewMysql returns a new auth manager connection to an owncloud mysql database. -func NewMysql(m map[string]interface{}) (auth.Manager, error) { +func NewMysql(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/auth/manager/publicshares/publicshares.go b/pkg/auth/manager/publicshares/publicshares.go index cfbc11a71f..2b0f48d8f0 100644 --- a/pkg/auth/manager/publicshares/publicshares.go +++ b/pkg/auth/manager/publicshares/publicshares.go @@ -59,7 +59,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a new auth Manager. -func New(m map[string]interface{}) (auth.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/auth/manager/registry/registry.go b/pkg/auth/manager/registry/registry.go index b06d3f7495..f3b38b0acb 100644 --- a/pkg/auth/manager/registry/registry.go +++ b/pkg/auth/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/auth" +import ( + "context" + + "github.com/cs3org/reva/pkg/auth" +) // NewFunc is the function that auth implementations // should register to at init time. -type NewFunc func(map[string]interface{}) (auth.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (auth.Manager, error) // NewFuncs is a map containing all the registered auth managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/auth/registry/registry/registry.go b/pkg/auth/registry/registry/registry.go index 14135b4d83..b2709f3fe4 100644 --- a/pkg/auth/registry/registry/registry.go +++ b/pkg/auth/registry/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/auth" +import ( + "context" + + "github.com/cs3org/reva/pkg/auth" +) // NewFunc is the function that auth registry implementations // should register at init time. -type NewFunc func(map[string]interface{}) (auth.Registry, error) +type NewFunc func(context.Context, map[string]interface{}) (auth.Registry, error) // NewFuncs is a map containing all the registered auth registries. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/auth/registry/static/static.go b/pkg/auth/registry/static/static.go index 6beef10be0..852b1f4cac 100644 --- a/pkg/auth/registry/static/static.go +++ b/pkg/auth/registry/static/static.go @@ -79,7 +79,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns an implementation of the auth.Registry interface. -func New(m map[string]interface{}) (auth.Registry, error) { +func New(ctx context.Context, m map[string]interface{}) (auth.Registry, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/cbox/group/rest/rest.go b/pkg/cbox/group/rest/rest.go index 43345f4093..44d2863622 100644 --- a/pkg/cbox/group/rest/rest.go +++ b/pkg/cbox/group/rest/rest.go @@ -109,7 +109,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a user manager implementation that makes calls to the GRAPPA API. -func New(m map[string]interface{}) (group.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (group.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/cbox/preferences/sql/sql.go b/pkg/cbox/preferences/sql/sql.go index 551fbabcbf..680a1fcb91 100644 --- a/pkg/cbox/preferences/sql/sql.go +++ b/pkg/cbox/preferences/sql/sql.go @@ -48,7 +48,7 @@ type mgr struct { } // New returns an instance of the cbox sql preferences manager. -func New(m map[string]interface{}) (preferences.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (preferences.Manager, error) { c := &config{} if err := mapstructure.Decode(m, c); err != nil { return nil, err diff --git a/pkg/cbox/publicshare/sql/sql.go b/pkg/cbox/publicshare/sql/sql.go index aaefa85dac..0b81b4d025 100644 --- a/pkg/cbox/publicshare/sql/sql.go +++ b/pkg/cbox/publicshare/sql/sql.go @@ -108,7 +108,7 @@ func (m *manager) startJanitorRun() { } // New returns a new public share manager. -func New(m map[string]interface{}) (publicshare.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (publicshare.Manager, error) { c := &config{} if err := mapstructure.Decode(m, c); err != nil { return nil, err diff --git a/pkg/cbox/share/sql/sql.go b/pkg/cbox/share/sql/sql.go index 957b697943..0a87d641c9 100644 --- a/pkg/cbox/share/sql/sql.go +++ b/pkg/cbox/share/sql/sql.go @@ -77,7 +77,7 @@ type mgr struct { } // New returns a new share manager. -func New(m map[string]interface{}) (share.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (share.Manager, error) { c, err := parseConfig(m) if err != nil { err = errors.Wrap(err, "error creating a new manager") diff --git a/pkg/cbox/storage/eoshomewrapper/eoshomewrapper.go b/pkg/cbox/storage/eoshomewrapper/eoshomewrapper.go index 6c46c6764f..2737b0ecc5 100644 --- a/pkg/cbox/storage/eoshomewrapper/eoshomewrapper.go +++ b/pkg/cbox/storage/eoshomewrapper/eoshomewrapper.go @@ -65,14 +65,14 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, string, error) { // New returns an implementation of the storage.FS interface that forms a wrapper // around separate connections to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, t, err := parseConfig(m) if err != nil { return nil, err } c.EnableHome = true - eos, err := eosfs.NewEOSFS(c) + eos, err := eosfs.NewEOSFS(ctx, c) if err != nil { return nil, err } diff --git a/pkg/cbox/storage/eoswrapper/eoswrapper.go b/pkg/cbox/storage/eoswrapper/eoswrapper.go index 5126f7f300..79663ff590 100644 --- a/pkg/cbox/storage/eoswrapper/eoswrapper.go +++ b/pkg/cbox/storage/eoswrapper/eoswrapper.go @@ -82,13 +82,13 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, string, error) { // New returns an implementation of the storage.FS interface that forms a wrapper // around separate connections to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, t, err := parseConfig(m) if err != nil { return nil, err } - eos, err := eosfs.NewEOSFS(c) + eos, err := eosfs.NewEOSFS(ctx, c) if err != nil { return nil, err } diff --git a/pkg/cbox/user/rest/rest.go b/pkg/cbox/user/rest/rest.go index d25790844b..72864cc7e7 100644 --- a/pkg/cbox/user/rest/rest.go +++ b/pkg/cbox/user/rest/rest.go @@ -107,7 +107,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a user manager implementation that makes calls to the GRAPPA API. -func New(m map[string]interface{}) (user.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (user.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/datatx/manager/rclone/rclone.go b/pkg/datatx/manager/rclone/rclone.go index 932677a106..244bed0e20 100644 --- a/pkg/datatx/manager/rclone/rclone.go +++ b/pkg/datatx/manager/rclone/rclone.go @@ -102,7 +102,7 @@ type endpoint struct { } // New returns a new rclone driver. -func New(m map[string]interface{}) (txdriver.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (txdriver.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/datatx/manager/registry/registry.go b/pkg/datatx/manager/registry/registry.go index d19a91cdda..821537accf 100644 --- a/pkg/datatx/manager/registry/registry.go +++ b/pkg/datatx/manager/registry/registry.go @@ -19,12 +19,14 @@ package registry import ( + "context" + "github.com/cs3org/reva/pkg/datatx" ) // NewFunc is the function that datatx implementations // should register at init time. -type NewFunc func(map[string]interface{}) (datatx.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (datatx.Manager, error) // NewFuncs is a map containing all the registered datatx backends. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/datatx/repository/json/json.go b/pkg/datatx/repository/json/json.go index 7fcf18cb78..3f121bbff0 100644 --- a/pkg/datatx/repository/json/json.go +++ b/pkg/datatx/repository/json/json.go @@ -19,6 +19,7 @@ package json import ( + "context" "encoding/json" "io" "os" @@ -66,7 +67,7 @@ func (c *config) init() { } // New returns a json storage driver. -func New(m map[string]interface{}) (datatx.Repository, error) { +func New(ctx context.Context, m map[string]interface{}) (datatx.Repository, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/datatx/repository/registry/registry.go b/pkg/datatx/repository/registry/registry.go index 66dceb7d6a..daaa7e59d7 100644 --- a/pkg/datatx/repository/registry/registry.go +++ b/pkg/datatx/repository/registry/registry.go @@ -19,12 +19,14 @@ package registry import ( + "context" + "github.com/cs3org/reva/pkg/datatx" ) // NewFunc is the function that datatx repository implementations // should register at init time. -type NewFunc func(map[string]interface{}) (datatx.Repository, error) +type NewFunc func(context.Context, map[string]interface{}) (datatx.Repository, error) // NewFuncs is a map containing all the registered datatx repository backends. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/group/manager/json/json.go b/pkg/group/manager/json/json.go index bf46604463..1df0a407ac 100644 --- a/pkg/group/manager/json/json.go +++ b/pkg/group/manager/json/json.go @@ -64,7 +64,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a group manager implementation that reads a json file to provide group metadata. -func New(m map[string]interface{}) (group.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (group.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/group/manager/json/json_test.go b/pkg/group/manager/json/json_test.go index 97da54f984..abb9e46625 100644 --- a/pkg/group/manager/json/json_test.go +++ b/pkg/group/manager/json/json_test.go @@ -58,7 +58,7 @@ func TestUserManager(t *testing.T) { input := map[string]interface{}{ "groups": file.Name(), } - _, err = New(input) + _, err = New(context.Background(), input) if err == nil { t.Fatalf("no error (but we expected one) while get manager") } @@ -86,7 +86,7 @@ func TestUserManager(t *testing.T) { input = map[string]interface{}{ "groups": file.Name(), } - manager, _ := New(input) + manager, _ := New(context.Background(), input) // setup test data gid := &grouppb.GroupId{OpaqueId: "sailing-lovers"} diff --git a/pkg/group/manager/ldap/ldap.go b/pkg/group/manager/ldap/ldap.go index d9d7c164cc..fb8e347f15 100644 --- a/pkg/group/manager/ldap/ldap.go +++ b/pkg/group/manager/ldap/ldap.go @@ -99,7 +99,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a group manager implementation that connects to a LDAP server to provide group metadata. -func New(m map[string]interface{}) (group.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (group.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/group/manager/registry/registry.go b/pkg/group/manager/registry/registry.go index 0fe4ebce4d..f8f523b60a 100644 --- a/pkg/group/manager/registry/registry.go +++ b/pkg/group/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/group" +import ( + "context" + + "github.com/cs3org/reva/pkg/group" +) // NewFunc is the function that group managers // should register at init time. -type NewFunc func(map[string]interface{}) (group.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (group.Manager, error) // NewFuncs is a map containing all the registered group managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/ocm/invite/repository/json/json.go b/pkg/ocm/invite/repository/json/json.go index 602506e2ff..ea4c3e8687 100644 --- a/pkg/ocm/invite/repository/json/json.go +++ b/pkg/ocm/invite/repository/json/json.go @@ -68,7 +68,7 @@ func (c *config) init() error { } // New returns a new invite manager object. -func New(m map[string]interface{}) (invite.Repository, error) { +func New(ctx context.Context, m map[string]interface{}) (invite.Repository, error) { config, err := parseConfig(m) if err != nil { return nil, errors.Wrap(err, "error parsing config for json invite repository") diff --git a/pkg/ocm/invite/repository/memory/memory.go b/pkg/ocm/invite/repository/memory/memory.go index 41b98ad5b9..cd81496d7c 100644 --- a/pkg/ocm/invite/repository/memory/memory.go +++ b/pkg/ocm/invite/repository/memory/memory.go @@ -37,7 +37,7 @@ func init() { } // New returns a new invite manager. -func New(m map[string]interface{}) (invite.Repository, error) { +func New(ctx context.Context, m map[string]interface{}) (invite.Repository, error) { return &manager{ Invites: sync.Map{}, AcceptedUsers: sync.Map{}, diff --git a/pkg/ocm/invite/repository/registry/registry.go b/pkg/ocm/invite/repository/registry/registry.go index a4f49d7583..e618984e59 100644 --- a/pkg/ocm/invite/repository/registry/registry.go +++ b/pkg/ocm/invite/repository/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/ocm/invite" +import ( + "context" + + "github.com/cs3org/reva/pkg/ocm/invite" +) // NewFunc is the function that invite repositories // should register at init time. -type NewFunc func(map[string]interface{}) (invite.Repository, error) +type NewFunc func(context.Context, map[string]interface{}) (invite.Repository, error) // NewFuncs is a map containing all the registered invite repositories. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/ocm/invite/repository/sql/sql.go b/pkg/ocm/invite/repository/sql/sql.go index 4fbaacf049..7746796da3 100644 --- a/pkg/ocm/invite/repository/sql/sql.go +++ b/pkg/ocm/invite/repository/sql/sql.go @@ -79,7 +79,7 @@ func parseConfig(c map[string]interface{}) (*config, error) { } // New creates a sql repository for ocm tokens and users. -func New(c map[string]interface{}) (invite.Repository, error) { +func New(ctx context.Context, c map[string]interface{}) (invite.Repository, error) { conf, err := parseConfig(c) if err != nil { return nil, errors.Wrap(err, "sql: error parsing config") diff --git a/pkg/ocm/provider/authorizer/json/json.go b/pkg/ocm/provider/authorizer/json/json.go index e4592871c0..cf6839e5dd 100644 --- a/pkg/ocm/provider/authorizer/json/json.go +++ b/pkg/ocm/provider/authorizer/json/json.go @@ -41,7 +41,7 @@ func init() { } // New returns a new authorizer object. -func New(m map[string]interface{}) (provider.Authorizer, error) { +func New(ctx context.Context, m map[string]interface{}) (provider.Authorizer, error) { c := &config{} if err := mapstructure.Decode(m, c); err != nil { err = errors.Wrap(err, "error decoding conf") diff --git a/pkg/ocm/provider/authorizer/mentix/mentix.go b/pkg/ocm/provider/authorizer/mentix/mentix.go index c82429f121..9c165c1a5e 100644 --- a/pkg/ocm/provider/authorizer/mentix/mentix.go +++ b/pkg/ocm/provider/authorizer/mentix/mentix.go @@ -49,7 +49,7 @@ type Client struct { } // New returns a new authorizer object. -func New(m map[string]interface{}) (provider.Authorizer, error) { +func New(ctx context.Context, m map[string]interface{}) (provider.Authorizer, error) { c := &config{} if err := mapstructure.Decode(m, c); err != nil { err = errors.Wrap(err, "error decoding conf") diff --git a/pkg/ocm/provider/authorizer/open/open.go b/pkg/ocm/provider/authorizer/open/open.go index 38fd828865..a9f6feefd0 100644 --- a/pkg/ocm/provider/authorizer/open/open.go +++ b/pkg/ocm/provider/authorizer/open/open.go @@ -37,7 +37,7 @@ func init() { } // New returns a new authorizer object. -func New(m map[string]interface{}) (provider.Authorizer, error) { +func New(ctx context.Context, m map[string]interface{}) (provider.Authorizer, error) { c := &config{} if err := mapstructure.Decode(m, c); err != nil { err = errors.Wrap(err, "error decoding conf") diff --git a/pkg/ocm/provider/authorizer/registry/registry.go b/pkg/ocm/provider/authorizer/registry/registry.go index a20292c05d..c9f4a1af09 100644 --- a/pkg/ocm/provider/authorizer/registry/registry.go +++ b/pkg/ocm/provider/authorizer/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/ocm/provider" +import ( + "context" + + "github.com/cs3org/reva/pkg/ocm/provider" +) // NewFunc is the function that provider authorizers // should register at init time. -type NewFunc func(map[string]interface{}) (provider.Authorizer, error) +type NewFunc func(context.Context, map[string]interface{}) (provider.Authorizer, error) // NewFuncs is a map containing all the registered provider authorizers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/ocm/share/repository/json/json.go b/pkg/ocm/share/repository/json/json.go index 96158c3c1e..5517999335 100644 --- a/pkg/ocm/share/repository/json/json.go +++ b/pkg/ocm/share/repository/json/json.go @@ -45,7 +45,7 @@ func init() { } // New returns a new authorizer object. -func New(m map[string]interface{}) (share.Repository, error) { +func New(ctx context.Context, m map[string]interface{}) (share.Repository, error) { c, err := parseConfig(m) if err != nil { err = errors.Wrap(err, "error creating a new manager") diff --git a/pkg/ocm/share/repository/nextcloud/nextcloud.go b/pkg/ocm/share/repository/nextcloud/nextcloud.go index 76825d99e5..7fe1932069 100644 --- a/pkg/ocm/share/repository/nextcloud/nextcloud.go +++ b/pkg/ocm/share/repository/nextcloud/nextcloud.go @@ -107,7 +107,7 @@ func parseConfig(m map[string]interface{}) (*ShareManagerConfig, error) { } // New returns a share manager implementation that verifies against a Nextcloud backend. -func New(m map[string]interface{}) (share.Repository, error) { +func New(ctx context.Context, m map[string]interface{}) (share.Repository, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go index b77aeaecdf..1f53dad8bc 100644 --- a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go +++ b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go @@ -113,7 +113,7 @@ var _ = Describe("Nextcloud", func() { Describe("New", func() { It("returns a new instance", func() { - _, err := nextcloud.New(options) + _, err := nextcloud.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/ocm/share/repository/registry/registry.go b/pkg/ocm/share/repository/registry/registry.go index 38ac750b24..7a43771c46 100644 --- a/pkg/ocm/share/repository/registry/registry.go +++ b/pkg/ocm/share/repository/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/ocm/share" +import ( + "context" + + "github.com/cs3org/reva/pkg/ocm/share" +) // NewFunc is the function that share repositories // should register at init time. -type NewFunc func(map[string]interface{}) (share.Repository, error) +type NewFunc func(context.Context, map[string]interface{}) (share.Repository, error) // NewFuncs is a map containing all the registered share repositories. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/ocm/share/repository/sql/sql.go b/pkg/ocm/share/repository/sql/sql.go index ec26261d28..980e08d55d 100644 --- a/pkg/ocm/share/repository/sql/sql.go +++ b/pkg/ocm/share/repository/sql/sql.go @@ -45,12 +45,12 @@ func init() { } // New creates a Repository with a SQL driver. -func New(c map[string]interface{}) (share.Repository, error) { +func New(ctx context.Context, c map[string]interface{}) (share.Repository, error) { conf, err := parseConfig(c) if err != nil { return nil, err } - return NewFromConfig(conf) + return NewFromConfig(ctx, conf) } type mgr struct { @@ -60,7 +60,7 @@ type mgr struct { } // NewFromConfig creates a Repository with a SQL driver using the given config. -func NewFromConfig(conf *config) (share.Repository, error) { +func NewFromConfig(ctx context.Context, conf *config) (share.Repository, error) { if conf.now == nil { conf.now = time.Now } diff --git a/pkg/ocm/share/repository/sql/sql_test.go b/pkg/ocm/share/repository/sql/sql_test.go index 207bd82b35..33a2eb53d7 100644 --- a/pkg/ocm/share/repository/sql/sql_test.go +++ b/pkg/ocm/share/repository/sql/sql_test.go @@ -615,7 +615,7 @@ func TestGetShare(t *testing.T) { _, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), @@ -1054,7 +1054,7 @@ func TestListShares(t *testing.T) { _, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), @@ -1246,7 +1246,7 @@ func TestStoreShare(t *testing.T) { engine, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), @@ -1517,7 +1517,7 @@ func TestUpdateShare(t *testing.T) { engine, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := NewFromConfig( + r, err := NewFromConfig(ctx, &config{ DBUsername: "root", DBPassword: "", @@ -1687,7 +1687,7 @@ func TestGetReceivedShare(t *testing.T) { _, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), @@ -1799,7 +1799,7 @@ func TestUpdateReceivedShare(t *testing.T) { engine, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := NewFromConfig(&config{ + r, err := NewFromConfig(ctx, &config{ DBUsername: "root", DBPassword: "", DBAddress: fmt.Sprintf("%s:%d", address, port), @@ -2041,7 +2041,7 @@ func TestListReceviedShares(t *testing.T) { _, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), @@ -2189,7 +2189,7 @@ func TestStoreReceivedShare(t *testing.T) { engine, port, cleanup := startDatabase(ctx, tables) t.Cleanup(cleanup) - r, err := New(map[string]interface{}{ + r, err := New(context.Background(), map[string]interface{}{ "db_username": "root", "db_password": "", "db_address": fmt.Sprintf("%s:%d", address, port), diff --git a/pkg/ocm/storage/outcoming/ocm.go b/pkg/ocm/storage/outcoming/ocm.go index 5c179d4e16..50828f40b4 100644 --- a/pkg/ocm/storage/outcoming/ocm.go +++ b/pkg/ocm/storage/outcoming/ocm.go @@ -72,7 +72,7 @@ func (c *config) init() { } // New creates an OCM storage driver. -func New(c map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, c map[string]interface{}) (storage.FS, error) { conf, err := parseConfig(c) if err != nil { return nil, errors.Wrapf(err, "error decoding config") diff --git a/pkg/ocm/storage/received/ocm.go b/pkg/ocm/storage/received/ocm.go index 2a865e1508..405f5ab2fc 100644 --- a/pkg/ocm/storage/received/ocm.go +++ b/pkg/ocm/storage/received/ocm.go @@ -69,7 +69,7 @@ func (c *config) init() { } // New creates an OCM storage driver. -func New(c map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, c map[string]interface{}) (storage.FS, error) { conf, err := parseConfig(c) if err != nil { return nil, errors.Wrapf(err, "error decoding config") diff --git a/pkg/permission/manager/demo/demo.go b/pkg/permission/manager/demo/demo.go index cbef4d5bfc..371f9748e8 100644 --- a/pkg/permission/manager/demo/demo.go +++ b/pkg/permission/manager/demo/demo.go @@ -19,6 +19,8 @@ package demo import ( + "context" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/permission" "github.com/cs3org/reva/pkg/permission/manager/registry" @@ -29,7 +31,7 @@ func init() { } // New returns a new demo permission manager. -func New(c map[string]interface{}) (permission.Manager, error) { +func New(_ context.Context, _ map[string]interface{}) (permission.Manager, error) { return manager{}, nil } diff --git a/pkg/permission/manager/registry/registry.go b/pkg/permission/manager/registry/registry.go index 8ef15a042d..b0478ff10e 100644 --- a/pkg/permission/manager/registry/registry.go +++ b/pkg/permission/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/permission" +import ( + "context" + + "github.com/cs3org/reva/pkg/permission" +) // NewFunc is the function that permission managers // should register at init time. -type NewFunc func(map[string]interface{}) (permission.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (permission.Manager, error) // NewFuncs is a map containing all the registered share managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/preferences/memory/memory.go b/pkg/preferences/memory/memory.go index 72cccf5789..10ff617fa3 100644 --- a/pkg/preferences/memory/memory.go +++ b/pkg/preferences/memory/memory.go @@ -38,7 +38,7 @@ type mgr struct { } // New returns an instance of the in-memory preferences manager. -func New(m map[string]interface{}) (preferences.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (preferences.Manager, error) { return &mgr{keys: make(map[string]map[string]string)}, nil } diff --git a/pkg/preferences/registry/registry.go b/pkg/preferences/registry/registry.go index c40277ba22..15dad6fd7e 100644 --- a/pkg/preferences/registry/registry.go +++ b/pkg/preferences/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/preferences" +import ( + "context" + + "github.com/cs3org/reva/pkg/preferences" +) // NewFunc is the function that preferences implementations // should register at init time. -type NewFunc func(map[string]interface{}) (preferences.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (preferences.Manager, error) // NewFuncs is a map containing all the registered preferences implementations. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/publicshare/manager/json/json.go b/pkg/publicshare/manager/json/json.go index 11419b474f..b8a0a00195 100644 --- a/pkg/publicshare/manager/json/json.go +++ b/pkg/publicshare/manager/json/json.go @@ -49,7 +49,7 @@ func init() { } // New returns a new filesystem public shares manager. -func New(c map[string]interface{}) (publicshare.Manager, error) { +func New(ctx context.Context, c map[string]interface{}) (publicshare.Manager, error) { conf := &config{} if err := mapstructure.Decode(c, conf); err != nil { return nil, err diff --git a/pkg/publicshare/manager/memory/memory.go b/pkg/publicshare/manager/memory/memory.go index 8af0b16bcd..cff253f0a3 100644 --- a/pkg/publicshare/manager/memory/memory.go +++ b/pkg/publicshare/manager/memory/memory.go @@ -43,7 +43,7 @@ func init() { } // New returns a new memory manager. -func New(c map[string]interface{}) (publicshare.Manager, error) { +func New(_ context.Context, c map[string]interface{}) (publicshare.Manager, error) { return &manager{ shares: sync.Map{}, }, nil diff --git a/pkg/publicshare/manager/registry/registry.go b/pkg/publicshare/manager/registry/registry.go index 77bbb2a640..aa99b0d94a 100644 --- a/pkg/publicshare/manager/registry/registry.go +++ b/pkg/publicshare/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/publicshare" +import ( + "context" + + "github.com/cs3org/reva/pkg/publicshare" +) // NewFunc is the function that share managers // should register at init time. -type NewFunc func(map[string]interface{}) (publicshare.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (publicshare.Manager, error) // NewFuncs is a map containing all the registered share managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/rgrpc/rgrpc.go b/pkg/rgrpc/rgrpc.go index 5508bcb36a..96cf258fc1 100644 --- a/pkg/rgrpc/rgrpc.go +++ b/pkg/rgrpc/rgrpc.go @@ -19,11 +19,13 @@ package rgrpc import ( + "context" "fmt" "io" "net" "github.com/cs3org/reva/cmd/revad/pkg/config" + "github.com/cs3org/reva/pkg/appctx" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "github.com/pkg/errors" "github.com/rs/zerolog" @@ -63,7 +65,7 @@ func Register(name string, newFunc NewService) { // NewService is the function that gRPC services need to register at init time. // It returns an io.Closer to close the service and a list of service endpoints that need to be unprotected. -type NewService func(conf map[string]interface{}) (Service, error) +type NewService func(context.Context, map[string]any) (Service, error) // Service represents a grpc service. type Service interface { @@ -85,7 +87,7 @@ type Server struct { services map[string]Service } -func InitServices(services map[string]config.ServicesConfig) (map[string]Service, error) { +func InitServices(ctx context.Context, services map[string]config.ServicesConfig) (map[string]Service, error) { s := make(map[string]Service) for name, cfg := range services { new, ok := Services[name] @@ -95,7 +97,9 @@ func InitServices(services map[string]config.ServicesConfig) (map[string]Service if cfg.DriversNumber() > 1 { return nil, fmt.Errorf("rgrp: service %s cannot have more than one driver in same server", name) } - svc, err := new(cfg[0].Config) + log := appctx.GetLogger(ctx).With().Str("service", name).Logger() + ctx := appctx.WithLogger(ctx, &log) + svc, err := new(ctx, cfg[0].Config) if err != nil { return nil, errors.Wrapf(err, "rgrpc: grpc service %s could not be started,", name) } diff --git a/pkg/rhttp/datatx/manager/registry/registry.go b/pkg/rhttp/datatx/manager/registry/registry.go index 683bb2e10a..6dc1fd2b6b 100644 --- a/pkg/rhttp/datatx/manager/registry/registry.go +++ b/pkg/rhttp/datatx/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/rhttp/datatx" +import ( + "context" + + "github.com/cs3org/reva/pkg/rhttp/datatx" +) // NewFunc is the function that data transfer implementations // should register at init time. -type NewFunc func(map[string]interface{}) (datatx.DataTX, error) +type NewFunc func(context.Context, map[string]interface{}) (datatx.DataTX, error) // NewFuncs is a map containing all the registered data transfers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/rhttp/datatx/manager/simple/simple.go b/pkg/rhttp/datatx/manager/simple/simple.go index c32aa43870..68ce1ea16b 100644 --- a/pkg/rhttp/datatx/manager/simple/simple.go +++ b/pkg/rhttp/datatx/manager/simple/simple.go @@ -19,6 +19,7 @@ package simple import ( + "context" "net/http" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" @@ -52,7 +53,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a datatx manager implementation that relies on HTTP PUT/GET. -func New(m map[string]interface{}) (datatx.DataTX, error) { +func New(ctx context.Context, m map[string]interface{}) (datatx.DataTX, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/rhttp/datatx/manager/spaces/spaces.go b/pkg/rhttp/datatx/manager/spaces/spaces.go index 9bd1f11606..ae296b1131 100644 --- a/pkg/rhttp/datatx/manager/spaces/spaces.go +++ b/pkg/rhttp/datatx/manager/spaces/spaces.go @@ -19,6 +19,7 @@ package spaces import ( + "context" "net/http" "path" "strings" @@ -56,7 +57,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a datatx manager implementation that relies on HTTP PUT/GET. -func New(m map[string]interface{}) (datatx.DataTX, error) { +func New(ctx context.Context, m map[string]interface{}) (datatx.DataTX, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/rhttp/datatx/manager/tus/tus.go b/pkg/rhttp/datatx/manager/tus/tus.go index a8284443d5..4505c6f76c 100644 --- a/pkg/rhttp/datatx/manager/tus/tus.go +++ b/pkg/rhttp/datatx/manager/tus/tus.go @@ -19,6 +19,7 @@ package tus import ( + "context" "net/http" "github.com/cs3org/reva/pkg/errtypes" @@ -51,7 +52,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a datatx manager implementation that relies on HTTP PUT/GET. -func New(m map[string]interface{}) (datatx.DataTX, error) { +func New(ctx context.Context, m map[string]interface{}) (datatx.DataTX, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/rhttp/global/global.go b/pkg/rhttp/global/global.go index 8d90b5cf27..41fb45e6a2 100644 --- a/pkg/rhttp/global/global.go +++ b/pkg/rhttp/global/global.go @@ -19,9 +19,8 @@ package global import ( + "context" "net/http" - - "github.com/rs/zerolog" ) // NewMiddlewares contains all the registered new middleware functions. @@ -47,7 +46,7 @@ func Register(name string, newFunc NewService) { } // NewService is the function that HTTP services need to register at init time. -type NewService func(conf map[string]interface{}, log *zerolog.Logger) (Service, error) +type NewService func(context.Context, map[string]interface{}) (Service, error) // Service represents a HTTP service. type Service interface { diff --git a/pkg/rhttp/rhttp.go b/pkg/rhttp/rhttp.go index e5d796f917..37fd52dd51 100644 --- a/pkg/rhttp/rhttp.go +++ b/pkg/rhttp/rhttp.go @@ -28,6 +28,7 @@ import ( "time" "github.com/cs3org/reva/cmd/revad/pkg/config" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/rhttp/global" rtrace "github.com/cs3org/reva/pkg/trace" "github.com/pkg/errors" @@ -62,7 +63,7 @@ func WithLogger(log zerolog.Logger) Config { } } -func InitServices(services map[string]config.ServicesConfig, log *zerolog.Logger) (map[string]global.Service, error) { +func InitServices(ctx context.Context, services map[string]config.ServicesConfig) (map[string]global.Service, error) { s := make(map[string]global.Service) for name, cfg := range services { new, ok := global.Services[name] @@ -72,8 +73,9 @@ func InitServices(services map[string]config.ServicesConfig, log *zerolog.Logger if cfg.DriversNumber() > 1 { return nil, fmt.Errorf("service %s cannot have more than one driver in the same server", name) } - log := log.With().Str("service", name).Logger() - svc, err := new(cfg[0].Config, &log) + log := appctx.GetLogger(ctx).With().Str("service", name).Logger() + ctx := appctx.WithLogger(ctx, &log) + svc, err := new(ctx, cfg[0].Config) if err != nil { return nil, errors.Wrapf(err, "http service %s could not be started", name) } diff --git a/pkg/share/manager/json/json.go b/pkg/share/manager/json/json.go index 40a0ee63e6..a301876e6b 100644 --- a/pkg/share/manager/json/json.go +++ b/pkg/share/manager/json/json.go @@ -45,7 +45,7 @@ func init() { } // New returns a new mgr. -func New(m map[string]interface{}) (share.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (share.Manager, error) { c, err := parseConfig(m) if err != nil { err = errors.Wrap(err, "error creating a new manager") diff --git a/pkg/share/manager/memory/memory.go b/pkg/share/manager/memory/memory.go index fd7b9a074e..2646744a74 100644 --- a/pkg/share/manager/memory/memory.go +++ b/pkg/share/manager/memory/memory.go @@ -44,7 +44,7 @@ func init() { } // New returns a new manager. -func New(c map[string]interface{}) (share.Manager, error) { +func New(ctx context.Context, c map[string]interface{}) (share.Manager, error) { state := map[string]map[*collaboration.ShareId]collaboration.ShareState{} return &manager{ shareState: state, diff --git a/pkg/share/manager/registry/registry.go b/pkg/share/manager/registry/registry.go index 8fa161c64f..8eda3f3c34 100644 --- a/pkg/share/manager/registry/registry.go +++ b/pkg/share/manager/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/share" +import ( + "context" + + "github.com/cs3org/reva/pkg/share" +) // NewFunc is the function that share managers // should register at init time. -type NewFunc func(map[string]interface{}) (share.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (share.Manager, error) // NewFuncs is a map containing all the registered share managers. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/share/manager/sql/sql.go b/pkg/share/manager/sql/sql.go index ad871ccf59..13300d80ef 100644 --- a/pkg/share/manager/sql/sql.go +++ b/pkg/share/manager/sql/sql.go @@ -70,7 +70,7 @@ type mgr struct { } // NewMysql returns a new share manager connection to a mysql database. -func NewMysql(m map[string]interface{}) (share.Manager, error) { +func NewMysql(ctx context.Context, m map[string]interface{}) (share.Manager, error) { c, err := parseConfig(m) if err != nil { err = errors.Wrap(err, "error creating a new manager") diff --git a/pkg/storage/fs/cback/cback.go b/pkg/storage/fs/cback/cback.go index aab979dd1a..4c4607eaae 100644 --- a/pkg/storage/fs/cback/cback.go +++ b/pkg/storage/fs/cback/cback.go @@ -50,7 +50,7 @@ func init() { // New returns an implementation to the storage.FS interface that talks to // cback. -func New(m map[string]interface{}) (fs storage.FS, err error) { +func New(ctx context.Context, m map[string]interface{}) (fs storage.FS, err error) { c := &Options{} if err = mapstructure.Decode(m, c); err != nil { return nil, errors.Wrap(err, "Error Decoding Configuration") diff --git a/pkg/storage/fs/cephfs/cephfs.go b/pkg/storage/fs/cephfs/cephfs.go index e710192ca9..9132bab87b 100644 --- a/pkg/storage/fs/cephfs/cephfs.go +++ b/pkg/storage/fs/cephfs/cephfs.go @@ -64,7 +64,7 @@ func init() { // New returns an implementation to of the storage.FS interface that talk to // a ceph filesystem. -func New(m map[string]interface{}) (fs storage.FS, err error) { +func New(ctx context.Context, m map[string]interface{}) (fs storage.FS, err error) { c := &Options{} if err = mapstructure.Decode(m, c); err != nil { return nil, errors.Wrap(err, "error decoding conf") diff --git a/pkg/storage/fs/cephfs/unsupported.go b/pkg/storage/fs/cephfs/unsupported.go index b0fa934d28..9b25894299 100644 --- a/pkg/storage/fs/cephfs/unsupported.go +++ b/pkg/storage/fs/cephfs/unsupported.go @@ -22,6 +22,8 @@ package cephfs import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/pkg/errors" @@ -33,6 +35,6 @@ func init() { // New returns an implementation to of the storage.FS interface that talk to // a ceph filesystem. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { return nil, errors.New("cephfs: revad was compiled without CephFS support") } diff --git a/pkg/storage/fs/eos/eos.go b/pkg/storage/fs/eos/eos.go index e83a638f00..3847c66b6d 100644 --- a/pkg/storage/fs/eos/eos.go +++ b/pkg/storage/fs/eos/eos.go @@ -19,6 +19,8 @@ package eos import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/eosfs" @@ -46,11 +48,11 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, error) { } // New returns a new implementation of the storage.FS interface that connects to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err } - return eosfs.NewEOSFS(c) + return eosfs.NewEOSFS(ctx, c) } diff --git a/pkg/storage/fs/eosgrpc/eosgrpc.go b/pkg/storage/fs/eosgrpc/eosgrpc.go index 52ba856b8c..3014335cb1 100644 --- a/pkg/storage/fs/eosgrpc/eosgrpc.go +++ b/pkg/storage/fs/eosgrpc/eosgrpc.go @@ -19,6 +19,8 @@ package eosgrpc import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/eosfs" @@ -46,12 +48,12 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, error) { } // New returns a new implementation of the storage.FS interface that connects to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.UseGRPC = true - return eosfs.NewEOSFS(c) + return eosfs.NewEOSFS(ctx, c) } diff --git a/pkg/storage/fs/eosgrpchome/eosgrpchome.go b/pkg/storage/fs/eosgrpchome/eosgrpchome.go index 2d19ca62fe..4b07e604fa 100644 --- a/pkg/storage/fs/eosgrpchome/eosgrpchome.go +++ b/pkg/storage/fs/eosgrpchome/eosgrpchome.go @@ -19,6 +19,8 @@ package eosgrpchome import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/eosfs" @@ -46,7 +48,7 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, error) { } // New returns a new implementation of the storage.FS interface that connects to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err @@ -54,5 +56,5 @@ func New(m map[string]interface{}) (storage.FS, error) { c.UseGRPC = true c.EnableHome = true - return eosfs.NewEOSFS(c) + return eosfs.NewEOSFS(ctx, c) } diff --git a/pkg/storage/fs/eoshome/eoshome.go b/pkg/storage/fs/eoshome/eoshome.go index b6449961ae..6fcf4abe21 100644 --- a/pkg/storage/fs/eoshome/eoshome.go +++ b/pkg/storage/fs/eoshome/eoshome.go @@ -19,6 +19,8 @@ package eoshome import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/eosfs" @@ -46,12 +48,12 @@ func parseConfig(m map[string]interface{}) (*eosfs.Config, error) { } // New returns a new implementation of the storage.FS interface that connects to EOS. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err } c.EnableHome = true - return eosfs.NewEOSFS(c) + return eosfs.NewEOSFS(ctx, c) } diff --git a/pkg/storage/fs/local/local.go b/pkg/storage/fs/local/local.go index fb057fbbef..a5b42cd241 100644 --- a/pkg/storage/fs/local/local.go +++ b/pkg/storage/fs/local/local.go @@ -19,6 +19,8 @@ package local import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/localfs" @@ -46,7 +48,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { // New returns an implementation to of the storage.FS interface that talks to // a local filesystem with user homes disabled. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/localhome/localhome.go b/pkg/storage/fs/localhome/localhome.go index 06676d2256..24cb3ffa1b 100644 --- a/pkg/storage/fs/localhome/localhome.go +++ b/pkg/storage/fs/localhome/localhome.go @@ -19,6 +19,8 @@ package localhome import ( + "context" + "github.com/cs3org/reva/pkg/storage" "github.com/cs3org/reva/pkg/storage/fs/registry" "github.com/cs3org/reva/pkg/storage/utils/localfs" @@ -47,7 +49,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { // New returns an implementation to of the storage.FS interface that talks to // a local filesystem with user homes. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go index 95fffc3750..00cda53858 100644 --- a/pkg/storage/fs/nextcloud/nextcloud.go +++ b/pkg/storage/fs/nextcloud/nextcloud.go @@ -69,7 +69,7 @@ func parseConfig(m map[string]interface{}) (*StorageDriverConfig, error) { // New returns an implementation to of the storage.FS interface that talks to // a Nextcloud instance over http. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { conf, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/nextcloud/nextcloud_test.go b/pkg/storage/fs/nextcloud/nextcloud_test.go index e194112355..cf64cf1e4e 100644 --- a/pkg/storage/fs/nextcloud/nextcloud_test.go +++ b/pkg/storage/fs/nextcloud/nextcloud_test.go @@ -115,7 +115,7 @@ var _ = Describe("Nextcloud", func() { Describe("New", func() { It("returns a new instance", func() { - _, err := nextcloud.New(options) + _, err := nextcloud.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/storage/fs/ocis/ocis.go b/pkg/storage/fs/ocis/ocis.go index 3f480b1202..252c351bc2 100644 --- a/pkg/storage/fs/ocis/ocis.go +++ b/pkg/storage/fs/ocis/ocis.go @@ -19,6 +19,7 @@ package ocis import ( + "context" "path" "github.com/cs3org/reva/pkg/storage" @@ -34,7 +35,7 @@ func init() { // New returns an implementation to of the storage.FS interface that talk to // a local filesystem. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { o, err := options.New(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/ocis/ocis_test.go b/pkg/storage/fs/ocis/ocis_test.go index 44685ec99a..be7e255882 100644 --- a/pkg/storage/fs/ocis/ocis_test.go +++ b/pkg/storage/fs/ocis/ocis_test.go @@ -19,6 +19,7 @@ package ocis_test import ( + "context" "os" "github.com/cs3org/reva/pkg/storage/fs/ocis" @@ -52,7 +53,7 @@ var _ = Describe("Ocis", func() { Describe("New", func() { It("returns a new instance", func() { - _, err := ocis.New(options) + _, err := ocis.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/storage/fs/owncloud/owncloud.go b/pkg/storage/fs/owncloud/owncloud.go index ba4cf93c39..336109c72b 100644 --- a/pkg/storage/fs/owncloud/owncloud.go +++ b/pkg/storage/fs/owncloud/owncloud.go @@ -158,7 +158,7 @@ func (c *config) init(m map[string]interface{}) { // New returns an implementation to of the storage.FS interface that talk to // a local filesystem. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/owncloudsql/owncloudsql.go b/pkg/storage/fs/owncloudsql/owncloudsql.go index 0586ba2411..dfbb051a84 100644 --- a/pkg/storage/fs/owncloudsql/owncloudsql.go +++ b/pkg/storage/fs/owncloudsql/owncloudsql.go @@ -151,7 +151,7 @@ func (c *config) init(m map[string]interface{}) { // New returns an implementation to of the storage.FS interface that talk to // a local filesystem. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/registry/registry.go b/pkg/storage/fs/registry/registry.go index 6966b8094e..0e791278ad 100644 --- a/pkg/storage/fs/registry/registry.go +++ b/pkg/storage/fs/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/storage" +import ( + "context" + + "github.com/cs3org/reva/pkg/storage" +) // NewFunc is the function that storage implementations // should register at init time. -type NewFunc func(map[string]interface{}) (storage.FS, error) +type NewFunc func(context.Context, map[string]interface{}) (storage.FS, error) // NewFuncs is a map containing all the registered storage backends. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/storage/fs/s3/s3.go b/pkg/storage/fs/s3/s3.go index dc33533c3c..6783a7cdba 100644 --- a/pkg/storage/fs/s3/s3.go +++ b/pkg/storage/fs/s3/s3.go @@ -69,7 +69,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { // New returns an implementation to of the storage.FS interface that talk to // a s3 api. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/s3ng/s3ng.go b/pkg/storage/fs/s3ng/s3ng.go index 9d34bc5428..bda1bac61e 100644 --- a/pkg/storage/fs/s3ng/s3ng.go +++ b/pkg/storage/fs/s3ng/s3ng.go @@ -19,6 +19,7 @@ package s3ng import ( + "context" "fmt" "github.com/cs3org/reva/pkg/storage" @@ -33,7 +34,7 @@ func init() { // New returns an implementation to of the storage.FS interface that talk to // a local filesystem. -func New(m map[string]interface{}) (storage.FS, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { o, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/fs/s3ng/s3ng_test.go b/pkg/storage/fs/s3ng/s3ng_test.go index 4346da78f4..107b25c0f7 100644 --- a/pkg/storage/fs/s3ng/s3ng_test.go +++ b/pkg/storage/fs/s3ng/s3ng_test.go @@ -19,6 +19,7 @@ package s3ng_test import ( + "context" "os" "github.com/cs3org/reva/pkg/storage/fs/s3ng" @@ -57,12 +58,12 @@ var _ = Describe("S3ng", func() { Describe("New", func() { It("fails on missing s3 configuration", func() { - _, err := s3ng.New(map[string]interface{}{}) + _, err := s3ng.New(context.Background(), map[string]interface{}{}) Expect(err).To(MatchError("s3 configuration incomplete")) }) It("works with complete configuration", func() { - _, err := s3ng.New(options) + _, err := s3ng.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/storage/registry/registry/registry.go b/pkg/storage/registry/registry/registry.go index 3619f4c39e..bd381d4da2 100644 --- a/pkg/storage/registry/registry/registry.go +++ b/pkg/storage/registry/registry/registry.go @@ -18,11 +18,15 @@ package registry -import "github.com/cs3org/reva/pkg/storage" +import ( + "context" + + "github.com/cs3org/reva/pkg/storage" +) // NewFunc is the function that storage broker implementations // should register at init time. -type NewFunc func(map[string]interface{}) (storage.Registry, error) +type NewFunc func(context.Context, map[string]interface{}) (storage.Registry, error) // NewFuncs is a map containing all the registered storage backends. var NewFuncs = map[string]NewFunc{} diff --git a/pkg/storage/registry/static/static.go b/pkg/storage/registry/static/static.go index 74279eca46..70382c1808 100644 --- a/pkg/storage/registry/static/static.go +++ b/pkg/storage/registry/static/static.go @@ -80,7 +80,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { // New returns an implementation of the storage.Registry interface that // redirects requests to corresponding storage drivers. -func New(m map[string]interface{}) (storage.Registry, error) { +func New(ctx context.Context, m map[string]interface{}) (storage.Registry, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/storage/registry/static/static_test.go b/pkg/storage/registry/static/static_test.go index 88ff901a1d..2f6639511e 100644 --- a/pkg/storage/registry/static/static_test.go +++ b/pkg/storage/registry/static/static_test.go @@ -34,7 +34,7 @@ var _ = Describe("Static", func() { totalProviders, rootProviders, eosProviders := 33, 31, 29 - handler, err := static.New(map[string]interface{}{ + handler, err := static.New(context.Background(), map[string]interface{}{ "home_provider": "/home", "rules": map[string]interface{}{ "/home": map[string]interface{}{ diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index f390174b3f..967ccb3893 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -161,7 +161,7 @@ type eosfs struct { } // NewEOSFS returns a storage.FS interface implementation that connects to an EOS instance. -func NewEOSFS(c *Config) (storage.FS, error) { +func NewEOSFS(ctx context.Context, c *Config) (storage.FS, error) { c.init() // bail out if keytab is not found. diff --git a/pkg/user/manager/demo/demo.go b/pkg/user/manager/demo/demo.go index 1632c1529f..caad9f7417 100644 --- a/pkg/user/manager/demo/demo.go +++ b/pkg/user/manager/demo/demo.go @@ -39,7 +39,7 @@ type manager struct { } // New returns a new user manager. -func New(m map[string]interface{}) (user.Manager, error) { +func New(_ context.Context, m map[string]interface{}) (user.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/user/manager/demo/demo_test.go b/pkg/user/manager/demo/demo_test.go index f03f02bfa0..73b736e49f 100644 --- a/pkg/user/manager/demo/demo_test.go +++ b/pkg/user/manager/demo/demo_test.go @@ -31,7 +31,7 @@ var ctx = context.Background() func TestUserManager(t *testing.T) { // get manager - manager, _ := New(nil) + manager, _ := New(context.TODO(), nil) // setup test data uidEinstein := &userpb.UserId{Idp: "http://localhost:9998", OpaqueId: "4c510ada-c86b-4815-8820-42cdf82c3d51", Type: userpb.UserType_USER_TYPE_PRIMARY} diff --git a/pkg/user/manager/json/json.go b/pkg/user/manager/json/json.go index 2ce2bef6e7..642fa038e4 100644 --- a/pkg/user/manager/json/json.go +++ b/pkg/user/manager/json/json.go @@ -63,7 +63,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a user manager implementation that reads a json file to provide user metadata. -func New(m map[string]interface{}) (user.Manager, error) { +func New(_ context.Context, m map[string]interface{}) (user.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/user/manager/json/json_test.go b/pkg/user/manager/json/json_test.go index 16760085f0..904c291ec1 100644 --- a/pkg/user/manager/json/json_test.go +++ b/pkg/user/manager/json/json_test.go @@ -57,7 +57,7 @@ func TestUserManager(t *testing.T) { input := map[string]interface{}{ "users": file.Name(), } - _, err = New(input) + _, err = New(context.TODO(), input) if err == nil { t.Fatalf("no error (but we expected one) while get manager") } @@ -85,7 +85,7 @@ func TestUserManager(t *testing.T) { input = map[string]interface{}{ "users": file.Name(), } - manager, _ := New(input) + manager, _ := New(context.TODO(), input) // setup test data uidEinstein := &userpb.UserId{Idp: "localhost", OpaqueId: "einstein", Type: userpb.UserType_USER_TYPE_PRIMARY} diff --git a/pkg/user/manager/ldap/ldap.go b/pkg/user/manager/ldap/ldap.go index 351235d6c0..7d684a7991 100644 --- a/pkg/user/manager/ldap/ldap.go +++ b/pkg/user/manager/ldap/ldap.go @@ -101,7 +101,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { } // New returns a user manager implementation that connects to a LDAP server to provide user metadata. -func New(m map[string]interface{}) (user.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (user.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/user/manager/ldap/ldap_test.go b/pkg/user/manager/ldap/ldap_test.go index f7f5644289..2866a6a337 100644 --- a/pkg/user/manager/ldap/ldap_test.go +++ b/pkg/user/manager/ldap/ldap_test.go @@ -19,12 +19,13 @@ package ldap import ( + "context" "testing" ) func TestUserManager(t *testing.T) { // negative test for parseConfig - _, err := New(map[string]interface{}{"hostname": 42}) + _, err := New(context.Background(), map[string]interface{}{"hostname": 42}) if err == nil { t.Fatal("expected error but got none") } @@ -64,7 +65,7 @@ func TestUserManager(t *testing.T) { } // positive tests for New - _, err = New(map[string]interface{}{}) + _, err = New(context.Background(), map[string]interface{}{}) if err != nil { t.Fatalf(err.Error()) } diff --git a/pkg/user/manager/nextcloud/nextcloud.go b/pkg/user/manager/nextcloud/nextcloud.go index b3524f61d8..274e02b18c 100644 --- a/pkg/user/manager/nextcloud/nextcloud.go +++ b/pkg/user/manager/nextcloud/nextcloud.go @@ -79,7 +79,7 @@ type Action struct { } // New returns a user manager implementation that reads a json file to provide user metadata. -func New(m map[string]interface{}) (user.Manager, error) { +func New(ctx context.Context, m map[string]interface{}) (user.Manager, error) { c, err := parseConfig(m) if err != nil { return nil, err diff --git a/pkg/user/manager/nextcloud/nextcloud_test.go b/pkg/user/manager/nextcloud/nextcloud_test.go index ddc3f47429..5b9190323a 100644 --- a/pkg/user/manager/nextcloud/nextcloud_test.go +++ b/pkg/user/manager/nextcloud/nextcloud_test.go @@ -113,7 +113,7 @@ var _ = Describe("Nextcloud", func() { Describe("New", func() { It("returns a new instance", func() { - _, err := nextcloud.New(options) + _, err := nextcloud.New(context.Background(), options) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/user/manager/owncloudsql/owncloudsql.go b/pkg/user/manager/owncloudsql/owncloudsql.go index 8774a5b2e5..666119ea7b 100644 --- a/pkg/user/manager/owncloudsql/owncloudsql.go +++ b/pkg/user/manager/owncloudsql/owncloudsql.go @@ -59,7 +59,7 @@ type config struct { } // NewMysql returns a new user manager connection to an owncloud mysql database. -func NewMysql(m map[string]interface{}) (user.Manager, error) { +func NewMysql(ctx context.Context, m map[string]interface{}) (user.Manager, error) { mgr := &manager{} err := mgr.Configure(m) if err != nil { diff --git a/pkg/user/manager/registry/registry.go b/pkg/user/manager/registry/registry.go index 89fc1a44e5..cce7624762 100644 --- a/pkg/user/manager/registry/registry.go +++ b/pkg/user/manager/registry/registry.go @@ -19,12 +19,14 @@ package registry import ( + "context" + "github.com/cs3org/reva/pkg/user" ) // NewFunc is the function that user managers // should register at init time. -type NewFunc func(map[string]interface{}) (user.Manager, error) +type NewFunc func(context.Context, map[string]interface{}) (user.Manager, error) // NewFuncs is a map containing all the registered user managers. var NewFuncs = map[string]NewFunc{} diff --git a/tests/integration/grpc/storageprovider_test.go b/tests/integration/grpc/storageprovider_test.go index ae705b4e7f..14e2de031e 100644 --- a/tests/integration/grpc/storageprovider_test.go +++ b/tests/integration/grpc/storageprovider_test.go @@ -498,7 +498,7 @@ var _ = Describe("storage providers", func() { Context("with an existing file /versioned_file", func() { JustBeforeEach(func() { - fs, err := ocis.New(map[string]interface{}{ + fs, err := ocis.New(ctx, map[string]interface{}{ "root": revads["storage"].TmpRoot, "enable_home": true, }) @@ -556,7 +556,7 @@ var _ = Describe("storage providers", func() { Context("with an existing file /versioned_file", func() { JustBeforeEach(func() { - fs, err := ocis.New(map[string]interface{}{ + fs, err := ocis.New(ctx, map[string]interface{}{ "root": revads["storage"].TmpRoot, "enable_home": true, }) @@ -622,7 +622,7 @@ var _ = Describe("storage providers", func() { Context("with an existing file /versioned_file", func() { JustBeforeEach(func() { - fs, err := owncloud.New(map[string]interface{}{ + fs, err := owncloud.New(ctx, map[string]interface{}{ "datadirectory": revads["storage"].TmpRoot, "userprovidersvc": revads["users"].GrpcAddress, "enable_home": true,