mirror of
https://github.com/minio/mc.git
synced 2025-11-26 20:03:05 +03:00
Secret key prompt (#3083)
This commit is contained in:
@@ -17,7 +17,9 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/fatih/color"
|
||||
@@ -25,6 +27,7 @@ import (
|
||||
json "github.com/minio/mc/pkg/colorjson"
|
||||
"github.com/minio/mc/pkg/probe"
|
||||
"github.com/minio/minio/pkg/console"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
)
|
||||
|
||||
var adminUserAddCmd = cli.Command{
|
||||
@@ -53,13 +56,23 @@ EXAMPLES:
|
||||
{{.DisableHistory}}
|
||||
{{.Prompt}} {{.HelpName}} myminio foobar foo12345
|
||||
{{.EnableHistory}}
|
||||
2. Add a new user 'foobar' to MinIO server, prompting for keys.
|
||||
{{.Prompt}} {{.HelpName}} myminio
|
||||
Enter Access Key: foobar
|
||||
Enter Secret Key: foobar12345
|
||||
3. Add a new user 'foobar' to MinIO server using piped keys.
|
||||
{{.DisableHistory}}
|
||||
{{.Prompt}} echo -e "foobar\nfoobar12345" | {{.HelpName}} myminio
|
||||
{{.EnableHistory}}
|
||||
`,
|
||||
}
|
||||
|
||||
// checkAdminUserAddSyntax - validate all the passed arguments
|
||||
func checkAdminUserAddSyntax(ctx *cli.Context) {
|
||||
if len(ctx.Args()) != 3 {
|
||||
cli.ShowCommandHelpAndExit(ctx, "add", 1) // last argument is exit code
|
||||
argsNr := len(ctx.Args())
|
||||
if argsNr > 3 || argsNr < 1 {
|
||||
fatalIf(errInvalidArgument().Trace(ctx.Args().Tail()...),
|
||||
"Incorrect number of arguments for user add command.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +128,43 @@ func (u userMessage) JSON() string {
|
||||
return string(jsonMessageBytes)
|
||||
}
|
||||
|
||||
// fetchUserKeys - returns the access and secret key
|
||||
func fetchUserKeys(args cli.Args) (string, string) {
|
||||
accessKey := ""
|
||||
secretKey := ""
|
||||
console.SetColor(cred, color.New(color.FgYellow, color.Italic))
|
||||
isTerminal := terminal.IsTerminal(int(os.Stdin.Fd()))
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
|
||||
argCount := len(args)
|
||||
|
||||
if argCount == 1 {
|
||||
if isTerminal {
|
||||
fmt.Printf("%s", console.Colorize(cred, "Enter Access Key: "))
|
||||
}
|
||||
value, _, _ := reader.ReadLine()
|
||||
accessKey = string(value)
|
||||
} else {
|
||||
accessKey = args.Get(1)
|
||||
}
|
||||
|
||||
if argCount == 1 || argCount == 2 {
|
||||
if isTerminal {
|
||||
fmt.Printf("%s", console.Colorize(cred, "Enter Secret Key: "))
|
||||
bytePassword, _ := terminal.ReadPassword(int(os.Stdin.Fd()))
|
||||
fmt.Printf("\n")
|
||||
secretKey = string(bytePassword)
|
||||
} else {
|
||||
value, _, _ := reader.ReadLine()
|
||||
secretKey = string(value)
|
||||
}
|
||||
} else {
|
||||
secretKey = args.Get(2)
|
||||
}
|
||||
|
||||
return accessKey, secretKey
|
||||
}
|
||||
|
||||
// mainAdminUserAdd is the handle for "mc admin user add" command.
|
||||
func mainAdminUserAdd(ctx *cli.Context) error {
|
||||
checkAdminUserAddSyntax(ctx)
|
||||
@@ -124,17 +174,18 @@ func mainAdminUserAdd(ctx *cli.Context) error {
|
||||
// Get the alias parameter from cli
|
||||
args := ctx.Args()
|
||||
aliasedURL := args.Get(0)
|
||||
accessKey, secretKey := fetchUserKeys(args)
|
||||
|
||||
// Create a new MinIO Admin Client
|
||||
client, err := newAdminClient(aliasedURL)
|
||||
fatalIf(err, "Unable to initialize admin connection.")
|
||||
|
||||
fatalIf(probe.NewError(client.AddUser(args.Get(1), args.Get(2))).Trace(args...), "Cannot add new user")
|
||||
fatalIf(probe.NewError(client.AddUser(accessKey, secretKey)).Trace(args...), "Cannot add new user")
|
||||
|
||||
printMsg(userMessage{
|
||||
op: "add",
|
||||
AccessKey: args.Get(1),
|
||||
SecretKey: args.Get(2),
|
||||
AccessKey: accessKey,
|
||||
SecretKey: secretKey,
|
||||
UserStatus: "enabled",
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user