Giter VIP home page Giter VIP logo

rooster's People

Contributors

blackholefox avatar conradkleinespel avatar dwrensha avatar eternity-yarr avatar jaezun avatar john-sharratt avatar kamiyaa avatar maxjacobson avatar novalix-dev avatar qmx avatar yamnikov-oleg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

rooster's Issues

Cargo.lock missing

Thanks for this great program! Could you maybe add a Cargo.lock please?

Multiple entries for same application

It would be nice if an application name could be used multiple times.
A common situation is an administrator using different logins on the same server, like

server_hot       root    pwd0
server_hot       smith   pwd1
server_yellow    root    pwd2
server_yellow    smith   pwd3

Presently rooster does not support it.

Replace unfriendly error messages

Some error messages use {:?}, which can be unfriendly (not always, but sometimes).

Rooster would benefit from removing {:?} in favor of humanly readable error messages that are both informative and friendly.

Are you up for the task?

Windows Build Fails

Build with nightly and stable on Windows fails while compiling 'quale' package.

error[E0433]: failed to resolve. Could not find `unix` in `os`
--> C:\Users\Chad Baxter\.cargo\registry\src\github.com-1ecc6299db9ec823\quale-1.0.0\lib.rs:3:14
|
3 | use std::os::unix::fs::PermissionsExt;
| ^^^^ Could not find `unix` in `os`

error[E0425]: cannot find value `X_OK` in module `libc`
--> C:\Users\Chad Baxter\.cargo\registry\src\github.com-1ecc6299db9ec823\quale-1.0.0\lib.rs:46:50
|
46 | libc::access(file_path.into_raw(), libc::X_OK) == libc::EXIT_SUCCESS
| ^^^^ not found in `libc`

error[E0425]: cannot find value `S_IXGRP` in module `libc`
--> C:\Users\Chad Baxter\.cargo\registry\src\github.com-1ecc6299db9ec823\quale-1.0.0\lib.rs:49:32
|
49 | (libc::S_IEXEC | libc::S_IXGRP | libc::S_IXOTH) as u32;
| ^^^^^^^ not found in `libc`

error[E0425]: cannot find value `S_IXOTH` in module `libc`
--> C:\Users\Chad Baxter\.cargo\registry\src\github.com-1ecc6299db9ec823\quale-1.0.0\lib.rs:49:48
|
49 | (libc::S_IEXEC | libc::S_IXGRP | libc::S_IXOTH) as u32;
| ^^^^^^^ not found in `libc`

error[E0599]: no method named `mode` found for type `std::fs::Permissions` in the current scope
--> C:\Users\Chad Baxter\.cargo\registry\src\github.com-1ecc6299db9ec823\quale-1.0.0\lib.rs:51:37
|
51 | file_metadata.permissions().mode() & EXECUTABLE_FLAGS != 0;
| ^^^^

error: aborting due to 5 previous errors

error: Could not compile `quale`.

Seems to be looking for unix options in libc where there is none. Will file an issue with 'quale' if needed.

generating passwords sometimes misbehaves since updating to macOS Sierra

(The macOS Sierra thing may or may not be related, but that's the one thing that's changed recently on my setup)

RUST_BACKTRACE=1 rooster generate tessssssst maxjacobson
Type your master password: 
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ()', ../src/libcore/result.rs:788
stack backtrace:
   1:        0x103b78deb - std::sys::backtrace::tracing::imp::write::h29f5fdb9fc0a7395
   2:        0x103b7ae3a - std::panicking::default_hook::_{{closure}}::h2cc84f0378700526
   3:        0x103b79fd8 - std::panicking::default_hook::hbbe7fa36a995aca0
   4:        0x103b7a618 - std::panicking::rust_panic_with_hook::h105c3d42fcd2fb5e
   5:        0x103b7a476 - std::panicking::begin_panic::hbf62ea4a5ff3f9de
   6:        0x103b7a388 - std::panicking::begin_panic_fmt::h20f5943904e5791d
   7:        0x103b7a2df - rust_begin_unwind
   8:        0x103ba0560 - core::panicking::panic_fmt::h19323e466869c656
   9:        0x103b733c5 - core::result::unwrap_failed::hbc58bb4cc0bc5dd4
  10:        0x103b737d2 - rooster_clipboard::main::hc48126e8c5f27f80
  11:        0x103b7a29d - std::panicking::try::call::h5df3ac2979db3c90
  12:        0x103b7b15b - __rust_try
  13:        0x103b7b015 - __rust_maybe_catch_panic
  14:        0x103b79951 - std::rt::lang_start::hfe9ab243c60ffb9b
