package cmd import ( "fmt" "os" "github.com/Jaculabilis/intake/core" "github.com/spf13/cobra" "golang.org/x/term" ) var passwdCmd = &cobra.Command{ Use: "passwd", Short: "Set the password for the web interface", Long: `Set the password for the web interface. Access through the command line should be controlled by standard filesystem permissions. `, Run: func(cmd *cobra.Command, args []string) { passwd(boolArg(cmd, "verify")) }, } func init() { rootCmd.AddCommand(passwdCmd) passwdCmd.Flags().Bool("verify", false, "Compare the input password instead of setting it.") } func passwd(verify bool) { db := openAndMigrateDb() fmt.Print("Enter your password: ") bytes, err := term.ReadPassword(int(os.Stdin.Fd())) if err != nil { fmt.Printf("error: failed to read password: %v\n", err) os.Exit(1) } password := string(bytes) fmt.Println() if verify { match, err := core.CheckPassword(db, password) if err != nil { fmt.Printf("error: failed to check password: %v\n", err) os.Exit(1) } if match { fmt.Println("correct!") os.Exit(0) } else { fmt.Println("incorrect") os.Exit(1) } } err = core.SetPassword(db, password) if err != nil { fmt.Printf("failed to set password: %v\n", err) } fmt.Println("password set") }