github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/secrets/set.go (about)

     1  package secrets
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/keypairs"
     5  	"github.com/ActiveState/cli/internal/locale"
     6  	"github.com/ActiveState/cli/internal/output"
     7  	"github.com/ActiveState/cli/internal/primer"
     8  	"github.com/ActiveState/cli/internal/secrets"
     9  	secretsapi "github.com/ActiveState/cli/pkg/platform/api/secrets"
    10  	"github.com/ActiveState/cli/pkg/platform/authentication"
    11  	"github.com/ActiveState/cli/pkg/platform/model"
    12  	"github.com/ActiveState/cli/pkg/project"
    13  )
    14  
    15  type setPrimeable interface {
    16  	primer.Projecter
    17  	primer.Configurer
    18  	primer.Auther
    19  	primer.Outputer
    20  }
    21  
    22  // SetRunParams tracks the info required for running Set.
    23  type SetRunParams struct {
    24  	Name  string
    25  	Value string
    26  }
    27  
    28  // Set manages the setting execution context.
    29  type Set struct {
    30  	proj *project.Project
    31  	cfg  keypairs.Configurable
    32  	auth *authentication.Auth
    33  	out  output.Outputer
    34  }
    35  
    36  // NewSet prepares a set execution context for use.
    37  func NewSet(p setPrimeable) *Set {
    38  	return &Set{
    39  		proj: p.Project(),
    40  		cfg:  p.Config(),
    41  		auth: p.Auth(),
    42  		out:  p.Output(),
    43  	}
    44  }
    45  
    46  // Run executes the set behavior.
    47  func (s *Set) Run(params SetRunParams) error {
    48  	s.out.Notice(locale.Tr("operating_message", s.proj.NamespaceString(), s.proj.Dir()))
    49  	if err := checkSecretsAccess(s.proj, s.auth); err != nil {
    50  		return locale.WrapError(err, "secrets_err_check_access")
    51  	}
    52  
    53  	secret, err := getSecret(s.proj, params.Name, s.cfg, s.auth)
    54  	if err != nil {
    55  		return locale.WrapError(err, "secrets_err_values")
    56  	}
    57  
    58  	org, err := model.FetchOrgByURLName(s.proj.Owner(), s.auth)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	remoteProject, err := model.LegacyFetchProjectByName(org.URLname, s.proj.Name())
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	kp, err := secrets.LoadKeypairFromConfigDir(s.cfg)
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	err = secrets.Save(secretsapi.GetClient(s.auth), kp, org, remoteProject, secret.IsUser(), secret.Name(), params.Value, s.auth)
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	if secret.IsProject() {
    79  		return secrets.ShareWithOrgUsers(secretsapi.GetClient(s.auth), org, remoteProject, secret.Name(), params.Value, s.auth)
    80  	}
    81  
    82  	return nil
    83  }