[fractal] Request 3PID (phone) verification through matrix-sdk
- From: Alexandre Franke <afranke src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] Request 3PID (phone) verification through matrix-sdk
- Date: Tue, 1 Dec 2020 20:22:01 +0000 (UTC)
commit 1685540bf48a7a3da1232ec76267a64130164545
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Fri Sep 25 08:03:47 2020 +0200
Request 3PID (phone) verification through matrix-sdk
fractal-gtk/src/backend/user.rs | 97 +++++++---------------
fractal-gtk/src/widgets/address.rs | 67 ++++++---------
fractal-matrix-api/src/meson.build | 1 -
fractal-matrix-api/src/r0/contact.rs | 1 -
.../contact/request_verification_token_msisdn.rs | 49 -----------
5 files changed, 54 insertions(+), 161 deletions(-)
---
diff --git a/fractal-gtk/src/backend/user.rs b/fractal-gtk/src/backend/user.rs
index 42433d73..881bf533 100644
--- a/fractal-gtk/src/backend/user.rs
+++ b/fractal-gtk/src/backend/user.rs
@@ -19,6 +19,7 @@ use super::room::AttachedFileError;
use crate::model::member::Member;
use fractal_api::api::r0::account::change_password::Request as ChangePasswordRequest;
use fractal_api::api::r0::account::request_3pid_management_token_via_email::Request as EmailTokenRequest;
+use fractal_api::api::r0::account::request_3pid_management_token_via_msisdn::Request as PhoneTokenRequest;
use fractal_api::api::r0::contact::get_contacts::Request as GetContactsRequest;
use fractal_api::api::r0::contact::get_contacts::ThirdPartyIdentifier;
use fractal_api::api::r0::profile::get_display_name::Request as GetDisplayNameRequest;
@@ -43,10 +44,6 @@ use fractal_api::r0::contact::create::Parameters as AddThreePIDParameters;
use fractal_api::r0::contact::delete::request as delete_contact;
use fractal_api::r0::contact::delete::Body as DeleteThreePIDBody;
use fractal_api::r0::contact::delete::Parameters as DeleteThreePIDParameters;
-use fractal_api::r0::contact::request_verification_token_msisdn::request as
request_contact_verification_token_msisdn;
-use fractal_api::r0::contact::request_verification_token_msisdn::Body as PhoneTokenBody;
-use fractal_api::r0::contact::request_verification_token_msisdn::Parameters as PhoneTokenParameters;
-use fractal_api::r0::contact::request_verification_token_msisdn::Response as PhoneTokenResponse;
use fractal_api::r0::AccessToken;
use fractal_api::r0::Medium;
use fractal_api::r0::ThreePIDCredentials;
@@ -176,82 +173,48 @@ pub async fn get_email_token(
}
#[derive(Debug)]
-pub enum GetTokenPhoneError {
- IdentityServerUrl(UrlError),
- Reqwest(ReqwestError),
- TokenUsed,
- Denied,
-}
+pub struct GetTokenPhoneError(MatrixError);
-impl From<ReqwestError> for GetTokenPhoneError {
- fn from(err: ReqwestError) -> Self {
- Self::Reqwest(err)
+impl From<MatrixError> for GetTokenPhoneError {
+ fn from(err: MatrixError) -> Self {
+ Self(err)
}
}
impl HandleError for GetTokenPhoneError {
fn handle_error(&self) {
- match self {
- Self::TokenUsed => {
- let error = i18n("Phone number is already in use");
- APPOP!(show_error_dialog_in_settings, (error));
- }
- Self::Denied => {
- let error = i18n(
- "Please enter your phone number in the format: \n + your country code and your phone
number.",
- );
- APPOP!(show_error_dialog_in_settings, (error));
- }
- Self::Reqwest(err) => {
- let error = i18n("Couldn’t add the phone number.");
- let err_str = format!("{:?}", err);
- error!(
- "{}",
- remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
- );
- APPOP!(show_error_dialog_in_settings, (error));
- }
- Self::IdentityServerUrl(err) => {
- let error = i18n("The identity server is invalid.");
- error!("The identity server is invalid: {:?}", err);
- APPOP!(show_error_dialog_in_settings, (error));
- }
+ let err = &self.0;
+ let ruma_error_kind = get_ruma_error_kind(err);
+
+ if ruma_error_kind == Some(&RumaErrorKind::ThreepidInUse) {
+ let error = i18n("Phone number is already in use");
+ APPOP!(show_error_dialog_in_settings, (error));
+ } else if ruma_error_kind == Some(&RumaErrorKind::ThreepidDenied) {
+ let error = i18n(
+ "Please enter your phone number in the format: \n + your country code and your phone
number.",
+ );
+ APPOP!(show_error_dialog_in_settings, (error));
+ } else {
+ let error = i18n("Couldn’t add the phone number.");
+ let err_str = format!("{:?}", err);
+ error!(
+ "{}",
+ remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+ );
+ APPOP!(show_error_dialog_in_settings, (error));
}
}
}
-pub fn get_phone_token(
- base: Url,
- access_token: AccessToken,
- identity: Url,
- phone_number: String,
+pub async fn get_phone_token(
+ session_client: MatrixClient,
+ phone_number: &str,
client_secret: String,
) -> Result<(String, String), GetTokenPhoneError> {
- use PhoneTokenResponse::*;
-
- let params = PhoneTokenParameters { access_token };
- let body = PhoneTokenBody {
- id_server: identity
- .try_into()
- .map_err(GetTokenPhoneError::IdentityServerUrl)?,
- client_secret: client_secret.clone(),
- phone_number,
- country: String::new(),
- send_attempt: 1,
- next_link: None,
- };
-
- let request = request_contact_verification_token_msisdn(base, ¶ms, &body)?;
+ let request = PhoneTokenRequest::new(&client_secret, "", phone_number, 1_u32.into());
+ let response = session_client.send(request).await?;
- match HTTP_CLIENT
- .get_client()
- .execute(request)?
- .json::<PhoneTokenResponse>()?
- {
- Passed(info) => Ok((info.sid, client_secret)),
- Failed(info) if info.errcode == "M_THREEPID_IN_USE" => Err(GetTokenPhoneError::TokenUsed),
- Failed(_) => Err(GetTokenPhoneError::Denied),
- }
+ Ok((response.sid, client_secret))
}
#[derive(Debug)]
diff --git a/fractal-gtk/src/widgets/address.rs b/fractal-gtk/src/widgets/address.rs
index 87c1c0b4..bcec63da 100644
--- a/fractal-gtk/src/widgets/address.rs
+++ b/fractal-gtk/src/widgets/address.rs
@@ -163,7 +163,6 @@ impl<'a> Address<'a> {
let address = self.address.clone();
let access_token = login_data.access_token;
let session_client = login_data.session_client;
- let id_server = login_data.identity_url;
self.signal_id = Some(self.button.clone().connect_clicked(move |w| {
if !w.get_sensitive() || !w.is_visible() {
return;
@@ -193,13 +192,7 @@ impl<'a> Address<'a> {
}
Some(AddressAction::Add) => {
let address = entry.get_text().to_string();
- add_address(
- session_client.clone(),
- medium,
- id_server.clone(),
- address,
- access_token.clone(),
- );
+ add_address(session_client.clone(), medium, address);
}
_ => {}
}
@@ -220,43 +213,31 @@ fn delete_address(medium: Medium, address: String, server_url: Url, access_token
});
}
-fn add_address(
- session_client: MatrixClient,
- medium: Medium,
- id_server: Url,
- address: String,
- access_token: AccessToken,
-) {
- let server_url = session_client.homeserver().clone();
+fn add_address(session_client: MatrixClient, medium: Medium, address: String) {
let secret: String = thread_rng().sample_iter(&Alphanumeric).take(36).collect();
- match medium {
- Medium::MsIsdn => {
- thread::spawn(move || {
- match user::get_phone_token(server_url, access_token, id_server, address, secret) {
- Ok((sid, secret)) => {
- let sid = Some(sid);
- let secret = Some(secret);
- APPOP!(get_token_phone, (sid, secret))
- }
- Err(err) => {
- err.handle_error();
- }
+
+ RUNTIME.spawn(async move {
+ match medium {
+ Medium::MsIsdn => match user::get_phone_token(session_client, &address, secret).await {
+ Ok((sid, secret)) => {
+ let sid = Some(sid);
+ let secret = Some(secret);
+ APPOP!(get_token_phone, (sid, secret))
}
- });
- }
- Medium::Email => {
- RUNTIME.spawn(async move {
- match user::get_email_token(session_client, &address, secret).await {
- Ok((sid, secret)) => {
- let sid = Some(sid);
- let secret = Some(secret);
- APPOP!(get_token_email, (sid, secret));
- }
- Err(err) => {
- err.handle_error();
- }
+ Err(err) => {
+ err.handle_error();
+ }
+ },
+ Medium::Email => match user::get_email_token(session_client, &address, secret).await {
+ Ok((sid, secret)) => {
+ let sid = Some(sid);
+ let secret = Some(secret);
+ APPOP!(get_token_email, (sid, secret));
}
- });
+ Err(err) => {
+ err.handle_error();
+ }
+ },
}
- };
+ });
}
diff --git a/fractal-matrix-api/src/meson.build b/fractal-matrix-api/src/meson.build
index b97cc735..27307166 100644
--- a/fractal-matrix-api/src/meson.build
+++ b/fractal-matrix-api/src/meson.build
@@ -8,7 +8,6 @@ api_sources = files(
'r0/account/logout.rs',
'r0/contact/create.rs',
'r0/contact/delete.rs',
- 'r0/contact/request_verification_token_msisdn.rs',
'r0/server/domain_info.rs',
'r0/sync/sync_events.rs',
'r0/account.rs',
diff --git a/fractal-matrix-api/src/r0/contact.rs b/fractal-matrix-api/src/r0/contact.rs
index 14804e9d..da1aa3ac 100644
--- a/fractal-matrix-api/src/r0/contact.rs
+++ b/fractal-matrix-api/src/r0/contact.rs
@@ -1,3 +1,2 @@
pub mod create;
pub mod delete;
-pub mod request_verification_token_msisdn;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]