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 }