File size: 1,474 Bytes
17f328f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use std::sync::Arc;

use codex_exec_server::ExecServerError;
use codex_exec_server::HttpClient;
use codex_exec_server::HttpHeader;
use codex_exec_server::HttpRequestParams;
use codex_exec_server::HttpRequestResponse;
use codex_exec_server::HttpResponseBodyStream;
use futures::future::BoxFuture;

pub(crate) struct ExecutorEnvironmentHttpClient {
    pub(crate) bearer_token_env_var: String,
    pub(crate) http_client: Arc<dyn HttpClient>,
}

impl ExecutorEnvironmentHttpClient {
    fn attach_authorization(&self, params: &mut HttpRequestParams) {
        params
            .headers
            .retain(|header| !header.name.eq_ignore_ascii_case("authorization"));
        params.headers.push(HttpHeader {
            name: "authorization".to_string(),
            value: "Bearer ".to_string(),
            value_env_var: Some(self.bearer_token_env_var.clone()),
        });
    }
}

impl HttpClient for ExecutorEnvironmentHttpClient {
    fn http_request(
        &self,
        mut params: HttpRequestParams,
    ) -> BoxFuture<'_, Result<HttpRequestResponse, ExecServerError>> {
        self.attach_authorization(&mut params);
        self.http_client.http_request(params)
    }

    fn http_request_stream(
        &self,
        mut params: HttpRequestParams,
    ) -> BoxFuture<'_, Result<(HttpRequestResponse, HttpResponseBodyStream), ExecServerError>> {
        self.attach_authorization(&mut params);
        self.http_client.http_request_stream(params)
    }
}