github.com/osievert/jfrog-cli-core@v1.2.7/missioncontrol/commands/config.go (about) 1 package commands 2 3 import ( 4 "errors" 5 "fmt" 6 "github.com/jfrog/jfrog-cli-core/utils/config" 7 "github.com/jfrog/jfrog-cli-core/utils/ioutils" 8 "github.com/jfrog/jfrog-cli-core/utils/lock" 9 "github.com/jfrog/jfrog-client-go/utils" 10 "github.com/jfrog/jfrog-client-go/utils/errorutils" 11 "github.com/jfrog/jfrog-client-go/utils/log" 12 "golang.org/x/crypto/ssh/terminal" 13 "net/url" 14 "sync" 15 "syscall" 16 ) 17 18 // Internal golang locking for the same process. 19 var mutex sync.Mutex 20 21 func GetConfig() (*config.MissionControlDetails, error) { 22 return config.ReadMissionControlConf() 23 } 24 25 func ShowConfig() error { 26 details, err := config.ReadMissionControlConf() 27 if err != nil { 28 return err 29 } 30 if details.Url != "" { 31 log.Output("Url: " + details.Url) 32 } 33 if details.AccessToken != "" { 34 log.Output("AccessToken: ***") 35 } 36 return nil 37 } 38 39 func ClearConfig() error { 40 return config.SaveMissionControlConf(new(config.MissionControlDetails)) 41 } 42 43 func Config(details, defaultDetails *config.MissionControlDetails, interactive bool) (conf *config.MissionControlDetails, err error) { 44 mutex.Lock() 45 lockFile, err := lock.CreateLock() 46 defer mutex.Unlock() 47 defer lockFile.Unlock() 48 49 if err != nil { 50 return nil, err 51 } 52 conf = details 53 if conf == nil { 54 conf = new(config.MissionControlDetails) 55 } 56 if interactive { 57 if defaultDetails == nil { 58 defaultDetails, err = config.ReadMissionControlConf() 59 if err != nil { 60 return 61 } 62 } 63 if conf.Url == "" { 64 ioutils.ScanFromConsole("Mission Control URL", &conf.Url, defaultDetails.Url) 65 var u *url.URL 66 u, err = url.Parse(conf.Url) 67 err = errorutils.CheckError(err) 68 if err != nil { 69 return 70 } 71 if u.Scheme != "http" && u.Scheme != "https" { 72 err = errorutils.CheckError(errors.New("URL scheme is not valid " + u.Scheme)) 73 if err != nil { 74 return 75 } 76 } 77 } 78 if conf.AccessToken == "" { 79 print("Access token: ") 80 byteToken, err := terminal.ReadPassword(int(syscall.Stdin)) 81 if err != nil { 82 return nil, errorutils.CheckError(err) 83 } 84 // New-line required after the access token input: 85 fmt.Println() 86 conf.SetAccessToken(string(byteToken)) 87 } 88 } 89 conf.Url = utils.AddTrailingSlashIfNeeded(conf.Url) 90 err = config.SaveMissionControlConf(conf) 91 return 92 } 93 94 type ConfigFlags struct { 95 MissionControlDetails *config.MissionControlDetails 96 Interactive bool 97 }