summaryrefslogtreecommitdiff
path: root/ext/websocket/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/websocket/lib.rs')
-rw-r--r--ext/websocket/lib.rs22
1 files changed, 18 insertions, 4 deletions
diff --git a/ext/websocket/lib.rs b/ext/websocket/lib.rs
index 2ce141fc9..e03a13789 100644
--- a/ext/websocket/lib.rs
+++ b/ext/websocket/lib.rs
@@ -19,6 +19,7 @@ use deno_core::ZeroCopyBuf;
use deno_net::raw::take_network_stream_resource;
use deno_net::raw::NetworkStream;
use deno_tls::create_client_config;
+use deno_tls::RootCertStoreProvider;
use http::header::CONNECTION;
use http::header::UPGRADE;
use http::HeaderName;
@@ -54,7 +55,17 @@ use fastwebsockets::WebSocket;
mod stream;
#[derive(Clone)]
-pub struct WsRootStore(pub Option<RootCertStore>);
+pub struct WsRootStoreProvider(Option<Arc<dyn RootCertStoreProvider>>);
+
+impl WsRootStoreProvider {
+ pub fn get_or_try_init(&self) -> Result<Option<RootCertStore>, AnyError> {
+ Ok(match &self.0 {
+ Some(provider) => Some(provider.get_or_try_init()?.clone()),
+ None => None,
+ })
+ }
+}
+
#[derive(Clone)]
pub struct WsUserAgent(pub String);
@@ -181,7 +192,10 @@ where
.borrow()
.try_borrow::<UnsafelyIgnoreCertificateErrors>()
.and_then(|it| it.0.clone());
- let root_cert_store = state.borrow().borrow::<WsRootStore>().0.clone();
+ let root_cert_store = state
+ .borrow()
+ .borrow::<WsRootStoreProvider>()
+ .get_or_try_init()?;
let user_agent = state.borrow().borrow::<WsUserAgent>().0.clone();
let uri: Uri = url.parse()?;
let mut request = Request::builder().method(Method::GET).uri(
@@ -525,7 +539,7 @@ deno_core::extension!(deno_websocket,
esm = [ "01_websocket.js", "02_websocketstream.js" ],
options = {
user_agent: String,
- root_cert_store: Option<RootCertStore>,
+ root_cert_store_provider: Option<Arc<dyn RootCertStoreProvider>>,
unsafely_ignore_certificate_errors: Option<Vec<String>>
},
state = |state, options| {
@@ -533,7 +547,7 @@ deno_core::extension!(deno_websocket,
state.put(UnsafelyIgnoreCertificateErrors(
options.unsafely_ignore_certificate_errors,
));
- state.put::<WsRootStore>(WsRootStore(options.root_cert_store));
+ state.put::<WsRootStoreProvider>(WsRootStoreProvider(options.root_cert_store_provider));
},
);