auth

package
v0.0.0-...-0af5906 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AuthCmd = &cobra.Command{
	Use:   "auth",
	Short: "Authenticate yba cli",
	Long: "Authenticate the yba cli through this command by providing the host and API Token." +
		" If non-interactive mode is set, provide the host and API Token using flags. " +
		"Default for host is \"http://localhost:9000\"",
	Example: "yba auth -f -H <host> -a <api-token>",
	Run: func(cmd *cobra.Command, args []string) {
		force, err := cmd.Flags().GetBool("force")
		if err != nil {
			logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
		}
		var apiToken string
		var host string
		var data []byte
		hostConfig := viper.GetString("host")
		if !force {
			fmt.Printf("Enter Host [%s]: ", hostConfig)

			reader := bufio.NewReader(os.Stdin)
			input, err := reader.ReadString('\n')
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read host: "+err.Error()+"\n",
						formatter.RedColor))
			}

			if input == "\n" {
				input = hostConfig + "\n"
			}
			host = strings.TrimSpace(input)
			if len(host) == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					logrus.Fatalln(formatter.Colorize("Host cannot be empty.\n",
						formatter.RedColor))
				} else {
					host = hostConfig
				}
			}

			fmt.Print("Enter API Token: ")
			data, err = term.ReadPassword(int(os.Stdin.Fd()))
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read apiToken: "+err.Error()+"\n",
						formatter.RedColor))
			}
			apiToken = string(data)

		} else {
			hostFlag, err := cmd.Flags().GetString("host")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}

			if strings.Compare(hostFlag, "http://localhost:9000") == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					host = hostFlag
				} else {
					host = hostConfig
				}
			} else {
				host = hostFlag
			}
			apiToken, err = cmd.Flags().GetString("apiToken")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
		}

		if strings.TrimSpace(apiToken) == "" {
			logrus.Fatalln(formatter.Colorize("apiToken cannot be empty.\n",
				formatter.RedColor))
		}
		viper.GetViper().Set("host", &host)
		viper.GetViper().Set("apiToken", &apiToken)

		logrus.Infoln("\n")

		url, err := ybaAuthClient.ParseURL(host)
		if err != nil {
			logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
		}

		authUtil(url, apiToken)
	},
}

AuthCmd to connect to the YBA Host using API token

View Source
var LoginCmd = &cobra.Command{
	Use:   "login",
	Short: "Authenticate yba cli using email and password",
	Long: "Connect to YugabyteDB Anywhere host machine using email and password." +
		" If non-interactive mode is set, provide the host, email and password using flags. " +
		"Default for host is \"http://localhost:9000\"",
	Example: "yba login -f -e <email> -p <password> -H <host>",
	Run: func(cmd *cobra.Command, args []string) {
		force, err := cmd.Flags().GetBool("force")
		if err != nil {
			logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
		}
		var email, password string
		var host string
		var data []byte
		hostConfig := viper.GetString("host")
		if !force {
			fmt.Printf("Enter Host [%s]: ", hostConfig)

			reader := bufio.NewReader(os.Stdin)
			input, err := reader.ReadString('\n')
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read host: "+err.Error()+"\n",
						formatter.RedColor))
			}

			if input == "\n" {
				input = hostConfig + "\n"
			}
			host = strings.TrimSpace(input)
			if len(host) == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					logrus.Fatalln(
						formatter.Colorize("Host cannot be empty.\n",
							formatter.RedColor))
				} else {
					host = hostConfig
				}
			}

			fmt.Print("Enter email or username: ")
			_, err = fmt.Scanln(&email)
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read email: "+err.Error()+"\n",
						formatter.RedColor))
			}

			fmt.Print("Enter password: ")
			data, err = term.ReadPassword(int(os.Stdin.Fd()))
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read password: "+err.Error()+"\n",
						formatter.RedColor))
			}
			password = string(data)

		} else {
			hostFlag, err := cmd.Flags().GetString("host")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}

			if strings.Compare(hostFlag, "http://localhost:9000") == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					host = hostFlag
				} else {
					host = hostConfig
				}
			} else {
				host = hostFlag
			}
			email, err = cmd.Flags().GetString("email")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
			password, err = cmd.Flags().GetString("password")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
		}

		viper.GetViper().Set("host", &host)
		if strings.TrimSpace(email) == "" {
			logrus.Fatalln(
				formatter.Colorize(
					"Email cannot be empty.\n",
					formatter.RedColor))
		}

		if strings.TrimSpace(password) == "" {
			logrus.Fatalln(
				formatter.Colorize(
					"Password cannot be empty.\n",
					formatter.RedColor))
		}

		logrus.Infoln("\n")

		url, err := ybaAuthClient.ParseURL(host)
		if err != nil {
			logrus.Fatal(
				formatter.Colorize(
					err.Error()+"\n",
					formatter.RedColor))
		}

		authAPI, err := ybaAuthClient.NewAuthAPIClientInitialize(url, "")
		if err != nil {
			logrus.Fatal(
				formatter.Colorize(
					err.Error()+"\n",
					formatter.RedColor))
		}

		req := ybaclient.CustomerLoginFormData{
			Email:    email,
			Password: password,
		}

		r, response, err := authAPI.ApiLogin().CustomerLoginFormData(req).Execute()
		if err != nil {
			errMessage := util.ErrorFromHTTPResponse(
				response, err, "Login", "Authentication")
			logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor))
		}
		logrus.Debugf("API Login response without errors\n")

		apiToken := r.GetApiToken()
		viper.GetViper().Set("apiToken", &apiToken)

		authUtil(url, apiToken)
	},
}