Alright! Here is your password: KSt0pp032B3E@\+;-\;i>9.GK{5G6XeH

It doesn't totally fail, but it is unexpected that it displays the password rather than copying it to my clipboard.

I think something in the clipboard code isn't compatible with macOS Sierra, maybe?

some ideas

I hate issues for discussing stuff, but there we go:

I was trying to build the same thing you've done with rooster, with two big differences

The library is ultra fast and provides encryption which is going to last. (It's taken from djb's nacl after all), and the main consequence for this one would be having a better key derivation scheme - we definitely don't want to have SHA256 for keys :)

  • using sqlite3 as storage instead of a single flat file

my reasoning for this one is having a file format which is well documented, stable and with all the bonus points of being almost drop-in compatible with android - which means less hassle for doing the mobile app.

Thoughts? I'd be more than happy to discuss more on this, since I don't want to duplicate effort :)

Retyping master password & GUI

I like to have a long master password, however without GUI I have to retype it for every operation, which is really bothersome. Is there a solution to this?

Wayland Clipboard

Linux and some other Unix-like systems are replacing the X11 display protocol with the new Wayland protocol.

There is a safe Rust crate for working with the Wayland clipboard. Currently, wlroots compositors are the best-supported, but other compositors are encouraged to use their portable Wayland clipboard extension.

Packages for Linux / OSX / Windows

It would be cool to have packages for the main platforms people might use Rooster on. This would make it easier to install. People shouldn't need to know that Rooster runs on Rust or uses 3rd party libraries in order to use Rooster.

Here are options for some OSs:

Let us know what you think might be the best way to go about this 😃

Analytics and tracking

At some point, Rooster will include an "Analytics" module so that we can use data to make Rooster better. Let's see what this whole "Analytics" thing is about.

Given the nature of Rooster, including some kind of tracking system inside of it could seem crazy. I get that. Matter of fact, when I am not sure what data is collected about me and/or don't understand what's being done with that data, I usually try to opt-out.

And, just so you know, when Rooster gets analytics, there will be a way to opt-out.

However, as with a lot of software projects, knowing what users do with the software helps in making it better. Here are some thing that I think Rooster could benefit from knowing:

  • The Rooster commands you use (rooster list, rooster get, etc): this information could be used to removed unused commands or improve heavily used ones,
  • Your locale: this could be used to translate Rooster documentation for heavily used languages,
  • Your operating system: this could be used to focus testing efforts on those systems for every new release, so as to not lose users,
  • Your version of Rooster: this could be used to drop support for older, unused versions, and focus development resources on what matters most.

These things will help make Rooster better for every user, including you. So yeah, at some point, Rooster will track how you use it. If you don't want to be tracked, you will be able opt-out.

Any feedback is welcome.

build failed: failed to run custom build command for x11 v2.11.0

Can't seem to get rooster to install on ubuntu. This can be reproduced exactly in a docker container:

root@dockerhost:/# docker run -it ubuntu bash

root@6a956b281c:/# apt-get update
 [ ... ]
root@6a956b281c:/# apt-get install curl gcc make file sudo
 [ ... ]
