aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
AgeCommit message (Collapse)Author
2022-08-20main: Exit with `EX_NOINPUT` when no password copy options are presentTeddy Wing
I wrote this program before I started using sysexits. Now, a different exit code makes more sense.
2022-08-20main: Remove version argument TODOsTeddy Wing
2022-08-20Add version command line argumentTeddy Wing
* -V and --version now print the program version and exit * Use the `exitcode` crate * Rename `options` variable to `accepted_args`, which seems clearer given its usage.
2022-08-20main: Rename `options` variable to `copy_options`Teddy Wing
When investigating how to add a `--version` argument, I was confused by this naming and thought that "options" referred to command line options. Rename the variable to make its purpose clearer.
2022-08-20main: Idea for new exit code when no copy optionsTeddy Wing
2022-08-20main: Idea for `--version` argumentTeddy Wing
2022-08-20Update copyright yearsTeddy Wing
2022-08-20parse_options: Clean up `Command.spawn` codeTeddy Wing
* Remove old in-progress code * Remove `child.stdout.take()` call, which is suggested in https://doc.rust-lang.org/std/process/struct.Child.html#structfield.stdout but ended up not being necessary in this instance.
2022-08-20Spawn `pass` in order to support GnuPG 2 and PinentryTeddy Wing
Previously, Passextract didn't work with GnuPG 2 because I was immediately collecting the output of `pass`. With GnuPG 1.4, the password prompt was like a conventional `read`-style password prompt. However, in GnuPG 2, the prompt is replaced with Pinentry. Pinentry interferes with capturing the output from Pass, such that Passextract exits immediately, without even prompting for a password. Instead of using `Command.output`, use `Command.spawn`. This allows GnuPG to work correctly and display a Pinentry prompt. We can then capture the standard output from the child process and parse it for the Passextract interface.
2018-03-03Update copyright yearsTeddy Wing
2018-03-03When `-i`, replace password with '*'sTeddy Wing
Previously, when the "invisible" flag was activated, we wouldn't print anything except the "p: " prefix on a password line. This made it difficult to verify the password, and if you for some reason had multiple passwords, you wouldn't know which one to pick unless you knew the order. This at least gives you a visual cue about your password.
2018-03-01Clean up condition for getting file path from argumentTeddy Wing
Instead of the convoluted hard-to-read `hide_password &&` nonsense, give ourselves a way to express the condition in terms of the argument _not_ being one of our accepted options (only `-i`). This ensures that we either capture the filename in the last argument or use STDIN.
2018-03-01Use `-i` argument to hide passwordsTeddy Wing
Connect the `-i` argument flag to the renderer. If the arg was passed, hide passwords, otherwise show them. Change `args.first()` to `args.get(1)` because the actual first element is the command executable. Not happy with the condition I'm using here to grab the password file or the STDIN `-`. It doesn't read well at all. It all does work, but this part I want to rewrite to make it easier to read.
2018-03-01Try to match `-i` argumentTeddy Wing
Turn on a `hide_password` boolean variable if an `-i` argument is passed in (haven't tested this yet). This tells us whether the user wants us to hide the password in the selection interface.
2018-02-24Make password line invisibleTeddy Wing
Instead of rendering the password string, hide it while allowing it to be copied. It is identified by the "p: " prefix, but nothing follows that. This allows you to run `passextract` without having to worry about others peering over your shoulder or about screen capture or recording hacks. I'll be adding a command line flag to force you to opt in to this feature, while keeping the old functionality the same.
2016-11-14Clear clipboard on quitTeddy Wing
The last thing copied from Passextract will stick around in your clipboard, potentially opening up your password to accidental pasting or a clipboard exploit. Pass deals with this in a nice way, by restoring your clipboard back to what was copied before after a set time delay. Here that same functionality is more difficult to achieve because the Clipboard crate can only deal with strings. So if for example you've copied a file, an image, a program's proprietary type, or some other binary data, it can't be restored with the Clipboard crate. Pass is able to do this because it uses the OS X `pbcopy`/`pbpaste` commands under the hood, which do support binary data. We could do that here I suppose, but it's easier and cross-platform to leverage a library. My heavy-handed solution to the problem of clipboard insecurity is to just overwrite the clipboard with an empty string when Passextract quits. The solution is not ideal because it doesn't preserve your past clipboard entry, and it forces you to keep the Passextract menu open until you paste the copied entry, but it's better than nothing when it comes to keeping the clipboard secure. If there's an error writing to the clipboard, Passextract will refuse to quit.
2016-08-17Add support for `g` and `G` movementsTeddy Wing
`g`: moves the selection to the first option `G`: moves the selection to the last option This allows for faster selection if there are more than 2–3 options. Using `g` still allows `gg` to work since doubling the command doesn't change its meaning.
2016-08-06strip_key: Fix for values that contain ": "Teddy Wing
Values that contained ": " would not be parsed correctly for copying to the clipboard. If, for example, a password contained ": ", those characters and any following them wouldn't be copied. This change allows such passwords to be copied correctly.
2016-08-06Add license (GPLv3+)Teddy Wing
Also include brief notices in the source files. Not a fan of the huge blocks of text that the FSF recommends.
2016-08-06parse_options: Add a short sentence of documentationTeddy Wing
2016-08-06Extract options from both `pass` and STDINTeddy Wing
Get option extraction/parsing working both for STDIN and for calls to `pass show`. If no argument is passed to the executable or the first argument is "-", options are read from STDIN. Otherwise, the first argument is passed to `pass show`, the output of which is parsed as options.
2016-08-06Call `pass show` with the given argument and run Passextract on resultTeddy Wing
Temporarily comment out code that deals with STDIN to get this feature working. It complicated things to leave it in right now. Given an argument that isn't "-" (STDIN), we pass that argument to `pass show`. Users correctly get a password prompt from `pass`, and the output from the command gets sent to the Passextract TUI for display in the menu and copying.
2016-08-06Add documentation for `strip_key`v0.0.1Teddy Wing
2016-08-06Make selection arrow movement code DRYTeddy Wing
Remove the duplication of these lines for the `j` and `k` commands by extracting them to a function.
2016-08-06Set window title in knockout textTeddy Wing
Make the title appear in white-on-black knockout text.
2016-08-06Remove unused variable in getchar pattern matchTeddy Wing
Use `_` for the default/general case. Do nothing in this case, just continue looping.
2016-08-06Remote the "test" lineTeddy Wing
Delete this line from the TUI display and adjust the real output lines to be one line higher.
2016-08-06Remove `set_cursor` callsTeddy Wing
Don't move the cursor when the selection is changed. It was flickering, which looked rather distracting. Removing the cursor makes the interface look more fluid and snappy.
2016-08-06Parse options from STDINTeddy Wing
Read STDIN and get all lines that start with "e: ", "u: ", and "p: ". If none are found, exit. These lines get added to the `options` vector which then gets displayed in the TUI. Since the contents of the vector are different from our hard-coded one, use a borrow on the clipboard write call.
2016-08-06Handle `Result` on clipboard `set_contents`Teddy Wing
Change the colour of the selection arrow to red if there's an error and green if the clipboard was written to successfully. The colour only lasts for 100 milliseconds because that's the refresh rate of the loop. This seems to be a nice way to briefly offer a visual notification and automatically return the interface to normal right afterward.
2016-08-06knockout_cell: Use name instead of hex code byteTeddy Wing
Better readability and it's the same. It looked a little darker than white, that's why I changed it, but they're the same.
2016-08-06Copy line value to clipboard when Enter key is pressedTeddy Wing
2016-08-06Add a function that strips the "key" part from the lineTeddy Wing
Lines are formatted like: e: email@example.com This function turns that into: email@example.com It will be used to strip the "key" so that we can copy only the "value" part of the line to the system clipboard.
2016-08-06Move the selection marker with `j` & `k`Teddy Wing
The selection arrow can now be moved. Not liking the code duplication. We'll have to figure something out to sort that.
2016-08-06Initial trial of selection trackingTeddy Wing
Decided to track the location of the selection in a struct and make a function to move the current selection. But I can't mutably borrow the terminal because it's already mutable. Will need to rethink this.
2016-08-05Print a list of options to the TUITeddy Wing
Create a hard-coded list of options for testing and print them to the terminal interface. These will eventually be selectable with `j`,`k`.
2016-08-05Add an arrow markerTeddy Wing
Print a URLView-like arrow for choice selection.
2016-08-05Allow both 'q' and Ctrl-C to quitTeddy Wing
Alo update the title text with information on how to quit.
2016-08-05Test terminal outputTeddy Wing
Output a single string to the terminal in the alternate screen. This allows us to test the base functionality of what we'll need for a dialog a la URLView. Used Rustty's examples as a big reference.
2016-08-05Initial commit. Cargo init.Teddy Wing
Initialise a new project with `cargo init --bin`.