github.com/navikt/knorten@v0.0.0-20240419132333-1333f46ed8b6/pkg/user/gsm.go (about) 1 package user 2 3 import ( 4 "context" 5 "database/sql" 6 "errors" 7 8 "github.com/navikt/knorten/pkg/database/gensql" 9 "github.com/navikt/knorten/pkg/logger" 10 ) 11 12 func (c Client) CreateUserGSM(ctx context.Context, manager gensql.UserGoogleSecretManager, log logger.Logger) bool { 13 log.Info("Creating User Google Secret Manager") 14 15 if retry, err := c.createGSM(ctx, manager, log); err != nil { 16 log.Info("failed creating User Google Secret Manager") 17 return retry 18 } 19 20 log.Info("Successfully created User Google Secret Manager") 21 return false 22 } 23 24 func (c Client) createGSM(ctx context.Context, manager gensql.UserGoogleSecretManager, log logger.Logger) (bool, error) { 25 existingInstance, err := c.repo.UserGSMGet(ctx, manager.Owner) 26 if err != nil && !errors.Is(err, sql.ErrNoRows) { 27 log.WithError(err).Infof("failed retrieving User Google Secret Manager %v", manager.Owner) 28 return true, err 29 } 30 31 if existingInstance.Name != "" { 32 return false, nil 33 } 34 35 err = c.createUserGSMInGCP(ctx, manager.Name, manager.Owner) 36 if err != nil { 37 log.WithError(err).Info("failed creating User Google Secret Manager in GCP") 38 return true, err 39 } 40 41 if err := c.repo.UserGSMCreate(ctx, manager); err != nil { 42 log.WithError(err).Info("failed saving User Google Secret Manager to database") 43 return true, err 44 } 45 46 return false, nil 47 } 48 49 func (c Client) DeleteUserGSM(ctx context.Context, email string, log logger.Logger) bool { 50 log.Info("Deleting User Google Secret Manager") 51 52 if retry, err := c.deleteGSM(ctx, email, log); err != nil { 53 log.Info("failed creating User Google Secret Manager") 54 return retry 55 } 56 57 log.Info("Successfully deleted User Google Secret Manager") 58 return false 59 } 60 61 func (c Client) deleteGSM(ctx context.Context, email string, log logger.Logger) (bool, error) { 62 instance, err := c.repo.UserGSMGet(ctx, email) 63 if err != nil { 64 if errors.Is(err, sql.ErrNoRows) { 65 return false, nil 66 } 67 68 log.WithError(err).Info("failed retrieving User Google Secret Manager") 69 return true, err 70 } 71 72 if err := c.deleteUserGSMFromGCP(ctx, instance.Name); err != nil { 73 log.WithError(err).Info("failed deleting User Google Secret Manager from GCP") 74 return true, err 75 } 76 77 if err = c.repo.UserGSMDelete(ctx, email); err != nil { 78 log.WithError(err).Info("failed deleting User Google Secret Manager from database") 79 return true, err 80 } 81 82 return false, nil 83 }