aboutsummaryrefslogtreecommitdiffstats
path: root/src/stanza/sasl.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2024-12-04 18:18:37 +0000
committerLibravatar cel 🌸 <cel@bunny.garden>2024-12-04 18:18:37 +0000
commit1b91ff690488b65b552c90bd5392b9a300c8c981 (patch)
tree9c290f69b26eba0393d7bbc05ba29c28ea74a26e /src/stanza/sasl.rs
parent03764f8cedb3f0a55a61be0f0a59faaa6357a83a (diff)
downloadluz-1b91ff690488b65b552c90bd5392b9a300c8c981.tar.gz
luz-1b91ff690488b65b552c90bd5392b9a300c8c981.tar.bz2
luz-1b91ff690488b65b552c90bd5392b9a300c8c981.zip
use cargo workspace
Diffstat (limited to 'src/stanza/sasl.rs')
-rw-r--r--src/stanza/sasl.rs246
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 })
- }
-}