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 }