in auth/login.go [57:184]
func LoginCmd() (*LoginResult, error) {
// enable log output if requested
if os.Getenv("DEBUG")+os.Getenv("TRACE") != "" {
log.SetOutput(os.Stdout)
}
flag := flag.NewFlagSet("-login", flag.ExitOnError)
flag.Usage = func() {
fmt.Println(usage)
}
var helpFlag bool
flag.BoolVar(&helpFlag, "h", false, "Show usage")
flag.BoolVar(&helpFlag, "help", false, "Show usage")
err := flag.Parse(os.Args[1:])
if err != nil {
return nil, err
}
if helpFlag {
flag.Usage()
return nil, nil
}
args := flag.Args()
if len(args) == 0 && os.Getenv("OPS_APIHOST") == "" {
flag.Usage()
return nil, errors.New("missing apihost")
}
apihost := os.Getenv("OPS_APIHOST")
if apihost == "" {
apihost = args[0]
}
url := apihost + whiskLoginPath
apihost = ensureSchema(apihost)
// try to get the user from the environment
user := os.Getenv("OPS_USER")
if user == "" {
// if env var not set, try to get it from the command line
if os.Getenv("OPS_APIHOST") != "" {
// if apihost env var was set, treat the first arg as the user
if len(args) > 0 {
user = args[0]
}
} else {
// if apihost env var was not set, treat the second arg as the user
if len(args) > 1 {
user = args[1]
}
}
}
// if still not set, use the default user
if user == "" {
fmt.Println("Using the default user:", defaultUser)
user = defaultUser
}
fmt.Println("Logging in", apihost, "as", user)
password := os.Getenv("OPS_PASSWORD")
if password == "" {
fmt.Print("Enter Password: ")
pwd, err := AskPassword()
if err != nil {
return nil, err
}
password = pwd
fmt.Println()
}
creds, err := doLogin(url, user, password)
if err != nil {
return nil, err
}
if _, ok := creds["AUTH"]; !ok {
return nil, errors.New("missing AUTH token from login response")
}
opsHome := os.Getenv("OPS_HOME")
if opsHome == "" {
return nil, fmt.Errorf("OPS_HOME not defined")
}
configMap, err := config.NewConfigMapBuilder().
WithConfigJson(filepath.Join(opsHome, "config.json")).
Build()
if err != nil {
return nil, err
}
for k, v := range creds {
if err := configMap.Insert(k, v); err != nil {
return nil, err
}
}
if err := configMap.Insert("STATUS_LOGGED_USER", user); err != nil {
log.Println("[Warning] Failed to insert STATUS_LOGGED_USER")
}
err = configMap.SaveConfig()
if err != nil {
return nil, err
}
// if err := storeCredentials(creds); err != nil {
// return nil, err
// }
// auth, err := keyring.Get(opsSecretServiceName, "AUTH")
// if err != nil {
// return nil, err
// }
return &LoginResult{
Login: user,
Auth: creds["AUTH"],
ApiHost: apihost,
}, nil
}