forked from lavina/lavina
keep todos for uncertain behaviour
This commit is contained in:
parent
d6da40e4ff
commit
bb09e8bb21
|
@ -181,17 +181,17 @@ async fn handle_registration<'a>(
|
||||||
}
|
}
|
||||||
CapabilitySubcommand::End => {
|
CapabilitySubcommand::End => {
|
||||||
let Some((ref username, ref realname)) = future_username else {
|
let Some((ref username, ref realname)) = future_username else {
|
||||||
break Err(anyhow::Error::msg("Protocol violated"));
|
todo!();
|
||||||
};
|
};
|
||||||
let Some(nickname) = future_nickname.clone() else {
|
let Some(nickname) = future_nickname.clone() else {
|
||||||
break Err(anyhow::Error::msg("Protocol violated"));
|
todo!();
|
||||||
};
|
};
|
||||||
let username = username.clone();
|
let username = username.clone();
|
||||||
let realname = realname.clone();
|
let realname = realname.clone();
|
||||||
let candidate_user = RegisteredUser {
|
let candidate_user = RegisteredUser {
|
||||||
nickname: nickname.clone(),
|
nickname: nickname.clone(),
|
||||||
username,
|
username,
|
||||||
realname
|
realname,
|
||||||
};
|
};
|
||||||
if enabled_capabilities.contains(Capabilities::Sasl)
|
if enabled_capabilities.contains(Capabilities::Sasl)
|
||||||
&& validated_user.as_ref() == Some(&candidate_user.nickname)
|
&& validated_user.as_ref() == Some(&candidate_user.nickname)
|
||||||
|
@ -200,10 +200,12 @@ async fn handle_registration<'a>(
|
||||||
} else {
|
} else {
|
||||||
let Some(candidate_password) = pass else {
|
let Some(candidate_password) = pass else {
|
||||||
sasl_fail_message(
|
sasl_fail_message(
|
||||||
config.server_name.clone(),
|
config.server_name.clone(),
|
||||||
nickname.clone(),
|
nickname.clone(),
|
||||||
"User credentials was not provided".into()
|
"User credentials was not provided".into(),
|
||||||
).write_async(writer).await?;
|
)
|
||||||
|
.write_async(writer)
|
||||||
|
.await?;
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
@ -223,10 +225,12 @@ async fn handle_registration<'a>(
|
||||||
};
|
};
|
||||||
let Some(candidate_password) = pass else {
|
let Some(candidate_password) = pass else {
|
||||||
sasl_fail_message(
|
sasl_fail_message(
|
||||||
config.server_name.clone(),
|
config.server_name.clone(),
|
||||||
nickname.clone(),
|
nickname.clone(),
|
||||||
"User credentials was not provided".into()
|
"User credentials was not provided".into(),
|
||||||
).write_async(writer).await?;
|
)
|
||||||
|
.write_async(writer)
|
||||||
|
.await?;
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
@ -247,10 +251,12 @@ async fn handle_registration<'a>(
|
||||||
};
|
};
|
||||||
let Some(candidate_password) = pass else {
|
let Some(candidate_password) = pass else {
|
||||||
sasl_fail_message(
|
sasl_fail_message(
|
||||||
config.server_name.clone(),
|
config.server_name.clone(),
|
||||||
nickname.clone(),
|
nickname.clone(),
|
||||||
"User credentials was not provided".into()
|
"User credentials was not provided".into(),
|
||||||
).write_async(writer).await?;
|
)
|
||||||
|
.write_async(writer)
|
||||||
|
.await?;
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
@ -276,7 +282,13 @@ async fn handle_registration<'a>(
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
} else {
|
} else {
|
||||||
if let Some(nickname) = future_nickname.clone() {
|
if let Some(nickname) = future_nickname.clone() {
|
||||||
sasl_fail_message(config.server_name.clone(), nickname.clone(), "Unsupported mechanism".into()).write_async(writer).await?;
|
sasl_fail_message(
|
||||||
|
config.server_name.clone(),
|
||||||
|
nickname.clone(),
|
||||||
|
"Unsupported mechanism".into(),
|
||||||
|
)
|
||||||
|
.write_async(writer)
|
||||||
|
.await?;
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
} else {
|
} else {
|
||||||
break Err(anyhow::Error::msg("Wrong authentication sequence"));
|
break Err(anyhow::Error::msg("Wrong authentication sequence"));
|
||||||
|
@ -287,10 +299,11 @@ async fn handle_registration<'a>(
|
||||||
if let Err(e) = auth_user(storage, &body.login, &body.password).await {
|
if let Err(e) = auth_user(storage, &body.login, &body.password).await {
|
||||||
tracing::warn!("Authentication failed: {:?}", e);
|
tracing::warn!("Authentication failed: {:?}", e);
|
||||||
if let Some(nickname) = future_nickname.clone() {
|
if let Some(nickname) = future_nickname.clone() {
|
||||||
sasl_fail_message(config.server_name.clone(), nickname.clone(), "Bad credentials".into()).write_async(writer).await?;
|
sasl_fail_message(config.server_name.clone(), nickname.clone(), "Bad credentials".into())
|
||||||
|
.write_async(writer)
|
||||||
|
.await?;
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let login: Str = body.login.into();
|
let login: Str = body.login.into();
|
||||||
|
@ -320,7 +333,7 @@ async fn handle_registration<'a>(
|
||||||
writer.flush().await?;
|
writer.flush().await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO handle abortion of authentication
|
// TODO handle abortion of authentication
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
@ -335,7 +348,7 @@ fn sasl_fail_message(sender: Str, nick: Str, text: Str) -> ServerMessage {
|
||||||
ServerMessage {
|
ServerMessage {
|
||||||
tags: vec![],
|
tags: vec![],
|
||||||
sender: Some(sender),
|
sender: Some(sender),
|
||||||
body: ServerMessageBody::N904SaslFail { nick, text }
|
body: ServerMessageBody::N904SaslFail { nick, text },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue