diff --git a/lib/client/util/util.go b/lib/client/util/util.go index a81ff59..598a8d2 100644 --- a/lib/client/util/util.go +++ b/lib/client/util/util.go @@ -33,6 +33,11 @@ const rsaKeySize = 2048 const maxPasswordLength = 512 func getUserCreds(userName string) (password []byte, err error) { + // First check for environment variable + if envPass := os.Getenv("KEYMASTER_PASSWORD"); envPass != "" { + return []byte(envPass), nil + } + fmt.Printf("Password for %s: ", userName) if term.IsTerminal(int(os.Stdin.Fd())) { diff --git a/lib/client/util/util_test.go b/lib/client/util/util_test.go index bfe2121..ff4be33 100644 --- a/lib/client/util/util_test.go +++ b/lib/client/util/util_test.go @@ -151,6 +151,22 @@ func TestGetUserCreds(t *testing.T) { } } +func TestGetUserCredsFromEnv(t *testing.T) { + // Set environment variable + const testPassword = "test-password-123" + os.Setenv("KEYMASTER_PASSWORD", testPassword) + defer os.Unsetenv("KEYMASTER_PASSWORD") // Clean up + + password, err := getUserCreds("username") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if string(password) != testPassword { + t.Errorf("got password %q, want %q", string(password), testPassword) + } +} + // ------------WARN-------- Next name copied from https://github.com/howeyc/gopass/blob/master/pass_test.go for using // // gopass checks