LoginCmd uses user name and password to configure the CLI

View Source
var RegisterCmd = &cobra.Command{
	Use:   "register",
	Short: "Register a YugabyteDB Anywhere customer using yba cli",
	Long: "Register a YugabyteDB Anywhere customer using yba cli. " +
		"If non-interactive mode is set, provide the host, name, email, password" +
		" and environment using flags.",
	Example: "yba register -f -n <name> -e <email> -p <password> -H <host>",
	Run: func(cmd *cobra.Command, args []string) {
		force, err := cmd.Flags().GetBool("force")
		if err != nil {
			logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
		}
		var email, password, confirmPassword string
		var name, code string
		var host string
		var data []byte
		hostConfig := viper.GetString("host")
		if !force {
			fmt.Printf("Enter Host [%s]: ", hostConfig)

			reader := bufio.NewReader(os.Stdin)
			input, err := reader.ReadString('\n')
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read host: "+err.Error()+"\n",
						formatter.RedColor))
			}

			if input == "\n" {
				input = hostConfig + "\n"
			}
			host = strings.TrimSpace(input)
			if len(host) == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					logrus.Fatalln(
						formatter.Colorize("Host cannot be empty.\n",
							formatter.RedColor))
				} else {
					host = hostConfig
				}
			}

			fmt.Printf("Enter name: ")
			readerName := bufio.NewReader(os.Stdin)
			inputName, err := readerName.ReadString('\n')
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read name: "+err.Error()+"\n",
						formatter.RedColor))
			}
			name = strings.TrimSpace(inputName)

			fmt.Printf("Enter environment [dev]: ")

			readerCode := bufio.NewReader(os.Stdin)
			inputCode, err := readerCode.ReadString('\n')
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read environment: "+err.Error()+"\n",
						formatter.RedColor))
			}
			code = strings.TrimSpace(inputCode)
			if len(code) == 0 {
				code = "dev"
			}

			fmt.Print("Enter email: ")
			_, err = fmt.Scanln(&email)
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read email: "+err.Error()+"\n",
						formatter.RedColor))
			}

			fmt.Print(
				"Enter password (must contain at least 8 characters " +
					"and at least 1 digit , 1 capital , 1 lowercase and 1 " +
					"of the !@#$^&* (special) characters): ")
			data, err = term.ReadPassword(int(os.Stdin.Fd()))
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read password: "+err.Error()+"\n",
						formatter.RedColor))
			}
			password = string(data)

			fmt.Print("Confirm entered password: ")
			data, err = term.ReadPassword(int(os.Stdin.Fd()))
			if err != nil {
				logrus.Fatalln(
					formatter.Colorize("Could not read password: "+err.Error()+"\n",
						formatter.RedColor))
			}
			confirmPassword = string(data)

			if !strings.EqualFold(password, confirmPassword) {
				logrus.Fatalln(
					formatter.Colorize("Passwords do not match.\n",
						formatter.RedColor))
			}

		} else {
			hostFlag, err := cmd.Flags().GetString("host")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}

			if strings.Compare(hostFlag, "http://localhost:9000") == 0 {
				if len(strings.TrimSpace(hostConfig)) == 0 {
					host = hostFlag
				} else {
					host = hostConfig
				}
			} else {
				host = hostFlag
			}
			name, err = cmd.Flags().GetString("name")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
			email, err = cmd.Flags().GetString("email")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
			password, err = cmd.Flags().GetString("password")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
			code, err = cmd.Flags().GetString("environment")
			if err != nil {
				logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor))
			}
		}

		viper.GetViper().Set("host", &host)

		if strings.TrimSpace(name) == "" {
			logrus.Fatalln(
				formatter.Colorize(
					"Name cannot be empty.\n",
					formatter.RedColor))
		}

		if strings.TrimSpace(email) == "" {
			logrus.Fatalln(
				formatter.Colorize(
					"Email cannot be empty.\n",
					formatter.RedColor))
		}

		if strings.TrimSpace(password) == "" {
			logrus.Fatalln(
				formatter.Colorize(
					"Password cannot be empty.\n",
					formatter.RedColor))
		}

		logrus.Infoln("\n")

		url, err := ybaAuthClient.ParseURL(host)
		if err != nil {
			logrus.Fatal(
				formatter.Colorize(
					err.Error()+"\n",
					formatter.RedColor))
		}

		authAPI, err := ybaAuthClient.NewAuthAPIClientInitialize(url, "")
		if err != nil {
			logrus.Fatal(
				formatter.Colorize(
					err.Error()+"\n",
					formatter.RedColor))
		}

		req := ybaclient.CustomerRegisterFormData{
			Email:    email,
			Password: password,
			Name:     name,
			Code:     code,
		}

		r, response, err := authAPI.RegisterCustomer().CustomerRegisterFormData(req).Execute()
		if err != nil {
			errMessage := util.ErrorFromHTTPResponse(
				response, err, "Register", "Authentication")
			logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor))
		}
		logrus.Debugf("API Register response without errors\n")

		reqLogin := ybaclient.CustomerLoginFormData{
			Email:    email,
			Password: password,
		}

		r, response, err = authAPI.ApiLogin().CustomerLoginFormData(reqLogin).Execute()
		if err != nil {
			errMessage := util.ErrorFromHTTPResponse(
				response, err, "Register", "Login")
			logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor))
		}
		logrus.Debugf("API Login response without errors\n")

		apiToken := r.GetApiToken()
		viper.GetViper().Set("apiToken", &apiToken)

		authUtil(url, apiToken)
	},
}

RegisterCmd to create a new customer

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL