56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package pass
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"baal.ar76.eu/x/pub/multisql/cfg"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
func GetMasterPass(askPass bool) []byte {
|
|
if askPass {
|
|
res, err := termGetPassword("Podaj hasło")
|
|
if err != nil {
|
|
log.Fatalln("Nie udało się wczytać hasła z konsoli")
|
|
}
|
|
return res
|
|
}
|
|
password := os.Getenv(cfg.MULTISQLPASS)
|
|
|
|
if password != "" {
|
|
return []byte(password)
|
|
}
|
|
|
|
log.Fatalf("Nieustalone hasło. Użyj flagi -P lub ustaw hasło w zmiennej %s", cfg.MULTISQLPASS)
|
|
return nil
|
|
}
|
|
|
|
func EnterMasterPass() []byte {
|
|
p1, err := termGetPassword("Podaj nowe hasło (min 8 znaków)")
|
|
if err != nil {
|
|
log.Fatalf("Błąd wczytywania hasła: %v", err)
|
|
}
|
|
if len(p1) < 8 {
|
|
log.Fatalf("podano zbyt krótkie hasło")
|
|
}
|
|
p2, err := termGetPassword("Powtórz nowe hasło")
|
|
if err != nil {
|
|
log.Fatalf("Błąd wczytywania hasła: %v", err)
|
|
}
|
|
if !bytes.Equal(p1, p2) {
|
|
log.Fatalf("podane hasła są różne")
|
|
}
|
|
|
|
return p1
|
|
}
|
|
|
|
func termGetPassword(prompt string) ([]byte, error) {
|
|
fmt.Fprintf(os.Stderr, "%s: ", prompt)
|
|
passwd, err := term.ReadPassword(int(os.Stdin.Fd()))
|
|
fmt.Fprintln(os.Stderr)
|
|
return passwd, err
|
|
}
|