github.com/hazelops/ize@v1.1.12-0.20230915191306-97d7c0e48f11/internal/commands/mfa.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 6 "github.com/aws/aws-sdk-go/service/iam" 7 "github.com/hazelops/ize/internal/config" 8 "github.com/spf13/cobra" 9 ) 10 11 type MfaOptions struct { 12 Config *config.Project 13 } 14 15 func NewMfaFlags(project *config.Project) *MfaOptions { 16 return &MfaOptions{ 17 Config: project, 18 } 19 } 20 21 func NewCmdMfa(project *config.Project) *cobra.Command { 22 o := NewMfaFlags(project) 23 24 cmd := &cobra.Command{ 25 Use: "mfa", 26 Short: "Generate a list of exports for your shell to use ize with MFA-enabled AWS account", 27 RunE: func(cmd *cobra.Command, args []string) error { 28 cmd.SilenceUsage = true 29 err := o.Complete() 30 if err != nil { 31 return err 32 } 33 34 err = o.Run() 35 if err != nil { 36 return err 37 } 38 39 return nil 40 }, 41 } 42 43 return cmd 44 } 45 46 func (o *MfaOptions) Complete() error { 47 return nil 48 } 49 50 func (o *MfaOptions) Run() error { 51 devices, err := iam.New(o.Config.Session).ListMFADevices(&iam.ListMFADevicesInput{}) 52 if err != nil { 53 return err 54 } 55 56 if len(devices.MFADevices) == 0 { 57 return fmt.Errorf("MFA hasn't configured\n") 58 } 59 60 v, err := o.Config.Session.Config.Credentials.Get() 61 if err != nil { 62 return err 63 } 64 65 fmt.Printf("export AWS_SECRET_ACCESS_KEY=%s && \\ \nexport AWS_SESSION_TOKEN=%s && \\ \nexport AWS_ACCESS_KEY_ID=%s\n", 66 v.SecretAccessKey, v.SessionToken, v.AccessKeyID, 67 ) 68 69 return nil 70 }