root@6a956b281c:/# curl -sSf https://static.rust-lang.org/rustup.sh | sh
rustup: gpg available. signatures will be verified
rustup: downloading manifest for 'stable'
rustup: downloading toolchain for 'stable'
######################################################################## 100.0%
gpg: assuming signed data in `/root/.rustup/dl/481cfcf7d473f81de22d/rust-1.12.1-x86_64-unknown-linux-gnu.tar.gz'
gpg: Signature made Thu Oct 20 20:32:08 2016 UTC using RSA key ID 7B3B09DC
gpg: Good signature from "Rust Language (Tag and Release Signing Key) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 108F 6620 5EAE B0AA A8DD  5E1C 85AB 96E6 FA1B E5FE
     Subkey fingerprint: C134 66B7 E169 A085 1886  3216 5CB4 A934 7B3B 09DC
rustup: installing toolchain for 'stable'
rustup: extracting installer
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'rust-std-x86_64-unknown-linux-gnu'
install: installing component 'rust-docs'
install: installing component 'cargo'

    Rust is ready to roll.
root@6a956b281c:/# cargo install rooster
 Updating registry `https://github.com/rust-lang/crates.io-index`
 Downloading rooster v2.3.0
 Downloading rpassword v0.2.3
 Downloading rustc-serialize v0.3.19
 Downloading clipboard v0.1.2
 Downloading byteorder v0.5.3
 Downloading rand v0.3.14
 Downloading libc v0.2.17
 Downloading getopts v0.2.14
 Downloading rust-crypto v0.2.36
 Downloading unix-daemonize v0.1.2
 Downloading time v0.1.35
 Downloading winapi v0.2.8
 Downloading kernel32-sys v0.2.2
 Downloading winapi-build v0.1.1
 Downloading gcc v0.3.38
 Downloading termios v0.2.2
 Downloading x11 v2.11.0
 Downloading pkg-config v0.3.8
   Compiling byteorder v0.5.3
   Compiling winapi v0.2.8
   Compiling winapi-build v0.1.1
   Compiling rustc-serialize v0.3.19
   Compiling gcc v0.3.38
   Compiling pkg-config v0.3.8
   Compiling kernel32-sys v0.2.2
   Compiling libc v0.2.17
   Compiling termios v0.2.2
   Compiling unix-daemonize v0.1.2
   Compiling x11 v2.11.0
   Compiling rand v0.3.14
   Compiling time v0.1.35
   Compiling rust-crypto v0.2.36
Build failed, waiting for other jobs to finish...
error: failed to compile `rooster v2.3.0`, intermediate artifacts can be found at `/tmp/cargo-install.Q8oAJxea4HXk`

Caused by:
  failed to run custom build command for `x11 v2.11.0`
process didn't exit successfully: `/tmp/cargo-install.Q8oAJxea4HXk/release/build/x11-0ca340fb7c96474d/build-script-build` (exit code: 101)
--- stderr
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "Failed to run `\"pkg-config\" \"--libs\" \"--cflags\" \"x11\"`: No such file or directory (os error 2)"', ../src/libcore/result.rs:788
note: Run with `RUST_BACKTRACE=1` for a backtrace.

password command

Is there a way to use rooster as a password command for a configuration file? e.g. as with pass with pass show gmail.

Check password strength with "rooster weak" command

It would be awesome to have a way to see if we have any weak/hacked passwords in our Rooster file.

What do you think ? Please post your thoughts here before working on this issue because we have to agree on the solution before we start coding.

My thoughts:

  • https://crates.io/crates/zxcvbn is a nice crate, but it has a lot of dependencies (ie 3rd party code) and so it's difficult to audit, I don't want us to install crates that have so many dependencies because we lose track of what's inside, which could lead us to install viruses by mistake at some point (we've seen this happen recently with the https://kite.com fiasco and the NPM ecosystem)
  • I think having a way to quickly see which passwords are weak would be a good way to go, for instance rooster weak could show a list of weak passwords
  • I'd like to see if we can find a way to integrate with https://haveibeenpwned.com: this is not easy because it is a online service, and sending any password to it is a no-go. There is an archive of hacked passwords that we could use offline but it is 5Gb so that's a no-go as well. I'm not sure what we can do here. Maybe we could create a command that would fetch the 5Gb file only if the user agrees and then check if any of our passwords have been hacked ? I'd do that for my passwords.

install.sh broken on OSX

install.sh is broken on OSX. From what I hear, the problem is with the sha256sum command: it exists on Linux but not on OSX. OSX uses shasum -a 256 instead.

Tasks:

  • on OSX, use shasum -a 256 instead of sha256sum in install.sh
  • install dependencies via brew or port
  • test if it works on OSX
  • test if it works on other linux distros
  • add yourself to the contributors' list in README.md in alphabetical order

