From 866e134371a88c221862d3646f67e6cff6624a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cel=20=F0=9F=8C=B8?= Date: Sun, 12 Jan 2025 23:10:03 +0000 Subject: [PATCH] delete JabberClient --- jabber/src/client.rs | 91 ++++++++++---------------------------------- jabber/src/lib.rs | 10 +---- 2 files changed, 21 insertions(+), 80 deletions(-) diff --git a/jabber/src/client.rs b/jabber/src/client.rs index 9d32682..f741352 100644 --- a/jabber/src/client.rs +++ b/jabber/src/client.rs @@ -22,71 +22,16 @@ use crate::{ Connection, Error, JabberStream, Result, JID, }; -// feed it client stanzas, receive client stanzas -pub struct JabberClient { - connection: Option>, - jid: JID, - // TODO: have reconnection be handled by another part, so creds don't need to be stored in object - password: Arc, - server: String, -} - -impl JabberClient { - pub fn new( - jid: impl TryInto, - password: impl ToString, - ) -> Result { - let jid = jid.try_into()?; - let sasl_config = SASLConfig::with_credentials( - None, - jid.localpart.clone().ok_or(Error::NoLocalpart)?, - password.to_string(), - )?; - Ok(JabberClient { - connection: None, - jid: jid.clone(), - password: sasl_config, - server: jid.domainpart, - }) - } - - pub fn jid(&self) -> JID { - self.jid.clone() - } - - pub async fn connect(&mut self) -> Result<()> { - match &self.connection { - Some(_) => Ok(()), - None => { - self.connection = Some( - connect_and_login(&mut self.jid, self.password.clone(), &mut self.server) - .await?, - ); - Ok(()) - } - } - } - - pub(crate) fn into_inner(self) -> Result> { - self.connection.ok_or(Error::Disconnected) - } - - // pub async fn send_stanza(&mut self, stanza: &Stanza) -> Result<()> { - // match &mut self.connection { - // ConnectionState::Disconnected => return Err(Error::Disconnected), - // ConnectionState::Connecting(_connecting) => return Err(Error::Connecting), - // ConnectionState::Connected(jabber_stream) => { - // Ok(jabber_stream.send_stanza(stanza).await?) - // } - // } - // } -} - pub async fn connect_and_login( - jid: &mut JID, - auth: Arc, + mut jid: &mut JID, + password: impl AsRef, server: &mut String, ) -> Result> { + let auth = SASLConfig::with_credentials( + None, + jid.localpart.clone().ok_or(Error::NoLocalpart)?, + password.as_ref().to_string(), + )?; let mut conn_state = Connecting::start(&server).await?; loop { match conn_state { @@ -177,8 +122,8 @@ pub enum InsecureConnecting { mod tests { use std::{sync::Arc, time::Duration}; - use super::JabberClient; use futures::{SinkExt, StreamExt}; + use jid::JID; use stanza::{ client::{ iq::{Iq, IqType, Query}, @@ -190,21 +135,25 @@ mod tests { use tokio::{sync::Mutex, time::sleep}; use tracing::info; + use super::connect_and_login; + #[test(tokio::test)] async fn login() { - let mut client = JabberClient::new("test@blos.sm", "slayed").unwrap(); - client.connect().await.unwrap(); + let mut jid: JID = "test@blos.sm".try_into().unwrap(); + let client = connect_and_login(&mut jid, "slayed", &mut "blos.sm".to_string()) + .await + .unwrap(); sleep(Duration::from_secs(5)).await } #[test(tokio::test)] async fn ping_parallel() { - let mut client = JabberClient::new("test@blos.sm", "slayed").unwrap(); - client.connect().await.unwrap(); - sleep(Duration::from_secs(5)).await; - let jid = client.jid.clone(); - let server = client.server.clone(); - let (mut read, mut write) = client.into_inner().unwrap().split(); + let mut jid: JID = "test@blos.sm".try_into().unwrap(); + let mut server = "blos.sm".to_string(); + let client = connect_and_login(&mut jid, "slayed", &mut server) + .await + .unwrap(); + let (mut read, mut write) = client.split(); tokio::join!( async { diff --git a/jabber/src/lib.rs b/jabber/src/lib.rs index bcd63db..7258f38 100644 --- a/jabber/src/lib.rs +++ b/jabber/src/lib.rs @@ -15,15 +15,7 @@ pub use jid::JID; pub type Result = std::result::Result; -pub async fn login, P: AsRef>(jid: J, password: P) -> Result> { - todo!() - // Ok(Connection::connect_user(jid, password.as_ref().to_string()) - // .await? - // .ensure_tls() - // .await? - // .negotiate() - // .await?) -} +pub use client::connect_and_login; #[cfg(test)] mod tests {