diff --git a/services/proxy/pkg/command/server.go b/services/proxy/pkg/command/server.go index 86c99c960..9e0497bb1 100644 --- a/services/proxy/pkg/command/server.go +++ b/services/proxy/pkg/command/server.go @@ -68,7 +68,10 @@ func Server(cfg *config.Config) *cli.Command { if err != nil { return err } - err = grpc.Configure(grpc.GetClientOptions(cfg.GRPCClientTLS)...) + cfg.GrpcClient, err = grpc.NewClient( + append( + grpc.GetClientOptions(cfg.GRPCClientTLS), + grpc.WithTraceProvider(traceProvider))...) if err != nil { return err } @@ -269,14 +272,7 @@ func (h *StaticRouteHandler) backchannelLogout(w http.ResponseWriter, r *http.Re } func loadMiddlewares(ctx context.Context, logger log.Logger, cfg *config.Config, userInfoCache microstore.Store, traceProvider trace.TracerProvider) alice.Chain { - grpcClient, err := grpc.NewClient( - append( - grpc.GetClientOptions(cfg.GRPCClientTLS), - grpc.WithTraceProvider(traceProvider))...) - if err != nil { - logger.Fatal().Err(err).Msg("Failed to get gateway client") - } - rolesClient := settingssvc.NewRoleService("com.owncloud.api.settings", grpcClient) + rolesClient := settingssvc.NewRoleService("com.owncloud.api.settings", cfg.GrpcClient) gatewaySelector, err := pool.GatewaySelector(cfg.Reva.Address, append(cfg.Reva.GetRevaOptions(), pool.WithRegistry(registry.GetRegistry()))...) if err != nil { logger.Fatal().Err(err).Msg("Failed to get gateway selector") @@ -322,7 +318,7 @@ func loadMiddlewares(ctx context.Context, logger log.Logger, cfg *config.Config, logger.Fatal().Msgf("Invalid role assignment driver '%s'", cfg.RoleAssignment.Driver) } - storeClient := storesvc.NewStoreService("com.owncloud.api.store", grpcClient) + storeClient := storesvc.NewStoreService("com.owncloud.api.store", cfg.GrpcClient) if err != nil { logger.Error().Err(err). Str("gateway", cfg.Reva.Address). @@ -415,7 +411,7 @@ func loadMiddlewares(ctx context.Context, logger log.Logger, cfg *config.Config, middleware.Logger(logger), middleware.PolicySelectorConfig(*cfg.PolicySelector), ), - middleware.Policies(logger, cfg.PoliciesMiddleware.Query), + middleware.Policies(logger, cfg.PoliciesMiddleware.Query, cfg.GrpcClient), // finally, trigger home creation when a user logs in middleware.CreateHome( middleware.Logger(logger), diff --git a/services/proxy/pkg/config/config.go b/services/proxy/pkg/config/config.go index 420b3d077..fecd18ca0 100644 --- a/services/proxy/pkg/config/config.go +++ b/services/proxy/pkg/config/config.go @@ -5,6 +5,7 @@ import ( "time" "github.com/owncloud/ocis/v2/ocis-pkg/shared" + "go-micro.dev/v4/client" ) // Config combines all available configuration parts. @@ -21,6 +22,7 @@ type Config struct { Reva *shared.Reva `yaml:"reva"` GRPCClientTLS *shared.GRPCClientTLS `yaml:"grpc_client_tls"` + GrpcClient client.Client `yaml:"-"` RoleQuotas map[string]uint64 `yaml:"role_quotas"` Policies []Policy `yaml:"policies"` diff --git a/services/proxy/pkg/middleware/policies.go b/services/proxy/pkg/middleware/policies.go index f117e9873..604c17dca 100644 --- a/services/proxy/pkg/middleware/policies.go +++ b/services/proxy/pkg/middleware/policies.go @@ -9,11 +9,11 @@ import ( "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/render" "github.com/owncloud/ocis/v2/ocis-pkg/log" - "github.com/owncloud/ocis/v2/ocis-pkg/service/grpc" pMessage "github.com/owncloud/ocis/v2/protogen/gen/ocis/messages/policies/v0" pService "github.com/owncloud/ocis/v2/protogen/gen/ocis/services/policies/v0" "github.com/owncloud/ocis/v2/services/webdav/pkg/net" tusd "github.com/tus/tusd/pkg/handler" + "go-micro.dev/v4/client" ) type ( @@ -34,8 +34,8 @@ type ( const DeniedMessage = "Operation denied due to security policies" // Policies verifies if a request is granted or not. -func Policies(logger log.Logger, qs string) func(next http.Handler) http.Handler { - pClient := pService.NewPoliciesProviderService("com.owncloud.api.policies", grpc.DefaultClient()) +func Policies(logger log.Logger, qs string, grpcClient client.Client) func(next http.Handler) http.Handler { + pClient := pService.NewPoliciesProviderService("com.owncloud.api.policies", grpcClient) return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {