Git Product home page Git Product logo

Comments (4)

str4d avatar str4d commented on June 4, 2024

age currently opens /dev/tty for passphrase querying. I think we should do the same on Unix, and then continue to require using -i/--input on Windows when using a passphrase.

from rage.

str4d avatar str4d commented on June 4, 2024

Oh, turns out that the console crate used by dialoguer::PasswordInput already opens /dev/tty on Unix by default, and returns an empty string if the terminal is not a TTY. So all we have to do is allow using a pipe input on Unix, and we are done!

from rage.

str4d avatar str4d commented on June 4, 2024

Hmm, turns out it isn't that simple. The expected diff would be:

diff --git a/src/bin/rage/error.rs b/src/bin/rage/error.rs
index c9d8dca..bf5b758 100644
--- a/src/bin/rage/error.rs
+++ b/src/bin/rage/error.rs
@@ -48,6 +48,7 @@ pub(crate) enum DecryptError {
     Io(io::Error),
     MissingIdentities(String),
     MixedIdentityAndPassphrase,
+    #[cfg(not(unix))]
     PassphraseWithoutFileArgument,
     RecipientFlag,
     UnsupportedKey(String, age::keys::UnsupportedKey),
@@ -89,6 +90,7 @@ impl fmt::Display for DecryptError {
             DecryptError::MixedIdentityAndPassphrase => {
                 write!(f, "-i/--identity can't be used with -p/--passphrase")
             }
+            #[cfg(not(unix))]
             DecryptError::PassphraseWithoutFileArgument => write!(
                 f,
                 "File to decrypt must be passed as an argument when using -p/--passphrase"
diff --git a/src/bin/rage/main.rs b/src/bin/rage/main.rs
index 130f9d6..164b097 100644
--- a/src/bin/rage/main.rs
+++ b/src/bin/rage/main.rs
@@ -267,8 +267,13 @@ fn decrypt(opts: AgeOptions) -> Result<(), error::DecryptError> {
             return Err(error::DecryptError::MixedIdentityAndPassphrase);
         }
 
-        if opts.input.is_none() {
-            return Err(error::DecryptError::PassphraseWithoutFileArgument);
+        // The `console` crate used by `dialoguer::PasswordInput` opens `/dev/tty`
+        // directly on Unix, so we don't have any conflict with stdin.
+        #[cfg(not(unix))]
+        {
+            if opts.input.is_none() {
+                return Err(error::DecryptError::PassphraseWithoutFileArgument);
+            }
         }
 
         match read_secret("Type passphrase", None) {

But with this, running cat test.age | cargo run -- -d -p in bash results in no output, and a corrupted terminal.

from rage.

str4d avatar str4d commented on June 4, 2024

Turns out this is caused by a problem somewhere in the console crate. Switching from dialoguer to rpassword fixes the problem.

from rage.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.