github.com/emc-advanced-dev/unik@v0.0.0-20190717152701-a58d3e8e33b7/cmd/login.go (about)

     1  package cmd
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"github.com/sirupsen/logrus"
     7  	"github.com/emc-advanced-dev/pkg/errors"
     8  	"github.com/solo-io/unik/pkg/config"
     9  	"github.com/spf13/cobra"
    10  	"gopkg.in/yaml.v2"
    11  	"io/ioutil"
    12  	"os"
    13  	"path/filepath"
    14  	"strings"
    15  )
    16  
    17  var loginCmd = &cobra.Command{
    18  	Use:   "login",
    19  	Short: "Log in to a Unik Repository to pull & push images",
    20  	Run: func(cmd *cobra.Command, args []string) {
    21  		defaultUrl := "http://hub.project-unik.io"
    22  		reader := bufio.NewReader(os.Stdin)
    23  		if err := func() error {
    24  			fmt.Printf("Unik Hub Repository URL [%v]: ", defaultUrl)
    25  			url, err := reader.ReadString('\n')
    26  			if err != nil {
    27  				return err
    28  			}
    29  			url = strings.Trim(url, "\n")
    30  			if len(url) < 1 {
    31  				url = defaultUrl
    32  			}
    33  			fmt.Printf("Username: ")
    34  			user, err := reader.ReadString('\n')
    35  			if err != nil {
    36  				return err
    37  			}
    38  			fmt.Printf("Password: ")
    39  			pass, err := reader.ReadString('\n')
    40  			if err != nil {
    41  				return err
    42  			}
    43  			if err := setHubConfig(url, strings.Trim(user, "\n"), strings.Trim(pass, "\n")); err != nil {
    44  				return err
    45  			}
    46  			fmt.Printf("using url %v\n", url)
    47  			return nil
    48  		}(); err != nil {
    49  			logrus.Fatal(err)
    50  		}
    51  	},
    52  }
    53  
    54  func init() {
    55  	RootCmd.AddCommand(loginCmd)
    56  }
    57  
    58  func setHubConfig(url, user, pass string) error {
    59  	data, err := yaml.Marshal(config.HubConfig{URL: url, Username: user, Password: pass})
    60  	if err != nil {
    61  		return errors.New("failed to convert config to yaml string ", err)
    62  	}
    63  	os.MkdirAll(filepath.Dir(hubConfigFile), 0755)
    64  	if err := ioutil.WriteFile(hubConfigFile, data, 0644); err != nil {
    65  		return errors.New("failed writing config to file "+clientConfigFile, err)
    66  	}
    67  	return nil
    68  }