Skip to content

Commit bc16a15

Browse files
committed
fix unwraps
1 parent 84cebfd commit bc16a15

1 file changed

Lines changed: 27 additions & 13 deletions

File tree

src/handlers/desktop_client_mfa.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::{
2626
},
2727
};
2828

29+
// How much time the user has to approve remote MFA with mobile device
2930
const REMOTE_AUTH_TIMEOUT: Duration = Duration::from_secs(60);
3031

3132
pub(crate) fn router() -> Router<AppState> {
@@ -83,18 +84,23 @@ async fn handle_remote_auth_socket(
8384
let (mut ws_tx, mut ws_rx) = socket.split();
8485
let mut set = JoinSet::new();
8586

87+
let request = ClientRemoteMfaFinishRequest { token };
88+
let rx = match state.grpc_server.send(
89+
core_request::Payload::ClientRemoteMfaFinish(request),
90+
device_info,
91+
) {
92+
Ok(rx) => rx,
93+
Err(err) => {
94+
error!("Failed to send ClientRemoteMfaFinishRequest: {err:?}");
95+
return;
96+
}
97+
};
98+
99+
// Response to ClientRemoteMfaFinishRequest comes once the user concludes MFA with mobile device.
100+
// This task then sends the preshared key to the WebSocket where desktop client awaits for it.
86101
set.spawn(async move {
87-
let request = ClientRemoteMfaFinishRequest { token };
88-
let rx = state
89-
.grpc_server
90-
.send(
91-
core_request::Payload::ClientRemoteMfaFinish(request),
92-
device_info,
93-
)
94-
.unwrap(); // TODO(jck) unwrap
95-
// TODO(jck) unwrap
96-
match rx.await.unwrap() {
97-
Payload::ClientRemoteMfaFinish(response) => {
102+
match rx.await {
103+
Ok(Payload::ClientRemoteMfaFinish(response)) => {
98104
let ws_response = json!({
99105
"type": "mfa_success",
100106
"preshared_key": &response.preshared_key,
@@ -106,13 +112,20 @@ async fn handle_remote_auth_socket(
106112
}
107113
}
108114
}
109-
_ => {
110-
error!("Received wrong response type");
115+
Ok(_) => {
116+
error!("Received wrong response type, expected ClientRemoteMfaFinish");
117+
}
118+
Err(err) => {
119+
error!("Failed to receive preshared key from receiver: {err:?}");
111120
}
112121
};
122+
123+
// Close the websocket once we're done.
113124
let _ = ws_tx.close().await;
114125
});
115126

127+
// Another task to monitor the websocket connection in case desktop client disconnects
128+
// or the connection errors-out.
116129
set.spawn(async move {
117130
while let Some(msg_result) = ws_rx.next().await {
118131
match msg_result {
@@ -129,6 +142,7 @@ async fn handle_remote_auth_socket(
129142
}
130143
});
131144

145+
// Wait for whichever task finishes first and kill the other one.
132146
let _ = set.join_next().await;
133147
set.shutdown().await;
134148
}

0 commit comments

Comments
 (0)