From e388cce21fb3a5db90f68950bba619b44b62a141 Mon Sep 17 00:00:00 2001 From: Marcus Goldschmidt Date: Tue, 16 Dec 2025 15:55:08 -0400 Subject: [PATCH 1/4] add validate account before creating --- pkg/bsql/provisioning.go | 4 +++- pkg/bsql/user_syncer.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/bsql/provisioning.go b/pkg/bsql/provisioning.go index c9ff40f3..31ecbbf6 100644 --- a/pkg/bsql/provisioning.go +++ b/pkg/bsql/provisioning.go @@ -13,6 +13,8 @@ import ( "go.uber.org/zap" ) +var ErrUnableFindResourceProvisioning = errors.New("unable to find resource for account provisioning") + // getProvisioningConfig fetches the provisioning config for the given entitlement if it exists. func (s *SQLSyncer) getProvisioningConfig(ctx context.Context, entitlementID string) (*EntitlementProvisioning, bool) { l := ctxzap.Extract(ctx) @@ -180,7 +182,7 @@ func (s *SQLSyncer) validateAccount(ctx context.Context, accountProvisioning *Ac } if ret == nil { - return nil, fmt.Errorf("unable to find resource for account provisioning") + return nil, ErrUnableFindResourceProvisioning } return ret, nil diff --git a/pkg/bsql/user_syncer.go b/pkg/bsql/user_syncer.go index 16149dd0..b6f62711 100644 --- a/pkg/bsql/user_syncer.go +++ b/pkg/bsql/user_syncer.go @@ -136,6 +136,21 @@ func (s *userSyncer) CreateAccount( return nil, nil, nil, err } + previousAccountResource, err := s.validateAccount(ctx, provisioningConfig, queryInputs) + if err != nil { + if !errors.Is(err, ErrUnableFindResourceProvisioning) { + return nil, nil, nil, fmt.Errorf("failed to validate created account: %w", err) + } + } + + if previousAccountResource != nil { + logger.Info("account resource is already created", zap.String("resource_id", previousAccountResource.GetId().GetResource())) + + return &v2.CreateAccountResponse_SuccessResult{ + Resource: nil, + }, plaintextDataList, nil, nil + } + // Execute account creation queries useTransaction := !provisioningConfig.Create.NoTransaction if err := s.RunProvisioningQueries(ctx, provisioningConfig.Create.Queries, queryInputs, useTransaction); err != nil { From c68fb161f808187798660e317633a3e12250239e Mon Sep 17 00:00:00 2001 From: Marcus Goldschmidt Date: Tue, 16 Dec 2025 16:08:28 -0400 Subject: [PATCH 2/4] return user if exists --- pkg/bsql/user_syncer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/bsql/user_syncer.go b/pkg/bsql/user_syncer.go index b6f62711..cd03a9bc 100644 --- a/pkg/bsql/user_syncer.go +++ b/pkg/bsql/user_syncer.go @@ -147,7 +147,7 @@ func (s *userSyncer) CreateAccount( logger.Info("account resource is already created", zap.String("resource_id", previousAccountResource.GetId().GetResource())) return &v2.CreateAccountResponse_SuccessResult{ - Resource: nil, + Resource: previousAccountResource, }, plaintextDataList, nil, nil } From 6b0b5880e1249f255ce0e1356cc62684921ab06e Mon Sep 17 00:00:00 2001 From: Marcus Goldschmidt Date: Tue, 16 Dec 2025 17:05:16 -0400 Subject: [PATCH 3/4] change log message --- pkg/bsql/user_syncer.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/bsql/user_syncer.go b/pkg/bsql/user_syncer.go index cd03a9bc..63800a35 100644 --- a/pkg/bsql/user_syncer.go +++ b/pkg/bsql/user_syncer.go @@ -139,7 +139,7 @@ func (s *userSyncer) CreateAccount( previousAccountResource, err := s.validateAccount(ctx, provisioningConfig, queryInputs) if err != nil { if !errors.Is(err, ErrUnableFindResourceProvisioning) { - return nil, nil, nil, fmt.Errorf("failed to validate created account: %w", err) + return nil, nil, nil, fmt.Errorf("failed to check existing account: %w", err) } } @@ -164,7 +164,8 @@ func (s *userSyncer) CreateAccount( } response := &v2.CreateAccountResponse_SuccessResult{ - Resource: accountResource, + IsCreateAccountResult: true, + Resource: accountResource, } return response, plaintextDataList, nil, nil From 77b1c0067025eecd73e1812a0df84472f1d90dda Mon Sep 17 00:00:00 2001 From: Marcus Goldschmidt Date: Tue, 16 Dec 2025 17:35:54 -0400 Subject: [PATCH 4/4] remove plain text data --- pkg/bsql/user_syncer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/bsql/user_syncer.go b/pkg/bsql/user_syncer.go index 63800a35..9d65e263 100644 --- a/pkg/bsql/user_syncer.go +++ b/pkg/bsql/user_syncer.go @@ -148,7 +148,7 @@ func (s *userSyncer) CreateAccount( return &v2.CreateAccountResponse_SuccessResult{ Resource: previousAccountResource, - }, plaintextDataList, nil, nil + }, nil, nil, nil } // Execute account creation queries