mirror of
https://github.com/openai/codex.git
synced 2026-10-31 19:28:49 +00:00
## What changed - Add loaders that select `config_server` when configured and otherwise use the existing ChatGPT bundle source. Fetch custom bundles from `<base_url>/codex/config/bundle` without redirects or request logging. - Support optional OAuth sessions without interactive login during bundle fetches, recover credentials after a `401`, and scope cached bundles to the endpoint and authorization identity. - Restrict bootstrap network access to configuration and OAuth endpoints using local administrator rules when available. - Return generic bundle validation errors so invalid TOML, requirements, and provider settings do not expose configuration contents. ## Testing Add tests for missing configuration-server sign-in, replacement OAuth credentials, endpoint-specific cache reuse, and validation errors that omit sensitive values while preserving cached bundles. GitOrigin-RevId: 56590a9e66340540666ca21590bef46c495e0e33
49 lines
1.7 KiB
Rust
49 lines
1.7 KiB
Rust
use codex_config::AbsolutePathBuf;
|
|
use codex_config::CloudConfigBundle;
|
|
use codex_config::CloudConfigBundleLayers;
|
|
use codex_config::CloudConfigBundleLoadError;
|
|
use codex_config::CloudConfigBundleLoadErrorCode;
|
|
use codex_config::compose_requirements;
|
|
use codex_config::config_toml::validate_model_providers;
|
|
|
|
pub(crate) fn validate_bundle(
|
|
bundle: &CloudConfigBundle,
|
|
base_dir: &AbsolutePathBuf,
|
|
) -> Result<(), CloudConfigBundleLoadError> {
|
|
let bundle_layers =
|
|
CloudConfigBundleLayers::from_bundle(bundle.clone(), base_dir).map_err(|_| {
|
|
CloudConfigBundleLoadError::new(
|
|
CloudConfigBundleLoadErrorCode::InvalidBundle,
|
|
/*status_code*/ None,
|
|
"invalid cloud config bundle: invalid TOML",
|
|
)
|
|
})?;
|
|
let CloudConfigBundleLayers {
|
|
enterprise_managed_config: _,
|
|
enterprise_managed_requirements,
|
|
} = bundle_layers;
|
|
|
|
let requirements = compose_requirements(enterprise_managed_requirements).map_err(|_| {
|
|
CloudConfigBundleLoadError::new(
|
|
CloudConfigBundleLoadErrorCode::InvalidBundle,
|
|
/*status_code*/ None,
|
|
"invalid cloud config bundle: invalid requirements",
|
|
)
|
|
})?;
|
|
if let Some(providers) = requirements.and_then(|requirements| requirements.model_providers) {
|
|
validate_model_providers(&providers).map_err(|_| {
|
|
CloudConfigBundleLoadError::new(
|
|
CloudConfigBundleLoadErrorCode::InvalidBundle,
|
|
/*status_code*/ None,
|
|
"invalid cloud config bundle: invalid model provider configuration",
|
|
)
|
|
})?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
#[path = "validation_tests.rs"]
|
|
mod tests;
|