Normalize PBS credential fields before verification The credential verification path did not normalize user and token fields after parsing the repository string, which could lead to inconsistent authentication handling for certain repository formats. Signed-off-by: Florian Paul Azim (gyptazy) Hoberg --- diff --git a/crates/backuppilot-core/src/pbs.rs b/crates/backuppilot-core/src/pbs.rs index ef80f3e..7241511 100644 --- a/crates/backuppilot-core/src/pbs.rs +++ b/crates/backuppilot-core/src/pbs.rs @@ -14,7 +14,7 @@ use crate::error::{CoreError, Result}; use crate::paths::{ profile_backup_client_config, resolve_pbs_client_binary, runtime_profile_config_dir, }; -use crate::pbs_repository::{PbsRepositoryParts, PBS_AUTH_ID_MAX_LEN}; +use crate::pbs_repository::{normalize_credential_fields, PbsRepositoryParts, PBS_AUTH_ID_MAX_LEN}; use crate::profile::{BackupProfile, CredentialVerifyResult}; const BACKUP_TIMEOUT: Duration = Duration::from_secs(86_400); @@ -162,7 +162,7 @@ impl PbsClient { namespace: Option<&str>, server_fingerprint: Option<&str>, ) -> CredentialVerifyResult { - let parts = match PbsRepositoryParts::parse(repository) { + let mut parts = match PbsRepositoryParts::parse(repository) { Ok(p) => p, Err(err) => { return CredentialVerifyResult { @@ -171,6 +171,9 @@ impl PbsClient { }; } }; + let (user, token) = normalize_credential_fields(&parts.user, &parts.token); + parts.user = user; + parts.token = token; if !Self::is_available().await { return CredentialVerifyResult { @@ -811,4 +814,3 @@ async fn tcp_reachable(addr: &str) -> bool { Ok(Ok(_)) ) } - diff --git a/crates/backuppilot-core/src/pbs_repository.rs b/crates/backuppilot-core/src/pbs_repository.rs index 5cfb8fe..fa5e77f 100644 --- a/crates/backuppilot-core/src/pbs_repository.rs +++ b/crates/backuppilot-core/src/pbs_repository.rs @@ -726,7 +726,14 @@ mod tests { token, datastore: "DS01".into(), }; - assert_eq!(parts.pbs_auth_id().as_deref(), Some("pbs-ch-01@pbs!158-Servers")); + assert_eq!( + parts.pbs_auth_id().as_deref(), + Some("pbs-ch-01@pbs!158-Servers") + ); + assert_eq!( + parts.auth_id_candidates(), + vec![("auth-id", "pbs-ch-01@pbs!158-Servers".to_string())] + ); } #[test]