config: use readline for initializing username/password

This commit is contained in:
Tulir Asokan 2024-10-19 16:17:58 +03:00
parent 8e92d9b163
commit e6121149b3

View file

@ -22,6 +22,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/chzyer/readline"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"go.mau.fi/util/ptr" "go.mau.fi/util/ptr"
"go.mau.fi/util/random" "go.mau.fi/util/random"
@ -77,20 +78,17 @@ func (gmx *Gomuks) LoadConfig() error {
} }
if gmx.Config.Web.Username == "" || gmx.Config.Web.PasswordHash == "" { if gmx.Config.Web.Username == "" || gmx.Config.Web.PasswordHash == "" {
fmt.Println("Please create a username and password for authenticating the web app") fmt.Println("Please create a username and password for authenticating the web app")
fmt.Print("Username: ") gmx.Config.Web.Username, err = readline.Line("Username: ")
_, err = fmt.Scanln(&gmx.Config.Web.Username)
if err != nil { if err != nil {
return fmt.Errorf("failed to read username: %w", err) return fmt.Errorf("failed to read username: %w", err)
} else if len(gmx.Config.Web.Username) == 0 || len(gmx.Config.Web.Username) > 32 { } else if len(gmx.Config.Web.Username) == 0 || len(gmx.Config.Web.Username) > 32 {
return fmt.Errorf("username must be 1-32 characters long") return fmt.Errorf("username must be 1-32 characters long")
} }
fmt.Print("Password: ") passwd, err := readline.Password("Password: ")
var passwd string
_, err = fmt.Scanln(&passwd)
if err != nil { if err != nil {
return fmt.Errorf("failed to read password: %w", err) return fmt.Errorf("failed to read password: %w", err)
} }
hash, err := bcrypt.GenerateFromPassword([]byte(passwd), 12) hash, err := bcrypt.GenerateFromPassword(passwd, 12)
if err != nil { if err != nil {
return fmt.Errorf("failed to hash password: %w", err) return fmt.Errorf("failed to hash password: %w", err)
} }