[fractal/fractal-next] verification: Add mode for sent requests and state handler fix
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] verification: Add mode for sent requests and state handler fix
- Date: Thu, 13 Jan 2022 14:34:40 +0000 (UTC)
commit 1f5cb484eb86f589db908fce3f19a0db66e90270
Author: Julian Sparber <julian sparber net>
Date: Fri Jan 7 18:58:50 2022 +0100
verification: Add mode for sent requests and state handler fix
This starts the state handler before accepting the request so that the
state of those requests is tracked.
.../content/verification/session_verification.rs | 2 +-
src/session/verification/identity_verification.rs | 36 ++++++++++++++++++----
2 files changed, 31 insertions(+), 7 deletions(-)
---
diff --git a/src/session/content/verification/session_verification.rs
b/src/session/content/verification/session_verification.rs
index cd1f8750..b1d927ef 100644
--- a/src/session/content/verification/session_verification.rs
+++ b/src/session/content/verification/session_verification.rs
@@ -286,7 +286,7 @@ impl SessionVerification {
VerificationMode::Error => {
priv_.main_stack.set_visible_child_name("bootstrap");
}
- VerificationMode::Requested => {
+ VerificationMode::Requested | VerificationMode::RequestSend => {
priv_.main_stack.set_visible_child_name("wait-for-device");
}
VerificationMode::QrV1Show => {
diff --git a/src/session/verification/identity_verification.rs
b/src/session/verification/identity_verification.rs
index 4fbadc16..091c81df 100644
--- a/src/session/verification/identity_verification.rs
+++ b/src/session/verification/identity_verification.rs
@@ -32,6 +32,7 @@ use tokio::sync::mpsc;
#[genum(type_name = "VerificationMode")]
pub enum Mode {
Requested,
+ RequestSend,
SasV1,
QrV1Show,
QrV1Scan,
@@ -75,6 +76,7 @@ impl Default for SupportedMethods {
#[derive(Debug, PartialEq, Clone)]
pub enum UserAction {
+ Accept,
Match,
NotMatch,
Cancel,
@@ -237,7 +239,7 @@ mod imp {
main_receiver.attach(
None,
- clone!(@weak obj => @default-panic, move |message| {
+ clone!(@weak obj => @default-return glib::Continue(false), move |message| {
let priv_ = imp::IdentityVerification::from_instance(&obj);
match message {
MainMessage::QrCode(data) => { let _ = priv_.qr_code.set(data); },
@@ -267,6 +269,7 @@ mod imp {
.set(glib::DateTime::new_now_local().unwrap())
.unwrap();
obj.setup_timeout();
+ obj.start_handler();
}
fn dispose(&self, obj: &Self::Type) {
@@ -328,8 +331,8 @@ impl IdentityVerification {
user,
&glib::DateTime::new_now_local().unwrap(),
);
- // This will start the request handling
- obj.accept();
+
+ obj.set_mode(Mode::RequestSend);
return obj;
}
Err(error) => {
@@ -348,8 +351,7 @@ impl IdentityVerification {
)
}
- /// Accept an incomming request
- pub fn accept(&self) {
+ fn start_handler(&self) {
let priv_ = imp::IdentityVerification::from_instance(self);
let main_sender = if let Some(main_sender) = priv_.main_sender.take() {
@@ -625,6 +627,17 @@ impl IdentityVerification {
}
}
+ /// Accept an incomming request
+ pub fn accept(&self) {
+ let priv_ = imp::IdentityVerification::from_instance(self);
+ if let Some(sync_sender) = &*priv_.sync_sender.borrow() {
+ let result = sync_sender.try_send(Message::UserAction(UserAction::Accept));
+ if let Err(error) = result {
+ error!("Failed to send message to tokio runtime: {}", error);
+ }
+ }
+ }
+
pub fn cancel(&self) {
let priv_ = imp::IdentityVerification::from_instance(self);
if let Some(sync_sender) = &*priv_.sync_sender.borrow() {
@@ -693,7 +706,12 @@ macro_rules! wait {
},
Message::UserAction(UserAction::Cancel) | Message::UserAction(UserAction::NotMatch) => {
return Ok($this.cancel_request().await?);
- }
+ },
+ Message::UserAction(UserAction::Accept) => {
+ if true $(&& $allow_action)? {
+ break;
+ }
+ },
Message::UserAction(UserAction::StartSas) => {
if true $(&& $allow_action)? {
return Ok($this.start_sas().await?);
@@ -750,6 +768,9 @@ macro_rules! wait_without_scanning_sas {
Message::UserAction(UserAction::NotMatch) => {
return Ok($this.cancel_request().await?);
},
+ Message::UserAction(UserAction::Accept) => {
+ break;
+ },
Message::UserAction(UserAction::StartSas) => {
},
Message::UserAction(UserAction::Match) => {
@@ -823,6 +844,9 @@ impl Context {
return Ok(Mode::Passive);
}
+ // Wait for the user to accept or cancel the request
+ wait![self];
+
self.request
.accept_with_methods(vec![
VerificationMethod::SasV1,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]