node: Rename systemd Credentials
Because we changed our main domain from radicle.xyz to radicle.dev, we should also change our systemd credential identifiers. Handling is move into a new function, which also checks the old names for backwards compatibility.
This commit is contained in:
parent
06ff36ebc4
commit
cb57e6560f
|
|
@ -13,6 +13,7 @@ Following a domain move of the project, the names of the bootstrap nodes change:
|
||||||
`{iris,rosa}.radicle.{xyz → network}`.
|
`{iris,rosa}.radicle.{xyz → network}`.
|
||||||
Old names in the Radicle configuration will be detected and cause warnings to
|
Old names in the Radicle configuration will be detected and cause warnings to
|
||||||
be printed.
|
be printed.
|
||||||
|
The systemd credential IDs that node uses change: `{xyz → dev}.radicle.node.*`.
|
||||||
|
|
||||||
## New Features
|
## New Features
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,55 @@ enum ExecutionError {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Loads a credential from systemd, if available.
|
||||||
|
///
|
||||||
|
/// The credential ID should only be given as a suffix, as this function will
|
||||||
|
/// try different prefixes for backwards compatibility reasons.
|
||||||
|
///
|
||||||
|
/// The prefix `dev.radicle.node` is the preferred prefix, and should be used
|
||||||
|
/// for new credentials, while the prefix `xyz.radicle.node` is deprecated and
|
||||||
|
/// should be migrated away from. If it is used, a warning is logged.
|
||||||
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
|
fn load_credential(id_suffix: &str) -> Option<String> {
|
||||||
|
const INFIX_NODE: &str = ".radicle.node.";
|
||||||
|
const PREFIX_DEV: &str = "dev";
|
||||||
|
const PREFIX_XYZ: &str = "xyz";
|
||||||
|
|
||||||
|
let id_dev = format!("{}{}{}", PREFIX_DEV, INFIX_NODE, id_suffix);
|
||||||
|
|
||||||
|
let credential = match radicle_systemd::credential::path(&id_dev) {
|
||||||
|
Ok(option) => option,
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!(target: "node", "Failed to obtain path of the passphrase file via systemd credential with '{id_dev}': {err}");
|
||||||
|
None
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let credential = credential.or_else(|| {
|
||||||
|
let id_xyz = format!("{}{}{}", PREFIX_XYZ, INFIX_NODE, id_suffix);
|
||||||
|
match radicle_systemd::credential::path(&id_xyz) {
|
||||||
|
Ok(option) => {
|
||||||
|
log::warn!(target: "node", "Obtain path of the passphrase file via systemd credential with '{id_xyz}'. Using this credential ID is discouraged. Please change the ID to '{id_dev}'.");
|
||||||
|
option
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!(target: "node", "Failed to obtain path of the passphrase file via systemd credential with '{id_xyz}': {err}");
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
credential.and_then(|ref path| {
|
||||||
|
match std::fs::read_to_string(path) {
|
||||||
|
Ok(passphrase) => Some(passphrase),
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!(target: "node", "Failed to read passphrase from '{}': {err}", path.display());
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn execute(options: Options) -> Result<(), ExecutionError> {
|
fn execute(options: Options) -> Result<(), ExecutionError> {
|
||||||
let home = profile::home()?;
|
let home = profile::home()?;
|
||||||
|
|
||||||
|
|
@ -244,39 +293,14 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
|
||||||
let passphrase = None;
|
let passphrase = None;
|
||||||
|
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
let passphrase = passphrase.or_else(|| {
|
let passphrase = passphrase.or_else(|| load_credential("passphrase").map(|s| s.into()));
|
||||||
const ID: &str = "xyz.radicle.node.passphrase";
|
|
||||||
match radicle_systemd::credential::path(ID) {
|
|
||||||
Err(err) => {
|
|
||||||
log::warn!(target: "node", "Failed to obtain path of the passphrase file via systemd credential with '{ID}': {err}");
|
|
||||||
None
|
|
||||||
},
|
|
||||||
Ok(Some(ref path)) => match std::fs::read_to_string(path) {
|
|
||||||
Ok(passphrase) => Some(passphrase.into()),
|
|
||||||
Err(err) => {
|
|
||||||
log::warn!(target: "node", "Failed to read passphrase from '{}': {err}", path.display());
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(None) => None,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let passphrase = passphrase.or_else(profile::env::passphrase);
|
let passphrase = passphrase.or_else(profile::env::passphrase);
|
||||||
|
|
||||||
let secret_path = options.secret;
|
let secret_path = options.secret;
|
||||||
|
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
let secret_path = secret_path.or_else(|| {
|
let secret_path = secret_path.or_else(|| load_credential("secret").map(PathBuf::from));
|
||||||
const ID: &str = "xyz.radicle.node.secret";
|
|
||||||
match radicle_systemd::credential::path(ID) {
|
|
||||||
Err(err) => {
|
|
||||||
log::warn!(target: "node", "Failed to obtain path of the secret key via systemd credential with ID '{ID}': {err}");
|
|
||||||
None
|
|
||||||
},
|
|
||||||
Ok(path) => path
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let secret_path = secret_path
|
let secret_path = secret_path
|
||||||
.or_else(|| config.node.secret.clone())
|
.or_else(|| config.node.secret.clone())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue