diff options
author | cel 🌸 <cel@blos.sm> | 2023-06-19 19:23:54 +0100 |
---|---|---|
committer | cel 🌸 <cel@blos.sm> | 2023-06-19 19:23:54 +0100 |
commit | 6a5e39c60ad74c1cba84daa7c845c8f0237a5d28 (patch) | |
tree | 7115e5dc2679bc053acb9b28fed41d3175ed2817 /src/client/mod.rs | |
parent | abc3ffa7363ebd30101e15db7e02a7d44f323df9 (diff) | |
download | luz-6a5e39c60ad74c1cba84daa7c845c8f0237a5d28.tar.gz luz-6a5e39c60ad74c1cba84daa7c845c8f0237a5d28.tar.bz2 luz-6a5e39c60ad74c1cba84daa7c845c8f0237a5d28.zip |
implement starttls
Diffstat (limited to 'src/client/mod.rs')
-rw-r--r-- | src/client/mod.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs new file mode 100644 index 0000000..fe3dd34 --- /dev/null +++ b/src/client/mod.rs @@ -0,0 +1,40 @@ +pub mod encrypted; +pub mod unencrypted; + +// use async_trait::async_trait; + +use crate::stanza::stream::StreamFeature; +use crate::JabberError; +use crate::Result; + +pub enum JabberClientType<'j> { + Encrypted(encrypted::JabberClient<'j>), + Unencrypted(unencrypted::JabberClient<'j>), +} + +impl<'j> JabberClientType<'j> { + pub async fn ensure_tls(self) -> Result<encrypted::JabberClient<'j>> { + match self { + Self::Encrypted(mut c) => { + c.start_stream(); + Ok(c) + } + Self::Unencrypted(mut c) => { + c.start_stream().await?; + let features = c.get_features().await?; + if features.contains(&StreamFeature::StartTls) { + Ok(c.starttls().await?) + } else { + Err(JabberError::StartTlsUnavailable) + } + } + } + } +} + +// TODO: jabber client trait over both client types +// #[async_trait] +// pub trait JabberTrait { +// async fn start_stream(&mut self) -> Result<()>; +// async fn get_features(&self) -> Result<Vec<StreamFeatures>>; +// } |