Improved messages
This commit is contained in:
@@ -37,15 +37,33 @@ impl UserConnections {
|
|||||||
));
|
));
|
||||||
};
|
};
|
||||||
|
|
||||||
let public_key = crate::signature::from_string(&public_key_string)?;
|
let Ok(public_key) = crate::signature::from_string(&public_key_string) else {
|
||||||
|
send_socket(
|
||||||
|
&mut socket,
|
||||||
|
&ClientMethod::Error {
|
||||||
|
error: Cow::Borrowed("Invalid public key"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
return Err(anyhow::anyhow!("Invalid public key"));
|
||||||
|
};
|
||||||
|
|
||||||
if public_key
|
if public_key
|
||||||
.verify_strict(
|
.verify_strict(
|
||||||
format!("{timestamp}@{hostname}").as_bytes(),
|
format!("{timestamp}@{hostname}").as_bytes(),
|
||||||
&crate::signature::from_string_sig(&signature)?,
|
&crate::signature::from_string_sig(&signature)?,
|
||||||
)
|
)
|
||||||
.is_ok()
|
.is_err()
|
||||||
{
|
{
|
||||||
|
send_socket(
|
||||||
|
&mut socket,
|
||||||
|
&ClientMethod::Error {
|
||||||
|
error: Cow::Borrowed("Invalid signature"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
return Err(anyhow::anyhow!("Invalid signature"));
|
return Err(anyhow::anyhow!("Invalid signature"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -76,21 +76,21 @@ pub async fn read_loop(socket: &Arc<Mutex<WebSocket>>) -> anyhow::Result<()> {
|
|||||||
|
|
||||||
pub async fn read_socket(socket: &mut WebSocket) -> anyhow::Result<Option<ServerMethod>> {
|
pub async fn read_socket(socket: &mut WebSocket) -> anyhow::Result<Option<ServerMethod>> {
|
||||||
match socket.recv().await.transpose()? {
|
match socket.recv().await.transpose()? {
|
||||||
Some(Message::Text(text)) => {
|
Some(Message::Text(text)) => match serde_json::from_str(&text.to_string()) {
|
||||||
if let Ok(msg) = serde_json::from_str(&text.to_string()) {
|
Ok(msg) => Ok(Some(msg)),
|
||||||
Ok(Some(msg))
|
|
||||||
} else {
|
Err(e) => {
|
||||||
send_socket(
|
send_socket(
|
||||||
socket,
|
socket,
|
||||||
&ClientMethod::Error {
|
&ClientMethod::Error {
|
||||||
error: Cow::Borrowed("Unable to parse message: {text}"),
|
error: Cow::Owned(format!("Unable to parse message: {e}")),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
Some(Message::Ping(v)) => {
|
Some(Message::Ping(v)) => {
|
||||||
socket.send(Message::Pong(v)).await?;
|
socket.send(Message::Pong(v)).await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user