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  }