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  }