Comments (4)
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.
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.
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.
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)
- UX: failed to fill whole buffer with ArmoredWriter HOT 1
- Grease data included in file header
- Only one identity sent to plugin in "identity-v1" phase when multiple are provided HOT 3
- RUSTSEC-2023-0071: Marvin Attack: potential key recovery through timing sidechannels
- Release v0.9.3? HOT 1
- Invalid scrypt work factor calculation on system with bad SystemTime precision
- v0.9 Breaking Change? HOT 5
- DX: Place i18n behind a feature flag. HOT 3
- `rage-keygen` overwrites existing key files since 0.6.0
- Expose fatal errors from `rage-keygen`
- Migrate away from `gumdrop` for argument parsing HOT 3
- UX: allow to use the shell process substitution to provide the identity file when decrypting HOT 1
- Name conflict with Rage the video player HOT 5
- Securerage HOT 1
- Publish new version HOT 3
- UX: How to derive the public key given a private key HOT 2
- Hard to understand error message when the identity file does not end with a \n
- Feature-parity with age: version flag HOT 2
- chezmoi add --encrypt missing recipient HOT 1
- age-plugin: Cannot create a plugin with *no* RecipientPlugin state
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rage.