From 17f183c40b0920f2c700c561c663d4c377927d53 Mon Sep 17 00:00:00 2001 From: Hannes Laimer Date: Fri, 4 Apr 2025 17:32:06 +0200 Subject: [PATCH] pbs-config: move secret generation into token_shadow so we have only one place where we generate secrets. Signed-off-by: Hannes Laimer --- pbs-config/Cargo.toml | 1 + pbs-config/src/token_shadow.rs | 10 +++++++++- src/api2/access/user.rs | 3 +-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pbs-config/Cargo.toml b/pbs-config/Cargo.toml index 12d0eb3d..28414965 100644 --- a/pbs-config/Cargo.toml +++ b/pbs-config/Cargo.toml @@ -24,6 +24,7 @@ proxmox-section-config.workspace = true proxmox-shared-memory.workspace = true proxmox-sys = { workspace = true, features = [ "acl", "crypt", "timer" ] } proxmox-time.workspace = true +proxmox-uuid.workspace = true pbs-api-types.workspace = true pbs-buildcfg.workspace = true diff --git a/pbs-config/src/token_shadow.rs b/pbs-config/src/token_shadow.rs index 2efb187e..640fabbf 100644 --- a/pbs-config/src/token_shadow.rs +++ b/pbs-config/src/token_shadow.rs @@ -61,8 +61,16 @@ pub fn verify_secret(tokenid: &Authid, secret: &str) -> Result<(), Error> { } } +/// Generates a new secret for the given tokenid / API token, sets it then returns it. +/// The secret is stored as salted hash. +pub fn generate_and_set_secret(tokenid: &Authid) -> Result { + let secret = format!("{:x}", proxmox_uuid::Uuid::generate()); + set_secret(tokenid, &secret)?; + Ok(secret) +} + /// Adds a new entry for the given tokenid / API token secret. The secret is stored as salted hash. -pub fn set_secret(tokenid: &Authid, secret: &str) -> Result<(), Error> { +fn set_secret(tokenid: &Authid, secret: &str) -> Result<(), Error> { if !tokenid.is_token() { bail!("not an API token ID"); } diff --git a/src/api2/access/user.rs b/src/api2/access/user.rs index 031f84ca..8a5afb7b 100644 --- a/src/api2/access/user.rs +++ b/src/api2/access/user.rs @@ -495,8 +495,7 @@ pub fn generate_token( ); } - let secret = format!("{:x}", proxmox_uuid::Uuid::generate()); - token_shadow::set_secret(&tokenid, &secret)?; + let secret = token_shadow::generate_and_set_secret(&tokenid)?; let token = ApiToken { tokenid,