mirror of
https://github.com/openai/codex.git
synced 2026-11-02 19:43:24 +00:00
Honor system proxy settings for remote plugins (#34509)
## Why Remote plugin requests did not use Codex's effective outbound proxy policy, so they could bypass configured system proxy and PAC routing. ## What changed - Route remote plugin catalog, mutation, sharing, upload, and bundle download requests through the configured route-aware HTTP client. - Select routes using the complete request URL, including encoded query parameters and backend-provided signed upload or download URLs. - Preserve standard Codex headers and suppress diagnostics for URLs or headers that may contain credentials. ## Testing Add coverage for route selection of catalog queries, workspace plugin uploads, and backend-provided bundle download URLs. GitOrigin-RevId: 106936659e21decf145b6ab4d4be84992e386861
This commit is contained in:
@@ -1,5 +1,50 @@
|
||||
use super::*;
|
||||
use crate::test_support::recorded_http_client_urls;
|
||||
use crate::test_support::recording_remote_plugin_service_config;
|
||||
use pretty_assertions::assert_eq;
|
||||
use wiremock::Mock;
|
||||
use wiremock::MockServer;
|
||||
use wiremock::ResponseTemplate;
|
||||
use wiremock::matchers::header_exists;
|
||||
use wiremock::matchers::method;
|
||||
use wiremock::matchers::path;
|
||||
|
||||
#[tokio::test]
|
||||
async fn remote_plugin_list_routes_the_complete_query_url() {
|
||||
let server = MockServer::start().await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/backend-api/ps/plugins/list"))
|
||||
.and(header_exists("user-agent"))
|
||||
.and(header_exists("originator"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"plugins": [],
|
||||
"pagination": {"next_page_token": null},
|
||||
})))
|
||||
.expect(1)
|
||||
.mount(&server)
|
||||
.await;
|
||||
let (config, selected_urls) =
|
||||
recording_remote_plugin_service_config(format!("{}/backend-api", server.uri()));
|
||||
let auth = CodexAuth::create_dummy_chatgpt_auth_for_testing();
|
||||
|
||||
get_remote_plugin_list_page(
|
||||
&config,
|
||||
&auth,
|
||||
RemotePluginScope::Global,
|
||||
Some("next page/+"),
|
||||
Some("vertical & special"),
|
||||
)
|
||||
.await
|
||||
.expect("plugin list request should succeed");
|
||||
|
||||
assert_eq!(
|
||||
recorded_http_client_urls(&selected_urls),
|
||||
vec![format!(
|
||||
"{}/backend-api/ps/plugins/list?scope=GLOBAL&limit=200&collection=vertical+%26+special&pageToken=next+page%2F%2B",
|
||||
server.uri()
|
||||
)]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn build_remote_marketplace_preserves_directory_order_and_appends_installed_only_plugins() {
|
||||
|
||||
Reference in New Issue
Block a user