diff --git a/billing/checkout/service.go b/billing/checkout/service.go index 29cbb6aa0..a5867024a 100644 --- a/billing/checkout/service.go +++ b/billing/checkout/service.go @@ -26,9 +26,8 @@ import ( "github.com/raystack/frontier/billing/credit" "github.com/google/uuid" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "github.com/raystack/frontier/billing/subscription" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/billing/plan" "github.com/raystack/frontier/billing/product" @@ -183,12 +182,12 @@ func (s *Service) backgroundSync(ctx context.Context) { defer record() } - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) customers, err := s.customerService.List(ctx, customer.Filter{ State: customer.ActiveState, }) if err != nil { - logger.Error("checkout.backgroundSync", zap.Error(err)) + logger.Error("checkout.backgroundSync", "error", err) return } @@ -202,10 +201,10 @@ func (s *Service) backgroundSync(ctx context.Context) { continue } if err := s.SyncWithProvider(ctx, customer.ID); err != nil { - logger.Error("checkout.SyncWithProvider", zap.Error(err), zap.String("customer_id", customer.ID)) + logger.Error("checkout.SyncWithProvider", "error", err, "customer_id", customer.ID) } } - logger.Info("checkout.backgroundSync finished", zap.Duration("duration", time.Since(start))) + logger.Info("checkout.backgroundSync finished", "duration", time.Since(start)) } func (s *Service) Create(ctx context.Context, ch Checkout) (Checkout, error) { diff --git a/billing/customer/service.go b/billing/customer/service.go index 24b5c068c..0b35ac049 100644 --- a/billing/customer/service.go +++ b/billing/customer/service.go @@ -15,8 +15,7 @@ import ( "github.com/raystack/frontier/billing" "github.com/raystack/frontier/internal/metrics" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "golang.org/x/exp/slices" "github.com/raystack/frontier/pkg/metadata" @@ -390,12 +389,12 @@ func (s *Service) backgroundSync(ctx context.Context) { record := metrics.BillingSyncLatency("customer") defer record() } - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) customers, err := s.List(ctx, Filter{ State: ActiveState, }) if err != nil { - logger.Error("customer.backgroundSync", zap.Error(err)) + logger.Error("customer.backgroundSync", "error", err) return } @@ -409,11 +408,11 @@ func (s *Service) backgroundSync(ctx context.Context) { continue } if err := s.SyncWithProvider(ctx, customer); err != nil { - logger.Error("customer.SyncWithProvider", zap.Error(err), zap.String("customer_id", customer.ID)) + logger.Error("customer.SyncWithProvider", "error", err, "customer_id", customer.ID) } time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) } - logger.Info("customer.backgroundSync finished", zap.Duration("duration", time.Since(start))) + logger.Info("customer.backgroundSync finished", "duration", time.Since(start)) } // SyncWithProvider syncs the customer state with the billing provider diff --git a/billing/invoice/service.go b/billing/invoice/service.go index 39593afe1..5dad7778b 100644 --- a/billing/invoice/service.go +++ b/billing/invoice/service.go @@ -21,13 +21,11 @@ import ( "github.com/raystack/frontier/billing" "github.com/raystack/frontier/internal/metrics" - "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/rql" - "go.uber.org/zap" - - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "github.com/raystack/frontier/billing/customer" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/metadata" + "github.com/raystack/frontier/pkg/utils" + "github.com/raystack/salt/rql" "github.com/stripe/stripe-go/v79/client" ) @@ -112,7 +110,7 @@ func NewService(stripeClient *client.API, invoiceRepository Repository, } func (s *Service) Init(ctx context.Context) error { - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) if s.syncDelay != time.Duration(0) { if s.syncJob != nil { s.syncJob.Stop() @@ -151,8 +149,8 @@ func (s *Service) Init(ctx context.Context) error { s.creditOverdraftInvoiceCurrency = creditPrice.Currency s.creditOverdraftUnitAmount = int64(float64(creditPrice.Amount) / float64(creditProduct.Config.CreditAmount)) logger.Info("credit overdraft product details", - zap.Int64("unit_amount", s.creditOverdraftUnitAmount), - zap.String("currency", s.creditOverdraftInvoiceCurrency)) + "unit_amount", s.creditOverdraftUnitAmount, + "currency", s.creditOverdraftInvoiceCurrency) } return nil } @@ -170,12 +168,12 @@ func (s *Service) backgroundSync(ctx context.Context) { record := metrics.BillingSyncLatency("invoice") defer record() } - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) customers, err := s.customerService.List(ctx, customer.Filter{ Online: utils.Bool(true), }) if err != nil { - logger.Error("invoice.backgroundSync", zap.Error(err)) + logger.Error("invoice.backgroundSync", "error", err) return } for _, customr := range customers { @@ -188,20 +186,20 @@ func (s *Service) backgroundSync(ctx context.Context) { continue } if err := s.SyncWithProvider(ctx, customr); err != nil { - logger.Error("invoice.SyncWithProvider", zap.Error(err)) + logger.Error("invoice.SyncWithProvider", "error", err) } time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond) } if err := s.Reconcile(ctx); err != nil { - logger.Error("invoice.Reconcile", zap.Error(err)) + logger.Error("invoice.Reconcile", "error", err) } if s.isCreditOverdraftDayOfInvoice() { if err := s.GenerateForCredits(ctx); err != nil { - logger.Error("invoice.GenerateForCredits", zap.Error(err)) + logger.Error("invoice.GenerateForCredits", "error", err) } } - logger.Info("invoice.backgroundSync finished", zap.Duration("duration", time.Since(start))) + logger.Info("invoice.backgroundSync finished", "duration", time.Since(start)) } // TriggerCreditOverdraftInvoices is on-demand trigger for generating credit overdraft invoices @@ -314,7 +312,7 @@ func (s *Service) List(ctx context.Context, filter Filter) ([]Invoice, error) { // GetUpcoming returns the upcoming invoice for the customer based on the // active subscription plan. If no upcoming invoice is found, it returns empty. func (s *Service) GetUpcoming(ctx context.Context, customerID string) (Invoice, error) { - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) custmr, err := s.customerService.GetByID(ctx, customerID) if err != nil { return Invoice{}, fmt.Errorf("failed to find customer: %w", err) @@ -431,7 +429,7 @@ func (s *Service) DeleteByCustomer(ctx context.Context, c customer.Customer) err // reconcile the token balance once it's paid. func (s *Service) GenerateForCredits(ctx context.Context) error { var errs []error - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) if s.creditOverdraftUnitAmount == 0 || s.creditOverdraftInvoiceCurrency == "" { // do not process if credit overdraft details not set return nil @@ -449,7 +447,7 @@ func (s *Service) GenerateForCredits(ctx context.Context) error { defer func() { unlockErr := lock.Unlock(ctx) if unlockErr != nil { - logger.Error("failed to unlock", zap.Error(unlockErr), zap.String("key", GenerateForCreditLockKey)) + logger.Error("failed to unlock", "error", unlockErr, "key", GenerateForCreditLockKey) } }() diff --git a/billing/subscription/service.go b/billing/subscription/service.go index c7034d564..932b6579f 100644 --- a/billing/subscription/service.go +++ b/billing/subscription/service.go @@ -23,8 +23,7 @@ import ( "github.com/raystack/frontier/billing/product" "github.com/raystack/frontier/pkg/utils" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/billing/plan" @@ -149,12 +148,12 @@ func (s *Service) backgroundSync(ctx context.Context) { record := metrics.BillingSyncLatency("subscription") defer record() } - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) customers, err := s.customerService.List(ctx, customer.Filter{ State: customer.ActiveState, }) if err != nil { - logger.Error("subscription.backgroundSync", zap.Error(err)) + logger.Error("subscription.backgroundSync", "error", err) return } @@ -168,11 +167,11 @@ func (s *Service) backgroundSync(ctx context.Context) { continue } if err := s.SyncWithProvider(ctx, customer); err != nil { - logger.Error("subscription.SyncWithProvider", zap.Error(err), zap.String("customer_id", customer.ID)) + logger.Error("subscription.SyncWithProvider", "error", err, "customer_id", customer.ID) } time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) } - logger.Info("subscription.backgroundSync finished", zap.Duration("duration", time.Since(start))) + logger.Info("subscription.backgroundSync finished", "duration", time.Since(start)) } func (s *Service) TriggerSyncByProviderID(ctx context.Context, id string) error { diff --git a/cmd/migrate.go b/cmd/migrate.go index 19b4d72bf..e7f6eb7fa 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -3,6 +3,7 @@ package cmd import ( "context" "fmt" + "log/slog" "github.com/golang-migrate/migrate/v4" _ "github.com/golang-migrate/migrate/v4/database" @@ -15,10 +16,9 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/internal/store/postgres/migrations" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" ) -func RunMigrations(logger log.Logger, config db.Config) error { +func RunMigrations(logger *slog.Logger, config db.Config) error { m, err := getDatabaseMigrationInstance(config) if err != nil { return err @@ -44,7 +44,7 @@ func RunMigrations(logger log.Logger, config db.Config) error { return err } -func RunRollback(logger log.Logger, config db.Config) error { +func RunRollback(logger *slog.Logger, config db.Config) error { m, err := getDatabaseMigrationInstance(config) if err != nil { return err diff --git a/cmd/serve.go b/cmd/serve.go index 46a637342..f8cfe31c0 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -43,8 +43,6 @@ import ( "github.com/raystack/frontier/core/event" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "github.com/raystack/frontier/billing/invoice" "github.com/raystack/frontier/billing/usage" @@ -72,6 +70,7 @@ import ( "github.com/lestrrat-go/jwx/v2/jwk" "github.com/raystack/frontier/core/authenticate/token" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/server" "github.com/raystack/frontier/core/invitation" @@ -107,14 +106,15 @@ import ( "github.com/raystack/frontier/internal/store/spicedb" "github.com/raystack/frontier/pkg/db" + "log/slog" + "github.com/pkg/profile" - "github.com/raystack/salt/log" ) var ruleCacheRefreshDelay = time.Minute * 2 -var GetStripeClientFunc func(logger log.Logger, cfg *config.Frontier) *client.API +var GetStripeClientFunc func(logger *slog.Logger, cfg *config.Frontier) *client.API -func StartServer(logger *log.Zap, cfg *config.Frontier) error { +func StartServer(logger *slog.Logger, cfg *config.Frontier) error { logger.Info("frontier starting", "version", config.Version) if profiling := os.Getenv("FRONTIER_PROFILE"); profiling == "true" || profiling == "1" { defer profile.Start(profile.CPUProfile, profile.ProfilePath("."), profile.NoShutdownHook).Stop() @@ -123,7 +123,7 @@ func StartServer(logger *log.Zap, cfg *config.Frontier) error { ctx, cancelFunc := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT) defer cancelFunc() - ctx = ctxzap.ToContext(ctx, logger.GetInternalZapLogger().Desugar()) + ctx = frontierlogger.ToContext(ctx, logger) dbClient, err := setupDB(cfg.DB, logger) if err != nil { @@ -317,7 +317,7 @@ func StartServer(logger *log.Zap, cfg *config.Frontier) error { } func buildAPIDependencies( - logger log.Logger, + logger *slog.Logger, cfg *config.Frontier, dbc *db.Client, sdb *spicedb.SpiceDB, @@ -664,7 +664,7 @@ func (t *StripeTransport) RoundTrip(req *http.Request) (*http.Response, error) { return resp, err } -func getStripeClient(logger log.Logger, cfg *config.Frontier) *client.API { +func getStripeClient(logger *slog.Logger, cfg *config.Frontier) *client.API { stripeLogLevel := stripe.LevelError stripeBackends := &stripe.Backends{ API: stripe.GetBackendWithConfig(stripe.APIBackend, &stripe.BackendConfig{ @@ -691,7 +691,7 @@ func getStripeClient(logger log.Logger, cfg *config.Frontier) *client.API { return stripeClient } -func setupDB(cfg db.Config, logger log.Logger) (dbc *db.Client, err error) { +func setupDB(cfg db.Config, logger *slog.Logger) (dbc *db.Client, err error) { // prefer use pgx instead of lib/pq for postgres to catch pg error if cfg.Driver == "postgres" { cfg.Driver = "pgx" diff --git a/cmd/server.go b/cmd/server.go index 7a43a7bfb..756fb17a8 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -3,6 +3,7 @@ package cmd import ( "encoding/json" "fmt" + "log/slog" "os" "github.com/pkg/profile" @@ -82,6 +83,7 @@ func serverStartCommand() *cobra.Command { panic(err) } logger := frontierlogger.InitLogger(appConfig.Log) + slog.SetDefault(logger) if appConfig.App.Profiler { // enable profilers diff --git a/core/authenticate/service.go b/core/authenticate/service.go index f963d3302..abe39bc20 100644 --- a/core/authenticate/service.go +++ b/core/authenticate/service.go @@ -33,7 +33,7 @@ import ( "github.com/raystack/frontier/pkg/mailer" - "github.com/raystack/salt/log" + "log/slog" "github.com/google/uuid" "github.com/raystack/frontier/core/authenticate/strategy" @@ -94,7 +94,7 @@ type UserPATService interface { } type Service struct { - log log.Logger + log *slog.Logger cron *cron.Cron flowRepo FlowRepository userService UserService @@ -108,7 +108,7 @@ type Service struct { webAuth *webauthn.WebAuthn } -func NewService(logger log.Logger, config Config, flowRepo FlowRepository, +func NewService(logger *slog.Logger, config Config, flowRepo FlowRepository, mailDialer mailer.Dialer, tokenService TokenService, sessionService SessionService, userService UserService, serviceUserService ServiceUserService, webAuthConfig *webauthn.WebAuthn, userPATService UserPATService) *Service { diff --git a/core/authenticate/service_test.go b/core/authenticate/service_test.go index 17d0069d9..0fcb5175d 100644 --- a/core/authenticate/service_test.go +++ b/core/authenticate/service_test.go @@ -13,6 +13,9 @@ import ( "github.com/raystack/frontier/pkg/mailer" "github.com/stretchr/testify/assert" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/uuid" "github.com/raystack/frontier/core/authenticate" @@ -26,7 +29,6 @@ import ( pkgMetadata "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/server/consts" "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "google.golang.org/grpc/metadata" @@ -134,7 +136,7 @@ func TestService_GetPrincipal(t *testing.T) { } mockSessionService.EXPECT().ExtractFromContext(mock.Anything).Return(mockSess, nil) - return authenticate.NewService(log.NewLogrus(), authenticate.Config{}, + return authenticate.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), authenticate.Config{}, mockFlow, nil, mockTokenService, mockSessionService, mockUserService, mockServiceUserService, nil, nil) }, }, @@ -180,7 +182,7 @@ func TestService_GetPrincipal(t *testing.T) { mockTokenService.EXPECT().Parse(mock.Anything, tokenBytes).Return("", map[string]interface{}{}, errors.New("invalid token")) - return authenticate.NewService(log.NewLogrus(), authenticate.Config{}, + return authenticate.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), authenticate.Config{}, mockFlow, nil, mockTokenService, mockSessionService, mockUserService, mockServiceUserService, nil, nil) }, }, @@ -225,7 +227,7 @@ func TestService_GetPrincipal(t *testing.T) { mockServiceUserService.EXPECT().GetByJWT(mock.Anything, string(tokenBytes)).Return(serviceuser.ServiceUser{}, errors.New("invalid")) - return authenticate.NewService(log.NewLogrus(), authenticate.Config{}, + return authenticate.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), authenticate.Config{}, mockFlow, nil, mockTokenService, mockSessionService, mockUserService, mockServiceUserService, nil, nil) }, }, diff --git a/core/authenticate/session/service.go b/core/authenticate/session/service.go index 7db956e14..2fc580062 100644 --- a/core/authenticate/session/service.go +++ b/core/authenticate/session/service.go @@ -7,8 +7,9 @@ import ( "github.com/raystack/frontier/pkg/server/consts" + "log/slog" + "github.com/google/uuid" - "github.com/raystack/salt/log" "github.com/robfig/cron/v3" "google.golang.org/grpc/metadata" ) @@ -32,12 +33,12 @@ type Repository interface { type Service struct { repo Repository validity time.Duration - log log.Logger + log *slog.Logger cron *cron.Cron Now func() time.Time } -func NewService(logger log.Logger, repo Repository, validity time.Duration) *Service { +func NewService(logger *slog.Logger, repo Repository, validity time.Duration) *Service { return &Service{ log: logger, repo: repo, diff --git a/core/authenticate/session/service_test.go b/core/authenticate/session/service_test.go index eaeb3c321..8fba69025 100644 --- a/core/authenticate/session/service_test.go +++ b/core/authenticate/session/service_test.go @@ -6,11 +6,13 @@ import ( "testing" "time" + "io" + "log/slog" + "github.com/google/uuid" "github.com/raystack/frontier/core/authenticate/session" "github.com/raystack/frontier/core/authenticate/session/mocks" "github.com/raystack/frontier/pkg/server/consts" - "github.com/raystack/salt/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "google.golang.org/grpc/metadata" @@ -19,7 +21,7 @@ import ( func TestService_Create(t *testing.T) { t.Run("should create a session when parameters are passed correctly", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("Set", mock.Anything, mock.AnythingOfType("*session.Session")).Run(func(args mock.Arguments) { arg := args.Get(1) @@ -37,7 +39,7 @@ func TestService_Create(t *testing.T) { t.Run("should return an error when session is not successfully set", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("Set", mock.Anything, mock.AnythingOfType("*session.Session")).Run(func(args mock.Arguments) { arg := args.Get(1) @@ -58,7 +60,7 @@ func TestService_Refresh(t *testing.T) { t.Run("should refresh a session successfully", func(t *testing.T) { mockRepository := mocks.NewRepository(t) mockSessionID := uuid.New() - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("UpdateValidity", mock.Anything, mockSessionID, 24*time.Hour).Return(nil) @@ -70,7 +72,7 @@ func TestService_Refresh(t *testing.T) { t.Run("should return an error if refresh fails", func(t *testing.T) { mockRepository := mocks.NewRepository(t) mockSessionID := uuid.New() - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("UpdateValidity", mock.Anything, mockSessionID, 24*time.Hour).Return(errors.New("internal-error")) @@ -85,7 +87,7 @@ func TestService_Delete(t *testing.T) { t.Run("should delete a session successfully", func(t *testing.T) { mockRepository := mocks.NewRepository(t) mockSessionID := uuid.New() - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("Delete", mock.Anything, mockSessionID).Return(nil) @@ -97,7 +99,7 @@ func TestService_Delete(t *testing.T) { t.Run("should return an error if deletion fails", func(t *testing.T) { mockRepository := mocks.NewRepository(t) mockSessionID := uuid.New() - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) mockRepository.On("Delete", mock.Anything, mockSessionID).Return(errors.New("internal-error")) @@ -112,7 +114,7 @@ func TestService_ExtractFromContext(t *testing.T) { t.Run("should be able to extract session from context if it is present", func(t *testing.T) { mockRepository := mocks.NewRepository(t) mockSessionID := uuid.New() - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) md := metadata.New(map[string]string{consts.SessionIDGatewayKey: mockSessionID.String(), "key2": "val2"}) ctx := metadata.NewIncomingContext(context.Background(), md) @@ -128,7 +130,7 @@ func TestService_ExtractFromContext(t *testing.T) { t.Run("should return an error if session is not present in context metadata", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) _, err := svc.ExtractFromContext(context.Background()) assert.NotNil(t, err) @@ -139,7 +141,7 @@ func TestService_ExtractFromContext(t *testing.T) { func TestService_List(t *testing.T) { t.Run("should return active sessions only", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) userID := "user-123" now := time.Now().UTC() @@ -193,7 +195,7 @@ func TestService_List(t *testing.T) { t.Run("should return empty list when no active sessions", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) userID := "user-123" now := time.Now().UTC() @@ -222,7 +224,7 @@ func TestService_List(t *testing.T) { t.Run("should return error when repository fails", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) userID := "user-123" expectedError := errors.New("database error") @@ -238,7 +240,7 @@ func TestService_List(t *testing.T) { t.Run("should return empty list when no sessions exist", func(t *testing.T) { mockRepository := mocks.NewRepository(t) - svc := session.NewService(log.NewLogrus(), mockRepository, 24*time.Hour) + svc := session.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockRepository, 24*time.Hour) userID := "user-123" diff --git a/core/domain/service.go b/core/domain/service.go index 2880761ed..98570b8fd 100644 --- a/core/domain/service.go +++ b/core/domain/service.go @@ -12,7 +12,7 @@ import ( "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" + "log/slog" "github.com/raystack/frontier/core/authenticate" "github.com/raystack/frontier/core/user" @@ -35,7 +35,7 @@ type Service struct { userService UserService orgService OrgService cron *cron.Cron - log log.Logger + log *slog.Logger } const ( @@ -45,7 +45,7 @@ const ( refreshTime = "0 0 * * *" // Once a day at midnight (UTC) ) -func NewService(logger log.Logger, repository Repository, userService UserService, orgService OrgService) *Service { +func NewService(logger *slog.Logger, repository Repository, userService UserService, orgService OrgService) *Service { return &Service{ repository: repository, userService: userService, diff --git a/core/event/listener.go b/core/event/listener.go index f16cfc2ff..d016f1141 100644 --- a/core/event/listener.go +++ b/core/event/listener.go @@ -4,9 +4,8 @@ import ( "context" "fmt" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "github.com/raystack/frontier/core/audit" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" ) // ChanListener listens for audit logs and processes them blocking @@ -37,7 +36,7 @@ func (l *ChanListener) Listen(ctx context.Context) error { } func (l *ChanListener) Process(ctx context.Context, log audit.Log) { - stdLogger := grpczap.Extract(ctx).With(zap.String("event", log.Action)) + stdLogger := frontierlogger.FromContext(ctx).With("event", log.Action) switch log.Action { case audit.OrgCreatedEvent.String(): if err := l.processor.EnsureDefaultPlan(ctx, log.OrgID); err != nil { diff --git a/core/event/service.go b/core/event/service.go index 831d929f7..12dc5af81 100644 --- a/core/event/service.go +++ b/core/event/service.go @@ -12,11 +12,10 @@ import ( "github.com/raystack/frontier/billing/credit" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "github.com/raystack/frontier/billing/plan" "github.com/raystack/frontier/core/user" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/stripe/stripe-go/v79/webhook" - "go.uber.org/zap" "golang.org/x/sync/singleflight" "github.com/raystack/frontier/billing" @@ -185,7 +184,7 @@ func getCustomerName(org organization.Organization) string { } func (p *Service) BillingWebhook(ctx context.Context, payload ProviderWebhookEvent) error { - stdLogger := grpczap.Extract(ctx).With(zap.String("provider", payload.Name)) + stdLogger := frontierlogger.FromContext(ctx).With("provider", payload.Name) if payload.Name != "stripe" { return fmt.Errorf("provider not supported") } @@ -230,7 +229,7 @@ func (p *Service) BillingWebhook(ctx context.Context, payload ProviderWebhookEve return nil, p.checkoutService.TriggerSyncByProviderID(ctx, providerID) }) if err != nil { - stdLogger.Error("error syncing checkout", zap.Error(err), zap.String("provider_id", providerID)) + stdLogger.Error("error syncing checkout", "error", err, "provider_id", providerID) } case stripe.EventTypeCustomerCreated, stripe.EventTypeCustomerUpdated, @@ -242,7 +241,7 @@ func (p *Service) BillingWebhook(ctx context.Context, payload ProviderWebhookEve return nil, p.customerService.TriggerSyncByProviderID(ctx, providerID) }) if err != nil { - stdLogger.Error("error syncing customer", zap.Error(err), zap.String("provider_id", providerID)) + stdLogger.Error("error syncing customer", "error", err, "provider_id", providerID) } case stripe.EventTypeCustomerSubscriptionCreated, stripe.EventTypeCustomerSubscriptionUpdated, @@ -253,7 +252,7 @@ func (p *Service) BillingWebhook(ctx context.Context, payload ProviderWebhookEve return nil, p.subsService.TriggerSyncByProviderID(ctx, providerID) }) if err != nil { - stdLogger.Error("error syncing subscription", zap.Error(err), zap.String("provider_id", providerID)) + stdLogger.Error("error syncing subscription", "error", err, "provider_id", providerID) } case stripe.EventTypeInvoicePaid: // trigger invoice sync @@ -262,7 +261,7 @@ func (p *Service) BillingWebhook(ctx context.Context, payload ProviderWebhookEve return nil, p.invoiceService.TriggerSyncByProviderID(ctx, providerID) }) if err != nil { - stdLogger.Error("error syncing invoice", zap.Error(err), zap.String("provider_id", providerID)) + stdLogger.Error("error syncing invoice", "error", err, "provider_id", providerID) } } }() diff --git a/core/invitation/service.go b/core/invitation/service.go index bf59ff17d..23e91ce5d 100644 --- a/core/invitation/service.go +++ b/core/invitation/service.go @@ -11,8 +11,7 @@ import ( "github.com/raystack/frontier/core/organization" - "github.com/raystack/frontier/pkg/logger" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/mcuadros/go-defaults" "github.com/raystack/frontier/core/auditrecord/models" @@ -120,7 +119,7 @@ func (s Service) getConfig(ctx context.Context) *Config { defaults.SetDefaults(c) prefs, err := s.prefService.LoadPlatformPreferences(ctx) if err != nil { - logger.Ctx(ctx).Error("failed to load platform preferences for invitation", zap.Error(err)) + frontierlogger.FromContext(ctx).Error("failed to load platform preferences for invitation", "error", err) // don't fail } c.WithRoles = strings.EqualFold(prefs[preference.PlatformInviteWithRoles], "true") diff --git a/core/membership/service.go b/core/membership/service.go index 7a97879ef..7ff490225 100644 --- a/core/membership/service.go +++ b/core/membership/service.go @@ -7,6 +7,8 @@ import ( "slices" "time" + "log/slog" + "github.com/raystack/frontier/core/audit" "github.com/raystack/frontier/core/auditrecord" "github.com/raystack/frontier/core/organization" @@ -17,7 +19,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" pkgAuditRecord "github.com/raystack/frontier/pkg/auditrecord" "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" ) type PolicyService interface { @@ -48,7 +49,7 @@ type AuditRecordRepository interface { } type Service struct { - log log.Logger + log *slog.Logger policyService PolicyService relationService RelationService roleService RoleService @@ -58,7 +59,7 @@ type Service struct { } func NewService( - logger log.Logger, + logger *slog.Logger, policyService PolicyService, relationService RelationService, roleService RoleService, diff --git a/core/membership/service_test.go b/core/membership/service_test.go index eaa6f9e59..f9a49811d 100644 --- a/core/membership/service_test.go +++ b/core/membership/service_test.go @@ -5,6 +5,9 @@ import ( "errors" "testing" + "io" + "log/slog" + "github.com/google/uuid" "github.com/raystack/frontier/core/auditrecord" "github.com/raystack/frontier/core/membership" @@ -15,7 +18,6 @@ import ( "github.com/raystack/frontier/core/role" "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/bootstrap/schema" - "github.com/raystack/salt/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) @@ -254,7 +256,7 @@ func TestService_AddOrganizationMember(t *testing.T) { tt.setup(mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) } - svc := membership.NewService(log.NewNoop(), mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) + svc := membership.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) principalType := tt.principalType if principalType == "" { @@ -445,7 +447,7 @@ func TestService_SetOrganizationMemberRole(t *testing.T) { tt.setup(mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) } - svc := membership.NewService(log.NewNoop(), mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) + svc := membership.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), mockPolicySvc, mockRelSvc, mockRoleSvc, mockOrgSvc, mockUserSvc, mockAuditRepo) principalType := tt.principalType if principalType == "" { diff --git a/core/userpat/alert_service.go b/core/userpat/alert_service.go index 8208be2fa..47b42f7c4 100644 --- a/core/userpat/alert_service.go +++ b/core/userpat/alert_service.go @@ -10,16 +10,17 @@ import ( texttemplate "text/template" "time" + "log/slog" + auditmodels "github.com/raystack/frontier/core/auditrecord/models" "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/core/userpat/models" pkgauditrecord "github.com/raystack/frontier/pkg/auditrecord" "github.com/raystack/frontier/pkg/db" + "github.com/raystack/frontier/pkg/mailer" - "github.com/raystack/salt/log" "github.com/robfig/cron/v3" - "go.uber.org/zap" mail "gopkg.in/mail.v2" ) @@ -73,7 +74,7 @@ type AlertService struct { dialer mailer.Dialer locker Locker config AlertConfig - logger log.Logger + logger *slog.Logger cron *cron.Cron } @@ -84,7 +85,7 @@ func NewAlertService( dialer mailer.Dialer, locker Locker, config AlertConfig, - logger log.Logger, + logger *slog.Logger, auditRepo AlertAuditRepository, ) *AlertService { return &AlertService{ @@ -112,7 +113,7 @@ func (s *AlertService) Init(ctx context.Context) error { ctx, cancel := context.WithCancel(ctx) defer cancel() if err := s.Run(ctx); err != nil { - s.logger.Error("PAT expiry alert run failed", zap.Error(err)) + s.logger.Error("PAT expiry alert run failed", "error", err) } }) if err != nil { @@ -139,7 +140,7 @@ func (s *AlertService) Run(ctx context.Context) error { } defer func() { if unlockErr := lock.Unlock(ctx); unlockErr != nil { - s.logger.Error("failed to unlock PAT alert lock", zap.Error(unlockErr)) + s.logger.Error("failed to unlock PAT alert lock", "error", unlockErr) } }() @@ -152,7 +153,7 @@ func (s *AlertService) Run(ctx context.Context) error { func (s *AlertService) sendExpiryReminders(ctx context.Context) { pats, err := s.repo.ListExpiryReminderPending(ctx, s.config.DaysBefore) if err != nil { - s.logger.Error("failed to list pre-expiry PATs", zap.Error(err)) + s.logger.Error("failed to list pre-expiry PATs", "error", err) return } @@ -168,7 +169,7 @@ func (s *AlertService) sendExpiryReminders(ctx context.Context) { for _, pat := range pats { if err := s.sendAlert(ctx, pat, subjectTpl, bodyTpl, expiryReminderMetadataKey, pkgauditrecord.PATExpiryReminderEvent); err != nil { s.logger.Error("failed to send expiry reminder", - zap.String("pat_id", pat.ID), zap.Error(err)) + "pat_id", pat.ID, "error", err) } } } @@ -176,7 +177,7 @@ func (s *AlertService) sendExpiryReminders(ctx context.Context) { func (s *AlertService) sendExpiredNotices(ctx context.Context) { pats, err := s.repo.ListExpiredNoticePending(ctx) if err != nil { - s.logger.Error("failed to list post-expiry PATs", zap.Error(err)) + s.logger.Error("failed to list post-expiry PATs", "error", err) return } @@ -192,7 +193,7 @@ func (s *AlertService) sendExpiredNotices(ctx context.Context) { for _, pat := range pats { if err := s.sendAlert(ctx, pat, subjectTpl, bodyTpl, expiredNoticeMetadataKey, pkgauditrecord.PATExpiredNoticeEvent); err != nil { s.logger.Error("failed to send expired notice", - zap.String("pat_id", pat.ID), zap.Error(err)) + "pat_id", pat.ID, "error", err) } } } @@ -246,14 +247,14 @@ func (s *AlertService) sendAlert(ctx context.Context, pat models.PAT, subjectTpl } s.logger.Info("sent PAT expiry alert", - zap.String("pat_id", pat.ID), - zap.String("pat_title", pat.Title), - zap.String("user_email", usr.Email), - zap.String("alert_type", metadataKey)) + "pat_id", pat.ID, + "pat_title", pat.Title, + "user_email", usr.Email, + "alert_type", metadataKey) if err := s.repo.SetAlertSentMetadata(ctx, pat.ID, metadataKey); err != nil { s.logger.Error("alert sent but failed to mark metadata", - zap.String("pat_id", pat.ID), zap.String("key", metadataKey), zap.Error(err)) + "pat_id", pat.ID, "key", metadataKey, "error", err) } s.createAlertAuditRecord(ctx, pat, usr, org.Title, auditEvent) @@ -282,7 +283,7 @@ func (s *AlertService) createAlertAuditRecord(ctx context.Context, pat models.PA OccurredAt: time.Now(), }); err != nil { s.logger.Error("failed to create audit record for PAT alert", - zap.String("pat_id", pat.ID), zap.Error(err)) + "pat_id", pat.ID, "error", err) } } diff --git a/core/userpat/alert_service_test.go b/core/userpat/alert_service_test.go index 53eeb7b72..141883323 100644 --- a/core/userpat/alert_service_test.go +++ b/core/userpat/alert_service_test.go @@ -6,6 +6,9 @@ import ( "testing" "time" + "io" + "log/slog" + auditmodels "github.com/raystack/frontier/core/auditrecord/models" "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/core/user" @@ -13,7 +16,6 @@ import ( "github.com/raystack/frontier/core/userpat/models" "github.com/raystack/frontier/pkg/db" mailerMock "github.com/raystack/frontier/pkg/mailer/mocks" - "github.com/raystack/salt/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) @@ -38,7 +40,7 @@ func newAlertMocks(t *testing.T) ( func newAlertService(t *testing.T, cfg AlertConfig) (*AlertService, *mocks.AlertRepository, *mocks.AlertUserService, *mocks.AlertOrgService, *mailerMock.Dialer, *mocks.Locker, *mocks.AlertAuditRepository) { t.Helper() repo, userSvc, orgSvc, dialer, locker, auditRepo := newAlertMocks(t) - svc := NewAlertService(repo, userSvc, orgSvc, dialer, locker, cfg, log.NewNoop(), auditRepo) + svc := NewAlertService(repo, userSvc, orgSvc, dialer, locker, cfg, slog.New(slog.NewTextHandler(io.Discard, nil)), auditRepo) return svc, repo, userSvc, orgSvc, dialer, locker, auditRepo } diff --git a/core/userpat/service.go b/core/userpat/service.go index 5dbe2eab3..fe86c734c 100644 --- a/core/userpat/service.go +++ b/core/userpat/service.go @@ -11,6 +11,8 @@ import ( "slices" "time" + "log/slog" + "github.com/raystack/frontier/core/auditrecord/models" "github.com/raystack/frontier/core/authenticate" "github.com/raystack/frontier/core/organization" @@ -22,7 +24,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" pkgAuditRecord "github.com/raystack/frontier/pkg/auditrecord" pkgUtils "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" "github.com/raystack/salt/rql" "golang.org/x/crypto/sha3" ) @@ -53,7 +54,7 @@ type AuditRecordRepository interface { type Service struct { repo Repository config Config - logger log.Logger + logger *slog.Logger orgService OrganizationService roleService RoleService policyService PolicyService @@ -62,7 +63,7 @@ type Service struct { deniedPerms map[string]struct{} } -func NewService(logger log.Logger, repo Repository, config Config, orgService OrganizationService, +func NewService(logger *slog.Logger, repo Repository, config Config, orgService OrganizationService, roleService RoleService, policyService PolicyService, projectService ProjectService, auditRecordRepository AuditRecordRepository) *Service { return &Service{ repo: repo, diff --git a/core/userpat/service_test.go b/core/userpat/service_test.go index 122cdd357..16e408187 100644 --- a/core/userpat/service_test.go +++ b/core/userpat/service_test.go @@ -9,6 +9,9 @@ import ( "testing" "time" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" auditmodels "github.com/raystack/frontier/core/auditrecord/models" "github.com/raystack/frontier/core/organization" @@ -20,7 +23,6 @@ import ( "github.com/raystack/frontier/core/userpat/mocks" "github.com/raystack/frontier/core/userpat/models" "github.com/raystack/frontier/internal/bootstrap/schema" - "github.com/raystack/salt/log" "github.com/stretchr/testify/mock" "golang.org/x/crypto/sha3" ) @@ -89,7 +91,7 @@ func TestService_Create(t *testing.T) { repo := mocks.NewRepository(t) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, userpat.Config{ Enabled: false, }, orgSvc, nil, nil, nil, auditRepo) }, @@ -111,7 +113,7 @@ func TestService_Create(t *testing.T) { Return(int64(0), errors.New("db connection failed")) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, }, { @@ -131,7 +133,7 @@ func TestService_Create(t *testing.T) { Return(int64(50), nil) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, }, { @@ -151,7 +153,7 @@ func TestService_Create(t *testing.T) { Return(int64(55), nil) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, }, { @@ -177,7 +179,7 @@ func TestService_Create(t *testing.T) { roleSvc.On("List", mock.Anything, mock.Anything).Return([]role.Role{{ ID: "role-1", Name: "test-role", Scopes: []string{schema.OrganizationNamespace}, }}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -203,7 +205,7 @@ func TestService_Create(t *testing.T) { roleSvc.On("List", mock.Anything, mock.Anything).Return([]role.Role{{ ID: "role-1", Name: "test-role", Scopes: []string{schema.OrganizationNamespace}, }}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -252,7 +254,7 @@ func TestService_Create(t *testing.T) { CreatedAt: time.Date(2026, 2, 10, 0, 0, 0, 0, time.UTC), }, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, validateFunc: func(t *testing.T, got models.PAT, tokenValue string) { t.Helper() @@ -284,7 +286,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Create(mock.Anything, mock.AnythingOfType("models.PAT")). Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, validateFunc: func(t *testing.T, got models.PAT, tokenValue string) { t.Helper() @@ -321,7 +323,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Create(mock.Anything, mock.AnythingOfType("models.PAT")). Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, validateFunc: func(t *testing.T, got models.PAT, tokenValue string) { t.Helper() @@ -357,7 +359,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Create(mock.Anything, mock.AnythingOfType("models.PAT")). Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, userpat.Config{ Enabled: true, Prefix: "custom", MaxPerUserPerOrg: 50, @@ -388,7 +390,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Create(mock.Anything, mock.AnythingOfType("models.PAT")). Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, }, { @@ -408,7 +410,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Create(mock.Anything, mock.AnythingOfType("models.PAT")). Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, }, } @@ -443,7 +445,7 @@ func TestService_Create_UniquePATs(t *testing.T) { Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil).Times(2) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) req := userpat.CreateRequest{ UserID: "user-1", @@ -478,7 +480,7 @@ func TestService_Create_HashVerification(t *testing.T) { Return(models.PAT{ID: "pat-1", OrgID: "org-1"}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, tokenValue, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", @@ -540,7 +542,7 @@ func TestService_CreatePolicies_OrgScopedRole(t *testing.T) { }).Return(policy.Policy{ID: "pol-1"}, nil) policySvc.On("List", mock.Anything, mock.Anything).Return([]policy.Policy{}, nil).Maybe() - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -587,7 +589,7 @@ func TestService_CreatePolicies_ProjectScopedAllProjects(t *testing.T) { }).Return(policy.Policy{ID: "pol-1"}, nil) policySvc.On("List", mock.Anything, mock.Anything).Return([]policy.Policy{}, nil).Maybe() - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -645,7 +647,7 @@ func TestService_CreatePolicies_ProjectScopedSpecificProjects(t *testing.T) { {ID: "proj-a"}, {ID: "proj-b"}, }, nil).Maybe() - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, projSvc, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, projSvc, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -679,7 +681,7 @@ func TestService_CreatePolicies_DeniedPermission(t *testing.T) { cfg := defaultConfig cfg.DeniedPermissions = []string{"app_organization_administer"} - svc := userpat.NewService(log.NewNoop(), repo, cfg, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -709,7 +711,7 @@ func TestService_CreatePolicies_RoleFetchError(t *testing.T) { policySvc := mocks.NewPolicyService(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -743,7 +745,7 @@ func TestService_CreatePolicies_UnsupportedScope(t *testing.T) { policySvc := mocks.NewPolicyService(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -777,7 +779,7 @@ func TestService_CreatePolicies_MissingRoleID(t *testing.T) { policySvc := mocks.NewPolicyService(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -806,7 +808,7 @@ func TestService_CreatePolicies_NoRoles(t *testing.T) { Return(models.PAT{ID: "pat-1", OrgID: "org-1", CreatedAt: time.Now()}, nil) orgSvc, roleSvc, policySvc, _, auditRepo := newSuccessMocks(t) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", @@ -1169,7 +1171,7 @@ func TestService_CreatePolicies_ScopeMatrix(t *testing.T) { {ID: "proj-1"}, {ID: "proj-2"}, {ID: "proj-3"}, {ID: "proj-a"}, {ID: "proj-b"}, }, nil).Maybe() - svc := userpat.NewService(log.NewNoop(), repo, cfg, orgSvc, roleSvc, policySvc, projSvc, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg, orgSvc, roleSvc, policySvc, projSvc, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -1276,7 +1278,7 @@ func TestService_CreatePolicies_PolicyCreateFailure(t *testing.T) { return p.RoleID == "org-billing-id" })).Return(policy.Policy{}, errors.New("spicedb unavailable")) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -1313,7 +1315,7 @@ func TestService_ListAllowedRoles(t *testing.T) { repo := mocks.NewRepository(t) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, userpat.Config{ Enabled: false, }, orgSvc, nil, nil, nil, auditRepo) }, @@ -1330,7 +1332,7 @@ func TestService_ListAllowedRoles(t *testing.T) { OrgID: schema.PlatformOrgID.String(), Scopes: []string{schema.OrganizationNamespace, schema.ProjectNamespace}, }).Return(nil, errors.New("db connection failed")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1353,7 +1355,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }, nil) cfg := defaultConfig cfg.DeniedPermissions = []string{"app_organization_administer"} - return userpat.NewService(log.NewNoop(), repo, cfg, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1373,7 +1375,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }, nil) cfg := defaultConfig cfg.DeniedPermissions = []string{"app_organization_administer"} - return userpat.NewService(log.NewNoop(), repo, cfg, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1389,7 +1391,7 @@ func TestService_ListAllowedRoles(t *testing.T) { OrgID: schema.PlatformOrgID.String(), Scopes: []string{schema.OrganizationNamespace, schema.ProjectNamespace}, }).Return([]role.Role{}, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1410,7 +1412,7 @@ func TestService_ListAllowedRoles(t *testing.T) { {ID: "org-admin-id", Name: "org_admin", Permissions: []string{"app_organization_administer"}, Scopes: []string{schema.OrganizationNamespace}}, {ID: "proj-viewer-id", Name: "proj_viewer", Permissions: []string{"app_project_get"}, Scopes: []string{schema.ProjectNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1430,7 +1432,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }).Return([]role.Role{ {ID: "proj-viewer-id", Name: "proj_viewer", Permissions: []string{"app_project_get"}, Scopes: []string{schema.ProjectNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1450,7 +1452,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }).Return([]role.Role{ {ID: "org-viewer-id", Name: "org_viewer", Permissions: []string{"app_organization_get"}, Scopes: []string{schema.OrganizationNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1470,7 +1472,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }).Return([]role.Role{ {ID: "proj-viewer-id", Name: "proj_viewer", Permissions: []string{"app_project_get"}, Scopes: []string{schema.ProjectNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1482,7 +1484,7 @@ func TestService_ListAllowedRoles(t *testing.T) { repo := mocks.NewRepository(t) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, }, { @@ -1494,7 +1496,7 @@ func TestService_ListAllowedRoles(t *testing.T) { repo := mocks.NewRepository(t) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, }, { @@ -1514,7 +1516,7 @@ func TestService_ListAllowedRoles(t *testing.T) { }).Return([]role.Role{ {ID: "proj-viewer-id", Name: "proj_viewer", Permissions: []string{"app_project_get"}, Scopes: []string{schema.ProjectNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, { @@ -1536,7 +1538,7 @@ func TestService_ListAllowedRoles(t *testing.T) { {ID: "org-admin-id", Name: "org_admin", Permissions: []string{"app_organization_get"}, Scopes: []string{schema.OrganizationNamespace}}, {ID: "proj-viewer-id", Name: "proj_viewer", Permissions: []string{"app_project_get"}, Scopes: []string{schema.ProjectNamespace}}, }, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, nil, nil, auditRepo) }, }, } @@ -1628,7 +1630,7 @@ func TestService_Get(t *testing.T) { setup: func() *userpat.Service { repo := mocks.NewRepository(t) orgSvc, _, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, userpat.Config{ Enabled: false, }, orgSvc, nil, policySvc, nil, auditRepo) }, @@ -1644,7 +1646,7 @@ func TestService_Get(t *testing.T) { repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(models.PAT{}, paterrors.ErrNotFound) orgSvc, _, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -1658,7 +1660,7 @@ func TestService_Get(t *testing.T) { repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(testPAT, nil) orgSvc, _, policySvc, _, auditRepo := newSuccessMocks(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -1676,7 +1678,7 @@ func TestService_Get(t *testing.T) { Return([]policy.Policy{ {RoleID: "role-1", ResourceType: "app/organization", ResourceID: "org-1"}, }, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -1693,7 +1695,7 @@ func TestService_Get(t *testing.T) { policySvc.On("List", mock.Anything, mock.Anything). Return(nil, errors.New("spicedb down")) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: true, }, @@ -1749,7 +1751,7 @@ func TestService_Delete(t *testing.T) { repo := mocks.NewRepository(t) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, userpat.Config{ Enabled: false, }, orgSvc, nil, nil, nil, auditRepo) }, @@ -1766,7 +1768,7 @@ func TestService_Delete(t *testing.T) { Return(models.PAT{}, paterrors.ErrNotFound) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -1781,7 +1783,7 @@ func TestService_Delete(t *testing.T) { Return(testPAT, nil) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -1798,7 +1800,7 @@ func TestService_Delete(t *testing.T) { Return(errors.New("db error")) orgSvc := mocks.NewOrganizationService(t) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, nil, nil, auditRepo) }, wantErr: true, }, @@ -1819,7 +1821,7 @@ func TestService_Delete(t *testing.T) { PrincipalType: schema.PATPrincipal, }).Return(nil, errors.New("spicedb down")) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: true, }, @@ -1842,7 +1844,7 @@ func TestService_Delete(t *testing.T) { policySvc.EXPECT().Delete(mock.Anything, "pol-1"). Return(errors.New("spicedb unavailable")) auditRepo := mocks.NewAuditRecordRepository(t) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: true, }, @@ -1872,7 +1874,7 @@ func TestService_Delete(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -1897,7 +1899,7 @@ func TestService_Delete(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -1922,7 +1924,7 @@ func TestService_Delete(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, errors.New("audit db down")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -1994,7 +1996,7 @@ func TestService_Update(t *testing.T) { name: "should return ErrDisabled when PAT feature is disabled", input: defaultInput, setup: func() *userpat.Service { - return userpat.NewService(log.NewNoop(), nil, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), nil, userpat.Config{ Enabled: false, }, nil, nil, nil, nil, nil) }, @@ -2008,7 +2010,7 @@ func TestService_Update(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(models.PAT{}, paterrors.ErrNotFound) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -2025,7 +2027,7 @@ func TestService_Update(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(testPAT, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -2040,7 +2042,7 @@ func TestService_Update(t *testing.T) { roleSvc := mocks.NewRoleService(t) roleSvc.EXPECT().List(mock.Anything, mock.Anything). Return(nil, paterrors.ErrRoleNotFound) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrRoleNotFound, @@ -2062,7 +2064,7 @@ func TestService_Update(t *testing.T) { }).Return([]policy.Policy{}, nil) repo.EXPECT().Update(mock.Anything, mock.Anything). Return(models.PAT{}, errors.New("db error")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) }, wantErr: true, }, @@ -2083,7 +2085,7 @@ func TestService_Update(t *testing.T) { }).Return([]policy.Policy{}, nil) repo.EXPECT().Update(mock.Anything, mock.Anything). Return(models.PAT{}, paterrors.ErrConflict) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrConflict, @@ -2111,7 +2113,7 @@ func TestService_Update(t *testing.T) { PrincipalID: "pat-1", PrincipalType: schema.PATPrincipal, }).Return(nil, errors.New("spicedb down")).Once() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) }, wantErr: true, }, @@ -2136,7 +2138,7 @@ func TestService_Update(t *testing.T) { // TOCTOU re-check returns not found (concurrent delete) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(models.PAT{}, paterrors.ErrNotFound).Once() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, policySvc, nil, nil) }, wantErr: true, }, @@ -2171,7 +2173,7 @@ func TestService_Update(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -2203,7 +2205,7 @@ func TestService_Update(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, errors.New("audit db down")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -2280,7 +2282,7 @@ func TestService_Regenerate(t *testing.T) { patID: "pat-1", expiresAt: futureExpiry, setup: func() *userpat.Service { - return userpat.NewService(log.NewNoop(), nil, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), nil, userpat.Config{ Enabled: false, }, nil, nil, nil, nil, nil) }, @@ -2296,7 +2298,7 @@ func TestService_Regenerate(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(models.PAT{}, paterrors.ErrNotFound) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -2310,7 +2312,7 @@ func TestService_Regenerate(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(activePAT, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrNotFound, @@ -2324,7 +2326,7 @@ func TestService_Regenerate(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().GetByID(mock.Anything, "pat-1"). Return(activePAT, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrExpiryInPast, @@ -2340,7 +2342,7 @@ func TestService_Regenerate(t *testing.T) { Return(expiredPAT, nil) repo.EXPECT().CountActive(mock.Anything, "user-1", "org-1"). Return(int64(50), nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, wantErrIs: paterrors.ErrLimitExceeded, @@ -2366,7 +2368,7 @@ func TestService_Regenerate(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -2381,7 +2383,7 @@ func TestService_Regenerate(t *testing.T) { Return(activePAT, nil) repo.EXPECT().Regenerate(mock.Anything, "pat-1", mock.Anything, mock.Anything). Return(models.PAT{}, errors.New("db error")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, }, @@ -2407,7 +2409,7 @@ func TestService_Regenerate(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, nil).Maybe() - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -2431,7 +2433,7 @@ func TestService_Regenerate(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything). Return(auditmodels.AuditRecord{}, errors.New("audit db down")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, nil, policySvc, nil, auditRepo) }, wantErr: false, }, @@ -2474,7 +2476,7 @@ func TestService_IsTitleAvailable(t *testing.T) { orgID: "org-1", title: "my-token", setup: func() *userpat.Service { - return userpat.NewService(log.NewNoop(), nil, userpat.Config{ + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), nil, userpat.Config{ Enabled: false, }, nil, nil, nil, nil, nil) }, @@ -2490,7 +2492,7 @@ func TestService_IsTitleAvailable(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().IsTitleAvailable(mock.Anything, "user-1", "org-1", "new-token"). Return(true, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantAvailable: true, }, @@ -2503,7 +2505,7 @@ func TestService_IsTitleAvailable(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().IsTitleAvailable(mock.Anything, "user-1", "org-1", "existing-token"). Return(false, nil) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantAvailable: false, }, @@ -2516,7 +2518,7 @@ func TestService_IsTitleAvailable(t *testing.T) { repo := mocks.NewRepository(t) repo.EXPECT().IsTitleAvailable(mock.Anything, "user-1", "org-1", "my-token"). Return(false, errors.New("db error")) - return userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, nil, nil, nil, nil) + return userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, nil, nil, nil, nil) }, wantErr: true, }, @@ -2558,7 +2560,7 @@ func TestService_ValidateProjectAccess(t *testing.T) { {ID: "proj-in-org"}, }, nil) - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, nil, roleSvc, nil, projSvc, nil) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, nil, roleSvc, nil, projSvc, nil) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -2598,7 +2600,7 @@ func TestService_ValidateProjectAccess(t *testing.T) { auditRepo := mocks.NewAuditRecordRepository(t) auditRepo.On("Create", mock.Anything, mock.Anything).Return(auditmodels.AuditRecord{}, nil).Maybe() - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, projSvc, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, projSvc, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", @@ -2632,7 +2634,7 @@ func TestService_ValidateProjectAccess(t *testing.T) { auditRepo.On("Create", mock.Anything, mock.Anything).Return(auditmodels.AuditRecord{}, nil).Maybe() // No projectService mock needed — all-projects scope has empty ResourceIDs, skips validation - svc := userpat.NewService(log.NewNoop(), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) + svc := userpat.NewService(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, defaultConfig, orgSvc, roleSvc, policySvc, nil, auditRepo) _, _, err := svc.Create(context.Background(), userpat.CreateRequest{ UserID: "user-1", OrgID: "org-1", diff --git a/core/userpat/validator.go b/core/userpat/validator.go index 7dfb8b792..cd65f0d4d 100644 --- a/core/userpat/validator.go +++ b/core/userpat/validator.go @@ -8,9 +8,10 @@ import ( "strings" "time" + "log/slog" + paterrors "github.com/raystack/frontier/core/userpat/errors" "github.com/raystack/frontier/core/userpat/models" - "github.com/raystack/salt/log" "golang.org/x/crypto/sha3" ) @@ -18,10 +19,10 @@ import ( type Validator struct { repo Repository config Config - logger log.Logger + logger *slog.Logger } -func NewValidator(logger log.Logger, repo Repository, config Config) *Validator { +func NewValidator(logger *slog.Logger, repo Repository, config Config) *Validator { return &Validator{ repo: repo, config: config, diff --git a/core/userpat/validator_test.go b/core/userpat/validator_test.go index 4973fcb4b..ceb715bb1 100644 --- a/core/userpat/validator_test.go +++ b/core/userpat/validator_test.go @@ -9,11 +9,13 @@ import ( "testing" "time" + "io" + "log/slog" + "github.com/raystack/frontier/core/userpat" paterrors "github.com/raystack/frontier/core/userpat/errors" "github.com/raystack/frontier/core/userpat/mocks" "github.com/raystack/frontier/core/userpat/models" - "github.com/raystack/salt/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -39,14 +41,14 @@ func TestValidator_Validate(t *testing.T) { } t.Run("disabled feature returns ErrDisabled", func(t *testing.T) { - v := userpat.NewValidator(log.NewNoop(), nil, userpat.Config{Enabled: false}) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), nil, userpat.Config{Enabled: false}) _, err := v.Validate(context.Background(), "fpt_anything") assert.ErrorIs(t, err, paterrors.ErrDisabled) }) t.Run("wrong prefix returns ErrInvalidPAT", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) _, err := v.Validate(context.Background(), "ghp_sometoken") assert.ErrorIs(t, err, paterrors.ErrInvalidPAT) @@ -54,7 +56,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("no prefix separator returns ErrInvalidPAT", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) _, err := v.Validate(context.Background(), "randomstring") assert.ErrorIs(t, err, paterrors.ErrInvalidPAT) @@ -62,7 +64,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("malformed base64 returns ErrMalformedPAT", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) _, err := v.Validate(context.Background(), "fpt_!!!not-base64!!!") assert.ErrorIs(t, err, paterrors.ErrMalformedPAT) @@ -71,7 +73,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("unknown hash returns ErrNotFound", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) value, secretHash := validPATValue(t, prefix) repo.EXPECT().GetBySecretHash(mock.Anything, secretHash).Return(models.PAT{}, paterrors.ErrNotFound) @@ -82,7 +84,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("expired PAT returns ErrExpired", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) value, secretHash := validPATValue(t, prefix) repo.EXPECT().GetBySecretHash(mock.Anything, secretHash).Return(models.PAT{ @@ -96,7 +98,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("db error propagates as-is", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) value, secretHash := validPATValue(t, prefix) dbErr := errors.New("connection refused") @@ -109,7 +111,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("UpdateUsedAt failure returns error", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) value, secretHash := validPATValue(t, prefix) repo.EXPECT().GetBySecretHash(mock.Anything, secretHash).Return(models.PAT{ @@ -125,7 +127,7 @@ func TestValidator_Validate(t *testing.T) { t.Run("valid PAT returns PAT and updates used_at", func(t *testing.T) { repo := mocks.NewRepository(t) - v := userpat.NewValidator(log.NewNoop(), repo, cfg) + v := userpat.NewValidator(slog.New(slog.NewTextHandler(io.Discard, nil)), repo, cfg) value, secretHash := validPATValue(t, prefix) expectedPAT := models.PAT{ diff --git a/core/webhook/service.go b/core/webhook/service.go index e9637627c..fddd5de62 100644 --- a/core/webhook/service.go +++ b/core/webhook/service.go @@ -9,9 +9,8 @@ import ( "golang.org/x/exp/slices" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + frontierlogger "github.com/raystack/frontier/pkg/logger" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" @@ -90,10 +89,10 @@ func (s Service) ListEndpoints(ctx context.Context, filter EndpointFilter) ([]En } func (s Service) Publish(ctx context.Context, evt Event) error { - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) data, err := structpb.NewStruct(evt.Data) if err != nil { - logger.Error("failed to convert data to structpb", zap.Error(err)) + logger.Error("failed to convert data to structpb", "error", err) return fmt.Errorf("failed to convert data to structpb: %w", err) } event := &frontierv1beta1.WebhookEvent{ @@ -105,7 +104,7 @@ func (s Service) Publish(ctx context.Context, evt Event) error { payload, err := protojson.Marshal(event) if err != nil { - logger.Error("failed to marshal event", zap.Error(err)) + logger.Error("failed to marshal event", "error", err) return fmt.Errorf("failed to marshal event: %w", err) } @@ -117,7 +116,7 @@ func (s Service) Publish(ctx context.Context, evt Event) error { State: Enabled, }) if err != nil { - logger.Error("failed to list endpoints", zap.Error(err)) + logger.Error("failed to list endpoints", "error", err) return } var errs []error @@ -151,7 +150,7 @@ func (s Service) Publish(ctx context.Context, evt Event) error { } } if len(errs) > 0 { - logger.Error("failed to send events", zap.Errors("errs", errs)) + logger.Error("failed to send events", "errs", errs) } }() return nil diff --git a/go.mod b/go.mod index 342407a75..ec73065dd 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,6 @@ require ( github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/gorilla/securecookie v1.1.1 - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 github.com/jackc/pgconn v1.14.3 github.com/jackc/pgerrcode v0.0.0-20220416144525-469b46aa5efa @@ -48,7 +47,6 @@ require ( github.com/stripe/stripe-go/v79 v79.5.0 github.com/ua-parser/uap-go v0.0.0-20250917011043-9c86a9b0f8f0 go.opentelemetry.io/otel/sdk/metric v1.37.0 - go.uber.org/zap v1.26.0 gocloud.dev v0.28.0 golang.org/x/net v0.44.0 golang.org/x/oauth2 v0.30.0 @@ -106,6 +104,7 @@ require ( github.com/google/cel-go v0.26.1 // indirect github.com/google/go-tpm v0.9.0 // indirect github.com/google/s2a-go v0.1.7 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect diff --git a/go.sum b/go.sum index 9225d97f9..b466b5b02 100644 --- a/go.sum +++ b/go.sum @@ -2267,8 +2267,6 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= gocloud.dev v0.28.0 h1:PjL1f9zu8epY1pFCIHdrQnJRZzRcDyAr18hNTkXIKlQ= gocloud.dev v0.28.0/go.mod h1:nzSs01FpRYyIb/OqXLNNa+NMPZG9CdTUY/pGLgSpIN0= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= diff --git a/internal/api/v1beta1connect/audit_record.go b/internal/api/v1beta1connect/audit_record.go index 0e9d8d4bb..f76f636bc 100644 --- a/internal/api/v1beta1connect/audit_record.go +++ b/internal/api/v1beta1connect/audit_record.go @@ -16,7 +16,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" @@ -80,10 +79,10 @@ func (h *ConnectHandler) CreateAuditRecord(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateAuditRecord.Create", err, - zap.String("event", request.Msg.GetEvent()), - zap.String("actor_id", actor.GetId()), - zap.String("resource_id", resource.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "event", request.Msg.GetEvent(), + "actor_id", actor.GetId(), + "resource_id", resource.GetId(), + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, auditrecord.ErrIdempotencyKeyConflict): @@ -92,10 +91,10 @@ func (h *ConnectHandler) CreateAuditRecord(ctx context.Context, request *connect return nil, connect.NewError(connect.CodeNotFound, err) default: errorLogger.LogUnexpectedError(ctx, request, "CreateAuditRecord", err, - zap.String("event", request.Msg.GetEvent()), - zap.String("actor_id", actor.GetId()), - zap.String("resource_id", resource.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "event", request.Msg.GetEvent(), + "actor_id", actor.GetId(), + "resource_id", resource.GetId(), + "org_id", request.Msg.GetOrgId()) return nil, err } } diff --git a/internal/api/v1beta1connect/authenticate.go b/internal/api/v1beta1connect/authenticate.go index bb4aa4818..e493c0f7d 100644 --- a/internal/api/v1beta1connect/authenticate.go +++ b/internal/api/v1beta1connect/authenticate.go @@ -16,12 +16,10 @@ import ( "github.com/raystack/frontier/core/user" patErrors "github.com/raystack/frontier/core/userpat/errors" "github.com/raystack/frontier/internal/bootstrap/schema" + "github.com/raystack/frontier/pkg/errors" "github.com/raystack/frontier/pkg/server/consts" sessionutils "github.com/raystack/frontier/pkg/session" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - - "github.com/raystack/frontier/pkg/errors" - "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" @@ -61,8 +59,8 @@ func (h *ConnectHandler) Authenticate(ctx context.Context, request *connect.Requ }) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "Authenticate", err, - zap.String("strategy", request.Msg.GetStrategyName()), - zap.String("email", request.Msg.GetEmail())) + "strategy", request.Msg.GetStrategyName(), + "email", request.Msg.GetEmail()) return nil, connect.NewError(connect.CodeInternal, err) } @@ -80,13 +78,13 @@ func (h *ConnectHandler) Authenticate(ctx context.Context, request *connect.Requ userCredentils := &structpb.Value{} if err = userCredentils.UnmarshalJSON(response.StateConfig["options"].([]byte)); err != nil { errorLogger.LogUnexpectedError(ctx, request, "Authenticate", err, - zap.String("strategy", authenticate.PassKeyAuthMethod.String())) + "strategy", authenticate.PassKeyAuthMethod.String()) return nil, connect.NewError(connect.CodeInternal, err) } typeValue, ok := response.Flow.Metadata["passkey_type"].(string) if !ok { errorLogger.LogUnexpectedError(ctx, request, "Authenticate", err, - zap.String("strategy", authenticate.PassKeyAuthMethod.String())) + "strategy", authenticate.PassKeyAuthMethod.String()) return nil, connect.NewError(connect.CodeInternal, err) } stringValue := &structpb.Value{ @@ -121,13 +119,13 @@ func (h *ConnectHandler) AuthCallback(ctx context.Context, request *connect.Requ if err != nil { if errors.Is(err, authenticate.ErrInvalidMailOTP) || errors.Is(err, authenticate.ErrMissingOIDCCode) || errors.Is(err, authenticate.ErrInvalidOIDCState) || errors.Is(err, authenticate.ErrFlowInvalid) { errorLogger.LogServiceError(ctx, request, "AuthCallback.FinishFlow", err, - zap.String("strategy", request.Msg.GetStrategyName()), - zap.String("state", request.Msg.GetState())) + "strategy", request.Msg.GetStrategyName(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogUnexpectedError(ctx, request, "AuthCallback", err, - zap.String("strategy", request.Msg.GetStrategyName()), - zap.String("state", request.Msg.GetState())) + "strategy", request.Msg.GetStrategyName(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInternal, err) } @@ -138,7 +136,7 @@ func (h *ConnectHandler) AuthCallback(ctx context.Context, request *connect.Requ session, err := h.sessionService.Create(ctx, response.User.ID, sessionMetadata) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "AuthCallback", err, - zap.String("user_id", response.User.ID)) + "user_id", response.User.ID) return nil, connect.NewError(connect.CodeInternal, err) } // create response and set headers @@ -185,7 +183,7 @@ func (h *ConnectHandler) AuthToken(ctx context.Context, request *connect.Request authenticate.JWTGrantClientAssertion) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "AuthToken", err, - zap.String("grant_type", request.Msg.GetGrantType())) + "grant_type", request.Msg.GetGrantType()) return nil, connect.NewError(connect.CodeInternal, err) } @@ -194,8 +192,8 @@ func (h *ConnectHandler) AuthToken(ctx context.Context, request *connect.Request _, err := h.orgService.Get(ctx, orgId) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "AuthToken", err, - zap.String("org_id", orgId), - zap.String("service_user_id", principal.ServiceUser.ID)) + "org_id", orgId, + "service_user_id", principal.ServiceUser.ID) return nil, connect.NewError(connect.CodeInternal, err) } } @@ -203,8 +201,8 @@ func (h *ConnectHandler) AuthToken(ctx context.Context, request *connect.Request token, err := h.getAccessToken(ctx, principal, request.Header().Values(consts.ProjectRequestKey), request) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "AuthToken", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, connect.NewError(connect.CodeInternal, err) } @@ -241,7 +239,7 @@ func (h *ConnectHandler) getAccessToken(ctx context.Context, principal authentic if sessionID, err := h.getLoggedInSessionID(ctx); err == nil { customClaims[token.SessionIDClaimKey] = sessionID.String() } else { - errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, zap.String("principal", principal.ID)) + errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, "principal", principal.ID) } } @@ -250,7 +248,7 @@ func (h *ConnectHandler) getAccessToken(ctx context.Context, principal authentic // check if project exists and user has access to it proj, err := h.projectService.Get(ctx, projectKey[0]) if err != nil { - errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, zap.String("project", projectKey[0])) + errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, "project", projectKey[0]) } else { if err := h.IsAuthorized(ctx, relation.Object{ Namespace: schema.ProjectNamespace, @@ -258,7 +256,7 @@ func (h *ConnectHandler) getAccessToken(ctx context.Context, principal authentic }, schema.GetPermission, request); err == nil { customClaims["project_id"] = proj.ID } else { - errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, zap.String("project", proj.ID), zap.String("principal", principal.ID)) + errorLogger.LogUnexpectedError(ctx, request, "getAccessToken", err, "project", proj.ID, "principal", principal.ID) } } } @@ -275,7 +273,7 @@ func (h *ConnectHandler) AuthLogout(ctx context.Context, request *connect.Reques if err == nil { if err = h.sessionService.Delete(ctx, sessionID); err != nil { errorLogger.LogUnexpectedError(ctx, request, "AuthLogout", err, - zap.String("session_id", sessionID.String())) + "session_id", sessionID.String()) return nil, connect.NewError(connect.CodeInternal, err) } } diff --git a/internal/api/v1beta1connect/authenticate_test.go b/internal/api/v1beta1connect/authenticate_test.go index c9743d87c..5fb379969 100644 --- a/internal/api/v1beta1connect/authenticate_test.go +++ b/internal/api/v1beta1connect/authenticate_test.go @@ -3,6 +3,7 @@ package v1beta1connect import ( "context" "encoding/json" + "log/slog" "testing" "connectrpc.com/connect" @@ -12,10 +13,10 @@ import ( "github.com/raystack/frontier/core/serviceuser" "github.com/raystack/frontier/internal/api/v1beta1connect/mocks" "github.com/raystack/frontier/internal/bootstrap/schema" + frontierlogger "github.com/raystack/frontier/pkg/logger" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "go.uber.org/zap" ) func TestConnectHandler_AuthToken_ServiceUser(t *testing.T) { @@ -110,8 +111,7 @@ func TestConnectHandler_AuthToken_ServiceUser(t *testing.T) { }, } - logger := zap.NewNop() - ctx := context.WithValue(context.Background(), "logger", logger) + ctx := frontierlogger.ToContext(context.Background(), slog.Default()) resp, err := handler.AuthToken(ctx, tt.request) if tt.wantErr { diff --git a/internal/api/v1beta1connect/authorize.go b/internal/api/v1beta1connect/authorize.go index 28af599fc..5eb7ac1f2 100644 --- a/internal/api/v1beta1connect/authorize.go +++ b/internal/api/v1beta1connect/authorize.go @@ -17,7 +17,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/errors" "github.com/raystack/frontier/pkg/str" - "go.uber.org/zap" ) func (h *ConnectHandler) IsAuthorized(ctx context.Context, object relation.Object, permission string, request connect.AnyRequest) error { @@ -30,9 +29,9 @@ func (h *ConnectHandler) IsAuthorized(ctx context.Context, object relation.Objec currentUser, principalErr := h.GetLoggedInPrincipal(ctx) if principalErr != nil { errorLogger.LogUnexpectedError(ctx, request, "IsAuthorized", principalErr, - zap.String("namespace", object.Namespace), - zap.String("object_id", object.ID), - zap.String("permission", permission)) + "namespace", object.Namespace, + "object_id", object.ID, + "permission", permission) return principalErr } result, err := h.resourceService.CheckAuthz(ctx, resource.Check{ @@ -45,11 +44,11 @@ func (h *ConnectHandler) IsAuthorized(ctx context.Context, object relation.Objec }) if err != nil { errorLogger.LogServiceError(ctx, request, "IsAuthorized.CheckAuthz", err, - zap.String("namespace", object.Namespace), - zap.String("object_id", object.ID), - zap.String("permission", permission), - zap.String("subject_namespace", currentUser.Type), - zap.String("subject_id", currentUser.ID)) + "namespace", object.Namespace, + "object_id", object.ID, + "permission", permission, + "subject_namespace", currentUser.Type, + "subject_id", currentUser.ID) return handleAuthErr(err) } if result { @@ -69,12 +68,12 @@ func (h *ConnectHandler) IsAuthorized(ctx context.Context, object relation.Objec }) if checkErr != nil { errorLogger.LogServiceError(ctx, request, "IsAuthorized.CheckAuthz", checkErr, - zap.String("namespace", object.Namespace), - zap.String("object_id", object.ID), - zap.String("permission", permission), - zap.String("subject_namespace", currentUser.Type), - zap.String("subject_id", str.GenerateUserSlug(currentUser.User.Email)), - zap.String("user_email", currentUser.User.Email)) + "namespace", object.Namespace, + "object_id", object.ID, + "permission", permission, + "subject_namespace", currentUser.Type, + "subject_id", str.GenerateUserSlug(currentUser.User.Email), + "user_email", currentUser.User.Email) return handleAuthErr(checkErr) } if result2 { @@ -110,8 +109,8 @@ func (h *ConnectHandler) IsSuperUser(ctx context.Context, request connect.AnyReq if currentUser.Type == schema.UserPrincipal { if ok, err := h.userService.IsSudo(ctx, currentUser.ID, schema.PlatformSudoPermission); err != nil { errorLogger.LogUnexpectedError(ctx, request, "IsSuperUser", err, - zap.String("user_id", currentUser.ID), - zap.String("permission", schema.PlatformSudoPermission)) + "user_id", currentUser.ID, + "permission", schema.PlatformSudoPermission) return connect.NewError(connect.CodeInternal, err) } else if ok { return nil @@ -119,8 +118,8 @@ func (h *ConnectHandler) IsSuperUser(ctx context.Context, request connect.AnyReq } else { if ok, err := h.serviceUserService.IsSudo(ctx, currentUser.ID, schema.PlatformSudoPermission); err != nil { errorLogger.LogUnexpectedError(ctx, request, "IsSuperUser", err, - zap.String("service_user_id", currentUser.ID), - zap.String("permission", schema.PlatformSudoPermission)) + "service_user_id", currentUser.ID, + "permission", schema.PlatformSudoPermission) return connect.NewError(connect.CodeInternal, err) } else if ok { return nil @@ -140,8 +139,8 @@ func (h *ConnectHandler) CheckPlanEntitlement(ctx context.Context, obj relation. proj, err := h.projectService.Get(ctx, obj.ID) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "CheckPlanEntitlement", err, - zap.String("namespace", obj.Namespace), - zap.String("object_id", obj.ID)) + "namespace", obj.Namespace, + "object_id", obj.ID) return err } orgID = proj.Organization.ID @@ -149,8 +148,8 @@ func (h *ConnectHandler) CheckPlanEntitlement(ctx context.Context, obj relation. org, err := h.orgService.Get(ctx, obj.ID) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "CheckPlanEntitlement", err, - zap.String("namespace", obj.Namespace), - zap.String("object_id", obj.ID)) + "namespace", obj.Namespace, + "object_id", obj.ID) return err } orgID = org.ID @@ -161,7 +160,7 @@ func (h *ConnectHandler) CheckPlanEntitlement(ctx context.Context, obj relation. }) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "CheckPlanEntitlement", err, - zap.String("org_id", orgID)) + "org_id", orgID) return err } for _, customr := range customers { @@ -171,8 +170,8 @@ func (h *ConnectHandler) CheckPlanEntitlement(ctx context.Context, obj relation. }, map[string]string{}) if err := h.entitlementService.CheckPlanEligibility(ctx, customr.ID); err != nil { errorLogger.LogUnexpectedError(ctx, request, "CheckPlanEntitlement", err, - zap.String("customer_id", customr.ID), - zap.String("org_id", orgID)) + "customer_id", customr.ID, + "org_id", orgID) return fmt.Errorf("%s: %w", entitlement.ErrPlanEntitlementFailed, err) } } @@ -188,7 +187,7 @@ func (h *ConnectHandler) GetRawCheckout(ctx context.Context, id string, request result, err := h.checkoutService.GetByID(ctx, id) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "GetRawCheckout", err, - zap.String("checkout_id", id)) + "checkout_id", id) return checkout.Checkout{}, err } return result, nil diff --git a/internal/api/v1beta1connect/billing_check.go b/internal/api/v1beta1connect/billing_check.go index 8668d5f8d..cf5880f2b 100644 --- a/internal/api/v1beta1connect/billing_check.go +++ b/internal/api/v1beta1connect/billing_check.go @@ -7,7 +7,6 @@ import ( "connectrpc.com/connect" "github.com/raystack/frontier/billing/customer" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func (h *ConnectHandler) CheckFeatureEntitlement(ctx context.Context, request *connect.Request[frontierv1beta1.CheckFeatureEntitlementRequest]) (*connect.Response[frontierv1beta1.CheckFeatureEntitlementResponse], error) { @@ -23,16 +22,16 @@ func (h *ConnectHandler) CheckFeatureEntitlement(ctx context.Context, request *c return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "CheckFeatureEntitlement.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } checkStatus, err := h.entitlementService.Check(ctx, cust.ID, request.Msg.GetFeature()) if err != nil { errorLogger.LogServiceError(ctx, request, "CheckFeatureEntitlement", err, - zap.String("billing_id", cust.ID), - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("feature", request.Msg.GetFeature())) + "billing_id", cust.ID, + "org_id", request.Msg.GetOrgId(), + "feature", request.Msg.GetFeature()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -49,7 +48,7 @@ func (h *ConnectHandler) CheckCreditEntitlement(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "CheckCreditEntitlement.List", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -61,16 +60,16 @@ func (h *ConnectHandler) CheckCreditEntitlement(ctx context.Context, request *co customerDetails, err := h.customerService.GetDetails(ctx, customer.ID) if err != nil { errorLogger.LogServiceError(ctx, request, "CheckCreditEntitlement.GetDetails", err, - zap.String("customer_id", customer.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "customer_id", customer.ID, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } creditBalance, err := h.creditService.GetBalance(ctx, customer.ID) if err != nil { errorLogger.LogServiceError(ctx, request, "CheckCreditEntitlement.GetBalance", err, - zap.String("customer_id", customer.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "customer_id", customer.ID, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_checkout.go b/internal/api/v1beta1connect/billing_checkout.go index 76b6d3ad5..037e640e0 100644 --- a/internal/api/v1beta1connect/billing_checkout.go +++ b/internal/api/v1beta1connect/billing_checkout.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/billing/checkout" "github.com/raystack/frontier/billing/product" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -19,7 +18,7 @@ func (h *ConnectHandler) CreateCheckout(ctx context.Context, request *connect.Re billingID, err := h.GetBillingAccountFromOrgID(ctx, request.Msg.GetOrgId()) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateCheckout.GetBillingAccountFromOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -32,7 +31,7 @@ func (h *ConnectHandler) CreateCheckout(ctx context.Context, request *connect.Re }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateCheckout.CreateSessionForPaymentMethod", err, - zap.String("billing_id", billingID)) + "billing_id", billingID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -53,7 +52,7 @@ func (h *ConnectHandler) CreateCheckout(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeFailedPrecondition, ErrPortalChangesKycCompleted) } errorLogger.LogServiceError(ctx, request, "CreateCheckout.CreateSessionForCustomerPortal", err, - zap.String("billing_id", billingID)) + "billing_id", billingID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -96,12 +95,12 @@ func (h *ConnectHandler) CreateCheckout(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeInvalidArgument, ErrPerSeatLimitReached) } errorLogger.LogServiceError(ctx, request, "CreateCheckout.Create", err, - zap.String("billing_id", billingID), - zap.String("plan_id", planID), - zap.String("product_id", featureID), - zap.Int64("quantity", quantity), - zap.Bool("skip_trial", skipTrial), - zap.Bool("cancel_after_trial", cancelAfterTrial)) + "billing_id", billingID, + "plan_id", planID, + "product_id", featureID, + "quantity", quantity, + "skip_trial", skipTrial, + "cancel_after_trial", cancelAfterTrial) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -117,7 +116,7 @@ func (h *ConnectHandler) DelegatedCheckout(ctx context.Context, request *connect billingID, err := h.GetBillingAccountFromOrgID(ctx, request.Msg.GetOrgId()) if err != nil { errorLogger.LogServiceError(ctx, request, "DelegatedCheckout.GetBillingAccountFromOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -148,13 +147,13 @@ func (h *ConnectHandler) DelegatedCheckout(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "DelegatedCheckout.Apply", err, - zap.String("billing_id", billingID), - zap.String("plan_id", planID), - zap.String("product_id", productID), - zap.Int64("product_quantity", productQuantity), - zap.Bool("skip_trial", skipTrial), - zap.Bool("cancel_after_trial", cancelAfterTrail), - zap.String("provider_coupon_id", providerCouponID)) + "billing_id", billingID, + "plan_id", planID, + "product_id", productID, + "product_quantity", productQuantity, + "skip_trial", skipTrial, + "cancel_after_trial", cancelAfterTrail, + "provider_coupon_id", providerCouponID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -190,7 +189,7 @@ func (h *ConnectHandler) ListCheckouts(ctx context.Context, request *connect.Req billingID, err := h.GetBillingAccountFromOrgID(ctx, request.Msg.GetOrgId()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListCheckouts.GetBillingAccountFromOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -200,8 +199,8 @@ func (h *ConnectHandler) ListCheckouts(ctx context.Context, request *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListCheckouts.List", err, - zap.String("billing_id", billingID), - zap.String("org_id", request.Msg.GetOrgId())) + "billing_id", billingID, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range checkoutList { @@ -223,7 +222,7 @@ func (h *ConnectHandler) GetCheckout(ctx context.Context, request *connect.Reque ch, err := h.checkoutService.GetByID(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetCheckout.GetByID", err, - zap.String("checkout_id", request.Msg.GetId())) + "checkout_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_customer.go b/internal/api/v1beta1connect/billing_customer.go index 70e3cc73a..161b2ddc1 100644 --- a/internal/api/v1beta1connect/billing_customer.go +++ b/internal/api/v1beta1connect/billing_customer.go @@ -10,7 +10,6 @@ import ( "github.com/raystack/frontier/core/audit" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -59,11 +58,11 @@ func (h *ConnectHandler) CreateBillingAccount(ctx context.Context, request *conn return nil, connect.NewError(connect.CodeFailedPrecondition, err) } errorLogger.LogServiceError(ctx, request, "CreateBillingAccount.Create", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("customer_name", request.Msg.GetBody().GetName()), - zap.String("customer_email", request.Msg.GetBody().GetEmail()), - zap.String("currency", request.Msg.GetBody().GetCurrency()), - zap.Bool("offline", request.Msg.GetOffline())) + "org_id", request.Msg.GetOrgId(), + "customer_name", request.Msg.GetBody().GetName(), + "customer_email", request.Msg.GetBody().GetEmail(), + "currency", request.Msg.GetBody().GetCurrency(), + "offline", request.Msg.GetOffline()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -118,10 +117,10 @@ func (h *ConnectHandler) UpdateBillingAccount(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateBillingAccount.Update", err, - zap.String("customer_id", request.Msg.GetId()), - zap.String("customer_name", request.Msg.GetBody().GetName()), - zap.String("customer_email", request.Msg.GetBody().GetEmail()), - zap.String("currency", request.Msg.GetBody().GetCurrency())) + "customer_id", request.Msg.GetId(), + "customer_name", request.Msg.GetBody().GetName(), + "customer_email", request.Msg.GetBody().GetEmail(), + "currency", request.Msg.GetBody().GetCurrency()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -145,7 +144,7 @@ func (h *ConnectHandler) RegisterBillingAccount(ctx context.Context, request *co return nil, connect.NewError(connect.CodeNotFound, ErrCustomerNotFound) } errorLogger.LogServiceError(ctx, request, "RegisterBillingAccount.RegisterToProviderIfRequired", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.RegisterBillingAccountResponse{}), nil @@ -163,7 +162,7 @@ func (h *ConnectHandler) ListBillingAccounts(ctx context.Context, request *conne }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListBillingAccounts.List", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range customerList { @@ -191,7 +190,7 @@ func (h *ConnectHandler) DeleteBillingAccount(ctx context.Context, request *conn err := h.customerService.Delete(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteBillingAccount.Delete", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteBillingAccountResponse{}), nil @@ -203,7 +202,7 @@ func (h *ConnectHandler) EnableBillingAccount(ctx context.Context, request *conn err := h.customerService.Enable(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "EnableBillingAccount.Enable", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.EnableBillingAccountResponse{}), nil @@ -215,7 +214,7 @@ func (h *ConnectHandler) DisableBillingAccount(ctx context.Context, request *con err := h.customerService.Disable(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "DisableBillingAccount.Disable", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DisableBillingAccountResponse{}), nil @@ -227,7 +226,7 @@ func (h *ConnectHandler) GetBillingBalance(ctx context.Context, request *connect balanceAmount, err := h.creditService.GetBalance(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetBillingBalance.GetBalance", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.GetBillingBalanceResponse{ @@ -244,8 +243,8 @@ func (h *ConnectHandler) HasTrialed(ctx context.Context, request *connect.Reques hasTrialed, err := h.subscriptionService.HasUserSubscribedBefore(ctx, request.Msg.GetId(), request.Msg.GetPlanId()) if err != nil { errorLogger.LogServiceError(ctx, request, "HasTrialed.HasUserSubscribedBefore", err, - zap.String("customer_id", request.Msg.GetId()), - zap.String("plan_id", request.Msg.GetPlanId())) + "customer_id", request.Msg.GetId(), + "plan_id", request.Msg.GetPlanId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.HasTrialedResponse{ @@ -262,7 +261,7 @@ func (h *ConnectHandler) ListAllBillingAccounts(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListAllBillingAccounts.List", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range customerList { @@ -321,8 +320,8 @@ func (h *ConnectHandler) UpdateBillingAccountLimits(ctx context.Context, request _, err := h.customerService.UpdateCreditMinByID(ctx, request.Msg.GetId(), request.Msg.GetCreditMin()) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateBillingAccountLimits.UpdateCreditMinByID", err, - zap.String("customer_id", request.Msg.GetId()), - zap.Int64("credit_min", request.Msg.GetCreditMin())) + "customer_id", request.Msg.GetId(), + "credit_min", request.Msg.GetCreditMin()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -335,7 +334,7 @@ func (h *ConnectHandler) GetBillingAccountDetails(ctx context.Context, request * details, err := h.customerService.GetDetails(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetBillingAccountDetails.GetDetails", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -354,7 +353,7 @@ func (h *ConnectHandler) GetBillingAccount(ctx context.Context, request *connect return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) } errorLogger.LogServiceError(ctx, request, "GetBillingAccount.GetByID", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -363,7 +362,7 @@ func (h *ConnectHandler) GetBillingAccount(ctx context.Context, request *connect pms, err := h.customerService.ListPaymentMethods(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetBillingAccount.ListPaymentMethods", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range pms { @@ -381,7 +380,7 @@ func (h *ConnectHandler) GetBillingAccount(ctx context.Context, request *connect billingDetails, err := h.customerService.GetDetails(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetBillingAccount.GetDetails", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingDetailsPb = &frontierv1beta1.BillingAccountDetails{ @@ -440,9 +439,9 @@ func (h *ConnectHandler) UpdateBillingAccountDetails(ctx context.Context, reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateBillingAccountDetails.UpdateDetails", err, - zap.String("customer_id", request.Msg.GetId()), - zap.Int64("credit_min", request.Msg.GetCreditMin()), - zap.Int64("due_in_days", request.Msg.GetDueInDays())) + "customer_id", request.Msg.GetId(), + "credit_min", request.Msg.GetCreditMin(), + "due_in_days", request.Msg.GetDueInDays()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -458,7 +457,7 @@ func (h *ConnectHandler) UpdateBillingAccountDetails(ctx context.Context, reques }) } else { errorLogger.LogServiceError(ctx, request, "UpdateBillingAccountDetails.GetByID", err, - zap.String("customer_id", request.Msg.GetId())) + "customer_id", request.Msg.GetId()) } return connect.NewResponse(&frontierv1beta1.UpdateBillingAccountDetailsResponse{}), nil diff --git a/internal/api/v1beta1connect/billing_invoice.go b/internal/api/v1beta1connect/billing_invoice.go index 8b18531d7..0e468f902 100644 --- a/internal/api/v1beta1connect/billing_invoice.go +++ b/internal/api/v1beta1connect/billing_invoice.go @@ -12,7 +12,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -26,8 +25,8 @@ func (h *ConnectHandler) ListAllInvoices(ctx context.Context, request *connect.R }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListAllInvoices.ListAll", err, - zap.Int32("page_num", request.Msg.GetPageNum()), - zap.Int32("page_size", request.Msg.GetPageSize())) + "page_num", request.Msg.GetPageNum(), + "page_size", request.Msg.GetPageSize()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } var invoicePBs []*frontierv1beta1.Invoice @@ -63,7 +62,7 @@ func (h *ConnectHandler) ListInvoices(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "ListInvoices.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingID := cust.ID @@ -74,9 +73,9 @@ func (h *ConnectHandler) ListInvoices(ctx context.Context, request *connect.Requ }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListInvoices.List", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("billing_id", billingID), - zap.Bool("nonzero_amount_only", request.Msg.GetNonzeroAmountOnly())) + "org_id", request.Msg.GetOrgId(), + "billing_id", billingID, + "nonzero_amount_only", request.Msg.GetNonzeroAmountOnly()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } var invoicePBs []*frontierv1beta1.Invoice @@ -116,7 +115,7 @@ func (h *ConnectHandler) GetUpcomingInvoice(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "GetUpcomingInvoice.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingID := cust.ID @@ -124,8 +123,8 @@ func (h *ConnectHandler) GetUpcomingInvoice(ctx context.Context, request *connec invoice, err := h.invoiceService.GetUpcoming(ctx, billingID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetUpcomingInvoice.GetUpcoming", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("billing_id", billingID)) + "org_id", request.Msg.GetOrgId(), + "billing_id", billingID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } invoicePB, err := transformInvoiceToPB(invoice) @@ -205,8 +204,8 @@ func (h *ConnectHandler) SearchInvoices(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "SearchInvoices.SearchInvoices", err, - zap.Int("query_offset", rqlQuery.Offset), - zap.Int("query_limit", rqlQuery.Limit)) + "query_offset", rqlQuery.Offset, + "query_limit", rqlQuery.Limit) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_plan.go b/internal/api/v1beta1connect/billing_plan.go index 23ffcfbda..b7f12e201 100644 --- a/internal/api/v1beta1connect/billing_plan.go +++ b/internal/api/v1beta1connect/billing_plan.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/billing/product" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -82,17 +81,17 @@ func (h *ConnectHandler) CreatePlan(ctx context.Context, request *connect.Reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePlan.UpsertPlans", err, - zap.String("plan_name", planToCreate.Name), - zap.String("plan_title", planToCreate.Title), - zap.String("interval", planToCreate.Interval), - zap.Int("product_count", len(products))) + "plan_name", planToCreate.Name, + "plan_title", planToCreate.Title, + "interval", planToCreate.Interval, + "product_count", len(products)) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } newPlan, err := h.planService.GetByID(ctx, planToCreate.Name) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePlan.GetByID", err, - zap.String("plan_name", planToCreate.Name)) + "plan_name", planToCreate.Name) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -132,7 +131,7 @@ func (h *ConnectHandler) GetPlan(ctx context.Context, request *connect.Request[f planOb, err := h.planService.GetByID(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetPlan.GetByID", err, - zap.String("plan_id", request.Msg.GetId())) + "plan_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_product.go b/internal/api/v1beta1connect/billing_product.go index 9b740f99e..617468ae3 100644 --- a/internal/api/v1beta1connect/billing_product.go +++ b/internal/api/v1beta1connect/billing_product.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/billing/product" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func (h *ConnectHandler) ListProducts(ctx context.Context, request *connect.Request[frontierv1beta1.ListProductsRequest]) (*connect.Response[frontierv1beta1.ListProductsResponse], error) { @@ -40,7 +39,7 @@ func (h *ConnectHandler) GetProduct(ctx context.Context, request *connect.Reques product, err := h.productService.GetByID(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetProduct.GetByID", err, - zap.String("product_id", request.Msg.GetId())) + "product_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -106,12 +105,12 @@ func (h *ConnectHandler) CreateProduct(ctx context.Context, request *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProduct.Create", err, - zap.String("product_name", request.Msg.GetBody().GetName()), - zap.String("product_title", request.Msg.GetBody().GetTitle()), - zap.String("plan_id", request.Msg.GetBody().GetPlanId()), - zap.String("behavior", request.Msg.GetBody().GetBehavior()), - zap.Int("price_count", len(productPrices)), - zap.Int("feature_count", len(productFeatures))) + "product_name", request.Msg.GetBody().GetName(), + "product_title", request.Msg.GetBody().GetTitle(), + "plan_id", request.Msg.GetBody().GetPlanId(), + "behavior", request.Msg.GetBody().GetBehavior(), + "price_count", len(productPrices), + "feature_count", len(productFeatures)) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -172,12 +171,12 @@ func (h *ConnectHandler) UpdateProduct(ctx context.Context, request *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateProduct.Update", err, - zap.String("product_id", request.Msg.GetId()), - zap.String("product_name", request.Msg.GetBody().GetName()), - zap.String("product_title", request.Msg.GetBody().GetTitle()), - zap.String("behavior", request.Msg.GetBody().GetBehavior()), - zap.Int("price_count", len(productPrices)), - zap.Int("feature_count", len(productFeatures))) + "product_id", request.Msg.GetId(), + "product_name", request.Msg.GetBody().GetName(), + "product_title", request.Msg.GetBody().GetTitle(), + "behavior", request.Msg.GetBody().GetBehavior(), + "price_count", len(productPrices), + "feature_count", len(productFeatures)) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } productPb, err := transformProductToPB(updatedProduct) @@ -230,9 +229,9 @@ func (h *ConnectHandler) CreateFeature(ctx context.Context, request *connect.Req return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "CreateFeature.UpsertFeature", err, - zap.String("feature_name", request.Msg.GetBody().GetName()), - zap.String("feature_title", request.Msg.GetBody().GetTitle()), - zap.Strings("product_ids", request.Msg.GetBody().GetProductIds())) + "feature_name", request.Msg.GetBody().GetName(), + "feature_title", request.Msg.GetBody().GetTitle(), + "product_ids", request.Msg.GetBody().GetProductIds()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -263,10 +262,10 @@ func (h *ConnectHandler) UpdateFeature(ctx context.Context, request *connect.Req return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "UpdateFeature.UpsertFeature", err, - zap.String("feature_id", request.Msg.GetId()), - zap.String("feature_name", request.Msg.GetBody().GetName()), - zap.String("feature_title", request.Msg.GetBody().GetTitle()), - zap.Strings("product_ids", request.Msg.GetBody().GetProductIds())) + "feature_id", request.Msg.GetId(), + "feature_name", request.Msg.GetBody().GetName(), + "feature_title", request.Msg.GetBody().GetTitle(), + "product_ids", request.Msg.GetBody().GetProductIds()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -287,7 +286,7 @@ func (h *ConnectHandler) GetFeature(ctx context.Context, request *connect.Reques feature, err := h.productService.GetFeatureByID(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetFeature.GetFeatureByID", err, - zap.String("feature_id", request.Msg.GetId())) + "feature_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_subscription.go b/internal/api/v1beta1connect/billing_subscription.go index 614786635..61a76429b 100644 --- a/internal/api/v1beta1connect/billing_subscription.go +++ b/internal/api/v1beta1connect/billing_subscription.go @@ -9,7 +9,6 @@ import ( "github.com/raystack/frontier/billing/product" "github.com/raystack/frontier/billing/subscription" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -31,7 +30,7 @@ func (h *ConnectHandler) ListSubscriptions(ctx context.Context, request *connect }), nil } errorLogger.LogServiceError(ctx, request, "ListSubscriptions.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingID := cust.ID @@ -41,7 +40,7 @@ func (h *ConnectHandler) ListSubscriptions(ctx context.Context, request *connect plan, err := h.planService.GetByID(ctx, planID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListSubscriptions.GetByID", err, - zap.String("plan_id", planID)) + "plan_id", planID) return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } planID = plan.ID @@ -55,10 +54,10 @@ func (h *ConnectHandler) ListSubscriptions(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListSubscriptions.List", err, - zap.String("billing_id", billingID), - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState()), - zap.String("plan_id", planID)) + "billing_id", billingID, + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState(), + "plan_id", planID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range subscriptionList { @@ -86,7 +85,7 @@ func (h *ConnectHandler) GetSubscription(ctx context.Context, request *connect.R subscription, err := h.subscriptionService.GetByID(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetSubscription.GetByID", err, - zap.String("subscription_id", request.Msg.GetId())) + "subscription_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -111,8 +110,8 @@ func (h *ConnectHandler) CancelSubscription(ctx context.Context, request *connec _, err := h.subscriptionService.Cancel(ctx, request.Msg.GetId(), request.Msg.GetImmediate()) if err != nil { errorLogger.LogServiceError(ctx, request, "CancelSubscription.Cancel", err, - zap.String("subscription_id", request.Msg.GetId()), - zap.Bool("immediate", request.Msg.GetImmediate())) + "subscription_id", request.Msg.GetId(), + "immediate", request.Msg.GetImmediate()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.CancelSubscriptionResponse{}), nil @@ -149,10 +148,10 @@ func (h *ConnectHandler) ChangeSubscription(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, ErrAlreadyOnSamePlan) } errorLogger.LogServiceError(ctx, request, "ChangeSubscription.ChangePlan", err, - zap.String("subscription_id", request.Msg.GetId()), - zap.String("plan_id", changeReq.PlanID), - zap.Bool("immediate", changeReq.Immediate), - zap.Bool("cancel_upcoming", changeReq.CancelUpcoming)) + "subscription_id", request.Msg.GetId(), + "plan_id", changeReq.PlanID, + "immediate", changeReq.Immediate, + "cancel_upcoming", changeReq.CancelUpcoming) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/billing_usage.go b/internal/api/v1beta1connect/billing_usage.go index 9f17674c2..13d382443 100644 --- a/internal/api/v1beta1connect/billing_usage.go +++ b/internal/api/v1beta1connect/billing_usage.go @@ -13,7 +13,6 @@ import ( "github.com/raystack/frontier/billing/usage" "github.com/raystack/frontier/internal/bootstrap/schema" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -30,7 +29,7 @@ func (h *ConnectHandler) CreateBillingUsage(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "CreateBillingUsage.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -61,9 +60,9 @@ func (h *ConnectHandler) CreateBillingUsage(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeAlreadyExists, ErrAlreadyApplied) } errorLogger.LogServiceError(ctx, request, "CreateBillingUsage.Report", err, - zap.String("billing_id", cust.ID), - zap.String("org_id", request.Msg.GetOrgId()), - zap.Int("usage_count", len(createRequests))) + "billing_id", cust.ID, + "org_id", request.Msg.GetOrgId(), + "usage_count", len(createRequests)) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -87,7 +86,7 @@ func (h *ConnectHandler) ListBillingTransactions(ctx context.Context, request *c return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "ListBillingTransactions.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingID := cust.ID @@ -112,10 +111,10 @@ func (h *ConnectHandler) ListBillingTransactions(ctx context.Context, request *c }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListBillingTransactions.List", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("billing_id", billingID), - zap.Time("start_range", startRange), - zap.Time("end_range", endRange)) + "org_id", request.Msg.GetOrgId(), + "billing_id", billingID, + "start_range", startRange, + "end_range", endRange) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, v := range transactionsList { @@ -157,7 +156,7 @@ func (h *ConnectHandler) TotalDebitedTransactions(ctx context.Context, request * return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "TotalDebitedTransactions.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } billingID := cust.ID @@ -165,8 +164,8 @@ func (h *ConnectHandler) TotalDebitedTransactions(ctx context.Context, request * debitAmount, err := h.creditService.GetTotalDebitedAmount(ctx, billingID) if err != nil { errorLogger.LogServiceError(ctx, request, "TotalDebitedTransactions.GetTotalDebitedAmount", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("billing_id", billingID)) + "org_id", request.Msg.GetOrgId(), + "billing_id", billingID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -210,7 +209,7 @@ func (h *ConnectHandler) RevertBillingUsage(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "RevertBillingUsage.GetByOrgID", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -228,10 +227,10 @@ func (h *ConnectHandler) RevertBillingUsage(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "RevertBillingUsage.Revert", err, - zap.String("billing_id", cust.ID), - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("usage_id", request.Msg.GetUsageId()), - zap.Int64("amount", request.Msg.GetAmount())) + "billing_id", cust.ID, + "org_id", request.Msg.GetOrgId(), + "usage_id", request.Msg.GetUsageId(), + "amount", request.Msg.GetAmount()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.RevertBillingUsageResponse{}), nil diff --git a/internal/api/v1beta1connect/billing_webhook.go b/internal/api/v1beta1connect/billing_webhook.go index 0c6a33487..621f32f35 100644 --- a/internal/api/v1beta1connect/billing_webhook.go +++ b/internal/api/v1beta1connect/billing_webhook.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/core/event" "github.com/raystack/frontier/pkg/server/consts" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func (h *ConnectHandler) BillingWebhookCallback(ctx context.Context, request *connect.Request[frontierv1beta1.BillingWebhookCallbackRequest]) (*connect.Response[frontierv1beta1.BillingWebhookCallbackResponse], error) { @@ -29,7 +28,7 @@ func (h *ConnectHandler) BillingWebhookCallback(ctx context.Context, request *co Body: request.Msg.GetBody(), }); err != nil { errorLogger.LogServiceError(ctx, request, "BillingWebhookCallback.BillingWebhook", err, - zap.String("provider", request.Msg.GetProvider())) + "provider", request.Msg.GetProvider()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.BillingWebhookCallbackResponse{}), nil diff --git a/internal/api/v1beta1connect/deleter.go b/internal/api/v1beta1connect/deleter.go index b13d2d8ce..352841a38 100644 --- a/internal/api/v1beta1connect/deleter.go +++ b/internal/api/v1beta1connect/deleter.go @@ -5,7 +5,6 @@ import ( "connectrpc.com/connect" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func (h *ConnectHandler) DeleteProject(ctx context.Context, request *connect.Request[frontierv1beta1.DeleteProjectRequest]) (*connect.Response[frontierv1beta1.DeleteProjectResponse], error) { @@ -13,7 +12,7 @@ func (h *ConnectHandler) DeleteProject(ctx context.Context, request *connect.Req if err := h.deleterService.DeleteProject(ctx, request.Msg.GetId()); err != nil { errorLogger.LogServiceError(ctx, request, "DeleteProject.DeleteProject", err, - zap.String("project_id", request.Msg.GetId())) + "project_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteProjectResponse{}), nil @@ -24,7 +23,7 @@ func (h *ConnectHandler) DeleteOrganization(ctx context.Context, request *connec if err := h.deleterService.DeleteOrganization(ctx, request.Msg.GetId()); err != nil { errorLogger.LogServiceError(ctx, request, "DeleteOrganization.DeleteOrganization", err, - zap.String("organization_id", request.Msg.GetId())) + "organization_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteOrganizationResponse{}), nil diff --git a/internal/api/v1beta1connect/domain.go b/internal/api/v1beta1connect/domain.go index fb5a35600..10bf3e9bf 100644 --- a/internal/api/v1beta1connect/domain.go +++ b/internal/api/v1beta1connect/domain.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/pkg/errors" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -24,7 +23,7 @@ func (h *ConnectHandler) CreateOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "CreateOrganizationDomain.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -39,8 +38,8 @@ func (h *ConnectHandler) CreateOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeAlreadyExists, ErrDomainAlreadyExists) default: errorLogger.LogServiceError(ctx, request, "CreateOrganizationDomain.Create", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("domain_name", request.Msg.GetDomain())) + "org_id", request.Msg.GetOrgId(), + "domain_name", request.Msg.GetDomain()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -61,7 +60,7 @@ func (h *ConnectHandler) DeleteOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "DeleteOrganizationDomain.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -72,8 +71,8 @@ func (h *ConnectHandler) DeleteOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrDomainNotFound) default: errorLogger.LogServiceError(ctx, request, "DeleteOrganizationDomain.Delete", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("domain_id", request.Msg.GetId())) + "org_id", request.Msg.GetOrgId(), + "domain_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -93,7 +92,7 @@ func (h *ConnectHandler) GetOrganizationDomain(ctx context.Context, request *con return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "GetOrganizationDomain.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -105,8 +104,8 @@ func (h *ConnectHandler) GetOrganizationDomain(ctx context.Context, request *con return nil, connect.NewError(connect.CodeNotFound, ErrDomainNotFound) default: errorLogger.LogServiceError(ctx, request, "GetOrganizationDomain.Get", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("domain_id", request.Msg.GetId())) + "org_id", request.Msg.GetOrgId(), + "domain_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -127,7 +126,7 @@ func (h *ConnectHandler) JoinOrganization(ctx context.Context, request *connect. return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "JoinOrganization.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -136,7 +135,7 @@ func (h *ConnectHandler) JoinOrganization(ctx context.Context, request *connect. principal, err := h.GetLoggedInPrincipal(ctx) if err != nil { errorLogger.LogServiceError(ctx, request, "JoinOrganization.GetLoggedInPrincipal", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeUnauthenticated, ErrUnauthenticated) } @@ -146,8 +145,8 @@ func (h *ConnectHandler) JoinOrganization(ctx context.Context, request *connect. return nil, connect.NewError(connect.CodeInvalidArgument, ErrDomainMismatch) default: errorLogger.LogServiceError(ctx, request, "JoinOrganization.Join", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("principal_id", principal.ID)) + "org_id", request.Msg.GetOrgId(), + "principal_id", principal.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -167,7 +166,7 @@ func (h *ConnectHandler) VerifyOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "VerifyOrganizationDomain.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -183,8 +182,8 @@ func (h *ConnectHandler) VerifyOrganizationDomain(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrTXTRecordNotFound) default: errorLogger.LogServiceError(ctx, request, "VerifyOrganizationDomain.VerifyDomain", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("domain_id", request.Msg.GetId())) + "org_id", request.Msg.GetOrgId(), + "domain_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -204,7 +203,7 @@ func (h *ConnectHandler) ListOrganizationDomains(ctx context.Context, request *c return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationDomains.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -212,8 +211,8 @@ func (h *ConnectHandler) ListOrganizationDomains(ctx context.Context, request *c domains, err := h.domainService.List(ctx, domain.Filter{OrgID: orgResp.ID, State: domain.Status(request.Msg.GetState())}) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationDomains.List", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState())) + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/error_handler.go b/internal/api/v1beta1connect/error_handler.go index 8ec517192..da2099aa5 100644 --- a/internal/api/v1beta1connect/error_handler.go +++ b/internal/api/v1beta1connect/error_handler.go @@ -5,9 +5,8 @@ import ( "fmt" "connectrpc.com/connect" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/server/consts" - "go.uber.org/zap" ) // ErrorLogger provides centralized error logging functionality for Connect handlers @@ -19,51 +18,40 @@ func NewErrorLogger() *ErrorLogger { } // LogServiceError logs detailed service error information with context -func (e *ErrorLogger) LogServiceError(ctx context.Context, req connect.AnyRequest, operation string, err error, contextFields ...zap.Field) { - logger := grpczap.Extract(ctx) - requestID := e.getRequestID(req) - - // Build base fields for logging - baseFields := []zap.Field{ - zap.String("operation", operation), - zap.String("request_id", requestID), - zap.String("error_type", fmt.Sprintf("%T", err)), - zap.Error(err), +func (e *ErrorLogger) LogServiceError(ctx context.Context, req connect.AnyRequest, operation string, err error, contextArgs ...any) { + logger := frontierlogger.FromContext(ctx) + args := []any{ + "operation", operation, + "request_id", e.getRequestID(req), + "error_type", fmt.Sprintf("%T", err), + "error", err, } - baseFields = append(baseFields, contextFields...) - - // Log detailed error - logger.Error(fmt.Sprintf("%s operation failed", operation), baseFields...) + args = append(args, contextArgs...) + logger.Error(fmt.Sprintf("%s operation failed", operation), args...) } // LogUnexpectedError logs additional context for unexpected internal errors -func (e *ErrorLogger) LogUnexpectedError(ctx context.Context, req connect.AnyRequest, operation string, err error, contextFields ...zap.Field) { - logger := grpczap.Extract(ctx) - requestID := e.getRequestID(req) - - // Build base fields for logging - baseFields := []zap.Field{ - zap.String("operation", operation), - zap.String("request_id", requestID), - zap.String("error_chain", fmt.Sprintf("%+v", err)), - zap.Error(err), +func (e *ErrorLogger) LogUnexpectedError(ctx context.Context, req connect.AnyRequest, operation string, err error, contextArgs ...any) { + logger := frontierlogger.FromContext(ctx) + args := []any{ + "operation", operation, + "request_id", e.getRequestID(req), + "error_chain", fmt.Sprintf("%+v", err), + "error", err, } - baseFields = append(baseFields, contextFields...) - - logger.Error(fmt.Sprintf("unexpected error in %s", operation), baseFields...) + args = append(args, contextArgs...) + logger.Error(fmt.Sprintf("unexpected error in %s", operation), args...) } // LogTransformError logs protobuf transformation errors func (e *ErrorLogger) LogTransformError(ctx context.Context, req connect.AnyRequest, operation string, entityID string, err error) { - logger := grpczap.Extract(ctx) - requestID := e.getRequestID(req) - + logger := frontierlogger.FromContext(ctx) logger.Error("protobuf transformation failed", - zap.String("operation", operation), - zap.String("request_id", requestID), - zap.String("entity_id", entityID), - zap.String("error_type", fmt.Sprintf("%T", err)), - zap.Error(err)) + "operation", operation, + "request_id", e.getRequestID(req), + "entity_id", entityID, + "error_type", fmt.Sprintf("%T", err), + "error", err) } // getRequestID extracts request ID from Connect request diff --git a/internal/api/v1beta1connect/group.go b/internal/api/v1beta1connect/group.go index 785e330b5..f0c8d933b 100644 --- a/internal/api/v1beta1connect/group.go +++ b/internal/api/v1beta1connect/group.go @@ -15,7 +15,6 @@ import ( "github.com/raystack/frontier/pkg/str" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -30,8 +29,8 @@ func (h *ConnectHandler) ListGroups(ctx context.Context, request *connect.Reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListGroups.List", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState())) + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -60,7 +59,7 @@ func (h *ConnectHandler) ListOrganizationGroups(ctx context.Context, request *co return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationGroups.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -74,10 +73,10 @@ func (h *ConnectHandler) ListOrganizationGroups(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationGroups.List", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState()), - zap.Strings("group_ids", request.Msg.GetGroupIds()), - zap.Bool("with_member_count", request.Msg.GetWithMemberCount())) + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState(), + "group_ids", request.Msg.GetGroupIds(), + "with_member_count", request.Msg.GetWithMemberCount()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -92,7 +91,7 @@ func (h *ConnectHandler) ListOrganizationGroups(ctx context.Context, request *co groupUsers, err := h.userService.ListByGroup(ctx, v.ID, "") if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationGroups.ListByGroup", err, - zap.String("group_id", v.ID)) + "group_id", v.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } var groupUsersErr error @@ -108,7 +107,7 @@ func (h *ConnectHandler) ListOrganizationGroups(ctx context.Context, request *co }) if groupUsersErr != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationGroups.transformUserToPB", groupUsersErr, - zap.String("group_id", v.ID)) + "group_id", v.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -135,7 +134,7 @@ func (h *ConnectHandler) CreateGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "CreateGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -169,9 +168,9 @@ func (h *ConnectHandler) CreateGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeUnauthenticated, ErrUnauthenticated) default: errorLogger.LogServiceError(ctx, request, "CreateGroup.Create", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("group_name", name), - zap.String("group_title", requestBody.GetTitle())) + "org_id", request.Msg.GetOrgId(), + "group_name", name, + "group_title", requestBody.GetTitle()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -198,7 +197,7 @@ func (h *ConnectHandler) GetGroup(ctx context.Context, request *connect.Request[ return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "GetGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -210,7 +209,7 @@ func (h *ConnectHandler) GetGroup(ctx context.Context, request *connect.Request[ return nil, connect.NewError(connect.CodeNotFound, ErrGroupNotFound) default: errorLogger.LogServiceError(ctx, request, "GetGroup.Get", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -225,7 +224,7 @@ func (h *ConnectHandler) GetGroup(ctx context.Context, request *connect.Request[ groupUsers, err := h.userService.ListByGroup(ctx, fetchedGroup.ID, "") if err != nil { errorLogger.LogServiceError(ctx, request, "GetGroup.ListByGroup", err, - zap.String("group_id", fetchedGroup.ID)) + "group_id", fetchedGroup.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } var groupUsersErr error @@ -241,7 +240,7 @@ func (h *ConnectHandler) GetGroup(ctx context.Context, request *connect.Request[ }) if groupUsersErr != nil { errorLogger.LogServiceError(ctx, request, "GetGroup.transformUserToPB", groupUsersErr, - zap.String("group_id", fetchedGroup.ID)) + "group_id", fetchedGroup.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -265,7 +264,7 @@ func (h *ConnectHandler) UpdateGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "UpdateGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -293,8 +292,8 @@ func (h *ConnectHandler) UpdateGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogServiceError(ctx, request, "UpdateGroup.Update", err, - zap.String("group_id", request.Msg.GetId()), - zap.String("group_name", request.Msg.GetBody().GetName())) + "group_id", request.Msg.GetId(), + "group_name", request.Msg.GetBody().GetName()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -321,7 +320,7 @@ func (h *ConnectHandler) ListGroupUsers(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "ListGroupUsers.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -331,7 +330,7 @@ func (h *ConnectHandler) ListGroupUsers(ctx context.Context, request *connect.Re users, err := h.userService.ListByGroup(ctx, request.Msg.GetId(), "") if err != nil { errorLogger.LogServiceError(ctx, request, "ListGroupUsers.ListByGroup", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -349,8 +348,8 @@ func (h *ConnectHandler) ListGroupUsers(ctx context.Context, request *connect.Re roles, err := h.policyService.ListRoles(ctx, schema.UserPrincipal, user.ID, schema.GroupNamespace, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListGroupUsers.ListRoles", err, - zap.String("user_id", user.ID), - zap.String("group_id", request.Msg.GetId())) + "user_id", user.ID, + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -389,15 +388,15 @@ func (h *ConnectHandler) AddGroupUsers(ctx context.Context, request *connect.Req return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "AddGroupUsers.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } if err := h.groupService.AddUsers(ctx, request.Msg.GetId(), request.Msg.GetUserIds()); err != nil { errorLogger.LogServiceError(ctx, request, "AddGroupUsers.AddUsers", err, - zap.String("group_id", request.Msg.GetId()), - zap.Strings("user_ids", request.Msg.GetUserIds())) + "group_id", request.Msg.GetId(), + "user_ids", request.Msg.GetUserIds()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.AddGroupUsersResponse{}), nil @@ -415,7 +414,7 @@ func (h *ConnectHandler) RemoveGroupUser(ctx context.Context, request *connect.R return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "RemoveGroupUser.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -424,7 +423,7 @@ func (h *ConnectHandler) RemoveGroupUser(ctx context.Context, request *connect.R owners, err := h.userService.ListByGroup(ctx, request.Msg.GetId(), group.AdminRole) if err != nil { errorLogger.LogServiceError(ctx, request, "RemoveGroupUser.ListByGroup", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } if len(owners) == 1 && owners[0].ID == request.Msg.GetUserId() { @@ -434,8 +433,8 @@ func (h *ConnectHandler) RemoveGroupUser(ctx context.Context, request *connect.R // delete the user if err := h.groupService.RemoveUsers(ctx, request.Msg.GetId(), []string{request.Msg.GetUserId()}); err != nil { errorLogger.LogServiceError(ctx, request, "RemoveGroupUser.RemoveUsers", err, - zap.String("group_id", request.Msg.GetId()), - zap.String("user_id", request.Msg.GetUserId())) + "group_id", request.Msg.GetId(), + "user_id", request.Msg.GetUserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.RemoveGroupUserResponse{}), nil @@ -453,7 +452,7 @@ func (h *ConnectHandler) EnableGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "EnableGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -463,7 +462,7 @@ func (h *ConnectHandler) EnableGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrGroupNotFound) default: errorLogger.LogServiceError(ctx, request, "EnableGroup.Enable", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -482,7 +481,7 @@ func (h *ConnectHandler) DisableGroup(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "DisableGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -492,7 +491,7 @@ func (h *ConnectHandler) DisableGroup(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeNotFound, ErrGroupNotFound) default: errorLogger.LogServiceError(ctx, request, "DisableGroup.Disable", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -511,7 +510,7 @@ func (h *ConnectHandler) DeleteGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrOrgNotFound) default: errorLogger.LogServiceError(ctx, request, "DeleteGroup.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -521,7 +520,7 @@ func (h *ConnectHandler) DeleteGroup(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrGroupNotFound) default: errorLogger.LogServiceError(ctx, request, "DeleteGroup.Delete", err, - zap.String("group_id", request.Msg.GetId())) + "group_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/invitations.go b/internal/api/v1beta1connect/invitations.go index 24273a2f9..0ee6273e7 100644 --- a/internal/api/v1beta1connect/invitations.go +++ b/internal/api/v1beta1connect/invitations.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/core/user" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -27,7 +26,7 @@ func (h *ConnectHandler) ListOrganizationInvitations(ctx context.Context, reques return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationInvitations.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -38,8 +37,8 @@ func (h *ConnectHandler) ListOrganizationInvitations(ctx context.Context, reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationInvitations.List", err, - zap.String("org_id", orgResp.ID), - zap.String("user_id", request.Msg.GetUserId())) + "org_id", orgResp.ID, + "user_id", request.Msg.GetUserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -73,7 +72,7 @@ func (h *ConnectHandler) ListCurrentUserInvitations(ctx context.Context, request invites, err := h.invitationService.ListByUser(ctx, principal.User.Email) if err != nil { errorLogger.LogServiceError(ctx, request, "ListCurrentUserInvitations.ListByUser", err, - zap.String("user_email", principal.User.Email)) + "user_email", principal.User.Email) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -94,7 +93,7 @@ func (h *ConnectHandler) ListCurrentUserInvitations(ctx context.Context, request orgResp, err := h.orgService.Get(ctx, org) if err != nil { errorLogger.LogServiceError(ctx, request, "ListCurrentUserInvitations.Get", err, - zap.String("org_id", org)) + "org_id", org) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } orgPB, err := transformOrgToPB(orgResp) @@ -117,7 +116,7 @@ func (h *ConnectHandler) ListUserInvitations(ctx context.Context, request *conne invite, err := h.invitationService.ListByUser(ctx, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListUserInvitations.ListByUser", err, - zap.String("user_id", request.Msg.GetId())) + "user_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -148,7 +147,7 @@ func (h *ConnectHandler) CreateOrganizationInvitation(ctx context.Context, reque return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "CreateOrganizationInvitation.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -172,10 +171,10 @@ func (h *ConnectHandler) CreateOrganizationInvitation(ctx context.Context, reque return nil, connect.NewError(connect.CodeAlreadyExists, ErrAlreadyMember) } errorLogger.LogServiceError(ctx, request, "CreateOrganizationInvitation.Create", err, - zap.String("user_email", userID), - zap.String("org_id", orgResp.ID), - zap.Strings("role_ids", request.Msg.GetRoleIds()), - zap.Strings("group_ids", request.Msg.GetGroupIds())) + "user_email", userID, + "org_id", orgResp.ID, + "role_ids", request.Msg.GetRoleIds(), + "group_ids", request.Msg.GetGroupIds()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } createdInvitations = append(createdInvitations, inv) @@ -208,7 +207,7 @@ func (h *ConnectHandler) GetOrganizationInvitation(ctx context.Context, request return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "GetOrganizationInvitation.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -221,7 +220,7 @@ func (h *ConnectHandler) GetOrganizationInvitation(ctx context.Context, request inv, err := h.invitationService.Get(ctx, inviteID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetOrganizationInvitation.Get", err, - zap.String("invitation_id", request.Msg.GetId())) + "invitation_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -248,7 +247,7 @@ func (h *ConnectHandler) AcceptOrganizationInvitation(ctx context.Context, reque return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "AcceptOrganizationInvitation.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -268,8 +267,8 @@ func (h *ConnectHandler) AcceptOrganizationInvitation(ctx context.Context, reque return nil, connect.NewError(connect.CodeNotFound, ErrUserNotExist) default: errorLogger.LogServiceError(ctx, request, "AcceptOrganizationInvitation.Accept", err, - zap.String("invitation_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "invitation_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -289,7 +288,7 @@ func (h *ConnectHandler) DeleteOrganizationInvitation(ctx context.Context, reque return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "DeleteOrganizationInvitation.Get", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -301,8 +300,8 @@ func (h *ConnectHandler) DeleteOrganizationInvitation(ctx context.Context, reque if err := h.invitationService.Delete(ctx, inviteID); err != nil { errorLogger.LogServiceError(ctx, request, "DeleteOrganizationInvitation.Delete", err, - zap.String("invitation_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "invitation_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/kyc.go b/internal/api/v1beta1connect/kyc.go index 32bcc5dfd..1d09655a2 100644 --- a/internal/api/v1beta1connect/kyc.go +++ b/internal/api/v1beta1connect/kyc.go @@ -9,7 +9,6 @@ import ( "github.com/raystack/frontier/core/kyc" "github.com/raystack/frontier/pkg/errors" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -31,9 +30,9 @@ func (h *ConnectHandler) SetOrganizationKyc(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, kyc.ErrOrgDoesntExist) default: errorLogger.LogServiceError(ctx, request, "SetOrganizationKyc.SetKyc", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.Bool("status", request.Msg.GetStatus()), - zap.String("link", request.Msg.GetLink())) + "org_id", request.Msg.GetOrgId(), + "status", request.Msg.GetStatus(), + "link", request.Msg.GetLink()) return nil, connect.NewError(connect.CodeInternal, err) } } @@ -63,7 +62,7 @@ func (h *ConnectHandler) GetOrganizationKyc(ctx context.Context, request *connec } default: errorLogger.LogServiceError(ctx, request, "GetOrganizationKyc.GetKyc", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, err) } } diff --git a/internal/api/v1beta1connect/metaschema.go b/internal/api/v1beta1connect/metaschema.go index ac6d3da70..b2a016bd3 100644 --- a/internal/api/v1beta1connect/metaschema.go +++ b/internal/api/v1beta1connect/metaschema.go @@ -8,7 +8,6 @@ import ( "connectrpc.com/connect" "github.com/raystack/frontier/core/metaschema" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -60,7 +59,7 @@ func (h *ConnectHandler) CreateMetaSchema(ctx context.Context, req *connect.Requ return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogServiceError(ctx, req, "CreateMetaSchema.Create", err, - zap.String("metaschema_name", req.Msg.GetBody().GetName())) + "metaschema_name", req.Msg.GetBody().GetName()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -86,7 +85,7 @@ func (h *ConnectHandler) GetMetaSchema(ctx context.Context, req *connect.Request return nil, connect.NewError(connect.CodeNotFound, ErrMetaschemaNotFound) default: errorLogger.LogServiceError(ctx, req, "GetMetaSchema.Get", err, - zap.String("metaschema_id", id)) + "metaschema_id", id) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -123,8 +122,8 @@ func (h *ConnectHandler) UpdateMetaSchema(ctx context.Context, req *connect.Requ return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogServiceError(ctx, req, "UpdateMetaSchema.Update", err, - zap.String("metaschema_id", id), - zap.String("metaschema_name", req.Msg.GetBody().GetName())) + "metaschema_id", id, + "metaschema_name", req.Msg.GetBody().GetName()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -151,7 +150,7 @@ func (h *ConnectHandler) DeleteMetaSchema(ctx context.Context, req *connect.Requ return nil, connect.NewError(connect.CodeNotFound, ErrMetaschemaNotFound) default: errorLogger.LogServiceError(ctx, req, "DeleteMetaSchema.Delete", err, - zap.String("metaschema_id", id)) + "metaschema_id", id) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/namespace.go b/internal/api/v1beta1connect/namespace.go index 0c7171b5a..11dbe5cd9 100644 --- a/internal/api/v1beta1connect/namespace.go +++ b/internal/api/v1beta1connect/namespace.go @@ -7,7 +7,6 @@ import ( "connectrpc.com/connect" "github.com/raystack/frontier/core/namespace" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -46,7 +45,7 @@ func (h *ConnectHandler) GetNamespace(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "GetNamespace.Get", err, - zap.String("namespace_id", request.Msg.GetId())) + "namespace_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/organization.go b/internal/api/v1beta1connect/organization.go index 51410872c..2b795c733 100644 --- a/internal/api/v1beta1connect/organization.go +++ b/internal/api/v1beta1connect/organization.go @@ -4,7 +4,7 @@ import ( "context" "connectrpc.com/connect" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "github.com/raystack/frontier/core/audit" "github.com/raystack/frontier/core/membership" "github.com/raystack/frontier/core/organization" @@ -16,11 +16,11 @@ import ( "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/errors" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/pagination" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -40,7 +40,7 @@ func (h *ConnectHandler) GetOrganization(ctx context.Context, request *connect.R return nil, connect.NewError(connect.CodeInvalidArgument, err) default: errorLogger.LogServiceError(ctx, request, "GetOrganization.GetRaw", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, err) } } @@ -69,8 +69,8 @@ func (h *ConnectHandler) ListOrganizations(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizations.List", err, - zap.String("state", request.Msg.GetState()), - zap.String("user_id", request.Msg.GetUserId())) + "state", request.Msg.GetState(), + "user_id", request.Msg.GetUserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -102,8 +102,8 @@ func (h *ConnectHandler) ListAllOrganizations(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListAllOrganizations.List", err, - zap.String("state", request.Msg.GetState()), - zap.String("user_id", request.Msg.GetUserId())) + "state", request.Msg.GetState(), + "user_id", request.Msg.GetUserId()) return nil, err } @@ -148,13 +148,13 @@ func (h *ConnectHandler) CreateOrganization(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) case errors.Is(err, relation.ErrSubjectNotAllowed): errorLogger.LogServiceError(ctx, request, "CreateOrganization.Create", err, - zap.String("org_name", request.Msg.GetBody().GetName()), - zap.String("org_title", request.Msg.GetBody().GetTitle())) + "org_name", request.Msg.GetBody().GetName(), + "org_title", request.Msg.GetBody().GetTitle()) return nil, connect.NewError(connect.CodePermissionDenied, ErrUnauthorized) default: errorLogger.LogServiceError(ctx, request, "CreateOrganization.Create", err, - zap.String("org_name", request.Msg.GetBody().GetName()), - zap.String("org_title", request.Msg.GetBody().GetTitle())) + "org_name", request.Msg.GetBody().GetName(), + "org_title", request.Msg.GetBody().GetTitle()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -170,7 +170,7 @@ func (h *ConnectHandler) CreateOrganization(ctx context.Context, request *connec "name": newOrg.Name, }); err != nil { errorLogger.LogServiceError(ctx, request, "CreateOrganization.AuditLog", err, - zap.String("org_id", newOrg.ID)) + "org_id", newOrg.ID) } return connect.NewResponse(&frontierv1beta1.CreateOrganizationResponse{Organization: orgPB}), nil } @@ -200,9 +200,9 @@ func (h *ConnectHandler) AdminCreateOrganization(ctx context.Context, request *c return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogServiceError(ctx, request, "AdminCreateOrganization.AdminCreate", err, - zap.String("org_name", request.Msg.GetBody().GetName()), - zap.String("org_title", request.Msg.GetBody().GetTitle()), - zap.String("owner_email", request.Msg.GetBody().GetOrgOwnerEmail())) + "org_name", request.Msg.GetBody().GetName(), + "org_title", request.Msg.GetBody().GetTitle(), + "owner_email", request.Msg.GetBody().GetOrgOwnerEmail()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -259,9 +259,9 @@ func (h *ConnectHandler) UpdateOrganization(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogServiceError(ctx, request, "UpdateOrganization.Update", err, - zap.String("org_id", request.Msg.GetId()), - zap.String("org_name", request.Msg.GetBody().GetName()), - zap.String("org_title", request.Msg.GetBody().GetTitle())) + "org_id", request.Msg.GetId(), + "org_name", request.Msg.GetBody().GetName(), + "org_title", request.Msg.GetBody().GetTitle()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -288,7 +288,7 @@ func (h *ConnectHandler) ListOrganizationProjects(ctx context.Context, request * return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationProjects.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -299,8 +299,8 @@ func (h *ConnectHandler) ListOrganizationProjects(ctx context.Context, request * }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationProjects.List", err, - zap.String("org_id", orgResp.ID), - zap.Bool("with_member_count", request.Msg.GetWithMemberCount())) + "org_id", orgResp.ID, + "with_member_count", request.Msg.GetWithMemberCount()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -330,7 +330,7 @@ func (h *ConnectHandler) ListOrganizationAdmins(ctx context.Context, request *co return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationAdmins.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -338,7 +338,7 @@ func (h *ConnectHandler) ListOrganizationAdmins(ctx context.Context, request *co admins, err := h.userService.ListByOrg(ctx, orgResp.ID, organization.AdminRole) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationAdmins.ListByOrg", err, - zap.String("org_id", orgResp.ID)) + "org_id", orgResp.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -363,7 +363,7 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con return nil, connect.NewError(connect.CodeInvalidArgument, ErrRoleFilter) } - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) orgResp, err := h.orgService.Get(ctx, request.Msg.GetId()) if err != nil { switch { @@ -373,7 +373,7 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationUsers.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -389,8 +389,8 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con role, err := h.roleService.Get(ctx, roleFilter) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationUsers.roleService.Get", err, - zap.String("org_id", request.Msg.GetId()), - zap.String("role_filter", roleFilter)) + "org_id", request.Msg.GetId(), + "role_filter", roleFilter) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } roleIDs[i] = role.ID @@ -406,8 +406,8 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationUsers.policyService.List", err, - zap.String("org_id", request.Msg.GetId()), - zap.Strings("role_ids", roleIDs)) + "org_id", request.Msg.GetId(), + "role_ids", roleIDs) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } users = utils.Filter(utils.Map(policies, func(pol policy.Policy) user.User { @@ -421,8 +421,8 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con users, err = h.userService.ListByOrg(ctx, orgResp.ID, request.Msg.GetPermissionFilter()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationUsers.userService.ListByOrg", err, - zap.String("org_id", orgResp.ID), - zap.String("permission_filter", request.Msg.GetPermissionFilter())) + "org_id", orgResp.ID, + "permission_filter", request.Msg.GetPermissionFilter()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } if request.Msg.GetWithRoles() { @@ -430,15 +430,15 @@ func (h *ConnectHandler) ListOrganizationUsers(ctx context.Context, request *con roles, err := h.policyService.ListRoles(ctx, schema.UserPrincipal, user.ID, schema.OrganizationNamespace, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationUsers.policyService.ListRoles", err, - zap.String("org_id", request.Msg.GetId()), - zap.String("user_id", user.ID)) + "org_id", request.Msg.GetId(), + "user_id", user.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } rolesPb := utils.Filter(utils.Map(roles, func(role role.Role) *frontierv1beta1.Role { pb, err := transformRoleToPB(role) if err != nil { - logger.Error("failed to transform role for user", zap.Error(err)) + logger.Error("failed to transform role for user", "error", err) return nil } return &pb @@ -481,15 +481,15 @@ func (h *ConnectHandler) AddOrganizationUsers(ctx context.Context, request *conn return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "AddOrganizationUsers.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } if err := h.orgService.AddUsers(ctx, orgResp.ID, request.Msg.GetUserIds()); err != nil { errorLogger.LogServiceError(ctx, request, "AddOrganizationUsers.AddUsers", err, - zap.String("org_id", orgResp.ID), - zap.Strings("user_ids", request.Msg.GetUserIds())) + "org_id", orgResp.ID, + "user_ids", request.Msg.GetUserIds()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -508,7 +508,7 @@ func (h *ConnectHandler) RemoveOrganizationUser(ctx context.Context, request *co return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "RemoveOrganizationUser.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -516,7 +516,7 @@ func (h *ConnectHandler) RemoveOrganizationUser(ctx context.Context, request *co admins, err := h.userService.ListByOrg(ctx, orgResp.ID, organization.AdminRole) if err != nil { errorLogger.LogServiceError(ctx, request, "RemoveOrganizationUser.ListByOrg", err, - zap.String("org_id", orgResp.ID)) + "org_id", orgResp.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -526,8 +526,8 @@ func (h *ConnectHandler) RemoveOrganizationUser(ctx context.Context, request *co if err := h.deleterService.RemoveUsersFromOrg(ctx, orgResp.ID, []string{request.Msg.GetUserId()}); err != nil { errorLogger.LogServiceError(ctx, request, "RemoveOrganizationUser.RemoveUsersFromOrg", err, - zap.String("org_id", orgResp.ID), - zap.String("user_id", request.Msg.GetUserId())) + "org_id", orgResp.ID, + "user_id", request.Msg.GetUserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -543,9 +543,9 @@ func (h *ConnectHandler) SetOrganizationMemberRole(ctx context.Context, request if err := h.membershipService.SetOrganizationMemberRole(ctx, orgID, userID, schema.UserPrincipal, roleID); err != nil { errorLogger.LogServiceError(ctx, request, "SetOrganizationMemberRole", err, - zap.String("org_id", orgID), - zap.String("user_id", userID), - zap.String("role_id", roleID)) + "org_id", orgID, + "user_id", userID, + "role_id", roleID) switch { case errors.Is(err, organization.ErrDisabled): @@ -588,9 +588,9 @@ func (h *ConnectHandler) AddOrganizationMembers(ctx context.Context, request *co result.Error = toClientError(err) if !isDomainError(err) { errorLogger.LogServiceError(ctx, request, "AddOrganizationMembers", err, - zap.String("org_id", orgID), - zap.String("user_id", member.GetUserId()), - zap.String("role_id", member.GetRoleId())) + "org_id", orgID, + "user_id", member.GetUserId(), + "role_id", member.GetRoleId()) } } else { result.Success = true @@ -637,7 +637,7 @@ func (h *ConnectHandler) EnableOrganization(ctx context.Context, request *connec if err := h.orgService.Enable(ctx, request.Msg.GetId()); err != nil { errorLogger.LogServiceError(ctx, request, "EnableOrganization.Enable", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.EnableOrganizationResponse{}), nil @@ -648,7 +648,7 @@ func (h *ConnectHandler) DisableOrganization(ctx context.Context, request *conne if err := h.orgService.Disable(ctx, request.Msg.GetId()); err != nil { errorLogger.LogServiceError(ctx, request, "DisableOrganization.Disable", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DisableOrganizationResponse{}), nil @@ -666,7 +666,7 @@ func (h *ConnectHandler) ListOrganizationServiceUsers(ctx context.Context, reque return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogServiceError(ctx, request, "ListOrganizationServiceUsers.Get", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -676,7 +676,7 @@ func (h *ConnectHandler) ListOrganizationServiceUsers(ctx context.Context, reque }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationServiceUsers.List", err, - zap.String("org_id", orgResp.ID)) + "org_id", orgResp.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_invoices.go b/internal/api/v1beta1connect/organization_invoices.go index 45b3ab904..0d1d39abd 100644 --- a/internal/api/v1beta1connect/organization_invoices.go +++ b/internal/api/v1beta1connect/organization_invoices.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -36,7 +35,7 @@ func (h *ConnectHandler) SearchOrganizationInvoices(ctx context.Context, request return nil, connect.NewError(connect.CodeInvalidArgument, ErrInternalServerError) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationInvoices.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_pats.go b/internal/api/v1beta1connect/organization_pats.go index 04831ce37..17a197cfb 100644 --- a/internal/api/v1beta1connect/organization_pats.go +++ b/internal/api/v1beta1connect/organization_pats.go @@ -6,14 +6,14 @@ import ( "fmt" "connectrpc.com/connect" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + svc "github.com/raystack/frontier/core/aggregates/orgpats" patmodels "github.com/raystack/frontier/core/userpat/models" "github.com/raystack/frontier/internal/store/postgres" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -34,9 +34,9 @@ func (h *ConnectHandler) SearchOrganizationPATs(ctx context.Context, request *co // Cap limit — override user-requested limit if it exceeds max if rqlQuery.Limit <= 0 || rqlQuery.Limit > orgPATsMaxLimit { - grpczap.Extract(ctx).Warn("overriding requested limit to max allowed", - zap.Int("requested_limit", rqlQuery.Limit), - zap.Int("applied_limit", orgPATsDefaultLimit)) + frontierlogger.FromContext(ctx).Warn("overriding requested limit to max allowed", + "requested_limit", rqlQuery.Limit, + "applied_limit", orgPATsDefaultLimit) rqlQuery.Limit = orgPATsDefaultLimit } @@ -46,7 +46,7 @@ func (h *ConnectHandler) SearchOrganizationPATs(ctx context.Context, request *co return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationPATs.Search", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_projects.go b/internal/api/v1beta1connect/organization_projects.go index c6edc9ece..38460cd97 100644 --- a/internal/api/v1beta1connect/organization_projects.go +++ b/internal/api/v1beta1connect/organization_projects.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" httpbody "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -37,7 +36,7 @@ func (h *ConnectHandler) SearchOrganizationProjects(ctx context.Context, request return nil, connect.NewError(connect.CodeInvalidArgument, ErrInternalServerError) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationProjects.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -89,7 +88,7 @@ func (h *ConnectHandler) ExportOrganizationProjects(ctx context.Context, request return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("no data to export: %v", err)) } errorLogger.LogServiceError(ctx, request, "ExportOrganizationProjects.Export", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_serviceuser.go b/internal/api/v1beta1connect/organization_serviceuser.go index 758a9d7de..ccb7ee209 100644 --- a/internal/api/v1beta1connect/organization_serviceuser.go +++ b/internal/api/v1beta1connect/organization_serviceuser.go @@ -10,7 +10,6 @@ import ( "github.com/raystack/frontier/pkg/errors" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -28,7 +27,7 @@ func (h *ConnectHandler) SearchOrganizationServiceUsers(ctx context.Context, req return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationServiceUsers.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_serviceuser_credentials.go b/internal/api/v1beta1connect/organization_serviceuser_credentials.go index ffdc8818b..1f98536d0 100644 --- a/internal/api/v1beta1connect/organization_serviceuser_credentials.go +++ b/internal/api/v1beta1connect/organization_serviceuser_credentials.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -34,7 +33,7 @@ func (h *ConnectHandler) SearchOrganizationServiceUserCredentials(ctx context.Co return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationServiceUserCredentials.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_tokens.go b/internal/api/v1beta1connect/organization_tokens.go index f99e28b39..4dc17147c 100644 --- a/internal/api/v1beta1connect/organization_tokens.go +++ b/internal/api/v1beta1connect/organization_tokens.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" httpbody "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -35,7 +34,7 @@ func (h *ConnectHandler) SearchOrganizationTokens(ctx context.Context, request * return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationTokens.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -76,7 +75,7 @@ func (h *ConnectHandler) ExportOrganizationTokens(ctx context.Context, request * return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("no data to export: %v", err)) } errorLogger.LogServiceError(ctx, request, "ExportOrganizationTokens.Export", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/organization_users.go b/internal/api/v1beta1connect/organization_users.go index 1eba1efb1..7c7670f44 100644 --- a/internal/api/v1beta1connect/organization_users.go +++ b/internal/api/v1beta1connect/organization_users.go @@ -6,13 +6,11 @@ import ( "fmt" "connectrpc.com/connect" - "github.com/raystack/frontier/core/aggregates/orgusers" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" httpbody "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -42,7 +40,7 @@ func (h *ConnectHandler) SearchOrganizationUsers(ctx context.Context, request *c return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogServiceError(ctx, request, "SearchOrganizationUsers.Search", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -95,7 +93,7 @@ func (h *ConnectHandler) ExportOrganizationUsers(ctx context.Context, request *c return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("no data to export: %v", err)) } errorLogger.LogServiceError(ctx, request, "ExportOrganizationUsers.Export", err, - zap.String("org_id", request.Msg.GetId())) + "org_id", request.Msg.GetId()) return connect.NewError(connect.CodeInternal, ErrInternalServerError) } return streamBytesInChunks(orgUsersDataBytes, contentType, stream) diff --git a/internal/api/v1beta1connect/permission.go b/internal/api/v1beta1connect/permission.go index 242f3c59b..c756c1763 100644 --- a/internal/api/v1beta1connect/permission.go +++ b/internal/api/v1beta1connect/permission.go @@ -10,7 +10,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -55,7 +54,7 @@ func (h *ConnectHandler) CreatePermission(ctx context.Context, request *connect. err := h.bootstrapService.AppendSchema(ctx, definition) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePermission.AppendSchema", err, - zap.Strings("permission_slugs", permissionSlugs)) + "permission_slugs", permissionSlugs) switch { case errors.Is(err, namespace.ErrNotExist), @@ -64,7 +63,7 @@ func (h *ConnectHandler) CreatePermission(ctx context.Context, request *connect. return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreatePermission.AppendSchema", err, - zap.Strings("permission_slugs", permissionSlugs)) + "permission_slugs", permissionSlugs) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -72,7 +71,7 @@ func (h *ConnectHandler) CreatePermission(ctx context.Context, request *connect. permList, err := h.permissionService.List(ctx, permission.Filter{Slugs: permissionSlugs}) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePermission.List", err, - zap.Strings("permission_slugs", permissionSlugs)) + "permission_slugs", permissionSlugs) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -130,9 +129,9 @@ func (h *ConnectHandler) UpdatePermission(ctx context.Context, request *connect. }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdatePermission", err, - zap.String("permission_id", request.Msg.GetId()), - zap.String("permission_name", permName), - zap.String("permission_namespace", permNamespace)) + "permission_id", request.Msg.GetId(), + "permission_name", permName, + "permission_namespace", permNamespace) switch { case errors.Is(err, permission.ErrNotExist), @@ -143,9 +142,9 @@ func (h *ConnectHandler) UpdatePermission(ctx context.Context, request *connect. return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdatePermission", err, - zap.String("permission_id", request.Msg.GetId()), - zap.String("permission_name", permName), - zap.String("permission_namespace", permNamespace)) + "permission_id", request.Msg.GetId(), + "permission_name", permName, + "permission_namespace", permNamespace) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -187,14 +186,14 @@ func (h *ConnectHandler) GetPermission(ctx context.Context, request *connect.Req fetchedPermission, err := h.permissionService.Get(ctx, permissionID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetPermission", err, - zap.String("permission_id", permissionID)) + "permission_id", permissionID) switch { case errors.Is(err, permission.ErrNotExist), errors.Is(err, permission.ErrInvalidID): return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetPermission", err, - zap.String("permission_id", permissionID)) + "permission_id", permissionID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/permission_check.go b/internal/api/v1beta1connect/permission_check.go index 343bbf98d..c6ebe9eff 100644 --- a/internal/api/v1beta1connect/permission_check.go +++ b/internal/api/v1beta1connect/permission_check.go @@ -12,7 +12,6 @@ import ( "github.com/raystack/frontier/pkg/errors" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func logAuditForCheck(ctx context.Context, result bool, objectID string, objectNamespace string) { @@ -79,11 +78,11 @@ func (h *ConnectHandler) CheckFederatedResourcePermission(ctx context.Context, r }) if err != nil { errorLogger.LogServiceError(ctx, req, "CheckFederatedResourcePermission", err, - zap.String("object_id", objectID), - zap.String("object_namespace", objectNamespace), - zap.String("subject_id", principalID), - zap.String("subject_namespace", principalNamespace), - zap.String("permission", permissionName)) + "object_id", objectID, + "object_namespace", objectNamespace, + "subject_id", principalID, + "subject_namespace", principalNamespace, + "permission", permissionName) return nil, handleAuthErr(err) } @@ -146,9 +145,9 @@ func (h *ConnectHandler) CheckResourcePermission(ctx context.Context, req *conne }) if err != nil { errorLogger.LogServiceError(ctx, req, "CheckResourcePermission", err, - zap.String("object_id", objectID), - zap.String("object_namespace", objectNamespace), - zap.String("permission", permissionName)) + "object_id", objectID, + "object_namespace", objectNamespace, + "permission", permissionName) return nil, handleAuthErr(err) } @@ -184,7 +183,7 @@ func (h *ConnectHandler) BatchCheckPermission(ctx context.Context, req *connect. result, err := h.resourceService.BatchCheck(ctx, checks) if err != nil { errorLogger.LogServiceError(ctx, req, "BatchCheckPermission", err, - zap.Int("batch_size", len(checks))) + "batch_size", len(checks)) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/platform.go b/internal/api/v1beta1connect/platform.go index eb9951ae5..55e4113d3 100644 --- a/internal/api/v1beta1connect/platform.go +++ b/internal/api/v1beta1connect/platform.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" ) func (h *ConnectHandler) AddPlatformUser(ctx context.Context, req *connect.Request[frontierv1beta1.AddPlatformUserRequest]) (*connect.Response[frontierv1beta1.AddPlatformUserResponse], error) { @@ -22,15 +21,15 @@ func (h *ConnectHandler) AddPlatformUser(ctx context.Context, req *connect.Reque if req.Msg.GetUserId() != "" { if err := h.userService.Sudo(ctx, req.Msg.GetUserId(), relationName); err != nil { errorLogger.LogServiceError(ctx, req, "AddPlatformUser.UserSudo", err, - zap.String("user_id", req.Msg.GetUserId()), - zap.String("relation", relationName)) + "user_id", req.Msg.GetUserId(), + "relation", relationName) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } else if req.Msg.GetServiceuserId() != "" { if err := h.serviceUserService.Sudo(ctx, req.Msg.GetServiceuserId(), relationName); err != nil { errorLogger.LogServiceError(ctx, req, "AddPlatformUser.ServiceUserSudo", err, - zap.String("service_user_id", req.Msg.GetServiceuserId()), - zap.String("relation", relationName)) + "service_user_id", req.Msg.GetServiceuserId(), + "relation", relationName) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } else { @@ -45,13 +44,13 @@ func (h *ConnectHandler) RemovePlatformUser(ctx context.Context, req *connect.Re if req.Msg.GetUserId() != "" { if err := h.userService.UnSudo(ctx, req.Msg.GetUserId()); err != nil { errorLogger.LogServiceError(ctx, req, "RemovePlatformUser.UserUnSudo", err, - zap.String("user_id", req.Msg.GetUserId())) + "user_id", req.Msg.GetUserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } else if req.Msg.GetServiceuserId() != "" { if err := h.serviceUserService.UnSudo(ctx, req.Msg.GetServiceuserId()); err != nil { errorLogger.LogServiceError(ctx, req, "RemovePlatformUser.ServiceUserUnSudo", err, - zap.String("service_user_id", req.Msg.GetServiceuserId())) + "service_user_id", req.Msg.GetServiceuserId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } else { @@ -87,7 +86,7 @@ func (h *ConnectHandler) ListPlatformUsers(ctx context.Context, req *connect.Req users, err := h.userService.GetByIDs(ctx, userIDs) if err != nil { errorLogger.LogServiceError(ctx, req, "ListPlatformUsers.GetUsersByIDs", err, - zap.Strings("user_ids", userIDs)) + "user_ids", userIDs) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, u := range users { @@ -116,7 +115,7 @@ func (h *ConnectHandler) ListPlatformUsers(ctx context.Context, req *connect.Req serviceUsers, err := h.serviceUserService.GetByIDs(ctx, serviceUserIDs) if err != nil { errorLogger.LogServiceError(ctx, req, "ListPlatformUsers.GetServiceUsersByIDs", err, - zap.Strings("service_user_ids", serviceUserIDs)) + "service_user_ids", serviceUserIDs) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, u := range serviceUsers { diff --git a/internal/api/v1beta1connect/policy.go b/internal/api/v1beta1connect/policy.go index 9072978ee..cb08bdc7d 100644 --- a/internal/api/v1beta1connect/policy.go +++ b/internal/api/v1beta1connect/policy.go @@ -13,7 +13,6 @@ import ( "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -45,11 +44,11 @@ func (h *ConnectHandler) CreatePolicy(ctx context.Context, request *connect.Requ }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePolicy", err, - zap.String("role_id", request.Msg.GetBody().GetRoleId()), - zap.String("resource_type", resourceType), - zap.String("resource_id", resourceID), - zap.String("principal_type", principalType), - zap.String("principal_id", principalID)) + "role_id", request.Msg.GetBody().GetRoleId(), + "resource_type", resourceType, + "resource_id", resourceID, + "principal_type", principalType, + "principal_id", principalID) switch { case errors.Is(err, role.ErrInvalidID): @@ -58,11 +57,11 @@ func (h *ConnectHandler) CreatePolicy(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreatePolicy", err, - zap.String("role_id", request.Msg.GetBody().GetRoleId()), - zap.String("resource_type", resourceType), - zap.String("resource_id", resourceID), - zap.String("principal_type", principalType), - zap.String("principal_id", principalID)) + "role_id", request.Msg.GetBody().GetRoleId(), + "resource_type", resourceType, + "resource_id", resourceID, + "principal_type", principalType, + "principal_id", principalID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -84,7 +83,7 @@ func (h *ConnectHandler) GetPolicy(ctx context.Context, request *connect.Request fetchedPolicy, err := h.policyService.Get(ctx, policyID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetPolicy", err, - zap.String("policy_id", policyID)) + "policy_id", policyID) switch { case errors.Is(err, policy.ErrNotExist), @@ -93,7 +92,7 @@ func (h *ConnectHandler) GetPolicy(ctx context.Context, request *connect.Request return nil, connect.NewError(connect.CodeNotFound, ErrPolicyNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetPolicy", err, - zap.String("policy_id", policyID)) + "policy_id", policyID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -114,7 +113,7 @@ func (h *ConnectHandler) DeletePolicy(ctx context.Context, request *connect.Requ err := h.policyService.Delete(ctx, policyID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeletePolicy", err, - zap.String("policy_id", policyID)) + "policy_id", policyID) switch { case errors.Is(err, policy.ErrNotExist), @@ -128,7 +127,7 @@ func (h *ConnectHandler) DeletePolicy(ctx context.Context, request *connect.Requ return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "DeletePolicy", err, - zap.String("policy_id", policyID)) + "policy_id", policyID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -155,7 +154,7 @@ func (h *ConnectHandler) CreatePolicyForProject(ctx context.Context, request *co project, err := h.projectService.Get(ctx, request.Msg.GetProjectId()) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePolicyForProject.GetProject", err, - zap.String("project_id", request.Msg.GetProjectId())) + "project_id", request.Msg.GetProjectId()) return nil, connect.NewError(connect.CodeNotFound, ErrProjectNotFound) } @@ -170,10 +169,10 @@ func (h *ConnectHandler) CreatePolicyForProject(ctx context.Context, request *co newPolicy, err := h.policyService.Create(ctx, p) if err != nil { errorLogger.LogServiceError(ctx, request, "CreatePolicyForProject.CreatePolicy", err, - zap.String("role_id", request.Msg.GetBody().GetRoleId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("principal_type", principalType), - zap.String("principal_id", principalID)) + "role_id", request.Msg.GetBody().GetRoleId(), + "project_id", request.Msg.GetProjectId(), + "principal_type", principalType, + "principal_id", principalID) switch { case errors.Is(err, role.ErrInvalidID): @@ -182,10 +181,10 @@ func (h *ConnectHandler) CreatePolicyForProject(ctx context.Context, request *co return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreatePolicyForProject.CreatePolicy", err, - zap.String("role_id", request.Msg.GetBody().GetRoleId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("principal_type", principalType), - zap.String("principal_id", principalID)) + "role_id", request.Msg.GetBody().GetRoleId(), + "project_id", request.Msg.GetProjectId(), + "principal_type", principalType, + "principal_id", principalID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -201,22 +200,22 @@ func (h *ConnectHandler) ListPolicies(ctx context.Context, request *connect.Requ filter, err := h.resolveFilter(ctx, request.Msg) if err != nil { errorLogger.LogServiceError(ctx, request, "ListPolicies.ResolveFilter", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("role_id", request.Msg.GetRoleId()), - zap.String("user_id", request.Msg.GetUserId()), - zap.String("group_id", request.Msg.GetGroupId())) + "org_id", request.Msg.GetOrgId(), + "project_id", request.Msg.GetProjectId(), + "role_id", request.Msg.GetRoleId(), + "user_id", request.Msg.GetUserId(), + "group_id", request.Msg.GetGroupId()) return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) } policyList, err := h.policyService.List(ctx, filter) if err != nil { errorLogger.LogServiceError(ctx, request, "ListPolicies", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("role_id", request.Msg.GetRoleId()), - zap.String("user_id", request.Msg.GetUserId()), - zap.String("group_id", request.Msg.GetGroupId())) + "org_id", request.Msg.GetOrgId(), + "project_id", request.Msg.GetProjectId(), + "role_id", request.Msg.GetRoleId(), + "user_id", request.Msg.GetUserId(), + "group_id", request.Msg.GetGroupId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/preferences.go b/internal/api/v1beta1connect/preferences.go index 6dece500e..357888697 100644 --- a/internal/api/v1beta1connect/preferences.go +++ b/internal/api/v1beta1connect/preferences.go @@ -8,7 +8,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/errors" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -46,8 +45,8 @@ func (h *ConnectHandler) CreatePreferences(ctx context.Context, req *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, req, "CreatePreferences", err, - zap.String("preference_name", prefBody.GetName()), - zap.String("preference_value", prefBody.GetValue())) + "preference_name", prefBody.GetName(), + "preference_value", prefBody.GetValue()) return nil, handlePreferenceError(err) } createdPreferences = append(createdPreferences, pref) @@ -76,9 +75,9 @@ func (h *ConnectHandler) CreateOrganizationPreferences(ctx context.Context, req }) if err != nil { errorLogger.LogServiceError(ctx, req, "CreateOrganizationPreferences", err, - zap.String("organization_id", req.Msg.GetId()), - zap.String("preference_name", prefBody.GetName()), - zap.String("preference_value", prefBody.GetValue())) + "organization_id", req.Msg.GetId(), + "preference_name", prefBody.GetName(), + "preference_value", prefBody.GetValue()) return nil, handlePreferenceError(err) } createdPreferences = append(createdPreferences, pref) @@ -102,7 +101,7 @@ func (h *ConnectHandler) ListOrganizationPreferences(ctx context.Context, req *c }) if err != nil { errorLogger.LogServiceError(ctx, req, "ListOrganizationPreferences", err, - zap.String("organization_id", req.Msg.GetId())) + "organization_id", req.Msg.GetId()) return nil, handlePreferenceError(err) } @@ -131,9 +130,9 @@ func (h *ConnectHandler) CreateUserPreferences(ctx context.Context, req *connect }) if err != nil { errorLogger.LogServiceError(ctx, req, "CreateUserPreferences", err, - zap.String("user_id", req.Msg.GetId()), - zap.String("preference_name", prefBody.GetName()), - zap.String("preference_value", prefBody.GetValue())) + "user_id", req.Msg.GetId(), + "preference_name", prefBody.GetName(), + "preference_value", prefBody.GetValue()) return nil, handlePreferenceError(err) } createdPreferences = append(createdPreferences, pref) @@ -163,7 +162,7 @@ func (h *ConnectHandler) ListUserPreferences(ctx context.Context, req *connect.R }) if err != nil { errorLogger.LogServiceError(ctx, req, "ListUserPreferences", err, - zap.String("user_id", req.Msg.GetId())) + "user_id", req.Msg.GetId()) return nil, handlePreferenceError(err) } @@ -198,10 +197,10 @@ func (h *ConnectHandler) CreateCurrentUserPreferences(ctx context.Context, req * }) if err != nil { errorLogger.LogServiceError(ctx, req, "CreateCurrentUserPreferences", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("preference_name", prefBody.GetName()), - zap.String("preference_value", prefBody.GetValue())) + "principal_id", principal.ID, + "principal_type", principal.Type, + "preference_name", prefBody.GetName(), + "preference_value", prefBody.GetValue()) return nil, handlePreferenceError(err) } createdPreferences = append(createdPreferences, pref) @@ -237,8 +236,8 @@ func (h *ConnectHandler) ListCurrentUserPreferences(ctx context.Context, req *co }) if err != nil { errorLogger.LogServiceError(ctx, req, "ListCurrentUserPreferences", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, handlePreferenceError(err) } diff --git a/internal/api/v1beta1connect/project.go b/internal/api/v1beta1connect/project.go index 93c45a895..13ff9ddc2 100644 --- a/internal/api/v1beta1connect/project.go +++ b/internal/api/v1beta1connect/project.go @@ -15,8 +15,6 @@ import ( "github.com/raystack/frontier/pkg/errors" "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" - "go.uber.org/zap" - frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -31,8 +29,8 @@ func (h *ConnectHandler) ListProjects(ctx context.Context, request *connect.Requ }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjects", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState())) + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -68,8 +66,8 @@ func (h *ConnectHandler) CreateProject(ctx context.Context, request *connect.Req newProject, err := h.projectService.Create(ctx, prj) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProject", err, - zap.String("project_name", request.Msg.GetBody().GetName()), - zap.String("org_id", request.Msg.GetBody().GetOrgId())) + "project_name", request.Msg.GetBody().GetName(), + "org_id", request.Msg.GetBody().GetOrgId()) return nil, translateProjectServiceError(err) } @@ -89,7 +87,7 @@ func (h *ConnectHandler) GetProject(ctx context.Context, request *connect.Reques fetchedProject, err := h.projectService.Get(ctx, projectID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetProject", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } @@ -121,9 +119,9 @@ func (h *ConnectHandler) UpdateProject(ctx context.Context, request *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateProject", err, - zap.String("project_id", request.Msg.GetId()), - zap.String("project_name", request.Msg.GetBody().GetName()), - zap.String("org_id", request.Msg.GetBody().GetOrgId())) + "project_id", request.Msg.GetId(), + "project_name", request.Msg.GetBody().GetName(), + "org_id", request.Msg.GetBody().GetOrgId()) return nil, translateProjectServiceError(err) } @@ -144,7 +142,7 @@ func (h *ConnectHandler) ListProjectAdmins(ctx context.Context, request *connect users, err := h.projectService.ListUsers(ctx, projectID, project.AdminPermission) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectAdmins", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } @@ -174,8 +172,8 @@ func (h *ConnectHandler) ListProjectUsers(ctx context.Context, request *connect. users, err := h.projectService.ListUsers(ctx, projectID, permissionFilter) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectUsers", err, - zap.String("project_id", projectID), - zap.String("permission_filter", permissionFilter)) + "project_id", projectID, + "permission_filter", permissionFilter) return nil, translateProjectServiceError(err) } @@ -196,8 +194,8 @@ func (h *ConnectHandler) ListProjectUsers(ctx context.Context, request *connect. roles, err := h.policyService.ListRoles(ctx, schema.UserPrincipal, user.ID, schema.ProjectNamespace, projectID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectUsers.ListRoles", err, - zap.String("project_id", projectID), - zap.String("user_id", user.ID)) + "project_id", projectID, + "user_id", user.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -231,7 +229,7 @@ func (h *ConnectHandler) ListProjectServiceUsers(ctx context.Context, request *c users, err := h.projectService.ListServiceUsers(ctx, projectID, project.MemberPermission) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectServiceUsers", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } @@ -252,8 +250,8 @@ func (h *ConnectHandler) ListProjectServiceUsers(ctx context.Context, request *c roles, err := h.policyService.ListRoles(ctx, schema.ServiceUserPrincipal, user.ID, schema.ProjectNamespace, projectID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectServiceUsers.ListRoles", err, - zap.String("project_id", projectID), - zap.String("service_user_id", user.ID)) + "project_id", projectID, + "service_user_id", user.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -287,7 +285,7 @@ func (h *ConnectHandler) ListProjectGroups(ctx context.Context, request *connect groups, err := h.projectService.ListGroups(ctx, projectID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectGroups", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } @@ -309,8 +307,8 @@ func (h *ConnectHandler) ListProjectGroups(ctx context.Context, request *connect schema.ProjectNamespace, projectID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectGroups.ListRoles", err, - zap.String("project_id", projectID), - zap.String("group_id", group.ID)) + "project_id", projectID, + "group_id", group.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -344,7 +342,7 @@ func (h *ConnectHandler) EnableProject(ctx context.Context, request *connect.Req if err := h.projectService.Enable(ctx, projectID); err != nil { errorLogger.LogServiceError(ctx, request, "EnableProject", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } return connect.NewResponse(&frontierv1beta1.EnableProjectResponse{}), nil @@ -356,7 +354,7 @@ func (h *ConnectHandler) DisableProject(ctx context.Context, request *connect.Re if err := h.projectService.Disable(ctx, projectID); err != nil { errorLogger.LogServiceError(ctx, request, "DisableProject", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, translateProjectServiceError(err) } return connect.NewResponse(&frontierv1beta1.DisableProjectResponse{}), nil @@ -372,10 +370,10 @@ func (h *ConnectHandler) SetProjectMemberRole(ctx context.Context, request *conn if err := h.projectService.SetMemberRole(ctx, projectID, principalID, principalType, roleID); err != nil { errorLogger.LogServiceError(ctx, request, "SetProjectMemberRole", err, - zap.String("project_id", projectID), - zap.String("principal_id", principalID), - zap.String("principal_type", principalType), - zap.String("role_id", roleID)) + "project_id", projectID, + "principal_id", principalID, + "principal_type", principalType, + "role_id", roleID) switch { case errors.Is(err, project.ErrNotExist): @@ -418,9 +416,9 @@ func (h *ConnectHandler) RemoveProjectMember(ctx context.Context, request *conne if err := h.projectService.RemoveMember(ctx, projectID, principalID, principalType); err != nil { errorLogger.LogServiceError(ctx, request, "RemoveProjectMember", err, - zap.String("project_id", projectID), - zap.String("principal_id", principalID), - zap.String("principal_type", principalType)) + "project_id", projectID, + "principal_id", principalID, + "principal_type", principalType) switch { case errors.Is(err, project.ErrNotExist): diff --git a/internal/api/v1beta1connect/project_users.go b/internal/api/v1beta1connect/project_users.go index ab183ce4e..696776146 100644 --- a/internal/api/v1beta1connect/project_users.go +++ b/internal/api/v1beta1connect/project_users.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" ) func (h *ConnectHandler) SearchProjectUsers(ctx context.Context, request *connect.Request[frontierv1beta1.SearchProjectUsersRequest]) (*connect.Response[frontierv1beta1.SearchProjectUsersResponse], error) { @@ -44,13 +43,13 @@ func (h *ConnectHandler) SearchProjectUsers(ctx context.Context, request *connec projectUsersData, err := h.projectUsersService.Search(ctx, projectID, rqlQuery) if err != nil { errorLogger.LogServiceError(ctx, request, "SearchProjectUsers", err, - zap.String("project_id", projectID)) + "project_id", projectID) if errors.Is(err, postgres.ErrBadInput) { return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogUnexpectedError(ctx, request, "SearchProjectUsers", err, - zap.String("project_id", projectID)) + "project_id", projectID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/prospect.go b/internal/api/v1beta1connect/prospect.go index 29fb85e90..e12d4d991 100644 --- a/internal/api/v1beta1connect/prospect.go +++ b/internal/api/v1beta1connect/prospect.go @@ -12,7 +12,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -44,18 +43,18 @@ func (h *ConnectHandler) CreateProspectPublic(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProspectPublic", err, - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("source", request.Msg.GetSource())) + "email", strings.ToLower(email), + "activity", activity, + "source", request.Msg.GetSource()) switch { case errors.Is(err, prospect.ErrEmailActivityAlreadyExists): return connect.NewResponse(&frontierv1beta1.CreateProspectPublicResponse{}), nil default: errorLogger.LogUnexpectedError(ctx, request, "CreateProspectPublic", err, - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("source", request.Msg.GetSource())) + "email", strings.ToLower(email), + "activity", activity, + "source", request.Msg.GetSource()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -95,20 +94,20 @@ func (h *ConnectHandler) CreateProspect(ctx context.Context, request *connect.Re }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProspect", err, - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("status", subsStatus), - zap.String("source", request.Msg.GetSource())) + "email", strings.ToLower(email), + "activity", activity, + "status", subsStatus, + "source", request.Msg.GetSource()) switch { case errors.Is(err, prospect.ErrEmailActivityAlreadyExists): return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreateProspect", err, - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("status", subsStatus), - zap.String("source", request.Msg.GetSource())) + "email", strings.ToLower(email), + "activity", activity, + "status", subsStatus, + "source", request.Msg.GetSource()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -187,14 +186,14 @@ func (h *ConnectHandler) GetProspect(ctx context.Context, request *connect.Reque prspct, err := h.prospectService.Get(ctx, prospectId) if err != nil { errorLogger.LogServiceError(ctx, request, "GetProspect", err, - zap.String("prospect_id", prospectId)) + "prospect_id", prospectId) switch { case errors.Is(err, prospect.ErrNotExist): return nil, connect.NewError(connect.CodeNotFound, ErrProspectNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetProspect", err, - zap.String("prospect_id", prospectId)) + "prospect_id", prospectId) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -243,11 +242,11 @@ func (h *ConnectHandler) UpdateProspect(ctx context.Context, request *connect.Re }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateProspect", err, - zap.String("prospect_id", prospectId), - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("status", subsStatus), - zap.String("source", request.Msg.GetSource())) + "prospect_id", prospectId, + "email", strings.ToLower(email), + "activity", activity, + "status", subsStatus, + "source", request.Msg.GetSource()) switch { case errors.Is(err, prospect.ErrNotExist): @@ -256,11 +255,11 @@ func (h *ConnectHandler) UpdateProspect(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeInvalidArgument, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateProspect", err, - zap.String("prospect_id", prospectId), - zap.String("email", strings.ToLower(email)), - zap.String("activity", activity), - zap.String("status", subsStatus), - zap.String("source", request.Msg.GetSource())) + "prospect_id", prospectId, + "email", strings.ToLower(email), + "activity", activity, + "status", subsStatus, + "source", request.Msg.GetSource()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -282,14 +281,14 @@ func (h *ConnectHandler) DeleteProspect(ctx context.Context, request *connect.Re err := h.prospectService.Delete(ctx, prospectId) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteProspect", err, - zap.String("prospect_id", prospectId)) + "prospect_id", prospectId) switch { case errors.Is(err, prospect.ErrNotExist): return nil, connect.NewError(connect.CodeNotFound, ErrProspectNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteProspect", err, - zap.String("prospect_id", prospectId)) + "prospect_id", prospectId) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/relation.go b/internal/api/v1beta1connect/relation.go index a020a593d..cb17c3d8b 100644 --- a/internal/api/v1beta1connect/relation.go +++ b/internal/api/v1beta1connect/relation.go @@ -9,7 +9,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -39,8 +38,8 @@ func (h *ConnectHandler) ListRelations(ctx context.Context, request *connect.Req }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListRelations", err, - zap.String("subject", request.Msg.GetSubject()), - zap.String("object", request.Msg.GetObject())) + "subject", request.Msg.GetSubject(), + "object", request.Msg.GetObject()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -82,7 +81,7 @@ func (h *ConnectHandler) CreateRelation(ctx context.Context, request *connect.Re fetchedUser, err := h.userService.GetByEmail(ctx, subjectID) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateRelation.GetUserByEmail", err, - zap.String("subject_id", subjectID)) + "subject_id", subjectID) return nil, connect.NewError(connect.CodeNotFound, ErrUserNotExist) } subjectID = fetchedUser.ID @@ -103,20 +102,20 @@ func (h *ConnectHandler) CreateRelation(ctx context.Context, request *connect.Re }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateRelation", err, - zap.String("subject", request.Msg.GetBody().GetSubject()), - zap.String("object", request.Msg.GetBody().GetObject()), - zap.String("relation", request.Msg.GetBody().GetRelation()), - zap.String("subject_sub_relation", request.Msg.GetBody().GetSubjectSubRelation())) + "subject", request.Msg.GetBody().GetSubject(), + "object", request.Msg.GetBody().GetObject(), + "relation", request.Msg.GetBody().GetRelation(), + "subject_sub_relation", request.Msg.GetBody().GetSubjectSubRelation()) switch { case errors.Is(err, relation.ErrInvalidDetail): return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreateRelation", err, - zap.String("subject", request.Msg.GetBody().GetSubject()), - zap.String("object", request.Msg.GetBody().GetObject()), - zap.String("relation", request.Msg.GetBody().GetRelation()), - zap.String("subject_sub_relation", request.Msg.GetBody().GetSubjectSubRelation())) + "subject", request.Msg.GetBody().GetSubject(), + "object", request.Msg.GetBody().GetObject(), + "relation", request.Msg.GetBody().GetRelation(), + "subject_sub_relation", request.Msg.GetBody().GetSubjectSubRelation()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -139,7 +138,7 @@ func (h *ConnectHandler) GetRelation(ctx context.Context, request *connect.Reque fetchedRelation, err := h.relationService.Get(ctx, relationID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetRelation", err, - zap.String("relation_id", relationID)) + "relation_id", relationID) switch { case errors.Is(err, relation.ErrNotExist), @@ -148,7 +147,7 @@ func (h *ConnectHandler) GetRelation(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetRelation", err, - zap.String("relation_id", relationID)) + "relation_id", relationID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -187,9 +186,9 @@ func (h *ConnectHandler) DeleteRelation(ctx context.Context, request *connect.Re }) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteRelation", err, - zap.String("subject", request.Msg.GetSubject()), - zap.String("object", request.Msg.GetObject()), - zap.String("relation", request.Msg.GetRelation())) + "subject", request.Msg.GetSubject(), + "object", request.Msg.GetObject(), + "relation", request.Msg.GetRelation()) switch { case errors.Is(err, relation.ErrNotExist), @@ -198,9 +197,9 @@ func (h *ConnectHandler) DeleteRelation(ctx context.Context, request *connect.Re return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteRelation", err, - zap.String("subject", request.Msg.GetSubject()), - zap.String("object", request.Msg.GetObject()), - zap.String("relation", request.Msg.GetRelation())) + "subject", request.Msg.GetSubject(), + "object", request.Msg.GetObject(), + "relation", request.Msg.GetRelation()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/resource.go b/internal/api/v1beta1connect/resource.go index b7faae24e..64bde56ab 100644 --- a/internal/api/v1beta1connect/resource.go +++ b/internal/api/v1beta1connect/resource.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -27,8 +26,8 @@ func (h *ConnectHandler) ListResources(ctx context.Context, request *connect.Req resourcesList, err := h.resourceService.List(ctx, filters) if err != nil { errorLogger.LogServiceError(ctx, request, "ListResources", err, - zap.String("namespace", request.Msg.GetNamespace()), - zap.String("project_id", request.Msg.GetProjectId())) + "namespace", request.Msg.GetNamespace(), + "project_id", request.Msg.GetProjectId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -57,8 +56,8 @@ func (h *ConnectHandler) ListProjectResources(ctx context.Context, request *conn resourcesList, err := h.resourceService.List(ctx, filters) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectResources", err, - zap.String("namespace", request.Msg.GetNamespace()), - zap.String("project_id", request.Msg.GetProjectId())) + "namespace", request.Msg.GetNamespace(), + "project_id", request.Msg.GetProjectId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, r := range resourcesList { @@ -90,7 +89,7 @@ func (h *ConnectHandler) CreateProjectResource(ctx context.Context, request *con parentProject, err := h.projectService.Get(ctx, request.Msg.GetProjectId()) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProjectResource.GetProject", err, - zap.String("project_id", request.Msg.GetProjectId())) + "project_id", request.Msg.GetProjectId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -113,11 +112,11 @@ func (h *ConnectHandler) CreateProjectResource(ctx context.Context, request *con }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateProjectResource", err, - zap.String("resource_id", request.Msg.GetId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("resource_name", request.Msg.GetBody().GetName()), - zap.String("namespace", request.Msg.GetBody().GetNamespace()), - zap.String("principal", request.Msg.GetBody().GetPrincipal())) + "resource_id", request.Msg.GetId(), + "project_id", request.Msg.GetProjectId(), + "resource_name", request.Msg.GetBody().GetName(), + "namespace", request.Msg.GetBody().GetNamespace(), + "principal", request.Msg.GetBody().GetPrincipal()) switch { case errors.Is(err, user.ErrInvalidEmail): @@ -129,11 +128,11 @@ func (h *ConnectHandler) CreateProjectResource(ctx context.Context, request *con return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreateProjectResource", err, - zap.String("resource_id", request.Msg.GetId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("resource_name", request.Msg.GetBody().GetName()), - zap.String("namespace", request.Msg.GetBody().GetNamespace()), - zap.String("principal", request.Msg.GetBody().GetPrincipal())) + "resource_id", request.Msg.GetId(), + "project_id", request.Msg.GetProjectId(), + "resource_name", request.Msg.GetBody().GetName(), + "namespace", request.Msg.GetBody().GetNamespace(), + "principal", request.Msg.GetBody().GetPrincipal()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -160,7 +159,7 @@ func (h *ConnectHandler) GetProjectResource(ctx context.Context, request *connec fetchedResource, err := h.resourceService.Get(ctx, resourceID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetProjectResource", err, - zap.String("resource_id", resourceID)) + "resource_id", resourceID) switch { case errors.Is(err, resource.ErrNotExist), @@ -169,7 +168,7 @@ func (h *ConnectHandler) GetProjectResource(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeNotFound, ErrResourceNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetProjectResource", err, - zap.String("resource_id", resourceID)) + "resource_id", resourceID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -201,7 +200,7 @@ func (h *ConnectHandler) UpdateProjectResource(ctx context.Context, request *con parentProject, err := h.projectService.Get(ctx, request.Msg.GetProjectId()) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateProjectResource.GetProject", err, - zap.String("project_id", request.Msg.GetProjectId())) + "project_id", request.Msg.GetProjectId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -223,11 +222,11 @@ func (h *ConnectHandler) UpdateProjectResource(ctx context.Context, request *con }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateProjectResource", err, - zap.String("resource_id", request.Msg.GetId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("resource_name", request.Msg.GetBody().GetName()), - zap.String("namespace", request.Msg.GetBody().GetNamespace()), - zap.String("principal", request.Msg.GetBody().GetPrincipal())) + "resource_id", request.Msg.GetId(), + "project_id", request.Msg.GetProjectId(), + "resource_name", request.Msg.GetBody().GetName(), + "namespace", request.Msg.GetBody().GetNamespace(), + "principal", request.Msg.GetBody().GetPrincipal()) switch { case errors.Is(err, resource.ErrNotExist), @@ -241,11 +240,11 @@ func (h *ConnectHandler) UpdateProjectResource(ctx context.Context, request *con return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateProjectResource", err, - zap.String("resource_id", request.Msg.GetId()), - zap.String("project_id", request.Msg.GetProjectId()), - zap.String("resource_name", request.Msg.GetBody().GetName()), - zap.String("namespace", request.Msg.GetBody().GetNamespace()), - zap.String("principal", request.Msg.GetBody().GetPrincipal())) + "resource_id", request.Msg.GetId(), + "project_id", request.Msg.GetProjectId(), + "resource_name", request.Msg.GetBody().GetName(), + "namespace", request.Msg.GetBody().GetNamespace(), + "principal", request.Msg.GetBody().GetPrincipal()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -272,7 +271,7 @@ func (h *ConnectHandler) DeleteProjectResource(ctx context.Context, request *con resourceToDel, err := h.resourceService.Get(ctx, resourceID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteProjectResource.GetResource", err, - zap.String("resource_id", resourceID)) + "resource_id", resourceID) switch { case errors.Is(err, resource.ErrNotExist), @@ -281,7 +280,7 @@ func (h *ConnectHandler) DeleteProjectResource(ctx context.Context, request *con return nil, connect.NewError(connect.CodeNotFound, ErrResourceNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteProjectResource.GetResource", err, - zap.String("resource_id", resourceID)) + "resource_id", resourceID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -289,17 +288,17 @@ func (h *ConnectHandler) DeleteProjectResource(ctx context.Context, request *con parentProject, err := h.projectService.Get(ctx, resourceToDel.ProjectID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteProjectResource.GetProject", err, - zap.String("resource_id", resourceID), - zap.String("project_id", resourceToDel.ProjectID)) + "resource_id", resourceID, + "project_id", resourceToDel.ProjectID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } err = h.resourceService.Delete(ctx, resourceToDel.NamespaceID, resourceToDel.ID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteProjectResource", err, - zap.String("resource_id", resourceID), - zap.String("project_id", resourceToDel.ProjectID), - zap.String("namespace", resourceToDel.NamespaceID)) + "resource_id", resourceID, + "project_id", resourceToDel.ProjectID, + "namespace", resourceToDel.NamespaceID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/role.go b/internal/api/v1beta1connect/role.go index 655162a0d..80c5f2bc3 100644 --- a/internal/api/v1beta1connect/role.go +++ b/internal/api/v1beta1connect/role.go @@ -13,7 +13,6 @@ import ( "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -47,10 +46,10 @@ func (h *ConnectHandler) CreateRole(ctx context.Context, request *connect.Reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateRole", err, - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) switch { case errors.Is(err, namespace.ErrNotExist), @@ -62,10 +61,10 @@ func (h *ConnectHandler) CreateRole(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeAlreadyExists, err) default: errorLogger.LogUnexpectedError(ctx, request, "CreateRole", err, - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -108,11 +107,11 @@ func (h *ConnectHandler) UpdateRole(ctx context.Context, request *connect.Reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateRole", err, - zap.String("role_id", request.Msg.GetId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_id", request.Msg.GetId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) switch { case errors.Is(err, role.ErrInvalidDetail): @@ -124,11 +123,11 @@ func (h *ConnectHandler) UpdateRole(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateRole", err, - zap.String("role_id", request.Msg.GetId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_id", request.Msg.GetId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -177,7 +176,7 @@ func (h *ConnectHandler) ListRoles(ctx context.Context, request *connect.Request }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListRoles", err, - zap.Strings("scopes", request.Msg.GetScopes())) + "scopes", request.Msg.GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -204,8 +203,8 @@ func (h *ConnectHandler) ListOrganizationRoles(ctx context.Context, request *con }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationRoles", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.Strings("scopes", request.Msg.GetScopes())) + "org_id", request.Msg.GetOrgId(), + "scopes", request.Msg.GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -239,7 +238,7 @@ func (h *ConnectHandler) CreateOrganizationRole(ctx context.Context, request *co org, err := h.orgService.Get(ctx, request.Msg.GetOrgId()) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateOrganizationRole.GetOrganization", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, err) } metaDataMap[orgNameMetadataKey] = org.Title @@ -254,11 +253,11 @@ func (h *ConnectHandler) CreateOrganizationRole(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateOrganizationRole", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "org_id", request.Msg.GetOrgId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) switch { case errors.Is(err, namespace.ErrNotExist), @@ -270,11 +269,11 @@ func (h *ConnectHandler) CreateOrganizationRole(ctx context.Context, request *co return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreateOrganizationRole", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "org_id", request.Msg.GetOrgId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -300,14 +299,14 @@ func (h *ConnectHandler) GetOrganizationRole(ctx context.Context, request *conne fetchedRole, err := h.roleService.Get(ctx, roleID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetOrganizationRole", err, - zap.String("role_id", roleID)) + "role_id", roleID) switch { case errors.Is(err, role.ErrNotExist), errors.Is(err, role.ErrInvalidID): return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetOrganizationRole", err, - zap.String("role_id", roleID)) + "role_id", roleID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -341,7 +340,7 @@ func (h *ConnectHandler) UpdateOrganizationRole(ctx context.Context, request *co org, err := h.orgService.Get(ctx, request.Msg.GetOrgId()) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateOrganizationRole.GetOrganization", err, - zap.String("org_id", request.Msg.GetOrgId())) + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, err) } metaDataMap[orgNameMetadataKey] = org.Title @@ -357,12 +356,12 @@ func (h *ConnectHandler) UpdateOrganizationRole(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateOrganizationRole", err, - zap.String("role_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) switch { case errors.Is(err, role.ErrInvalidDetail): @@ -374,12 +373,12 @@ func (h *ConnectHandler) UpdateOrganizationRole(ctx context.Context, request *co return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateOrganizationRole", err, - zap.String("role_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("role_name", request.Msg.GetBody().GetName()), - zap.String("role_title", request.Msg.GetBody().GetTitle()), - zap.Strings("permissions", request.Msg.GetBody().GetPermissions()), - zap.Strings("scopes", request.Msg.GetBody().GetScopes())) + "role_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId(), + "role_name", request.Msg.GetBody().GetName(), + "role_title", request.Msg.GetBody().GetTitle(), + "permissions", request.Msg.GetBody().GetPermissions(), + "scopes", request.Msg.GetBody().GetScopes()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -411,16 +410,16 @@ func (h *ConnectHandler) DeleteOrganizationRole(ctx context.Context, request *co err := h.roleService.Delete(ctx, roleID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteOrganizationRole", err, - zap.String("role_id", roleID), - zap.String("org_id", orgID)) + "role_id", roleID, + "org_id", orgID) switch { case errors.Is(err, role.ErrNotExist), errors.Is(err, role.ErrInvalidID): return nil, connect.NewError(connect.CodeNotFound, ErrRoleNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteOrganizationRole", err, - zap.String("role_id", roleID), - zap.String("org_id", orgID)) + "role_id", roleID, + "org_id", orgID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -444,14 +443,14 @@ func (h *ConnectHandler) DeleteRole(ctx context.Context, request *connect.Reques err := h.roleService.Delete(ctx, roleID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteRole", err, - zap.String("role_id", roleID)) + "role_id", roleID) switch { case errors.Is(err, role.ErrNotExist), errors.Is(err, role.ErrInvalidID): return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteRole", err, - zap.String("role_id", roleID)) + "role_id", roleID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } diff --git a/internal/api/v1beta1connect/serviceuser.go b/internal/api/v1beta1connect/serviceuser.go index 3210b6f77..675511f1d 100644 --- a/internal/api/v1beta1connect/serviceuser.go +++ b/internal/api/v1beta1connect/serviceuser.go @@ -15,8 +15,6 @@ import ( "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" - "google.golang.org/protobuf/types/known/timestamppb" ) @@ -47,8 +45,8 @@ func (h *ConnectHandler) ListServiceUsers(ctx context.Context, request *connect. }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUsers", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("state", request.Msg.GetState())) + "org_id", request.Msg.GetOrgId(), + "state", request.Msg.GetState()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -96,14 +94,14 @@ func (h *ConnectHandler) GetServiceUser(ctx context.Context, request *connect.Re svUser, err := h.serviceUserService.Get(ctx, serviceUserID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetServiceUser", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) switch { case err == serviceuser.ErrNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetServiceUser", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) return nil, connect.NewError(connect.CodeInternal, err) } } @@ -149,8 +147,8 @@ func (h *ConnectHandler) CreateServiceUser(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateServiceUser", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("title", request.Msg.GetBody().GetTitle())) + "org_id", request.Msg.GetOrgId(), + "title", request.Msg.GetBody().GetTitle()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -178,16 +176,16 @@ func (h *ConnectHandler) DeleteServiceUser(ctx context.Context, request *connect err := h.serviceUserService.Delete(ctx, serviceUserID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteServiceUser", err, - zap.String("service_user_id", serviceUserID), - zap.String("org_id", orgID)) + "service_user_id", serviceUserID, + "org_id", orgID) switch { case err == serviceuser.ErrNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteServiceUser", err, - zap.String("service_user_id", serviceUserID), - zap.String("org_id", orgID)) + "service_user_id", serviceUserID, + "org_id", orgID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -209,16 +207,16 @@ func (h *ConnectHandler) CreateServiceUserJWK(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateServiceUserJWK", err, - zap.String("service_user_id", serviceUserID), - zap.String("title", title)) + "service_user_id", serviceUserID, + "title", title) switch { case err == serviceuser.ErrNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserCredNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "CreateServiceUserJWK", err, - zap.String("service_user_id", serviceUserID), - zap.String("title", title)) + "service_user_id", serviceUserID, + "title", title) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -242,14 +240,14 @@ func (h *ConnectHandler) ListServiceUserJWKs(ctx context.Context, request *conne credList, err := h.serviceUserService.ListKeys(ctx, serviceUserID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserJWKs", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) switch { case err == serviceuser.ErrNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserCredNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "ListServiceUserJWKs", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -258,8 +256,8 @@ func (h *ConnectHandler) ListServiceUserJWKs(ctx context.Context, request *conne jwkJson, err := json.Marshal(svCred.PublicKey) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserJWKs.MarshalPublicKey", err, - zap.String("service_user_id", serviceUserID), - zap.String("credential_id", svCred.ID)) + "service_user_id", serviceUserID, + "credential_id", svCred.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } keys = append(keys, &frontierv1beta1.ServiceUserJWK{ @@ -282,14 +280,14 @@ func (h *ConnectHandler) GetServiceUserJWK(ctx context.Context, request *connect svCred, err := h.serviceUserService.GetKey(ctx, keyID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetServiceUserJWK", err, - zap.String("key_id", keyID)) + "key_id", keyID) switch { case err == serviceuser.ErrCredNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserCredNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "GetServiceUserJWK", err, - zap.String("key_id", keyID)) + "key_id", keyID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -297,8 +295,8 @@ func (h *ConnectHandler) GetServiceUserJWK(ctx context.Context, request *connect jwks, err := toJSONWebKey(svCred.PublicKey) if err != nil { errorLogger.LogServiceError(ctx, request, "GetServiceUserJWK.ToJSONWebKey", err, - zap.String("key_id", keyID), - zap.String("credential_id", svCred.ID)) + "key_id", keyID, + "credential_id", svCred.ID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.GetServiceUserJWKResponse{ @@ -313,14 +311,14 @@ func (h *ConnectHandler) DeleteServiceUserJWK(ctx context.Context, request *conn err := h.serviceUserService.DeleteKey(ctx, keyID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteServiceUserJWK", err, - zap.String("key_id", keyID)) + "key_id", keyID) switch { case err == serviceuser.ErrCredNotExist: return nil, connect.NewError(connect.CodeNotFound, ErrServiceUserCredNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteServiceUserJWK", err, - zap.String("key_id", keyID)) + "key_id", keyID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -339,8 +337,8 @@ func (h *ConnectHandler) CreateServiceUserCredential(ctx context.Context, reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateServiceUserCredential", err, - zap.String("service_user_id", serviceUserID), - zap.String("title", title)) + "service_user_id", serviceUserID, + "title", title) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -361,7 +359,7 @@ func (h *ConnectHandler) ListServiceUserCredentials(ctx context.Context, request credentials, err := h.serviceUserService.ListSecret(ctx, serviceUserID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserCredentials", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } secretsPB := make([]*frontierv1beta1.SecretCredential, 0, len(credentials)) @@ -384,7 +382,7 @@ func (h *ConnectHandler) DeleteServiceUserCredential(ctx context.Context, reques err := h.serviceUserService.DeleteSecret(ctx, secretID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteServiceUserCredential", err, - zap.String("secret_id", secretID)) + "secret_id", secretID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteServiceUserCredentialResponse{}), nil @@ -401,8 +399,8 @@ func (h *ConnectHandler) CreateServiceUserToken(ctx context.Context, request *co }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateServiceUserToken", err, - zap.String("service_user_id", serviceUserID), - zap.String("title", title)) + "service_user_id", serviceUserID, + "title", title) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.CreateServiceUserTokenResponse{ @@ -422,7 +420,7 @@ func (h *ConnectHandler) ListServiceUserTokens(ctx context.Context, request *con credentials, err := h.serviceUserService.ListToken(ctx, serviceUserID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserTokens", err, - zap.String("service_user_id", serviceUserID)) + "service_user_id", serviceUserID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } secretsPB := make([]*frontierv1beta1.ServiceUserToken, 0, len(credentials)) @@ -445,7 +443,7 @@ func (h *ConnectHandler) DeleteServiceUserToken(ctx context.Context, request *co err := h.serviceUserService.DeleteToken(ctx, tokenID) if err != nil { errorLogger.LogServiceError(ctx, request, "DeleteServiceUserToken", err, - zap.String("token_id", tokenID)) + "token_id", tokenID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteServiceUserTokenResponse{}), nil @@ -463,8 +461,8 @@ func (h *ConnectHandler) ListServiceUserProjects(ctx context.Context, request *c }) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserProjects", err, - zap.String("service_user_id", serviceUserID), - zap.String("org_id", orgID)) + "service_user_id", serviceUserID, + "org_id", orgID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -486,9 +484,9 @@ func (h *ConnectHandler) ListServiceUserProjects(ctx context.Context, request *c successCheckPairs, err := h.fetchAccessPairsOnResource(ctx, schema.ProjectNamespace, resourceIds, request.Msg.GetWithPermissions()) if err != nil { errorLogger.LogServiceError(ctx, request, "ListServiceUserProjects.FetchAccessPairs", err, - zap.String("service_user_id", serviceUserID), - zap.String("org_id", orgID), - zap.Strings("with_permissions", request.Msg.GetWithPermissions())) + "service_user_id", serviceUserID, + "org_id", orgID, + "with_permissions", request.Msg.GetWithPermissions()) return nil, err } for _, successCheck := range successCheckPairs { diff --git a/internal/api/v1beta1connect/session.go b/internal/api/v1beta1connect/session.go index bac3e038f..14673251e 100644 --- a/internal/api/v1beta1connect/session.go +++ b/internal/api/v1beta1connect/session.go @@ -11,7 +11,6 @@ import ( frontiersession "github.com/raystack/frontier/core/authenticate/session" sessionutils "github.com/raystack/frontier/pkg/session" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -35,8 +34,8 @@ func (h *ConnectHandler) ListSessions(ctx context.Context, request *connect.Requ sessions, err := h.sessionService.List(ctx, principal.ID) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListSessions.List", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -105,7 +104,7 @@ func (h *ConnectHandler) RevokeSession(ctx context.Context, request *connect.Req session, err := h.sessionService.GetByID(ctx, sessionID) if err != nil { errorLogger.LogServiceError(ctx, request, "RevokeSession.GetByID", err, - zap.String("session_id", sessionID.String())) + "session_id", sessionID.String()) return nil, connect.NewError(connect.CodeNotFound, ErrSessionNotFound) } @@ -115,9 +114,9 @@ func (h *ConnectHandler) RevokeSession(ctx context.Context, request *connect.Req if err := h.sessionService.Delete(ctx, sessionID); err != nil { errorLogger.LogUnexpectedError(ctx, request, "RevokeSession", err, - zap.String("session_id", sessionID.String()), - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "session_id", sessionID.String(), + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -142,7 +141,7 @@ func (h *ConnectHandler) PingUserSession(ctx context.Context, request *connect.R if err := h.sessionService.Ping(ctx, session.ID, sessionMetadata); err != nil { errorLogger.LogUnexpectedError(ctx, request, "PingUserSession", err, - zap.String("session_id", session.ID.String())) + "session_id", session.ID.String()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -150,7 +149,7 @@ func (h *ConnectHandler) PingUserSession(ctx context.Context, request *connect.R updatedSession, err := h.sessionService.GetByID(ctx, session.ID) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "PingUserSession.GetByID", err, - zap.String("session_id", session.ID.String())) + "session_id", session.ID.String()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -181,7 +180,7 @@ func (h *ConnectHandler) ListUserSessions(ctx context.Context, request *connect. sessions, err := h.sessionService.List(ctx, userID) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListUserSessions", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -211,7 +210,7 @@ func (h *ConnectHandler) RevokeUserSession(ctx context.Context, request *connect if err := h.sessionService.Delete(ctx, sessionID); err != nil { errorLogger.LogUnexpectedError(ctx, request, "RevokeUserSession", err, - zap.String("session_id", sessionID.String())) + "session_id", sessionID.String()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/user.go b/internal/api/v1beta1connect/user.go index 15e47f9fe..425e0408e 100644 --- a/internal/api/v1beta1connect/user.go +++ b/internal/api/v1beta1connect/user.go @@ -7,7 +7,7 @@ import ( "strings" "connectrpc.com/connect" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "github.com/pkg/errors" "github.com/raystack/frontier/core/audit" "github.com/raystack/frontier/core/authenticate" @@ -18,13 +18,13 @@ import ( "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/internal/store/postgres" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/pagination" "github.com/raystack/frontier/pkg/str" "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" httpbody "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -43,8 +43,8 @@ func (h *ConnectHandler) ListAllUsers(ctx context.Context, request *connect.Requ }) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListAllUsers", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("group_id", request.Msg.GetGroupId())) + "org_id", request.Msg.GetOrgId(), + "group_id", request.Msg.GetGroupId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -95,7 +95,7 @@ func (h *ConnectHandler) GetCurrentAdminUser(ctx context.Context, request *conne } func (h *ConnectHandler) CreateUser(ctx context.Context, request *connect.Request[frontierv1beta1.CreateUserRequest]) (*connect.Response[frontierv1beta1.CreateUserResponse], error) { - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) errorLogger := NewErrorLogger() if request.Msg.GetBody() == nil { @@ -136,8 +136,8 @@ func (h *ConnectHandler) CreateUser(ctx context.Context, request *connect.Reques }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateUser", err, - zap.String("email", email), - zap.String("name", name)) + "email", email, + "name", name) switch { case errors.Is(err, user.ErrConflict): @@ -146,8 +146,8 @@ func (h *ConnectHandler) CreateUser(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "CreateUser", err, - zap.String("user_email", email), - zap.String("user_name", name)) + "user_email", email, + "user_name", name) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -173,14 +173,14 @@ func (h *ConnectHandler) GetUser(ctx context.Context, request *connect.Request[f fetchedUser, err := h.userService.GetByID(ctx, userID) if err != nil { errorLogger.LogServiceError(ctx, request, "GetUser", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist), errors.Is(err, user.ErrInvalidUUID), errors.Is(err, user.ErrInvalidID): return nil, connect.NewError(connect.CodeNotFound, ErrUserNotExist) default: errorLogger.LogUnexpectedError(ctx, request, "GetUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -263,7 +263,7 @@ func (h *ConnectHandler) UpdateUser(ctx context.Context, request *connect.Reques return connect.NewResponse(&frontierv1beta1.UpdateUserResponse{User: createUserResponse.Msg.GetUser()}), nil } else { errorLogger.LogServiceError(ctx, request, "UpdateUser.GetByEmail", err, - zap.String("lookup_email", id)) + "lookup_email", id) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -284,8 +284,8 @@ func (h *ConnectHandler) UpdateUser(ctx context.Context, request *connect.Reques if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateUser", err, - zap.String("user_id", id), - zap.String("email", email)) + "user_id", id, + "email", email) switch { case errors.Is(err, user.ErrNotExist), errors.Is(err, user.ErrInvalidID), errors.Is(err, user.ErrInvalidUUID): @@ -296,8 +296,8 @@ func (h *ConnectHandler) UpdateUser(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeAlreadyExists, ErrConflictRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateUser", err, - zap.String("user_id", id), - zap.String("user_email", email)) + "user_id", id, + "user_email", email) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -353,8 +353,8 @@ func (h *ConnectHandler) UpdateCurrentUser(ctx context.Context, request *connect }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateCurrentUser.Update", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) switch { case errors.Is(err, user.ErrNotExist): @@ -363,8 +363,8 @@ func (h *ConnectHandler) UpdateCurrentUser(ctx context.Context, request *connect return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "UpdateCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -390,7 +390,7 @@ func (h *ConnectHandler) EnableUser(ctx context.Context, request *connect.Reques if err := h.userService.Enable(ctx, userID); err != nil { errorLogger.LogServiceError(ctx, request, "EnableUser", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist): @@ -399,7 +399,7 @@ func (h *ConnectHandler) EnableUser(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "EnableUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -412,7 +412,7 @@ func (h *ConnectHandler) DisableUser(ctx context.Context, request *connect.Reque if err := h.userService.Disable(ctx, userID); err != nil { errorLogger.LogServiceError(ctx, request, "DisableUser.Disable", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist): @@ -421,7 +421,7 @@ func (h *ConnectHandler) DisableUser(ctx context.Context, request *connect.Reque return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "DisableUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -434,7 +434,7 @@ func (h *ConnectHandler) DeleteUser(ctx context.Context, request *connect.Reques if err := h.deleterService.DeleteUser(ctx, userID); err != nil { errorLogger.LogServiceError(ctx, request, "DeleteUser", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist): @@ -443,7 +443,7 @@ func (h *ConnectHandler) DeleteUser(ctx context.Context, request *connect.Reques return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "DeleteUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -461,16 +461,16 @@ func (h *ConnectHandler) ListUserGroups(ctx context.Context, request *connect.Re }, group.Filter{OrganizationID: request.Msg.GetOrgId()}) if err != nil { errorLogger.LogServiceError(ctx, request, "ListUserGroups.ListByUser", err, - zap.String("user_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, group.ErrInvalidID), errors.Is(err, group.ErrInvalidUUID): return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "ListUserGroups", err, - zap.String("user_id", request.Msg.GetId()), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", request.Msg.GetId(), + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -508,17 +508,17 @@ func (h *ConnectHandler) ListCurrentUserGroups(ctx context.Context, request *con ) if err != nil { errorLogger.LogServiceError(ctx, request, "ListCurrentUserGroups.ListByUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("org_id", request.Msg.GetOrgId())) + "principal_id", principal.ID, + "principal_type", principal.Type, + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, group.ErrInvalidID), errors.Is(err, group.ErrInvalidUUID): return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) default: errorLogger.LogUnexpectedError(ctx, request, "ListCurrentUserGroups", err, - zap.String("principal_id", principal.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "principal_id", principal.ID, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -540,8 +540,8 @@ func (h *ConnectHandler) ListCurrentUserGroups(ctx context.Context, request *con successCheckPairs, err := h.fetchAccessPairsOnResource(ctx, schema.GroupNamespace, resourceIds, request.Msg.GetWithPermissions()) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListCurrentUserGroups", err, - zap.String("principal_id", principal.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "principal_id", principal.ID, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, successCheck := range successCheckPairs { @@ -582,8 +582,8 @@ func (h *ConnectHandler) ListUsers(ctx context.Context, request *connect.Request }) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListUsers", err, - zap.String("org_id", request.Msg.GetOrgId()), - zap.String("group_id", request.Msg.GetGroupId())) + "org_id", request.Msg.GetOrgId(), + "group_id", request.Msg.GetGroupId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -712,7 +712,7 @@ func (h *ConnectHandler) ListOrganizationsByUser(ctx context.Context, request *c }, orgFilter) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -730,14 +730,14 @@ func (h *ConnectHandler) ListOrganizationsByUser(ctx context.Context, request *c userData, err := h.userService.GetByID(ctx, userID) if err != nil { errorLogger.LogServiceError(ctx, request, "ListOrganizationsByUser.GetByID", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist), errors.Is(err, user.ErrInvalidUUID): return nil, connect.NewError(connect.CodeNotFound, ErrUserNotExist) default: errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -745,8 +745,8 @@ func (h *ConnectHandler) ListOrganizationsByUser(ctx context.Context, request *c joinableOrgIDs, err := h.domainService.ListJoinableOrgsByDomain(ctx, userData.Email) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByUser", err, - zap.String("user_id", userID), - zap.String("user_email", userData.Email)) + "user_id", userID, + "user_email", userData.Email) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -755,8 +755,8 @@ func (h *ConnectHandler) ListOrganizationsByUser(ctx context.Context, request *c org, err := h.orgService.Get(ctx, joinableOrg) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByUser", err, - zap.String("user_id", userID), - zap.String("joinable_org_id", joinableOrg)) + "user_id", userID, + "joinable_org_id", joinableOrg) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } orgPB, err := transformOrgToPB(org) @@ -789,8 +789,8 @@ func (h *ConnectHandler) ListOrganizationsByCurrentUser(ctx context.Context, req orgList, err := h.orgService.ListByUser(ctx, principal, orgFilter) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type)) + "principal_id", principal.ID, + "principal_type", principal.Type) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -810,9 +810,9 @@ func (h *ConnectHandler) ListOrganizationsByCurrentUser(ctx context.Context, req joinableOrgIDs, err := h.domainService.ListJoinableOrgsByDomain(ctx, principal.User.Email) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("user_email", principal.User.Email)) + "principal_id", principal.ID, + "principal_type", principal.Type, + "user_email", principal.User.Email) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -820,9 +820,9 @@ func (h *ConnectHandler) ListOrganizationsByCurrentUser(ctx context.Context, req org, err := h.orgService.Get(ctx, joinableOrg) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListOrganizationsByCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("joinable_org_id", joinableOrg)) + "principal_id", principal.ID, + "principal_type", principal.Type, + "joinable_org_id", joinableOrg) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } orgPB, err := transformOrgToPB(org) @@ -849,7 +849,7 @@ func (h *ConnectHandler) ListProjectsByUser(ctx context.Context, request *connec }, project.Filter{}) if err != nil { errorLogger.LogServiceError(ctx, request, "ListProjectsByUser.ListByUser", err, - zap.String("user_id", userID)) + "user_id", userID) switch { case errors.Is(err, user.ErrNotExist): @@ -858,7 +858,7 @@ func (h *ConnectHandler) ListProjectsByUser(ctx context.Context, request *connec return nil, connect.NewError(connect.CodeInvalidArgument, ErrBadRequest) default: errorLogger.LogUnexpectedError(ctx, request, "ListProjectsByUser", err, - zap.String("user_id", userID)) + "user_id", userID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } } @@ -895,9 +895,9 @@ func (h *ConnectHandler) ListProjectsByCurrentUser(ctx context.Context, request }) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListProjectsByCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("org_id", request.Msg.GetOrgId())) + "principal_id", principal.ID, + "principal_type", principal.Type, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } @@ -919,9 +919,9 @@ func (h *ConnectHandler) ListProjectsByCurrentUser(ctx context.Context, request successCheckPairs, err := h.fetchAccessPairsOnResource(ctx, schema.ProjectNamespace, resourceIds, request.Msg.GetWithPermissions()) if err != nil { errorLogger.LogUnexpectedError(ctx, request, "ListProjectsByCurrentUser", err, - zap.String("principal_id", principal.ID), - zap.String("principal_type", principal.Type), - zap.String("org_id", request.Msg.GetOrgId())) + "principal_id", principal.ID, + "principal_type", principal.Type, + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } for _, successCheck := range successCheckPairs { diff --git a/internal/api/v1beta1connect/user_orgs.go b/internal/api/v1beta1connect/user_orgs.go index 480afc07b..7e5be3645 100644 --- a/internal/api/v1beta1connect/user_orgs.go +++ b/internal/api/v1beta1connect/user_orgs.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -37,11 +36,11 @@ func (h *ConnectHandler) SearchUserOrganizations(ctx context.Context, request *c if err != nil { if errors.Is(err, postgres.ErrBadInput) { errorLogger.LogServiceError(ctx, request, "SearchUserOrganizations.Search", err, - zap.String("user_id", request.Msg.GetId())) + "user_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogUnexpectedError(ctx, request, "SearchUserOrganizations", err, - zap.String("user_id", request.Msg.GetId())) + "user_id", request.Msg.GetId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/user_pat.go b/internal/api/v1beta1connect/user_pat.go index 5e939d85f..e32ce49b0 100644 --- a/internal/api/v1beta1connect/user_pat.go +++ b/internal/api/v1beta1connect/user_pat.go @@ -14,7 +14,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -43,8 +42,8 @@ func (h *ConnectHandler) CreateCurrentUserPAT(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "CreateCurrentUserPAT", err, - zap.String("user_id", principal.User.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", principal.User.ID, + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -87,8 +86,8 @@ func (h *ConnectHandler) GetCurrentUserPAT(ctx context.Context, request *connect pat, err := h.userPATService.Get(ctx, principal.User.ID, request.Msg.GetId()) if err != nil { errorLogger.LogServiceError(ctx, request, "GetCurrentUserPAT", err, - zap.String("user_id", principal.User.ID), - zap.String("pat_id", request.Msg.GetId())) + "user_id", principal.User.ID, + "pat_id", request.Msg.GetId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -147,8 +146,8 @@ func (h *ConnectHandler) DeleteCurrentUserPAT(ctx context.Context, request *conn if err := h.userPATService.Delete(ctx, principal.User.ID, request.Msg.GetId()); err != nil { errorLogger.LogServiceError(ctx, request, "DeleteCurrentUserPAT", err, - zap.String("user_id", principal.User.ID), - zap.String("pat_id", request.Msg.GetId())) + "user_id", principal.User.ID, + "pat_id", request.Msg.GetId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -183,8 +182,8 @@ func (h *ConnectHandler) UpdateCurrentUserPAT(ctx context.Context, request *conn }) if err != nil { errorLogger.LogServiceError(ctx, request, "UpdateCurrentUserPAT", err, - zap.String("user_id", principal.User.ID), - zap.String("pat_id", request.Msg.GetId())) + "user_id", principal.User.ID, + "pat_id", request.Msg.GetId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -231,8 +230,8 @@ func (h *ConnectHandler) RegenerateCurrentUserPAT(ctx context.Context, request * regenerated, patValue, err := h.userPATService.Regenerate(ctx, principal.User.ID, request.Msg.GetId(), request.Msg.GetExpiresAt().AsTime()) if err != nil { errorLogger.LogServiceError(ctx, request, "RegenerateCurrentUserPAT", err, - zap.String("user_id", principal.User.ID), - zap.String("pat_id", request.Msg.GetId())) + "user_id", principal.User.ID, + "pat_id", request.Msg.GetId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -271,8 +270,8 @@ func (h *ConnectHandler) CheckCurrentUserPATTitle(ctx context.Context, request * available, err := h.userPATService.IsTitleAvailable(ctx, principal.User.ID, request.Msg.GetOrgId(), request.Msg.GetTitle()) if err != nil { errorLogger.LogServiceError(ctx, request, "CheckCurrentUserPATTitle", err, - zap.String("user_id", principal.User.ID), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", principal.User.ID, + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, paterrors.ErrDisabled): @@ -360,8 +359,8 @@ func (h *ConnectHandler) SearchCurrentUserPATs(ctx context.Context, request *con result, err := h.userPATService.List(ctx, userID, request.Msg.GetOrgId(), rqlQuery) if err != nil { errorLogger.LogServiceError(ctx, request, "SearchCurrentUserPATs", err, - zap.String("user_id", userID), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", userID, + "org_id", request.Msg.GetOrgId()) switch { case errors.Is(err, paterrors.ErrDisabled): diff --git a/internal/api/v1beta1connect/user_projects.go b/internal/api/v1beta1connect/user_projects.go index d7a39bc57..604193a8b 100644 --- a/internal/api/v1beta1connect/user_projects.go +++ b/internal/api/v1beta1connect/user_projects.go @@ -11,7 +11,6 @@ import ( "github.com/raystack/frontier/pkg/utils" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" "github.com/raystack/salt/rql" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -45,13 +44,13 @@ func (h *ConnectHandler) SearchUserProjects(ctx context.Context, request *connec if err != nil { if errors.Is(err, postgres.ErrBadInput) { errorLogger.LogServiceError(ctx, request, "SearchUserProjects.Search", err, - zap.String("user_id", request.Msg.GetUserId()), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", request.Msg.GetUserId(), + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInvalidArgument, err) } errorLogger.LogUnexpectedError(ctx, request, "SearchUserProjects", err, - zap.String("user_id", request.Msg.GetUserId()), - zap.String("org_id", request.Msg.GetOrgId())) + "user_id", request.Msg.GetUserId(), + "org_id", request.Msg.GetOrgId()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } diff --git a/internal/api/v1beta1connect/v1beta1connect.go b/internal/api/v1beta1connect/v1beta1connect.go index f3b96b649..b6c39e49f 100644 --- a/internal/api/v1beta1connect/v1beta1connect.go +++ b/internal/api/v1beta1connect/v1beta1connect.go @@ -2,15 +2,14 @@ package v1beta1connect import ( "context" + "log/slog" "github.com/raystack/frontier/core/authenticate" "github.com/raystack/frontier/internal/api" + frontierlogger "github.com/raystack/frontier/pkg/logger" frontierv1beta1connect "github.com/raystack/frontier/proto/v1beta1/frontierv1beta1connect" - "go.uber.org/zap" ) -const loggerContextKey = "logger" - type ConnectHandler struct { frontierv1beta1connect.UnimplementedAdminServiceHandler frontierv1beta1connect.UnimplementedFrontierServiceHandler @@ -162,9 +161,6 @@ func (h *ConnectHandler) GetOrgIDFromBillingAccountID(ctx context.Context, billi return customer.OrgID, nil } -func ExtractLogger(ctx context.Context) *zap.Logger { - if logger, ok := ctx.Value(loggerContextKey).(*zap.Logger); ok { - return logger - } - return nil +func ExtractLogger(ctx context.Context) *slog.Logger { + return frontierlogger.FromContext(ctx) } diff --git a/internal/api/v1beta1connect/webhook.go b/internal/api/v1beta1connect/webhook.go index 2b202033f..58fe39de5 100644 --- a/internal/api/v1beta1connect/webhook.go +++ b/internal/api/v1beta1connect/webhook.go @@ -7,7 +7,6 @@ import ( "github.com/raystack/frontier/core/webhook" "github.com/raystack/frontier/pkg/metadata" frontierv1beta1 "github.com/raystack/frontier/proto/v1beta1" - "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -28,7 +27,7 @@ func (h *ConnectHandler) CreateWebhook(ctx context.Context, req *connect.Request }) if err != nil { errorLogger.LogUnexpectedError(ctx, req, "CreateWebhook", err, - zap.String("url", req.Msg.GetBody().GetUrl())) + "url", req.Msg.GetBody().GetUrl()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } endpointPb, err := toProtoWebhookEndpoint(endpoint) @@ -60,8 +59,8 @@ func (h *ConnectHandler) UpdateWebhook(ctx context.Context, req *connect.Request }) if err != nil { errorLogger.LogUnexpectedError(ctx, req, "UpdateWebhook", err, - zap.String("webhook_id", webhookID), - zap.String("url", req.Msg.GetBody().GetUrl())) + "webhook_id", webhookID, + "url", req.Msg.GetBody().GetUrl()) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } endpointPb, err := toProtoWebhookEndpoint(endpoint) @@ -104,7 +103,7 @@ func (h *ConnectHandler) DeleteWebhook(ctx context.Context, req *connect.Request err := h.webhookService.DeleteEndpoint(ctx, webhookID) if err != nil { errorLogger.LogUnexpectedError(ctx, req, "DeleteWebhook", err, - zap.String("webhook_id", webhookID)) + "webhook_id", webhookID) return nil, connect.NewError(connect.CodeInternal, ErrInternalServerError) } return connect.NewResponse(&frontierv1beta1.DeleteWebhookResponse{}), nil diff --git a/internal/bootstrap/service.go b/internal/bootstrap/service.go index 1c954be1d..c38048586 100644 --- a/internal/bootstrap/service.go +++ b/internal/bootstrap/service.go @@ -5,8 +5,7 @@ import ( "fmt" "strings" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/billing/plan" @@ -205,10 +204,10 @@ func filterDefaultAppNamespacePermissions(permissions []schema.ResourcePermissio // MakeSuperUsers promote ordinary users to superuser func (s Service) MakeSuperUsers(ctx context.Context) error { - logger := grpczap.Extract(ctx) + logger := frontierlogger.FromContext(ctx) for _, userID := range s.adminConfig.Users { userID = strings.TrimSpace(userID) - logger.Debug("promoting user to superuser", zap.String("user_id", userID)) + logger.Debug("promoting user to superuser", "user_id", userID) if err := s.userService.Sudo(ctx, userID, schema.AdminRelationName); err != nil { return err } diff --git a/internal/store/blob/resources_repository.go b/internal/store/blob/resources_repository.go index e557ae828..f1eba196b 100644 --- a/internal/store/blob/resources_repository.go +++ b/internal/store/blob/resources_repository.go @@ -11,9 +11,10 @@ import ( "github.com/raystack/frontier/core/namespace" "github.com/raystack/frontier/core/resource" + "log/slog" + "github.com/ghodss/yaml" "github.com/pkg/errors" - "github.com/raystack/salt/log" "github.com/robfig/cron/v3" "gocloud.dev/blob" @@ -44,7 +45,7 @@ type Resource struct { // TODO(kushsharma): marked for deletion type ResourcesRepository struct { - log log.Logger + log *slog.Logger mu *sync.Mutex cron *cron.Cron @@ -168,7 +169,7 @@ func (repo *ResourcesRepository) Close() error { return repo.Bucket.Close() } -func NewResourcesRepository(logger log.Logger, b Bucket) *ResourcesRepository { +func NewResourcesRepository(logger *slog.Logger, b Bucket) *ResourcesRepository { return &ResourcesRepository{ log: logger, Bucket: b, diff --git a/internal/store/postgres/audit_record_repository_test.go b/internal/store/postgres/audit_record_repository_test.go index c60cc66de..55966d7f0 100644 --- a/internal/store/postgres/audit_record_repository_test.go +++ b/internal/store/postgres/audit_record_repository_test.go @@ -10,6 +10,9 @@ import ( "testing" "time" + "io" + "log/slog" + "github.com/google/uuid" "github.com/ory/dockertest" "github.com/raystack/frontier/core/auditrecord" @@ -18,7 +21,6 @@ import ( "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" "github.com/raystack/salt/rql" "github.com/stretchr/testify/suite" ) @@ -41,7 +43,7 @@ type AuditRecordRepositoryTestSuite struct { func (s *AuditRecordRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/billing_customer_repository_test.go b/internal/store/postgres/billing_customer_repository_test.go index 98ac926e9..b6b2527f2 100644 --- a/internal/store/postgres/billing_customer_repository_test.go +++ b/internal/store/postgres/billing_customer_repository_test.go @@ -15,6 +15,9 @@ import ( "github.com/raystack/frontier/billing/customer" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -22,7 +25,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -39,7 +41,7 @@ type BillingCustomerRepositoryTestSuite struct { func (s *BillingCustomerRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/billing_product_repository_test.go b/internal/store/postgres/billing_product_repository_test.go index f3d754b83..9b8f92c93 100644 --- a/internal/store/postgres/billing_product_repository_test.go +++ b/internal/store/postgres/billing_product_repository_test.go @@ -9,13 +9,15 @@ import ( "github.com/google/uuid" "github.com/raystack/frontier/billing/product" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -31,7 +33,7 @@ type BillingProductRepositoryTestSuite struct { func (s *BillingProductRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/domain_repository.go b/internal/store/postgres/domain_repository.go index 1bb6fec28..3951170a2 100644 --- a/internal/store/postgres/domain_repository.go +++ b/internal/store/postgres/domain_repository.go @@ -9,19 +9,20 @@ import ( "github.com/pkg/errors" + "log/slog" + "github.com/doug-martin/goqu/v9" "github.com/raystack/frontier/core/domain" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" ) type DomainRepository struct { - log log.Logger + log *slog.Logger dbc *db.Client Now func() time.Time } -func NewDomainRepository(logger log.Logger, dbc *db.Client) *DomainRepository { +func NewDomainRepository(logger *slog.Logger, dbc *db.Client) *DomainRepository { return &DomainRepository{ dbc: dbc, log: logger, diff --git a/internal/store/postgres/flow_repository.go b/internal/store/postgres/flow_repository.go index 14437b7b4..623faf7d2 100644 --- a/internal/store/postgres/flow_repository.go +++ b/internal/store/postgres/flow_repository.go @@ -8,20 +8,21 @@ import ( "fmt" "time" + "log/slog" + "github.com/doug-martin/goqu/v9" "github.com/google/uuid" "github.com/raystack/frontier/core/authenticate" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" ) type FlowRepository struct { - log log.Logger + log *slog.Logger dbc *db.Client Now func() time.Time } -func NewFlowRepository(logger log.Logger, dbc *db.Client) *FlowRepository { +func NewFlowRepository(logger *slog.Logger, dbc *db.Client) *FlowRepository { return &FlowRepository{ dbc: dbc, log: logger, diff --git a/internal/store/postgres/group_repository_test.go b/internal/store/postgres/group_repository_test.go index a60ba2751..019c9a0ed 100644 --- a/internal/store/postgres/group_repository_test.go +++ b/internal/store/postgres/group_repository_test.go @@ -8,6 +8,9 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -19,7 +22,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -41,7 +43,7 @@ type GroupRepositoryTestSuite struct { func (s *GroupRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/invitation_repository.go b/internal/store/postgres/invitation_repository.go index eeb9eecf8..8b6a37ebc 100644 --- a/internal/store/postgres/invitation_repository.go +++ b/internal/store/postgres/invitation_repository.go @@ -13,20 +13,21 @@ import ( "github.com/raystack/frontier/core/invitation" + "log/slog" + "github.com/doug-martin/goqu/v9" "github.com/google/uuid" "github.com/jmoiron/sqlx" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" ) type InvitationRepository struct { - log log.Logger + log *slog.Logger dbc *db.Client Now func() time.Time } -func NewInvitationRepository(logger log.Logger, dbc *db.Client) *InvitationRepository { +func NewInvitationRepository(logger *slog.Logger, dbc *db.Client) *InvitationRepository { return &InvitationRepository{ dbc: dbc, log: logger, diff --git a/internal/store/postgres/invitation_repository_test.go b/internal/store/postgres/invitation_repository_test.go index a0eda2fee..c4fa660da 100644 --- a/internal/store/postgres/invitation_repository_test.go +++ b/internal/store/postgres/invitation_repository_test.go @@ -8,6 +8,9 @@ import ( "github.com/raystack/frontier/core/organization" + "io" + "log/slog" + "github.com/google/uuid" "github.com/ory/dockertest" "github.com/raystack/frontier/core/group" @@ -15,7 +18,6 @@ import ( "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" ) @@ -36,7 +38,7 @@ type InvitationRespositoryTestSuite struct { func (s *InvitationRespositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/kyc_repository_test.go b/internal/store/postgres/kyc_repository_test.go index f1d80aba6..b97a5c914 100644 --- a/internal/store/postgres/kyc_repository_test.go +++ b/internal/store/postgres/kyc_repository_test.go @@ -6,6 +6,9 @@ import ( "sort" "testing" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -14,7 +17,6 @@ import ( "github.com/raystack/frontier/core/organization" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -33,7 +35,7 @@ type OrgKycRepositoryTestSuite struct { func (s *OrgKycRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/lock_test.go b/internal/store/postgres/lock_test.go index 38c0ce187..e7d21a1ae 100644 --- a/internal/store/postgres/lock_test.go +++ b/internal/store/postgres/lock_test.go @@ -4,8 +4,10 @@ import ( "context" "testing" + "io" + "log/slog" + "github.com/ory/dockertest" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" "github.com/raystack/frontier/pkg/db" @@ -26,7 +28,7 @@ func TestLocks(t *testing.T) { func (s *LockTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/metaschema_repository.go b/internal/store/postgres/metaschema_repository.go index a8e008354..fbbd62185 100644 --- a/internal/store/postgres/metaschema_repository.go +++ b/internal/store/postgres/metaschema_repository.go @@ -7,7 +7,7 @@ import ( "fmt" "strings" - "github.com/raystack/salt/log" + "log/slog" "github.com/pkg/errors" @@ -48,11 +48,11 @@ var defaultMetaSchemas = map[string]string{ } type MetaSchemaRepository struct { - log log.Logger + log *slog.Logger dbc *db.Client } -func NewMetaSchemaRepository(logger log.Logger, dbc *db.Client) *MetaSchemaRepository { +func NewMetaSchemaRepository(logger *slog.Logger, dbc *db.Client) *MetaSchemaRepository { return &MetaSchemaRepository{ log: logger, dbc: dbc, diff --git a/internal/store/postgres/namespace_repository_test.go b/internal/store/postgres/namespace_repository_test.go index a61d2dd47..33fda36c9 100644 --- a/internal/store/postgres/namespace_repository_test.go +++ b/internal/store/postgres/namespace_repository_test.go @@ -7,13 +7,15 @@ import ( "github.com/google/uuid" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" "github.com/raystack/frontier/core/namespace" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -29,7 +31,7 @@ type NamespaceRepositoryTestSuite struct { func (s *NamespaceRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/organization_repository_test.go b/internal/store/postgres/organization_repository_test.go index 78f173ef3..e145432d6 100644 --- a/internal/store/postgres/organization_repository_test.go +++ b/internal/store/postgres/organization_repository_test.go @@ -9,6 +9,9 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -19,7 +22,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -40,7 +42,7 @@ type OrganizationRepositoryTestSuite struct { func (s *OrganizationRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/permission_repository_test.go b/internal/store/postgres/permission_repository_test.go index 9caad22da..5d9d29ab7 100644 --- a/internal/store/postgres/permission_repository_test.go +++ b/internal/store/postgres/permission_repository_test.go @@ -9,13 +9,15 @@ import ( "github.com/raystack/frontier/core/permission" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" "github.com/raystack/frontier/core/namespace" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -32,7 +34,7 @@ type PermissionRepositoryTestSuite struct { func (s *PermissionRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/policy_repository_test.go b/internal/store/postgres/policy_repository_test.go index 1320588e1..fe8127210 100644 --- a/internal/store/postgres/policy_repository_test.go +++ b/internal/store/postgres/policy_repository_test.go @@ -10,11 +10,13 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" "github.com/ory/dockertest" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" "github.com/raystack/frontier/core/policy" @@ -38,7 +40,7 @@ type PolicyRepositoryTestSuite struct { func (s *PolicyRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/postgres_test.go b/internal/store/postgres/postgres_test.go index bf2e58dc0..c081dc9dc 100644 --- a/internal/store/postgres/postgres_test.go +++ b/internal/store/postgres/postgres_test.go @@ -17,6 +17,9 @@ import ( "github.com/raystack/frontier/core/invitation" "github.com/raystack/frontier/core/permission" + "io" + "log/slog" + "github.com/ory/dockertest" "github.com/ory/dockertest/docker" "github.com/raystack/frontier/cmd" @@ -31,7 +34,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/server/consts" - "github.com/raystack/salt/log" ) const ( @@ -41,7 +43,7 @@ const ( pg_dbname = "test_db" ) -func newTestClient(logger log.Logger) (*db.Client, *dockertest.Pool, *dockertest.Resource, error) { +func newTestClient(logger *slog.Logger) (*db.Client, *dockertest.Pool, *dockertest.Resource, error) { opts := &dockertest.RunOptions{ Repository: "postgres", Tag: "13", // Upgraded from 12 to 13 for gen_random_uuid() support @@ -75,27 +77,28 @@ func newTestClient(logger log.Logger) (*db.Client, *dockertest.Pool, *dockertest // attach terminal logger to container if exists // for debugging purpose - if logger.Level() == logLevelDebug { + if logger.Enabled(context.Background(), slog.LevelDebug) { logWaiter, err := pool.Client.AttachToContainerNonBlocking(docker.AttachToContainerOptions{ Container: resource.Container.ID, - OutputStream: logger.Writer(), - ErrorStream: logger.Writer(), + OutputStream: os.Stderr, + ErrorStream: os.Stderr, Stderr: true, Stdout: true, Stream: true, }) if err != nil { - logger.Fatal("could not connect to postgres container log output", "error", err) + logger.Error("could not connect to postgres container log output", "error", err) + return nil, nil, nil, err } defer func() { err = logWaiter.Close() if err != nil { - logger.Fatal("could not close container log", "error", err) + logger.Error("could not close container log", "error", err) } err = logWaiter.Wait() if err != nil { - logger.Fatal("could not wait for container log to close", "error", err) + logger.Error("could not wait for container log to close", "error", err) } }() } @@ -129,7 +132,8 @@ func newTestClient(logger log.Logger) (*db.Client, *dockertest.Pool, *dockertest err = setup(context.Background(), logger, pgClient, pgConfig) if err != nil { - logger.Fatal("failed to setup and migrate DB", "error", err) + logger.Error("failed to setup and migrate DB", "error", err) + return nil, nil, nil, err } return pgClient, pool, resource, nil } @@ -141,7 +145,7 @@ func purgeDocker(pool *dockertest.Pool, resource *dockertest.Resource) error { return nil } -func setup(ctx context.Context, logger log.Logger, client *db.Client, cfg db.Config) (err error) { +func setup(ctx context.Context, logger *slog.Logger, client *db.Client, cfg db.Config) (err error) { var queries = []string{ "DROP SCHEMA public CASCADE", "CREATE SCHEMA public", @@ -444,7 +448,7 @@ func bootstrapGroup(client *db.Client, orgs []organization.Organization) ([]grou } func bootstrapInvitation(client *db.Client, users []user.User, orgs []organization.Organization, groups []group.Group) ([]invitation.Invitation, error) { - invitationRepository := postgres.NewInvitationRepository(log.NewLogrus(), client) + invitationRepository := postgres.NewInvitationRepository(slog.New(slog.NewTextHandler(io.Discard, nil)), client) testFixtureJSON, err := os.ReadFile("./testdata/mock-invitation.json") if err != nil { return nil, err diff --git a/internal/store/postgres/preference_repository_test.go b/internal/store/postgres/preference_repository_test.go index 7a06895ec..9569adecb 100644 --- a/internal/store/postgres/preference_repository_test.go +++ b/internal/store/postgres/preference_repository_test.go @@ -5,6 +5,9 @@ import ( "fmt" "testing" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" @@ -12,7 +15,6 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -28,7 +30,7 @@ type PreferenceRepositoryTestSuite struct { func (s *PreferenceRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/project_repository_test.go b/internal/store/postgres/project_repository_test.go index 193420f2a..d2d611c37 100644 --- a/internal/store/postgres/project_repository_test.go +++ b/internal/store/postgres/project_repository_test.go @@ -7,6 +7,9 @@ import ( "github.com/raystack/frontier/internal/bootstrap/schema" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -17,7 +20,6 @@ import ( "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -39,7 +41,7 @@ type ProjectRepositoryTestSuite struct { func (s *ProjectRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/prospect_repository_test.go b/internal/store/postgres/prospect_repository_test.go index 616ab423c..e390838e7 100644 --- a/internal/store/postgres/prospect_repository_test.go +++ b/internal/store/postgres/prospect_repository_test.go @@ -7,6 +7,9 @@ import ( "os" "testing" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -16,7 +19,6 @@ import ( "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" "github.com/raystack/frontier/pkg/utils" - "github.com/raystack/salt/log" "github.com/raystack/salt/rql" "github.com/stretchr/testify/suite" ) @@ -39,7 +41,7 @@ type ProspectRepositoryTestSuite struct { func (s *ProspectRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/relation_repository_test.go b/internal/store/postgres/relation_repository_test.go index 5391b0154..632764022 100644 --- a/internal/store/postgres/relation_repository_test.go +++ b/internal/store/postgres/relation_repository_test.go @@ -6,6 +6,9 @@ import ( "sort" "testing" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -14,7 +17,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/errors" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -32,7 +34,7 @@ type RelationRepositoryTestSuite struct { func (s *RelationRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/resource_repository_test.go b/internal/store/postgres/resource_repository_test.go index c86a1fc93..9e651eaca 100644 --- a/internal/store/postgres/resource_repository_test.go +++ b/internal/store/postgres/resource_repository_test.go @@ -10,6 +10,9 @@ import ( "github.com/raystack/frontier/pkg/utils" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" @@ -19,7 +22,6 @@ import ( "github.com/raystack/frontier/core/user" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -40,7 +42,7 @@ type ResourceRepositoryTestSuite struct { func (s *ResourceRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/role_repository_test.go b/internal/store/postgres/role_repository_test.go index 3848e5121..36cff865f 100644 --- a/internal/store/postgres/role_repository_test.go +++ b/internal/store/postgres/role_repository_test.go @@ -10,6 +10,9 @@ import ( "github.com/google/uuid" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" @@ -17,7 +20,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -35,7 +37,7 @@ type RoleRepositoryTestSuite struct { func (s *RoleRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/session_repository.go b/internal/store/postgres/session_repository.go index f79d33bf9..f6f6290c3 100644 --- a/internal/store/postgres/session_repository.go +++ b/internal/store/postgres/session_repository.go @@ -8,10 +8,11 @@ import ( "fmt" "time" + "log/slog" + "github.com/jmoiron/sqlx" frontiersession "github.com/raystack/frontier/core/authenticate/session" pkgAuditRecord "github.com/raystack/frontier/pkg/auditrecord" - "github.com/raystack/salt/log" "github.com/doug-martin/goqu/v9" "github.com/google/uuid" @@ -19,12 +20,12 @@ import ( ) type SessionRepository struct { - log log.Logger + log *slog.Logger dbc *db.Client Now func() time.Time } -func NewSessionRepository(logger log.Logger, dbc *db.Client) *SessionRepository { +func NewSessionRepository(logger *slog.Logger, dbc *db.Client) *SessionRepository { return &SessionRepository{ log: logger, dbc: dbc, diff --git a/internal/store/postgres/user_repository_test.go b/internal/store/postgres/user_repository_test.go index 7a060267a..b226e54f9 100644 --- a/internal/store/postgres/user_repository_test.go +++ b/internal/store/postgres/user_repository_test.go @@ -6,6 +6,9 @@ import ( "fmt" "testing" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" @@ -14,7 +17,6 @@ import ( "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" "github.com/raystack/frontier/pkg/metadata" - "github.com/raystack/salt/log" "github.com/raystack/salt/rql" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -33,7 +35,7 @@ type UserRepositoryTestSuite struct { func (s *UserRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/userpat_repository_test.go b/internal/store/postgres/userpat_repository_test.go index a124ab61c..005fb3b88 100644 --- a/internal/store/postgres/userpat_repository_test.go +++ b/internal/store/postgres/userpat_repository_test.go @@ -6,6 +6,9 @@ import ( "testing" "time" + "io" + "log/slog" + "github.com/google/uuid" "github.com/ory/dockertest" "github.com/raystack/frontier/core/organization" @@ -14,7 +17,6 @@ import ( "github.com/raystack/frontier/core/userpat/models" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -31,7 +33,7 @@ type UserPATRepositoryTestSuite struct { func (s *UserPATRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/postgres/webhook_endpoint_repository_test.go b/internal/store/postgres/webhook_endpoint_repository_test.go index 821fc1b3a..7bc986146 100644 --- a/internal/store/postgres/webhook_endpoint_repository_test.go +++ b/internal/store/postgres/webhook_endpoint_repository_test.go @@ -10,12 +10,14 @@ import ( "github.com/google/uuid" + "io" + "log/slog" + "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/ory/dockertest" "github.com/raystack/frontier/internal/store/postgres" "github.com/raystack/frontier/pkg/db" - "github.com/raystack/salt/log" "github.com/stretchr/testify/suite" ) @@ -31,7 +33,7 @@ type WebhookEndpointRepositoryTestSuite struct { func (s *WebhookEndpointRepositoryTestSuite) SetupSuite() { var err error - logger := log.NewZap() + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) s.client, s.pool, s.resource, err = newTestClient(logger) if err != nil { s.T().Fatal(err) diff --git a/internal/store/spicedb/relation_repository.go b/internal/store/spicedb/relation_repository.go index 9de63a265..12fd8fe1d 100644 --- a/internal/store/spicedb/relation_repository.go +++ b/internal/store/spicedb/relation_repository.go @@ -8,8 +8,7 @@ import ( "io" "sync/atomic" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "go.uber.org/zap" + frontierlogger "github.com/raystack/frontier/pkg/logger" authzedpb "github.com/authzed/authzed-go/proto/authzed/api/v1" newrelic "github.com/newrelic/go-agent" @@ -143,7 +142,7 @@ func (r *RelationRepository) Check(ctx context.Context, rel relation.Relation) ( } if response.GetDebugTrace() != nil { str, _ := json.Marshal(response.GetDebugTrace()) - grpczap.Extract(ctx).Info("CheckPermission", zap.String("trace", string(str))) + frontierlogger.FromContext(ctx).Info("CheckPermission", "trace", string(str)) } r.lastToken.Store(response.GetCheckedAt()) diff --git a/internal/store/spicedb/schema_repository.go b/internal/store/spicedb/schema_repository.go index c8e55c60d..994287179 100644 --- a/internal/store/spicedb/schema_repository.go +++ b/internal/store/spicedb/schema_repository.go @@ -4,22 +4,21 @@ import ( "context" "errors" "fmt" - - "github.com/raystack/salt/log" + "log/slog" authzedpb "github.com/authzed/authzed-go/proto/authzed/api/v1" ) type SchemaRepository struct { spiceDB *SpiceDB - logger log.Logger + logger *slog.Logger } var ( ErrWritingSchema = errors.New("error in writing schema to spicedb") ) -func NewSchemaRepository(logger log.Logger, spiceDB *SpiceDB) *SchemaRepository { +func NewSchemaRepository(logger *slog.Logger, spiceDB *SpiceDB) *SchemaRepository { return &SchemaRepository{ spiceDB: spiceDB, logger: logger, @@ -27,7 +26,7 @@ func NewSchemaRepository(logger log.Logger, spiceDB *SpiceDB) *SchemaRepository } func (r SchemaRepository) WriteSchema(ctx context.Context, schema string) error { - if r.logger.Level() == "debug" { + if r.logger.Enabled(ctx, slog.LevelDebug) { fmt.Println(schema) } if _, err := r.spiceDB.client.WriteSchema(ctx, &authzedpb.WriteSchemaRequest{Schema: schema}); err != nil { diff --git a/internal/store/spicedb/spicedb.go b/internal/store/spicedb/spicedb.go index c0b6010da..f6228634d 100644 --- a/internal/store/spicedb/spicedb.go +++ b/internal/store/spicedb/spicedb.go @@ -11,7 +11,8 @@ import ( "github.com/authzed/authzed-go/v1" "github.com/authzed/grpcutil" - "github.com/raystack/salt/log" + "log/slog" + "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials/insecure" @@ -31,7 +32,7 @@ func (s *SpiceDB) Check() error { return nil } -func New(config Config, logger log.Logger, clientMetrics *prometheus.ClientMetrics) (*SpiceDB, error) { +func New(config Config, logger *slog.Logger, clientMetrics *prometheus.ClientMetrics) (*SpiceDB, error) { endpoint := net.JoinHostPort(config.Host, config.Port) client, err := authzed.NewClientWithExperimentalAPIs( endpoint, diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index e5661bd6d..29e4d1cf2 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -2,68 +2,54 @@ package logger import ( "context" + "log/slog" "os" +) - "github.com/raystack/frontier/pkg/server/consts" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/metadata" - - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" +type ctxKey struct{} - "github.com/raystack/salt/log" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" -) +func InitLogger(cfg Config) *slog.Logger { + level := parseLevel(cfg.Level) + opts := &slog.HandlerOptions{Level: level} -func InitLogger(cfg Config) *log.Zap { - zapCfg := zap.NewProductionConfig() - zapCfg.Level = zap.NewAtomicLevelAt(atomicLevel(cfg.Level)) - zapCfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder - zapCfg.DisableCaller = true - zapCfg.DisableStacktrace = true - consoleEncoder := zapcore.NewConsoleEncoder(zapCfg.EncoderConfig) + var handler slog.Handler + switch cfg.Format { + case "plain", "text": + handler = slog.NewTextHandler(os.Stdout, opts) + default: + handler = slog.NewJSONHandler(os.Stdout, opts) + } + return slog.New(handler) +} - opt := log.ZapWithConfig(zapCfg, zap.WrapCore(func(c zapcore.Core) zapcore.Core { - return zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), zapCfg.Level) - })) +// ToContext stores a logger in the context. +func ToContext(ctx context.Context, logger *slog.Logger) context.Context { + return context.WithValue(ctx, ctxKey{}, logger) +} - logger := log.NewZap(opt) - return logger +// FromContext retrieves the logger from context, falling back to slog.Default(). +func FromContext(ctx context.Context) *slog.Logger { + if l, ok := ctx.Value(ctxKey{}).(*slog.Logger); ok { + return l + } + return slog.Default() } -func Ctx(ctx context.Context) *zap.Logger { - return grpczap.Extract(ctx) +// Fatal logs at error level and exits. +func Fatal(logger *slog.Logger, msg string, args ...any) { + logger.Error(msg, args...) + os.Exit(1) } -func atomicLevel(level string) zapcore.Level { +func parseLevel(level string) slog.Level { switch level { - case "info": - return zap.InfoLevel case "debug": - return zap.DebugLevel - case "warn": - return zap.WarnLevel + return slog.LevelDebug + case "warn", "warning": + return slog.LevelWarn case "error": - return zap.ErrorLevel - case "fatal": - return zap.FatalLevel + return slog.LevelError default: - return zap.InfoLevel - } -} - -func RequestLogFunc(ctx context.Context, msg string, level zapcore.Level, code codes.Code, err error, duration zapcore.Field) { - requestID := "" - if md, ok := metadata.FromIncomingContext(ctx); ok { - if values := md.Get(consts.RequestIDHeader); len(values) > 0 && values[0] != "" { - requestID = values[0] - } + return slog.LevelInfo } - // re-extract logger from newCtx, as it may have extra fields that changed in the holder. - grpczap.Extract(ctx).Check(level, msg).Write( - zap.Error(err), - zap.String("grpc.code", code.String()), - zap.String(consts.RequestIDHeader, requestID), - duration, - ) } diff --git a/pkg/server/connect_interceptors/logger.go b/pkg/server/connect_interceptors/logger.go index 2612d6db8..a1c1324d1 100644 --- a/pkg/server/connect_interceptors/logger.go +++ b/pkg/server/connect_interceptors/logger.go @@ -2,12 +2,12 @@ package connectinterceptors import ( "context" + "log/slog" "time" "connectrpc.com/connect" - grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/frontier/pkg/server/consts" - "go.uber.org/zap" ) type LoggerOption struct { @@ -32,7 +32,7 @@ func NewLoggerOptions(opts ...LoggerOption) *LoggerOptions { return options } -func UnaryConnectLoggerInterceptor(logger *zap.Logger, opts *LoggerOptions) connect.UnaryInterceptorFunc { +func UnaryConnectLoggerInterceptor(logger *slog.Logger, opts *LoggerOptions) connect.UnaryInterceptorFunc { if opts == nil { opts = NewLoggerOptions() } @@ -43,8 +43,8 @@ func UnaryConnectLoggerInterceptor(logger *zap.Logger, opts *LoggerOptions) conn return next(ctx, req) } - // Embed logger in context using grpc-zap method for consistency - ctx = grpczap.ToContext(ctx, logger) + // Embed logger in context + ctx = frontierlogger.ToContext(ctx, logger) startTime := time.Now() resp, err := next(ctx, req) @@ -55,37 +55,41 @@ func UnaryConnectLoggerInterceptor(logger *zap.Logger, opts *LoggerOptions) conn code = connectErr.Code() } - fields := []zap.Field{ - zap.String("system", "connect_rpc"), - zap.Time("start_time", startTime), - zap.String("method", req.Spec().Procedure), - zap.Int64("time_ms", duration.Milliseconds()), - zap.String("code", code.String()), - zap.String("request_id", req.Header().Get(consts.RequestIDHeader)), - zap.Error(err), + attrs := []any{ + "system", "connect_rpc", + "start_time", startTime, + "method", req.Spec().Procedure, + "time_ms", duration.Milliseconds(), + "code", code.String(), + "request_id", req.Header().Get(consts.RequestIDHeader), } - if err == nil { - logger.Info("finished call", fields...) - return resp, err + if err != nil { + attrs = append(attrs, "error", err) } - switch code { - case connect.CodeCanceled: - logger.Warn("client cancelled request", fields...) - case connect.CodeDeadlineExceeded: - logger.Warn("request timeout", fields...) - case connect.CodeInvalidArgument, - connect.CodeNotFound, - connect.CodeAlreadyExists, - connect.CodeUnauthenticated, - connect.CodePermissionDenied, - connect.CodeFailedPrecondition, - connect.CodeOutOfRange: - logger.Warn("finished call", fields...) - default: - logger.Error("finished call", fields...) - } + level := levelForCode(code, err) + logger.Log(ctx, level, "finished call", attrs...) return resp, err } } } + +func levelForCode(code connect.Code, err error) slog.Level { + if err == nil { + return slog.LevelInfo + } + switch code { + case connect.CodeCanceled, + connect.CodeDeadlineExceeded, + connect.CodeInvalidArgument, + connect.CodeNotFound, + connect.CodeAlreadyExists, + connect.CodeUnauthenticated, + connect.CodePermissionDenied, + connect.CodeFailedPrecondition, + connect.CodeOutOfRange: + return slog.LevelWarn + default: + return slog.LevelError + } +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 7eedd03ba..332d45d40 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -3,7 +3,6 @@ package server import ( "context" "encoding/json" - "errors" "fmt" "net/http" "net/http/httputil" @@ -14,7 +13,10 @@ import ( "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" + "log/slog" + "github.com/prometheus/client_golang/prometheus" + frontierlogger "github.com/raystack/frontier/pkg/logger" "github.com/raystack/salt/server/spa" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -34,8 +36,6 @@ import ( "github.com/raystack/frontier/internal/api" "github.com/raystack/frontier/internal/api/v1beta1connect" frontierv1beta1connect "github.com/raystack/frontier/proto/v1beta1/frontierv1beta1connect" - "github.com/raystack/salt/log" - "go.uber.org/zap" ) const ( @@ -56,7 +56,7 @@ type UIConfigApiResponse struct { Terminology TerminologyConfig `json:"terminology"` } -func ServeUI(ctx context.Context, logger log.Logger, uiConfig UIConfig, apiServerConfig Config) { +func ServeUI(ctx context.Context, logger *slog.Logger, uiConfig UIConfig, apiServerConfig Config) { isUIPortNotExits := uiConfig.Port == 0 if isUIPortNotExits { logger.Warn("ui server disabled: no port specified") @@ -111,15 +111,10 @@ func ServeUI(ctx context.Context, logger log.Logger, uiConfig UIConfig, apiServe } } -func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.Deps, promRegistry *prometheus.Registry) error { +func ServeConnect(ctx context.Context, logger *slog.Logger, cfg Config, deps api.Deps, promRegistry *prometheus.Registry) error { frontierService := v1beta1connect.NewConnectHandler(deps, cfg.Authentication) sessionCookieCutter := getSessionCookieCutter(cfg.Authentication.Session.BlockSecretKey, cfg.Authentication.Session.HashSecretKey, logger) - zapLogger := zap.NewExample().Sugar() - loggerZap, ok := logger.(*log.Zap) - if ok { - zapLogger = loggerZap.GetInternalZapLogger() - } loggerOpts := connectinterceptors.NewLoggerOptions(connectinterceptors.LoggerOption{ Decider: func(procedure string) bool { return procedure != "/grpc.health.v1.Health/Check" @@ -133,7 +128,7 @@ func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.D promexporter.WithRegisterer(promRegistry), promexporter.WithoutScopeInfo()) if err != nil { - logger.Fatal(err.Error()) + return fmt.Errorf("prometheus exporter: %w", err) } provider := sdkmetric.NewMeterProvider(sdkmetric.WithReader(promExporter)) @@ -143,8 +138,7 @@ func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.D otelconnect.WithoutServerPeerAttributes(), ) if err != nil { - logger.Fatal("OTEL ConnectRPC interceptor init error: %v", err) - return err + return fmt.Errorf("OTEL ConnectRPC interceptor: %w", err) } authNInterceptor := connectinterceptors.NewAuthenticationInterceptor(frontierService, cfg.Authentication.Session.Headers) @@ -156,7 +150,7 @@ func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.D interceptors := connect.WithInterceptors( otelInterceptor, - connectinterceptors.UnaryConnectLoggerInterceptor(zapLogger.Desugar(), loggerOpts), + connectinterceptors.UnaryConnectLoggerInterceptor(logger, loggerOpts), connectinterceptors.UnaryConnectErrorResponseInterceptor(), sessionInterceptor, authNInterceptor, @@ -248,7 +242,7 @@ func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.D defer cancel() if err := server.Shutdown(ctxShutdown); err != nil { - logger.Fatal("HTTP shutdown error: %v", err) + frontierlogger.Fatal(logger, "HTTP shutdown error", "error", err) } logger.Info("Graceful shutdown of connect server complete") @@ -262,11 +256,11 @@ func ServeConnect(ctx context.Context, logger log.Logger, cfg Config, deps api.D return nil } -func getSessionCookieCutter(blockSecretKey string, hashSecretKey string, logger log.Logger) securecookie.Codec { +func getSessionCookieCutter(blockSecretKey string, hashSecretKey string, logger *slog.Logger) securecookie.Codec { var sessionCookieCutter securecookie.Codec if len(hashSecretKey) != 32 || len(blockSecretKey) != 32 { // hash and block keys should be 32 bytes long - logger.Warn("session management disabled", errors.New("authentication.session keys should be 32 chars long")) + logger.Warn("session management disabled", "reason", "authentication.session keys should be 32 chars long") } else { sessionCookieCutter = securecookie.New( []byte(hashSecretKey), diff --git a/test/e2e/testbench/frontier.go b/test/e2e/testbench/frontier.go index 81e1b37a1..e3e236056 100644 --- a/test/e2e/testbench/frontier.go +++ b/test/e2e/testbench/frontier.go @@ -1,19 +1,21 @@ package testbench import ( + "log/slog" + "github.com/raystack/frontier/cmd" "github.com/raystack/frontier/config" - "github.com/raystack/salt/log" + frontierlogger "github.com/raystack/frontier/pkg/logger" ) -func MigrateFrontier(logger *log.Zap, appConfig *config.Frontier) error { +func MigrateFrontier(logger *slog.Logger, appConfig *config.Frontier) error { return cmd.RunMigrations(logger, appConfig.DB) } -func StartFrontier(logger *log.Zap, appConfig *config.Frontier) { +func StartFrontier(logger *slog.Logger, appConfig *config.Frontier) { go func() { if err := cmd.StartServer(logger, appConfig); err != nil { - logger.Fatal("err starting", "err", err) + frontierlogger.Fatal(logger, "err starting", "err", err) panic(err) } }() diff --git a/test/e2e/testbench/spicedb.go b/test/e2e/testbench/spicedb.go index 8e94950bf..76436a0f6 100644 --- a/test/e2e/testbench/spicedb.go +++ b/test/e2e/testbench/spicedb.go @@ -6,10 +6,11 @@ import ( prometheusmiddleware "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus" + "log/slog" + "github.com/ory/dockertest/v3" "github.com/ory/dockertest/v3/docker" "github.com/raystack/frontier/internal/store/spicedb" - "github.com/raystack/salt/log" ) const ( @@ -17,7 +18,7 @@ const ( spiceDBVersion = "v1.34.0" ) -func StartSpiceDB(logger log.Logger, network *docker.Network, pool *dockertest.Pool, preSharedKey string) (extPort string, close func() error, err error) { +func StartSpiceDB(logger *slog.Logger, network *docker.Network, pool *dockertest.Pool, preSharedKey string) (extPort string, close func() error, err error) { res, err := pool.RunWithOptions(&dockertest.RunOptions{ Repository: spiceDBImage, Tag: spiceDBVersion, diff --git a/test/e2e/testbench/stripe.go b/test/e2e/testbench/stripe.go index 6f9496049..006831844 100644 --- a/test/e2e/testbench/stripe.go +++ b/test/e2e/testbench/stripe.go @@ -17,8 +17,9 @@ import ( "github.com/google/uuid" "github.com/stripe/stripe-go/v79/client" + "log/slog" + "github.com/ory/dockertest/v3/docker" - "github.com/raystack/salt/log" ) const ( @@ -26,7 +27,7 @@ const ( stripeVersion = "v0.193.0" ) -func StartStripeMock(logger log.Logger, network *docker.Network, pool *dockertest.Pool) (extPort string, close func() error, err error) { +func StartStripeMock(logger *slog.Logger, network *docker.Network, pool *dockertest.Pool) (extPort string, close func() error, err error) { res, err := pool.RunWithOptions(&dockertest.RunOptions{ Repository: stripeImage, Tag: stripeVersion, @@ -88,7 +89,7 @@ func StartStripeRecorder(mode recorder.Mode) func() error { return closeFunc } -type StripeClientBuilder func(logger log.Logger, cfg *config.Frontier) *client.API +type StripeClientBuilder func(logger *slog.Logger, cfg *config.Frontier) *client.API func BuildStripeClient(port, name string, mode recorder.Mode) (StripeClientBuilder, func() error) { var closer = func() error { return nil } @@ -128,7 +129,7 @@ func BuildStripeClient(port, name string, mode recorder.Mode) (StripeClientBuild } } - return func(logger log.Logger, cfg *config.Frontier) *client.API { + return func(logger *slog.Logger, cfg *config.Frontier) *client.API { stripeLogLevel := stripe.LevelError if cfg.Log.Level == "debug" { stripeLogLevel = stripe.LevelDebug