diff --git a/proxy/src/auth/backend/console.rs b/proxy/src/auth/backend/console.rs index 93462086ea..098233c648 100644 --- a/proxy/src/auth/backend/console.rs +++ b/proxy/src/auth/backend/console.rs @@ -92,9 +92,14 @@ impl<'a> Api<'a> { async fn get_auth_info(&self) -> Result { let mut url = self.endpoint.clone(); + let project_name = self + .creds + .project_name + .as_ref() + .map_err(|e| ConsoleAuthError::BadProjectName(e.clone()))?; url.path_segments_mut().push("proxy_get_role_secret"); url.query_pairs_mut() - .append_pair("project", &self.creds.project_name) + .append_pair("project", project_name) .append_pair("role", &self.creds.user); // TODO: use a proper logger @@ -116,9 +121,13 @@ impl<'a> Api<'a> { /// Wake up the compute node and return the corresponding connection info. async fn wake_compute(&self) -> Result { let mut url = self.endpoint.clone(); + let project_name = self + .creds + .project_name + .as_ref() + .map_err(|e| ConsoleAuthError::BadProjectName(e.clone()))?; url.path_segments_mut().push("proxy_wake_compute"); - url.query_pairs_mut() - .append_pair("project", &self.creds.project_name); + url.query_pairs_mut().append_pair("project", project_name); // TODO: use a proper logger println!("cplane request: {url}"); diff --git a/proxy/src/auth/credentials.rs b/proxy/src/auth/credentials.rs index 48dc8542ec..b5312fbe1f 100644 --- a/proxy/src/auth/credentials.rs +++ b/proxy/src/auth/credentials.rs @@ -8,7 +8,7 @@ use std::collections::HashMap; use thiserror::Error; use tokio::io::{AsyncRead, AsyncWrite}; -#[derive(Debug, Error, PartialEq)] +#[derive(Debug, Error, PartialEq, Eq, Clone)] pub enum ClientCredsParseError { #[error("Parameter `{0}` is missing in startup packet.")] MissingKey(&'static str), @@ -44,7 +44,7 @@ impl UserFacingError for ClientCredsParseError {} pub struct ClientCredentials { pub user: String, pub dbname: String, - pub project_name: String, + pub project_name: Result, } impl ClientCredentials { @@ -67,7 +67,7 @@ impl ClientCredentials { let user = get_param("user")?; let dbname = get_param("database")?; let project_name = get_param("project").ok(); - let project_name = get_project_name(sni_data, common_name, project_name.as_deref())?; + let project_name = get_project_name(sni_data, common_name, project_name.as_deref()); Ok(Self { user,