node: Make location of secret key configurable
With this change, the location of the secret SSH key can be configured
through ${RAD_HOME}/config.json so that the node key does not have to
be placed under ${RAD_HOME}/keys anymore.
Further, there is now an option to override config.json directly when
executing radicle-node via the command line argument
--secret.
The primary motivation is more flexible deployments, for example leveraging external secret management solutions, like https://systemd.io/CREDENTIALS/.
In order to get this implemented, I had to make modifications
to the keystore in radicle-ssh.
7 files changed
+314
-52
9e1d6b1f
→
22720e71
modified crates/radicle-cli/examples/rad-key-mismatch.md
@@ -2,5 +2,5 @@ This test assumes that one of the two keys in `$RAD_HOME/keys` was swapped so th
|
|
|
|
|
|
| - | |
| + | |
|
|
|
modified crates/radicle-cli/src/commands/auth.rs
@@ -240,7 +240,7 @@ pub fn register(
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified crates/radicle-crypto/src/ssh/keystore.rs
@@ -22,8 +22,8 @@ pub enum Error {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -38,28 +38,52 @@ impl Error {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -71,7 +95,7 @@ impl Keystore {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -87,13 +111,25 @@ impl Keystore {
|
|
|
|
|
|
| - | |
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -103,27 +139,43 @@ impl Keystore {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -132,12 +184,13 @@ impl Keystore {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -155,12 +208,11 @@ impl Keystore {
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -168,8 +220,7 @@ impl Keystore {
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -183,8 +234,8 @@ pub enum MemorySignerError {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -260,9 +311,6 @@ impl MemorySigner {
|
|
|
|
|
|
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -272,17 +320,37 @@ impl MemorySigner {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -320,7 +388,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -346,7 +414,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -359,7 +427,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
added crates/radicle-node/src/fingerprint.rs
@@ -0,0 +1,134 @@
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
modified crates/radicle-node/src/lib.rs
@@ -7,6 +7,7 @@ use std::str::FromStr;
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified crates/radicle-node/src/main.rs
@@ -11,6 +11,7 @@ use radicle::node::device::Device;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -27,6 +28,8 @@ Options
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -100,6 +103,7 @@ struct LogOptions {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -112,6 +116,7 @@ fn parse_options() -> Result<Options, lexopt::Error> {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -125,6 +130,9 @@ fn parse_options() -> Result<Options, lexopt::Error> {
|
|
|
|
|
|
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -164,6 +172,7 @@ fn parse_options() -> Result<Options, lexopt::Error> {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -181,9 +190,21 @@ enum ExecutionError {
|
|
|
|
|
|
| - | |
| - | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -215,9 +236,38 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
|
|
|
|
|
|
| - | |
| - | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified crates/radicle/src/node/config.rs
@@ -459,6 +459,14 @@ pub struct Config {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -485,6 +493,7 @@ impl Config {
|
|
|
|
|
|
| + | |
|
|
|
|
|