diff options
Diffstat (limited to 'src/stanza/sasl.rs')
| -rw-r--r-- | src/stanza/sasl.rs | 246 | 
1 files changed, 0 insertions, 246 deletions
| diff --git a/src/stanza/sasl.rs b/src/stanza/sasl.rs deleted file mode 100644 index ec6f63c..0000000 --- a/src/stanza/sasl.rs +++ /dev/null @@ -1,246 +0,0 @@ -use std::ops::Deref; - -use peanuts::{ -    element::{FromElement, IntoElement}, -    DeserializeError, Element, -}; -use tracing::debug; - -pub const XMLNS: &str = "urn:ietf:params:xml:ns:xmpp-sasl"; - -#[derive(Debug, Clone)] -pub struct Mechanisms { -    pub mechanisms: Vec<String>, -} - -impl FromElement for Mechanisms { -    fn from_element(mut element: Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("mechanisms")?; -        element.check_namespace(XMLNS)?; -        debug!("getting mechanisms"); -        let mechanisms: Vec<Mechanism> = element.pop_children()?; -        debug!("gottting mechanisms"); -        let mechanisms = mechanisms -            .into_iter() -            .map(|Mechanism(mechanism)| mechanism) -            .collect(); -        debug!("gottting mechanisms"); - -        Ok(Mechanisms { mechanisms }) -    } -} - -impl IntoElement for Mechanisms { -    fn builder(&self) -> peanuts::element::ElementBuilder { -        Element::builder("mechanisms", Some(XMLNS)).push_children( -            self.mechanisms -                .iter() -                .map(|mechanism| Mechanism(mechanism.to_string())) -                .collect(), -        ) -    } -} - -pub struct Mechanism(String); - -impl FromElement for Mechanism { -    fn from_element(mut element: peanuts::Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("mechanism")?; -        element.check_namespace(XMLNS)?; - -        let mechanism = element.pop_value()?; - -        Ok(Mechanism(mechanism)) -    } -} - -impl IntoElement for Mechanism { -    fn builder(&self) -> peanuts::element::ElementBuilder { -        Element::builder("mechanism", Some(XMLNS)).push_text(self.0.clone()) -    } -} - -impl Deref for Mechanism { -    type Target = str; - -    fn deref(&self) -> &Self::Target { -        &self.0 -    } -} - -#[derive(Debug)] -pub struct Auth { -    pub mechanism: String, -    pub sasl_data: String, -} - -impl IntoElement for Auth { -    fn builder(&self) -> peanuts::element::ElementBuilder { -        Element::builder("auth", Some(XMLNS)) -            .push_attribute("mechanism", self.mechanism.clone()) -            .push_text(self.sasl_data.clone()) -    } -} - -#[derive(Debug)] -pub struct Challenge(String); - -impl Deref for Challenge { -    type Target = str; - -    fn deref(&self) -> &Self::Target { -        &self.0 -    } -} - -impl FromElement for Challenge { -    fn from_element(mut element: Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("challenge")?; -        element.check_namespace(XMLNS)?; - -        let sasl_data = element.value()?; - -        Ok(Challenge(sasl_data)) -    } -} - -#[derive(Debug)] -pub struct Success(Option<String>); - -impl Deref for Success { -    type Target = Option<String>; - -    fn deref(&self) -> &Self::Target { -        &self.0 -    } -} - -impl FromElement for Success { -    fn from_element(mut element: Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("success")?; -        element.check_namespace(XMLNS)?; - -        let sasl_data = element.value_opt()?; - -        Ok(Success(sasl_data)) -    } -} - -#[derive(Debug)] -pub enum ServerResponse { -    Challenge(Challenge), -    Success(Success), -    Failure(Failure), -} - -impl FromElement for ServerResponse { -    fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { -        debug!("identification: {:?}", element.identify()); -        match element.identify() { -            (Some(XMLNS), "challenge") => { -                Ok(ServerResponse::Challenge(Challenge::from_element(element)?)) -            } -            (Some(XMLNS), "success") => { -                Ok(ServerResponse::Success(Success::from_element(element)?)) -            } -            (Some(XMLNS), "failure") => { -                Ok(ServerResponse::Failure(Failure::from_element(element)?)) -            } -            _ => Err(DeserializeError::UnexpectedElement(element)), -        } -    } -} - -#[derive(Debug)] -pub struct Response(String); - -impl Response { -    pub fn new(response: String) -> Self { -        Self(response) -    } -} - -impl Deref for Response { -    type Target = str; - -    fn deref(&self) -> &Self::Target { -        &self.0 -    } -} - -impl IntoElement for Response { -    fn builder(&self) -> peanuts::element::ElementBuilder { -        Element::builder("response", Some(XMLNS)).push_text(self.0.clone()) -    } -} - -#[derive(Debug)] -pub struct Failure { -    r#type: Option<FailureType>, -    text: Option<Text>, -} - -impl FromElement for Failure { -    fn from_element(mut element: Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("failure")?; -        element.check_namespace(XMLNS)?; - -        let r#type = element.pop_child_opt()?; -        let text = element.pop_child_opt()?; - -        Ok(Failure { r#type, text }) -    } -} - -#[derive(Debug)] -pub enum FailureType { -    Aborted, -    AccountDisabled, -    CredentialsExpired, -    EncryptionRequired, -    IncorrectEncoding, -    InvalidAuthzid, -    InvalidMechanism, -    MalformedRequest, -    MechanismTooWeak, -    NotAuthorized, -    TemporaryAuthFailure, -} - -impl FromElement for FailureType { -    fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { -        match element.identify() { -            (Some(XMLNS), "aborted") => Ok(FailureType::Aborted), -            (Some(XMLNS), "account-disabled") => Ok(FailureType::AccountDisabled), -            (Some(XMLNS), "credentials-expired") => Ok(FailureType::CredentialsExpired), -            (Some(XMLNS), "encryption-required") => Ok(FailureType::EncryptionRequired), -            (Some(XMLNS), "incorrect-encoding") => Ok(FailureType::IncorrectEncoding), -            (Some(XMLNS), "invalid-authzid") => Ok(FailureType::InvalidAuthzid), -            (Some(XMLNS), "invalid-mechanism") => Ok(FailureType::InvalidMechanism), -            (Some(XMLNS), "malformed-request") => Ok(FailureType::MalformedRequest), -            (Some(XMLNS), "mechanism-too-weak") => Ok(FailureType::MechanismTooWeak), -            (Some(XMLNS), "not-authorized") => Ok(FailureType::NotAuthorized), -            (Some(XMLNS), "temporary-auth-failure") => Ok(FailureType::TemporaryAuthFailure), -            _ => Err(DeserializeError::UnexpectedElement(element)), -        } -    } -} - -#[derive(Debug)] -pub struct Text { -    lang: Option<String>, -    text: Option<String>, -} - -impl FromElement for Text { -    fn from_element(mut element: Element) -> peanuts::element::DeserializeResult<Self> { -        element.check_name("text")?; -        element.check_namespace(XMLNS)?; - -        let lang = element.attribute_opt_namespaced("lang", peanuts::XML_NS)?; - -        let text = element.pop_value_opt()?; - -        Ok(Text { lang, text }) -    } -} | 