To check for OSX, you can use something like this:

if [ "`uname`" = "Darwin" ]; then
    # code for osx, ie shasum -a 256 ...
else
    # code for other OSes, ie sha256sum ...
fi

Thanks a lot for your help ❤️ If you have any questions, just let us know and we'll jump in to help.

Multiple users for same application

If I understand correct, currently there can be only one user:password pair for an application.

Wouldn't it be nice to allow multiple user:password pairs for the same application? For example, for people who have two accounts for some service with different privileges? This could be a potential feature upgrade.

smarter search on delete/change/regenerate/rename/transfer

Whenever you call rooster get <app>, Rooster will try to find app names that match your query with a fuzzy search. This means that rooster get ggl will match Google but also Goggles. When that happens, Rooster allows you to choose whether you want the password for Google or Goggles. This is mostly helpful when you dont remember the exact name of an app.

You can see this in action by running the following commands:

# create a temporary rooster file for tests
rm -f /tmp/test.rooster
export ROOSTER_FILE=/tmp/test.rooster

# add a password for Google
printf "y\ntest\nn\n" | rooster generate Google [email protected]

# add a password for Goggles
printf "test\ntest\n" | rooster generate Goggles [email protected]

# now, get the password for "ggl" as described above
printf "test\n2\n" | rooster get --show ggl

You'll see that at the last command rooster get --show ggl, Rooster will suggest both passwords. Typing in 2, as in the test script above, selects the password for Google.

This is the behavior we should have in all commands that require searching for a password: delete, change, regenerate, rename, transfer.

Tasks:

  • mimic the rooster get behavior for password search on the following commands:
    • delete
    • change
    • regenerate
    • rename
    • transfer
  • add yourself to the contributors' list in README.md in alphabetical order
  • bump up the minor version (x.X.x) in Cargo.toml so I can publish to crates.io

Thanks a lot for your help ❤️ If you have any questions, just let us know and we'll jump in to help.

deduplicate code in "get" command

Some code is duplicated in the code for the rooster get command, specifically this part (lines 65-85) and this part (lines 108-128).

The goal of this issue is to deduplicate this code.

Tasks:

  • in src/commands/get.rs, make a function with the duplicated code
  • replace the duplicated code with the function you just created
  • add yourself to the contributors' list in README.md in alphabetical order
  • bump up the patch version (x.x.X) in Cargo.toml so I can publish to crates.io

Thanks a lot for your help ❤️ If you have any questions, just let us know and we'll jump in to help.

Unable to use/install rooster with latest version of libsodium

I am using MAC M2. I can use rooster before. Today I updated my software and now I can neither use or install rooster.

When I run 'rooster' command, the error message goes like this dyld[41309]: Library not loaded: /opt/homebrew/opt/libsodium/lib/libsodium.23.dylib

And when I reinstall rooster, the error message goes like this

ld: library sodium not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I can see that the rooster trying to access libsodium.23.dylib. However, the latest version of libsodium has libsodium.26.dylib

Could you please fix this?

create a dockerfile

Rooster needs a Dockerfile.

A lot of people seem to be using Dockerfile to run apps in these days, as it's a cross platform way to use apps without having to care much about dependencies.

In addition, the Rooster Docker image will be used for testing Rooster's growing feature-set, automatically and on every commit.

Tasks:

  • create a Dockerfile for Rooster
  • use alpine as the base image
  • make the Rooster file a volume at /data/.passwords.rooster
  • make the Docker image run as an unprivileged user (ie non-root)
  • try running the image with --cap-drop=ALL --network=none and see if it works, if it crashes, figure out what capabilities are required by adding them one by one with --cap-drop=ALL --cap-add=xxx
  • remove build artifacts other than the rooster/rooster-clipboard binaries after the build
  • add yourself to the contributors' list in README.md in alphabetical order

Thanks a lot for your help ❤️ If you have any questions, just let us know and we'll jump in to help.

2fa

I would like to have some sort of multi-factor authentication if possible. Using TOTP would be great. I have no experience implementing that though. I don't know if it possible given the offline nature of Rooster.

Any other suggestions are appreciated.

build errors

By building the program without lacking in any dependencies on MX-Linux Fluxbox 21 get these errors on terminal

