github.com/amazechain/amc@v0.1.3/cmd/utils/prompt.go (about)

     1  // Copyright 2023 The AmazeChain Authors
     2  // This file is part of the AmazeChain library.
     3  //
     4  // The AmazeChain library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The AmazeChain library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the AmazeChain library. If not, see <http://www.gnu.org/licenses/>.
    16  package utils
    17  
    18  import (
    19  	"fmt"
    20  	"github.com/amazechain/amc/console/prompt"
    21  )
    22  
    23  // GetPassPhrase displays the given text(prompt) to the user and requests some textual
    24  // data to be entered, but one which must not be echoed out into the terminal.
    25  // The method returns the input provided by the user.
    26  func GetPassPhrase(text string, confirmation bool) string {
    27  	if text != "" {
    28  		fmt.Println(text)
    29  	}
    30  	password, err := prompt.Stdin.PromptPassword("Password: ")
    31  	if err != nil {
    32  		Fatalf("Failed to read password: %v", err)
    33  	}
    34  	if confirmation {
    35  		confirm, err := prompt.Stdin.PromptPassword("Repeat password: ")
    36  		if err != nil {
    37  			Fatalf("Failed to read password confirmation: %v", err)
    38  		}
    39  		if password != confirm {
    40  			Fatalf("Passwords do not match")
    41  		}
    42  	}
    43  	return password
    44  }
    45  
    46  // GetPassPhraseWithList retrieves the password associated with an account, either fetched
    47  // from a list of preloaded passphrases, or requested interactively from the user.
    48  func GetPassPhraseWithList(text string, confirmation bool, index int, passwords []string) string {
    49  	// If a list of passwords was supplied, retrieve from them
    50  	if len(passwords) > 0 {
    51  		if index < len(passwords) {
    52  			return passwords[index]
    53  		}
    54  		return passwords[len(passwords)-1]
    55  	}
    56  	// Otherwise prompt the user for the password
    57  	password := GetPassPhrase(text, confirmation)
    58  	return password
    59  }