Build a [`StorageClient`] and return the resolved org slug alongside it. Useful for commands that also need to resolve org-scoped state (e.g. per-org default workspace lookup). Avoids resolving the org twice.
(
org_override: Option<&str>,
server_override: Option<&str>,
)
| 187 | /// Useful for commands that also need to resolve org-scoped state (e.g. |
| 188 | /// per-org default workspace lookup). Avoids resolving the org twice. |
| 189 | pub async fn build_client_with_org( |
| 190 | org_override: Option<&str>, |
| 191 | server_override: Option<&str>, |
| 192 | ) -> CliResult<(StorageClient, String)> { |
| 193 | let config = GlobalConfig::load() |
| 194 | .map_err(|e| CliError::Internal(anyhow::anyhow!("Failed to load global config: {}", e)))?; |
| 195 | |
| 196 | // Resolve the server profile (named or legacy). |
| 197 | let server = config |
| 198 | .resolve_server(server_override) |
| 199 | .map_err(|e| CliError::Internal(anyhow::anyhow!("{}", e)))? |
| 200 | .0; |
| 201 | |
| 202 | let server_url = server.url.clone().ok_or_else(|| { |
| 203 | let hint = if let Some(name) = server_override { |
| 204 | format!("Server profile '{}' has no URL configured.", name) |
| 205 | } else { |
| 206 | "Server not configured. Run 'atomic identity register <server-url>' first.".to_string() |
| 207 | }; |
| 208 | CliError::Internal(anyhow::anyhow!("{}", hint)) |
| 209 | })?; |
| 210 | |
| 211 | let org_slug = resolve_org_with_server(org_override, server)?; |
| 212 | |
| 213 | let base_url = server.org_base_url(&org_slug).ok_or_else(|| { |
| 214 | CliError::Internal(anyhow::anyhow!( |
| 215 | "Could not build org URL from server config" |
| 216 | )) |
| 217 | })?; |
| 218 | |
| 219 | // Resolve identity: per-server override → global default. |
| 220 | let identity = resolve_identity_for_server(server)?; |
| 221 | |
| 222 | // Log in against the server apex for a JWT bearer token. |
| 223 | let bearer_token = crate::commands::token::get_token(&server_url, &identity).await?; |
| 224 | |
| 225 | let client = StorageClient::new(&base_url, &org_slug, &bearer_token).map_err(|e| { |
| 226 | CliError::Internal(anyhow::anyhow!("Failed to create storage client: {}", e)) |
| 227 | })?; |
| 228 | |
| 229 | Ok((client, org_slug)) |
| 230 | } |
| 231 | |
| 232 | /// Resolve the identity to authenticate as for a given server profile. |
| 233 | /// |
no test coverage detected