cargo install --root /usr rooster

Updating crates.io index

Installing rooster v2.9.0
Compiling libc v0.2.132
Compiling cfg-if v1.0.0
Compiling autocfg v1.1.0
Compiling proc-macro2 v1.0.43
Compiling unicode-ident v1.0.3
Compiling quote v1.0.21
Compiling serde v1.0.144
Compiling cc v1.0.73
Compiling log v0.4.17
Compiling pkg-config v0.3.25
Compiling syn v1.0.99
Compiling memchr v2.5.0
Compiling getrandom v0.1.16
Compiling regex-automata v0.1.10
Compiling openssl v0.10.41
Compiling bitflags v1.3.2
Compiling ryu v1.0.11
Compiling os_str_bytes v6.3.0
Compiling hashbrown v0.12.3
Compiling lazy_static v1.4.0
Compiling foreign-types-shared v0.1.1
Compiling serde_json v1.0.85
Compiling serde_derive v1.0.144
Compiling ppv-lite86 v0.2.16
Compiling itoa v0.4.8
Compiling textwrap v0.15.0
Compiling once_cell v1.14.0
Compiling remove_dir_all v0.5.3
Compiling fastrand v1.8.0
Compiling rooster v2.9.0
Compiling strsim v0.10.0
Compiling termcolor v1.1.3
Compiling itoa v1.0.3
Compiling ansi_term v0.12.1
Compiling byteorder v1.4.3
Compiling rprompt v1.0.5
Compiling indexmap v1.9.1
Compiling openssl-sys v0.9.75
Compiling clap_lex v0.2.4
Compiling foreign-types v0.3.2
Compiling dirs-sys v0.3.7
Compiling atty v0.2.14
Compiling tempfile v3.3.0
Compiling rpassword v5.0.1
Compiling xcb v0.8.2
Compiling csv-core v0.1.10
Compiling bstr v0.2.17
Compiling rand_core v0.5.1
Compiling dirs v3.0.2
Compiling clap v3.2.20
Compiling csv v1.1.6
Compiling rand_chacha v0.2.2
Compiling openssl-macros v0.1.0
Compiling rand v0.7.3
Compiling x11-clipboard v0.3.3
Compiling clipboard v0.5.0
error[E0599]: no variant or associated item named HelpRequired found for enum AppSettings in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:300:38
|
300 | .global_setting(AppSettings::HelpRequired)
| ^^^^^^^^^^^^ variant or associated item not found in AppSettings

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:310:22
|
310 | .about("Forces initializing the file, used in integration tests only"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:319:26
|
319 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:324:26
|
324 | .about("Your username for this account"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:330:26
|
330 | .about("Show the password instead of copying it to the clipboard"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:339:26
|
339 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:345:26
|
345 | .about("Show the password instead of copying it to the clipboard"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:352:22
|
352 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:361:26
|
361 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:366:26
|
366 | .about("Your username for this account"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:372:26
|
372 | .about("Show the password instead of copying it to the clipboard"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:378:26
|
378 | .about("Only use alpha numeric (a-z, A-Z, 0-9) in generated passwords"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:385:26
|
385 | .about("Set a custom length for the generated password")
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:395:26
|
395 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:401:26
|
401 | .about("Show the password instead of copying it to the clipboard"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:407:26
|
407 | .about("Only use alpha numeric (a-z, A-Z, 0-9) in generated passwords"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:414:26
|
414 | .about("Set a custom length for the generated password")
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:424:26
|
424 | .about("The name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:430:26
|
430 | .about("Show the password instead of copying it to the clipboard"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:439:26
|
439 | .about("The current name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:444:26
|
444 | .about("The new name of the app"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:453:26
|
453 | .about("The current name of the app (fuzzy-matched)"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:458:26
|
458 | .about("Your new username for this account"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:472:34
|
472 | ... .about("The path to the file you want to import"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:481:34
|
481 | ... .about("The path to the file you want to import"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:490:34
|
490 | ... .about("The path to the file you want to import"),
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:512:26
|
512 | .about("The log2n parameter")
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:518:26
|
518 | .about("The r parameter")
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:524:26
|
524 | .about("The p parameter")
| ^^^^^ method not found in Arg<'_>

error[E0599]: no method named about found for struct Arg in the current scope
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rooster-2.9.0/src/lib.rs:531:26
|
531 | .about("Disable parameter checks"),
| ^^^^^ method not found in Arg<'_>

For more information about this error, try rustc --explain E0599.
error: could not compile rooster due to 30 previous errors
error: failed to compile rooster v2.9.0, intermediate artifacts can be found at /tmp/cargo-installFynSyz

Add a way to store and retrieve files with Rooster

There is a possible use case for Rooster to store private keys, such as SSH or GPG keys, cryptocurrency account keys. But there is currently no convenient UI to do so. One can copy-paste file contents into rooster add input, but that wouldn't work with multiple lines.

I propose adding a way for users to add passwords from a file path and to get passwords into a file path. This change wouldn't require to create any new entities in the interface or invent new commands. There are at least two ways to do so:

  1. Add an optional command-line flag -p <path> or -f <file> which can be used by different commands as a signal, that they have to interact with a specified file, rather than with stdin or clipboard.
    Suggested usage:

    • rooster add prod-ssh master -f ./id_rsa
    • rooster get prod-ssh -f ./id_rsa.

    This method has a flaw: -f flag is used sometimes as an input, sometimes as an output, therefore it might not always be clear what is does (as in rooster change someapp -f ./pwd for example).

  2. Add an optional positional argument [path] to the commands that accept it.
    Suggested usage:

    • rooster add prod-ssh master ./id_rsa
    • rooster get prod-ssh ./id_rsa.

    Every command will have to have an explanation of this argument's function in the help text.

Same flag or argument could be added to change, generate and regenerate commands as well to ensure that commands act similarly.

Could not install in ubuntu 18 04

Could not install in ubuntu 18 04

   Compiling rooster v2.7.1 (file:///tmp/rooster-2.7.1)
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster0-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster1-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster10-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster11-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster12-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster13-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster14-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster15-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster2-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster3-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster4-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster5-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster6-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster7-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster8-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.rooster9-bd2969b0910c611e4c10efec5863b409.rs.rcgu.o" "-o" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d" "/tmp/rooster-2.7.1/target/release/deps/rooster-23e2c115a743235d.crate.allocator.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs" "-L" "/tmp/rooster-2.7.1/target/release/deps" "-L" "/tmp/rooster-2.7.1/target/release/build/backtrace-sys-35af6ac32f24f884/out/.libs" "-L" "/tmp/rooster-2.7.1/target/release/build/rust-crypto-6d8b2ec129d770b6/out" "-L" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/rooster-2.7.1/target/release/deps/libzxcvbn-614a37b5ee0c6d5c.rlib" "/tmp/rooster-2.7.1/target/release/deps/libquick_error-e09c82b5ecd66f83.rlib" "/tmp/rooster-2.7.1/target/release/deps/libitertools-10ace6d731182608.rlib" "/tmp/rooster-2.7.1/target/release/deps/libeither-efc16737a5a28f09.rlib" "/tmp/rooster-2.7.1/target/release/deps/libfancy_regex-249e45468f28a2ac.rlib" "/tmp/rooster-2.7.1/target/release/deps/libbit_set-10539f8d9cc10540.rlib" "/tmp/rooster-2.7.1/target/release/deps/libbit_vec-9eee8fb45e49dc6c.rlib" "/tmp/rooster-2.7.1/target/release/deps/libregex-c279a8f091ade9cf.rlib" "/tmp/rooster-2.7.1/target/release/deps/libutf8_ranges-7b4e8573c661902f.rlib" "/tmp/rooster-2.7.1/target/release/deps/libregex_syntax-054de8a249b552b3.rlib" "/tmp/rooster-2.7.1/target/release/deps/libthread_local-81882703703bc390.rlib" "/tmp/rooster-2.7.1/target/release/deps/libunreachable-67e686944e678e11.rlib" "/tmp/rooster-2.7.1/target/release/deps/libvoid-9b6684705abad601.rlib" "/tmp/rooster-2.7.1/target/release/deps/libaho_corasick-6b2ae24ef57fcc12.rlib" "/tmp/rooster-2.7.1/target/release/deps/libmemchr-0d1535e246b65428.rlib" "/tmp/rooster-2.7.1/target/release/deps/liblazy_static-3e935b0e32977efc.rlib" "/tmp/rooster-2.7.1/target/release/deps/libshell_escape-5127dfc079549bab.rlib" "/tmp/rooster-2.7.1/target/release/deps/libclipboard-4759c40c02b82879.rlib" "/tmp/rooster-2.7.1/target/release/deps/libx11_clipboard-c20c735f68f15279.rlib" "/tmp/rooster-2.7.1/target/release/deps/libxcb-89e01d1e6dac881e.rlib" "/tmp/rooster-2.7.1/target/release/deps/liblog-6e10b76700dd84cb.rlib" "/tmp/rooster-2.7.1/target/release/deps/liberror_chain-0f77ad9d3edb57ae.rlib" "/tmp/rooster-2.7.1/target/release/deps/libbacktrace-d69f6348a36783df.rlib" "/tmp/rooster-2.7.1/target/release/deps/libbacktrace_sys-4e4a532499daa7c5.rlib" "/tmp/rooster-2.7.1/target/release/deps/librustc_demangle-635b8c8435a383ec.rlib" "/tmp/rooster-2.7.1/target/release/deps/libcfg_if-6f2d9f85a12ab73f.rlib" "/tmp/rooster-2.7.1/target/release/deps/libserde_json-3ba5ac61e9434ce9.rlib" "/tmp/rooster-2.7.1/target/release/deps/libdtoa-9ce4e1f29b04c5a8.rlib" "/tmp/rooster-2.7.1/target/release/deps/libitoa-484e119a5b0ddfaa.rlib" "/tmp/rooster-2.7.1/target/release/deps/libnum_traits-287c946108740372.rlib" "/tmp/rooster-2.7.1/target/release/deps/libserde-2f796c40e322cc8d.rlib" "/tmp/rooster-2.7.1/target/release/deps/libquale-be04633d39f12fcc.rlib" "/tmp/rooster-2.7.1/target/release/deps/libbyteorder-bc27024ac813f832.rlib" "/tmp/rooster-2.7.1/target/release/deps/librpassword-6f1aab5fb706438f.rlib" "/tmp/rooster-2.7.1/target/release/deps/libcrypto-558c5f6b41b8f98e.rlib" "/tmp/rooster-2.7.1/target/release/deps/libtime-5ecf0b1cef4e684c.rlib" "/tmp/rooster-2.7.1/target/release/deps/librustc_serialize-62cc95d6ddf3a7be.rlib" "/tmp/rooster-2.7.1/target/release/deps/librand-2de97ff967cb4fa1.rlib" "/tmp/rooster-2.7.1/target/release/deps/libgetopts-b4c03b8696861173.rlib" "/tmp/rooster-2.7.1/target/release/deps/liblibc-1a7fc5b6bb2a31a1.rlib" "-Wl,--start-group" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-0cce0e0e34e933aa.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-7bed87070cafeede.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_jemalloc-e76963fdf0c94daa.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-8cd3b0417a81fb26.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_system-387bd949d1b36a91.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-453d825a151d7dec.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-5235bf36189564a3.rlib" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-5725e7f9b84bd931.rlib" "-Wl,--end-group" "/home/fabien/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-874d313336916306.rlib" "-Wl,-Bdynamic" "-l" "xcb" "-l" "xcb" "-l" "xcb" "-l" "xcb" "-l" "util" "-l" "dl" "-l" "rt" "-l" "pthread" "-l" "pthread" "-l" "gcc_s" "-l" "c" "-l" "m" "-l" "rt" "-l" "pthread" "-l" "util" "-l" "util"
  = note: /usr/bin/x86_64-linux-gnu-ld: cannot find -lxcb
          /usr/bin/x86_64-linux-gnu-ld: cannot find -lxcb
          /usr/bin/x86_64-linux-gnu-ld: cannot find -lxcb
          /usr/bin/x86_64-linux-gnu-ld: cannot find -lxcb
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: Could not compile `rooster`.

When I mistype my password, the warning message is scarier than necessary

Hello again!

Currently when I rooster get github, for example, and mistype my master password, the output looks like this:

I could not upgrade the Rooster file. This could be because:
- you explicitly told Rooster not to open the file,
- your version of Rooster is outdated,
- your Rooster file is corrupted,
- your master password is wrong.
Try upgrading to the latest version of Rooster.

IMO rooster should know which scenario has occurred, and print just the most accurate thing.

rooster uninstall tries to create password file

If there is no password file stored, Rooster tries to create one when running rooster uninstall.

This should not happen, because rooster uninstall does not need to access the password file.

Failures to copy to clipboard silently fail

When Rooster does not succeed in copying a password to the clipboard, the user is currently not notified of the failure, which can be confusing. @maxjacobson talked about this in #9 and it's an interesting question.

The one thing I'm wondering is whether rooster should notify the user
that something went wrong during the copying so they can attempt to fix
it. What do you think?

Some failures are reported by rust-clipboard, for instance if you are on a platform that rust-clipboard does not support. Other failures are silently ignored.

If you are willing to work on fixing this, feel free to tell us about yourself here and we'll help you get started. The basic idea would be to improve the error handling in src/command/*.rs files, for instance here:

if copy_to_clipboard(password_as_string_clipboard.deref()).is_err() {

@maxjacobson how would you like to have been notified when you encountered this bug ?

Rooster library aka. librooster

Rooster is going to get a companion library called librooster. This library will make Rooster's functionnality accessible without having to use Rooster itself. The end goal is to allow you to build custom software on top of Rooster's functionnality.

For instance, let's say you want to have custom password strength checks on your Rooster file. Well, with librooster, you can create a new Rust project, add just your custom check code and be done. No need to fiddle with Rooster's binary file format.

Or you want to build a web interface for Rooster. With librooster and web development crates, you can get started quickly.

This issue will help track progress on the librooster project.

Feel free to comment below for any suggestions, questions or specific needs you might have! 👍

Build error in Void linux

Hi @conradkdotcom

error: the listed checksum of `/builddir/rooster-2.7.1/vendor/backtrace-sys/src/libbacktrace/config.sub` has changed:
expected: 3b739084e4b409aacf8531f87b57efa602eccdd17b5cddbc4ae1313a2c866f34
actual:   82745ce935695e7984a053c155a64b9ad16ece3a07d931cc90ab3fb28b7221af

What's wrong ?
Regards.

Missing integration tests

  • rooster change
  • rooster add
  • rooster export
  • rooster uninstall

Testing option for the different commands would also be good. Currently, only -s on rooster get is tested. Testing rooster generate -a -l8 and rooster regenerate -a -l8 would be cool! Simple tests are fine. We just need to make sure that basic functionnality works as expected.

Testing error cases is not expected here. See #38 regarding errors.

Are you up for the task?

seccomp

I'd like to introduce measures to protect us from a 3rd party library going rogue and sending data to the internet at some point. Imagine the maintainer for a library has his crates.io account hacked and for some reason we don't realise that an updated crate was hacked, that could mean disaster.

Would you know of any way we could prevent that from happening?

I was thinking of calling seccomp early in Rooster to prevent most syscalls, but a rogue library could hook into Rooster early on and defeat the seccomp rules. Another possibility I see is providing a shell wrapper around Rooster that would call unshare (or similar things on bsd/osx) to remove network access (and other dangerous things).

check if double-build is still necessary for Linux

The current Rooster installers build the code both in release and debug modes, because there used to be a bug in the clipboard library on Linux. This bug has been resolved. So as to speed up install times, we shall build only in release mode.

Tasks:

  • clone the Git repository for Rooster: git clone https://github.com/conradkdotcom/rooster.git
  • build and run Rooster in release mode (ie cargo build --release)
  • add a password: ROOSTER_FILE=/tmp/test.rooster rooster add test test
  • retrieve the password: rooster get test
  • paste the password somewhere to see if the clipboard copy works as expected
  • if clipboard works, replace debug binary with the release binary (see the way we do for the rooster binary)
  • add yourself to the contributors' list in README.md in alphabetical order

If you have any questions, just let us know and we'll jump in to help.

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.