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:
Lorenz Leutgeb 2026-04-27 18:10:52 +02:00
parent 06ff36ebc4
commit cb57e6560f
No known key found for this signature in database
2 changed files with 52 additions and 27 deletions

View File

@ -13,6 +13,7 @@ Following a domain move of the project, the names of the bootstrap nodes change:
`{iris,rosa}.radicle.{xyz → network}`.
Old names in the Radicle configuration will be detected and cause warnings to
be printed.
The systemd credential IDs that node uses change: `{xyz → dev}.radicle.node.*`.
## New Features

View File

@ -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> {
let home = profile::home()?;
@ -244,39 +293,14 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
let passphrase = None;
#[cfg(all(feature = "systemd", target_os = "linux"))]
let passphrase = passphrase.or_else(|| {
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(|| load_credential("passphrase").map(|s| s.into()));
let passphrase = passphrase.or_else(profile::env::passphrase);
let secret_path = options.secret;
#[cfg(all(feature = "systemd", target_os = "linux"))]
let secret_path = secret_path.or_else(|| {
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.or_else(|| load_credential("secret").map(PathBuf::from));
let secret_path = secret_path
.or_else(|| config.node.secret.clone())