Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
274 commits
Select commit Hold shift + click to select a range
76e9556
improve readability
deade1e May 8, 2026
46c0571
split display_short and remove duplicated code
deade1e May 8, 2026
6d50048
dedup notes printing code
deade1e May 8, 2026
271e0d7
add temporary get_field
deade1e May 8, 2026
bada984
split display_field in two parts
deade1e May 8, 2026
1e0a68d
shrink fields variable assignment
deade1e May 9, 2026
8d17949
move DecryptedData and DecryptedField up and rename fields to custom_…
deade1e May 9, 2026
e1c953b
remove duplicated structure DecryptedData and substitute it with db::…
deade1e May 9, 2026
3e4231b
decouple Entry from commands
deade1e May 9, 2026
4981782
small comment to remember commenting about the pinentry on README
deade1e May 9, 2026
7fa8201
decouple fields decrypting from decrypt_cipher fn
deade1e May 9, 2026
1f79cdd
improve decrypt_fields name
deade1e May 9, 2026
ce1fb68
add gdb to shell
deade1e May 9, 2026
1df225b
move decrypt_field down
deade1e May 9, 2026
933c218
partially remove duplicated code inside decrypt_cipher
deade1e May 9, 2026
5662ebb
add some comments and improve naming of decrypt fns
deade1e May 9, 2026
e3505ac
add a nice comment on get_fields
deade1e May 10, 2026
9ff38ef
decouple dynamic_field extraction logic
deade1e May 10, 2026
79a87d0
make FieldType contain the Custom occurrence and just have it From<&s…
deade1e May 10, 2026
a65e2dd
pre-validate totp_rs::Algorithm and improve overall readability
deade1e May 10, 2026
55acedb
dedup folder creation logic
deade1e May 10, 2026
4facca0
move display procedures back into commands.rs. still need dedup and d…
deade1e May 10, 2026
c59878c
improve naming and spacing of display fns
deade1e May 10, 2026
6c034b6
fix missing message in case no field is found in display_entry_field
deade1e May 10, 2026
c212ee7
small comment regarding "short"
deade1e May 10, 2026
9894742
improve naming and comment
deade1e May 10, 2026
bb21e48
move --full printing logic into Display trait impl for Entry
deade1e May 10, 2026
4dce25c
enable copying to clipboard and add some useful comments around
deade1e May 10, 2026
5728b02
remove val_display_or_store
deade1e May 11, 2026
4983b70
make difference between Encrypted and Decrypted entries
deade1e May 11, 2026
416f47b
add some comments and change some structure names
deade1e May 13, 2026
83aa295
rename decrypt custom fields
deade1e May 13, 2026
5c1aeac
abstract entry decryption and move it into db.rs
deade1e May 13, 2026
e208243
specify missing field name. breaks previous output format
deade1e May 18, 2026
36a1ce8
remove warning for unused ft
deade1e May 18, 2026
f6b4118
convert decrypt_search_cipher into impl TryFrom and move some decrypt…
deade1e May 18, 2026
8217cfc
re-use the TryFrom trait impl for SearchEntry even if incurring in sm…
deade1e May 18, 2026
87a0f7e
search is now a subset of list
deade1e May 18, 2026
ac122bf
remove nested if
deade1e May 18, 2026
245b02e
convert search_match to functional
deade1e May 18, 2026
442107f
collect to Vec<&str> instead of Vec<String>
deade1e May 19, 2026
2e4b6cb
remove ListEntry
deade1e May 19, 2026
c5eafbb
move "get fields list" logic into Entry impl and remove two functions…
deade1e May 19, 2026
a08eb7a
move alloc to use of all()
deade1e May 19, 2026
e7dc424
simplify matches_url
deade1e May 19, 2026
8ae1039
move host_port up
deade1e May 19, 2026
7cd310e
remove duplicated code for adding a entry
deade1e May 19, 2026
7a67bd3
move parse_editor up near add/generate/edit
deade1e May 19, 2026
31e7121
Decrypter -> RemoteDecrypter and add a description for it
deade1e May 20, 2026
97fd80c
add DecryptRemote error type
deade1e May 20, 2026
1581c42
remove almost any anyhow::Result from db.rs
deade1e May 20, 2026
0debe2a
remove Ok(()) at the end of some functions
deade1e May 20, 2026
bc79f44
simplify a bit load_db, remove_db and save_db
deade1e May 20, 2026
b82ec0b
move TryFrom impl for SearchEntry near its structure
deade1e May 20, 2026
7e4f2f4
impl TryFrom secret to TotpParams instead of simple fn
deade1e May 20, 2026
15127dd
remove to_string for algo type
deade1e May 20, 2026
8a6955b
remove otpauth parsing code and use totp_rs crate implementation instead
deade1e May 20, 2026
07c1527
add update_token for shared behavior and make contents immutable
deade1e May 20, 2026
bd5b8dc
improve readability
deade1e May 20, 2026
a43e12b
simpler notes parser
deade1e May 20, 2026
a4af570
make Decrypter's entry Option and simplify folder_id calculation
deade1e May 20, 2026
04e032e
simplify access_token and refresh_token management
deade1e May 21, 2026
639067d
implement Encrypter and rework a bit the encryption of optional field…
deade1e May 21, 2026
143a6ab
put type parameter on Decrypter trait
deade1e May 21, 2026
483cdc9
simplify a bit edit flow
deade1e May 21, 2026
3e07bc5
improve readability of fn edit
deade1e May 21, 2026
c66981b
address contents creation ugliness
deade1e May 21, 2026
0305ef5
improve fn edit readability and optimize fn parse_editor
deade1e May 21, 2026
e4f7d4b
cosmetic edits
deade1e May 21, 2026
9a3b570
move history decryption in a separate pub fn and stop using the retur…
deade1e May 21, 2026
0174d17
make find_entry do one thing instead of two
deade1e May 21, 2026
27d7ebc
setting folder_id and org_id on the decrypted entry
deade1e May 21, 2026
ba7a0a1
unify fields handling complexity in few, more compact, APIs
deade1e May 21, 2026
1b3c8ff
improve naming and remove ugly comment
deade1e May 21, 2026
a052042
since the fields() functions return hashmaps, we better use them
deade1e May 21, 2026
715902a
move find_entry fns up
deade1e May 21, 2026
58fbfc0
add small backwards compatibility comment
deade1e May 21, 2026
7f1f758
impl FromStr for Needle
deade1e May 22, 2026
b2644ee
move help msg
deade1e May 22, 2026
5a4db72
condense shared behavior in client actions
deade1e May 22, 2026
63606bb
remove full spec for Arc and Mutex
deade1e May 22, 2026
258f563
dedup some code and pass FindArgs directly to commands
deade1e May 22, 2026
d878e45
split gen_completions in separate fn
deade1e May 22, 2026
f3174ab
split pwgen type calculation
deade1e May 22, 2026
4a5d1c7
Arc and Mutex short
deade1e May 22, 2026
0e42cb1
split some getpin calls from big loops
deade1e May 22, 2026
2be6902
split code getpin
deade1e May 22, 2026
44cd0e5
re-use get_password
deade1e May 22, 2026
07a501f
reduce boilerplate on register()
deade1e May 22, 2026
ca43435
simplify more repeated code
deade1e May 22, 2026
39b1b64
extract two_factor_required from login()
deade1e May 22, 2026
d4a9366
improve two_factor_required readability
deade1e May 22, 2026
80cdcf4
unneeded label
deade1e May 22, 2026
1fdc1f2
create LoginCredentials for repetitive parameters
deade1e May 22, 2026
34be9b7
improve sync() readability and add some TODOs
deade1e May 22, 2026
8ed5e7b
improve sync() readability
deade1e May 22, 2026
c1a2c21
reduce find_ssh_private_key() indentation
deade1e May 22, 2026
061b700
simplify config_email
deade1e May 23, 2026
baaf947
extract decrypt entry key to specific fn
deade1e May 23, 2026
3600dae
extract password reprompt behavior from decrypt_cipher
deade1e May 23, 2026
7709ff5
remove superfluous map_err and add some spacing
deade1e May 23, 2026
72f07d9
split getpint fn even further
deade1e May 24, 2026
fa88965
create fn apply_login_credentials for shared behavior
deade1e May 24, 2026
799e81d
LoginCredentials -> SessionParameters
deade1e May 24, 2026
2315418
group crypto parameters into a separate struct
deade1e May 24, 2026
82a4a2c
group db's crypto parameters
deade1e May 24, 2026
1f50337
split get host code into separate fn
deade1e May 24, 2026
c6c1776
add a note regarding output compatibility
deade1e May 24, 2026
7cde5dd
add update_access_token method in db impl
deade1e May 25, 2026
1a36437
remove superfluous pub and clone
deade1e May 25, 2026
0953db8
"use" common prefixes and "expect" instead of simply unwrapping
deade1e May 25, 2026
e2eb213
rename notifications::Handler to notifications::NotificationsHandler
deade1e May 25, 2026
25196c4
remove tokio_stream::wrappers prefix
deade1e May 25, 2026
7e8fc31
remove tokio::sync::mpsc prefix
deade1e May 25, 2026
26d7c0b
remove unwrap()s in dirs.rs
deade1e May 25, 2026
cfeafd6
remove unwrap()s in edit.rs
deade1e May 25, 2026
98905d3
split editor logic into two separate fns
deade1e May 25, 2026
3014163
further split editor logic
deade1e May 25, 2026
5bd238b
simplify get_editor_cmd_args fn
deade1e May 25, 2026
eac1533
simplify get_editor_cmd_args even further
deade1e May 25, 2026
c681737
simplify get_editor_metachars
deade1e May 25, 2026
5688ac1
passing editor as reference
deade1e May 25, 2026
9bcd863
simplify edit fn
deade1e May 25, 2026
3278594
replace match with map_err
deade1e May 25, 2026
f6fddd1
improve some naming, comment and remove a match in favor of map_err
deade1e May 25, 2026
a517e93
simplify main
deade1e May 25, 2026
3532e4c
bugfix Display trait println instead writeln
deade1e May 25, 2026
c9dbf10
resolve almost every clippy warning
deade1e May 25, 2026
9460910
to_entry consumes the self instead of continuously clone its attributes
deade1e May 26, 2026
5db5e67
group all status checking code under two methods
deade1e May 26, 2026
167bf58
group status checking code even further
deade1e May 26, 2026
e8ee4ca
improve status matching readability
deade1e May 26, 2026
87910f8
remove superfluous response checking code
deade1e May 26, 2026
6e559d1
use error_for_status instead of custom method and create a From<reqwe…
deade1e May 26, 2026
f99b758
extract connect error res checking into a separate fn
deade1e May 26, 2026
e1f5d4d
make ConnectTokenReq have references instead of owned strings
deade1e May 26, 2026
f17d718
merge Visitors into one impl
deade1e May 26, 2026
85789a2
move some structs around
deade1e May 26, 2026
1870f9b
using From and TryFrom traits for EntryData <-> CipherLogin conversion
deade1e May 26, 2026
7eff480
implement ugly TryFrom and From for other EntryData variants
deade1e May 26, 2026
342a352
remove crate::db prefix for EntryData
deade1e May 26, 2026
cd18424
make entrydatawire less ugly but still ugly
deade1e May 26, 2026
9601087
impl From for dynamic fields
deade1e May 26, 2026
46987f3
move structs around
deade1e May 26, 2026
3d21435
to_entry -> into_entry
deade1e May 26, 2026
a8816c8
avoid allocation for client_secret and client_id
deade1e May 26, 2026
12e943e
using From impl for DynamicField
deade1e May 26, 2026
2a04a54
use references in CiphersPostReq and partially in CipherPutReq
deade1e May 26, 2026
6ce2ad8
use full references in CiphersPutReq
deade1e May 26, 2026
abfd295
impl some From for HistoryEntry and SyncResPasswordHistory
deade1e May 26, 2026
f084a7e
use Into::into directly
deade1e May 26, 2026
bc0eca9
rename to SyncResHistoryEntry for consistency with db
deade1e May 26, 2026
e8920b7
delete CiphersPutReqWhatever duplicate struct
deade1e May 26, 2026
7cfdf3d
split struct Client and other fns / logic into separate file
deade1e May 26, 2026
627a292
improve readability of password history conversion
deade1e May 26, 2026
c9c1106
group config's urls resolving logic into one fn and add a line in cli…
deade1e May 27, 2026
25816d6
move two constants near their users
deade1e May 27, 2026
8c5c7d8
move encrypter/decrypter definitions up
deade1e May 27, 2026
cf77f24
fix broken protocol version calculation
deade1e May 28, 2026
7ab7b6d
remove duplicate errors since tokio::io::Error == std::io::Error
deade1e May 28, 2026
3be2a95
load config only at startup and setup for state interior mutability p…
deade1e May 28, 2026
4f184aa
move last_environment inside the inner state
deade1e May 28, 2026
c9d032b
move keys inside the inner state
deade1e May 28, 2026
5733286
move notifications_handler inside the inner state
deade1e May 28, 2026
ed64120
move timeouts inside the inner state
deade1e May 28, 2026
4ea4bef
move master_password_reprompt into the inner state
deade1e May 28, 2026
001f1f5
move clipboard inside inner state
deade1e May 28, 2026
ca07cb2
remove Arc<Mutex<>> from every State
deade1e May 28, 2026
ea2905f
make set keys operations atomic
deade1e May 28, 2026
84bdf1e
make nearly all members of State private
deade1e May 29, 2026
969aa11
remove timeouts, streams in favor of tokio::select! and other stuff
deade1e May 29, 2026
772a7b5
Revert "group config's urls resolving logic into one fn and add a lin…
deade1e May 29, 2026
c7e7bd6
group url resolving into one fn
deade1e May 29, 2026
c5e7155
improve url resolve readability
deade1e May 29, 2026
fe19c0d
add small TODO regardint notifications reading stuff
deade1e May 29, 2026
fa16206
Vec -> LockedVec
deade1e May 30, 2026
abcf27e
use impl Zeroize from ArrayVec instead of the Deref u8 one
deade1e May 30, 2026
d1adbe3
remove arrayvec dependency in favor of internal impl
deade1e May 30, 2026
64d9501
remove tokio-stream
deade1e May 30, 2026
fb2d2d3
refactor notifications to use broadcast instead of complicated sender…
deade1e May 30, 2026
f202288
split subscribe to websocket logic into a separate fn
deade1e May 30, 2026
6c16ed5
split tokio::select content into multiple fn and add some spacing
deade1e May 30, 2026
0952aa6
move up the getting of parameters and simplify finding the correct k
deade1e May 30, 2026
2995a95
improve readability of ssh agent
deade1e May 30, 2026
bfe131d
slowly porting every logic into Agent "object"
deade1e May 30, 2026
4e43805
port encrypt and decrypt into Agent
deade1e May 30, 2026
d8b397e
remove version action
deade1e May 30, 2026
e3fb2c5
port a lot of stuff into Agent
deade1e May 30, 2026
7e8108f
put getpin inside Agent
deade1e May 30, 2026
5ee9cb2
first version of modernized pinentry
deade1e May 31, 2026
e5adcce
implement missing Pinentry features and remove old code
deade1e May 31, 2026
7a61d80
simplify percent_decode and write tests
deade1e May 31, 2026
f249eaa
remove warnings
deade1e May 31, 2026
19889bc
extract args calculation from spawn and return &OsStr HashMap from en…
deade1e May 31, 2026
71bb132
improve Pinentry struct to ease future test development
deade1e May 31, 2026
ed073c6
change error type returned on unavailable stdin
deade1e May 31, 2026
04fffe2
extract read_line and make a small test
deade1e May 31, 2026
4933125
make client partially async and remove duplicated logic for db
deade1e May 31, 2026
f17c555
make client async
deade1e May 31, 2026
ab6fa47
avoid heap allocation when refreshing token asyncrhonously
deade1e May 31, 2026
f356295
add print debug for ssh key signature requests
deade1e Jun 1, 2026
364fcac
format and remove extra destructuring
deade1e Jun 1, 2026
fbd091d
move decrypt_cipher up
deade1e Jun 1, 2026
056c3b3
divide getting priv ssh key fn in two pieces and remove respond_encry…
deade1e Jun 1, 2026
41336ce
cache db in State and save 90% of disk reads
deade1e Jun 1, 2026
2c1afaf
extract unlocking of the state into a single fn
deade1e Jun 1, 2026
1648efe
merge get_client_id and get_client_secret
deade1e Jun 1, 2026
fce6316
add trace of common actions
deade1e Jun 2, 2026
d240dfc
Remove useless print debug
deade1e Jun 2, 2026
49ab7c6
add a bunch of trace! in sync
deade1e Jun 2, 2026
5a61d3b
shorten types
deade1e Jun 2, 2026
c30243f
add some trace in maybe reprompt
deade1e Jun 2, 2026
a8e068d
add conversions EntryData -> CipherData and CipherData -> EntryData
deade1e Jun 2, 2026
df8bab5
make two_factor_required to one thing: to get session params
deade1e Jun 2, 2026
2c2333b
remove EntryDataWire struct in favor of CipherData
deade1e Jun 2, 2026
9245bbb
go back using owned structures for Post and Put request. adjust alias…
deade1e Jun 2, 2026
9b88458
use let else instead of if let
deade1e Jun 3, 2026
e02fc9e
add three log::trace for deadlines and end of the loop
deade1e Jun 5, 2026
c2ab721
add print debug for identities request
deade1e Jun 5, 2026
2b81cdf
split get_ssh_public_keys to avoid mutex/rwlock contention
deade1e Jun 5, 2026
4843435
improve readability of handle_request method and lock timeout operati…
deade1e Jun 5, 2026
5860d38
working on README
deade1e Jun 5, 2026
46ebe7b
remove async version of config loading
deade1e Jun 6, 2026
87c3ae8
move State into Agent and add a note for bug
deade1e Jun 6, 2026
8fea98c
line
deade1e Jun 7, 2026
a57130a
add a bunch of log::trace and release db guard to fix notifications bug
deade1e Jun 7, 2026
7267c18
fix missing re-evaluation of deadlines
deade1e Jun 7, 2026
8d5f4cd
update CHANGELOG.md
deade1e Jun 7, 2026
61d3e1e
avoid some clones in error conversion
deade1e Jun 7, 2026
d992731
error_model -> model
deade1e Jun 7, 2026
c03b221
add specific error for unavailability of crypto parameters in db
deade1e Jun 7, 2026
67d8f50
add specific error for unavailability of session parameters
deade1e Jun 7, 2026
2e534c4
re-use error for missing config email
deade1e Jun 7, 2026
2f390cb
add specific error for unavailability of protected keys in db and avo…
deade1e Jun 7, 2026
c258925
remove duplicated retry logic by implementing with_retry
deade1e Jun 7, 2026
daad9fd
remove superfluous error context
deade1e Jun 7, 2026
48f4a78
remove superfluous deserializer impl
deade1e Jun 7, 2026
df2c731
add a comment for a security weakness
deade1e Jun 7, 2026
7a57d48
Merge branch 'refactor'
deade1e Jun 10, 2026
febc2d0
trigger workflow
deade1e Jun 10, 2026
80d73a8
fix clippy warnings
deade1e Jun 10, 2026
d0e5ad0
move guard up to make clippy happy
deade1e Jun 10, 2026
1baf275
add cargo-deny
deade1e Jun 10, 2026
adb7931
update dependencies to fix vulns
deade1e Jun 10, 2026
09e0741
bump version to 1.16.0-rc1
deade1e Jun 10, 2026
4df9835
move Needle into search.rs
deade1e Jun 10, 2026
4f1ed4f
check HTTP status before parsing token refresh response
soraxas Jun 16, 2026
94bbe01
persist rotated refresh token from Bitwarden token exchange
soraxas Jun 16, 2026
9a967be
surface error when it happens
soraxas Jul 9, 2026
5e1abcc
Decrypt folder names with user key
soraxas Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: tests

on:
push:
branches: [main]
Expand Down
2 changes: 1 addition & 1 deletion .rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
edition = "2021"
max_width = 78
newline_style = "Unix"
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
# Changelog

## [Unreleased]

## Added

* Added `confirm_ssh` configuration option. When set to `true`, the agent will
ask for pinentry confirmation before every SSH signature request.
* Added Nix flake support (`flake.nix`, `flake.lock`, `shell.nix`).

## Changed

* The `rbw` client and agent are now fully async internally.
* The local database is now cached in the agent's state, reducing disk reads.
* Notifications were refactored to use `tokio::sync::broadcast` instead of a
manual vector of senders.
* The `Field` enum was replaced by `rbw::db::FieldType`, which now supports a
`Custom(String)` variant. Unknown field names given to `rbw get --field` are
now treated as custom field lookups instead of returning an error.
* Removed unused dependencies: `arrayvec`, `is-terminal`, `tokio-stream`.
* `.rustfmt.toml`: removed `max_width = 78`, added `newline_style = "Unix"`.
* Removed the extensive clippy lint configuration from `Cargo.toml`.
* `dirs.rs` helpers now return `Result` instead of potentially panicking.
* `timeout.rs` was removed in favor of a simple Instant based deadline
mechanism.

## Fixed

* Fixed broken protocol version calculation where minor and patch components
were incorrectly scaled by 1_000_000.
* Various error types and messages have changed; backwards compatibility of
error text is not guaranteed.

