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>,
)
| 115 | /// Useful for commands that also need to resolve org-scoped state (e.g. |
| 116 | /// per-org default workspace lookup). Avoids resolving the org twice. |
| 117 | pub async fn build_client_with_org( |
| 118 | org_override: Option<&str>, |
| 119 | server_override: Option<&str>, |
| 120 | ) -> CliResult<(StorageClient, String)> { |
| 121 | let config = GlobalConfig::load() |
| 122 | .map_err(|e| CliError::Internal(anyhow::anyhow!("Failed to load global config: {}", e)))?; |
| 123 | |
| 124 | // Resolve the server profile (named or legacy). |
| 125 | let server = config |
| 126 | .resolve_server(server_override) |
| 127 | .map_err(|e| CliError::Internal(anyhow::anyhow!("{}", e)))? |
| 128 | .0; |
| 129 | |
| 130 | let server_url = server.url.clone().ok_or_else(|| { |
| 131 | let hint = if let Some(name) = server_override { |
| 132 | format!("Server profile '{}' has no URL configured.", name) |
| 133 | } else { |
| 134 | "Server not configured. Run 'atomic identity register <server-url>' first.".to_string() |
| 135 | }; |
| 136 | CliError::Internal(anyhow::anyhow!("{}", hint)) |
| 137 | })?; |
| 138 | |
| 139 | let org_slug = resolve_org_with_server(org_override, server)?; |
| 140 | |
| 141 | let base_url = server.org_base_url(&org_slug).ok_or_else(|| { |
| 142 | CliError::Internal(anyhow::anyhow!( |
| 143 | "Could not build org URL from server config" |
| 144 | )) |
| 145 | })?; |
| 146 | |
| 147 | // Resolve identity: per-server override → global default. |
| 148 | let identity = resolve_identity_for_server(server)?; |
| 149 | |
| 150 | // Log in against the server apex for a JWT bearer token. |
| 151 | let bearer_token = crate::commands::token::get_token(&server_url, &identity).await?; |
| 152 | |
| 153 | let client = StorageClient::new(&base_url, &org_slug, &bearer_token).map_err(|e| { |
| 154 | CliError::Internal(anyhow::anyhow!("Failed to create storage client: {}", e)) |
| 155 | })?; |
| 156 | |
| 157 | Ok((client, org_slug)) |
| 158 | } |
| 159 | |
| 160 | /// Resolve the identity to authenticate as for a given server profile. |
| 161 | /// |
no test coverage detected