## [1.15.0] - 2025-12-31

## Added
Expand Down
67 changes: 16 additions & 51 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 2 additions & 27 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rbw"
version = "1.15.0"
version = "1.16.0-rc1"
authors = ["Jesse Luehrs <doy@tozt.net>"]
edition = "2021"
rust-version = "1.82.0"
Expand All @@ -17,7 +17,6 @@ include = ["src/**/*", "bin/**/*", "LICENSE", "README.md", "CHANGELOG.md"]
aes = "0.8.4"
anyhow = "1.0.100"
argon2 = "0.5.3"
arrayvec = "0.7.6"
axum = "0.8.8"
base32 = "0.5.1"
base64 = "0.22.1"
Expand All @@ -36,7 +35,6 @@ futures-util = "0.3.31"
hkdf = "0.12.4"
hmac = { version = "0.12.1", features = ["std"] }
humantime = "2.3.0"
is-terminal = "0.4.17"
libc = "0.2.178"
log = "0.4.29"
open = "5.3.3"
Expand Down Expand Up @@ -72,13 +70,12 @@ tempfile = "3.24.0"
terminal_size = "0.4.3"
textwrap = "0.16.2"
thiserror = "2.0.17"
tokio-stream = { version = "0.1.17", features = ["net"] }
tokio-tungstenite = { version = "0.28", features = [
"rustls-tls-native-roots",
"url",
] }
tokio = { version = "1.48.0", features = ["full"] }
totp-rs = { version = "5.7.0", features = ["steam"] }
totp-rs = { version = "5.7.0", features = ["steam", "otpauth"] }
url = "2.5.7"
urlencoding = "2.1.3"
uuid = { version = "1.19.0", features = ["v4"] }
Expand All @@ -92,28 +89,6 @@ arboard = { version = "3.6.1", default-features = false, features = [
default = ["clipboard"]
clipboard = ["arboard"]

[lints.clippy]
cargo = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
as_conversions = "warn"
get_unwrap = "warn"
cognitive_complexity = "allow"
missing_const_for_fn = "allow"
similar_names = "allow"
struct_excessive_bools = "allow"
fn_params_excessive_bools = "allow"
too_many_arguments = "allow"
too_many_lines = "allow"
type_complexity = "allow"
multiple_crate_versions = "allow"
large_enum_variant = "allow"
must_use_candidate = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
significant_drop_tightening = "allow"
struct_field_names = "allow"

[package.metadata.deb]
depends = "pinentry"
license-file = ["LICENSE"]
Expand Down
48 changes: 43 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,49 @@ similar to the way that `ssh-agent` or `gpg-agent` work. This allows the client
to be used in a much simpler way, with the background agent taking care of
maintaining the necessary state.

## Fork

Since the original developer of this project has not been active in the last
months, I took the project and heavily refactored it.

There were all the signs of a project that grew over time without chance to
receive some maintenance.

Around 20%-30% of program's logic was duplicated. There was no clear separation
of concerns, etc. Now it's not perfect of course but I will work towards making
it easily auditable and maintainable.

I don't blame the author as this is all free time and unpaid labor, and on top
of that, he actually provided the community with a great tool.

NOTE: This fork has not 100% error messages backwards compatibility. Some of
them have changed.

I couldn't do anything about it, as it was way easier to do things this way.
However it should not impact any actual tool built on rbw, but beware, the bug
is behind the corner!

Oh and there also is my confirm ssh feature baked in the code, which is totally
optional.

## Maintenance

I consider `rbw` to be essentially feature-complete for me at this point. While
I still use it on a daily basis, and will continue to fix regressions as they
occur, I am unlikely to spend time implementing new features on my own. If you
would like to see new functionality in `rbw`, I am more than happy to review
and merge pull requests implementing those features.
I DO NOT consider rbw to be essentially feature-complete, BUT in this first
phase I will accept PRs that fix bugs or enhance code readability.

The first big elephant in the room to address is the fact that the client
should read no DB and therefore all search/get/etc. operations must be
performed by the daemon, while the protocol must provide such "opcodes" to do
it.

## Before continuing

The rest of this README is untouched from the original's, so if you install rbw
from repositories, you will not install this version but the older one. Same
for the listed tools.

I am working to get this new version in the repositories, but it's not
immediate.

## Installation

Expand Down Expand Up @@ -96,6 +132,8 @@ configuration options:
* `pinentry`: The
[pinentry](https://www.gnupg.org/related_software/pinentry/index.html)
executable to use. Defaults to `pinentry`.
* `confirm_ssh`: If set to `true` will ask for confirmation for SSH signature
requests. If unset defaults to not asking.

### Profiles

Expand Down
27 changes: 27 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading