[fractal] Use Url where possible



commit 9101aa43deb48522075cda586b62b3e0bce45633
Author: Alejandro Domínguez <adomu net-c com>
Date:   Sat Nov 2 01:50:06 2019 +0100

    Use Url where possible

 fractal-gtk/src/appop/account.rs            |  6 ++---
 fractal-gtk/src/appop/login.rs              | 14 +++++-----
 fractal-gtk/src/appop/room.rs               |  2 +-
 fractal-gtk/src/passwd.rs                   | 16 +++++------
 fractal-gtk/src/widgets/address.rs          |  6 ++---
 fractal-gtk/src/widgets/login.rs            |  3 +--
 fractal-gtk/src/widgets/roomlist.rs         |  7 ++---
 fractal-matrix-api/src/backend/directory.rs |  2 +-
 fractal-matrix-api/src/backend/media.rs     | 12 ++++++---
 fractal-matrix-api/src/backend/mod.rs       | 11 +++-----
 fractal-matrix-api/src/backend/register.rs  | 35 ++++++++----------------
 fractal-matrix-api/src/backend/room.rs      | 42 ++++++++++++++---------------
 fractal-matrix-api/src/backend/stickers.rs  | 12 ++++-----
 fractal-matrix-api/src/backend/types.rs     | 14 +++++-----
 fractal-matrix-api/src/backend/user.rs      | 12 ++++-----
 fractal-matrix-api/src/util.rs              | 16 +++++------
 16 files changed, 96 insertions(+), 114 deletions(-)
---
diff --git a/fractal-gtk/src/appop/account.rs b/fractal-gtk/src/appop/account.rs
index 3830af0d..ef75de8e 100644
--- a/fractal-gtk/src/appop/account.rs
+++ b/fractal-gtk/src/appop/account.rs
@@ -40,7 +40,7 @@ impl AppOp {
                 let _ = self.backend.send(BKCommand::AddThreePID(
                     self.server_url.clone(),
                     access_token,
-                    self.identity_url.to_string(), // TODO: Change type to Url
+                    self.identity_url.clone(),
                     secret.clone(),
                     sid.clone(),
                 ));
@@ -133,7 +133,7 @@ impl AppOp {
             &msg,
         );
         let backend = self.backend.clone();
-        let id_server = self.identity_url.to_string();
+        let id_server = self.identity_url.clone();
         let server_url = self.server_url.clone();
         dialog.add_button(&i18n("Cancel"), gtk::ResponseType::Cancel.into());
         dialog.add_button(&i18n("Continue"), gtk::ResponseType::Ok.into());
@@ -143,7 +143,7 @@ impl AppOp {
                     let _ = backend.send(BKCommand::AddThreePID(
                         server_url.clone(),
                         access_token.clone(),
-                        id_server.clone(), // TODO: Change type to Url
+                        id_server.clone(),
                         secret.clone(),
                         sid.clone(),
                     ));
diff --git a/fractal-gtk/src/appop/login.rs b/fractal-gtk/src/appop/login.rs
index 901f9553..4eed2321 100644
--- a/fractal-gtk/src/appop/login.rs
+++ b/fractal-gtk/src/appop/login.rs
@@ -145,9 +145,9 @@ impl AppOp {
 
         let uname = username.clone();
         let pass = password.clone();
-        let ser = self.server_url.to_string();
+        let ser = self.server_url.clone();
         self.backend
-            .send(BKCommand::Register(uname, pass, ser))  // TODO: Change command type to url
+            .send(BKCommand::Register(uname, pass, ser))
             .unwrap();
     }
 
@@ -164,8 +164,8 @@ impl AppOp {
         self.store_pass(
             username.clone()?,
             password.clone()?,
-            self.server_url.to_string(),
-            self.identity_url.to_string(),
+            self.server_url.clone(),
+            self.identity_url.clone(),
         )
         .unwrap_or_else(|_| {
             // TODO: show an error
@@ -174,9 +174,9 @@ impl AppOp {
 
         let uname = username?;
         let pass = password?;
-        let ser = self.server_url.to_string();
+        let ser = self.server_url.clone();
         self.backend
-            .send(BKCommand::Login(uname, pass, ser))  // TODO: Change command type to url
+            .send(BKCommand::Login(uname, pass, ser))
             .unwrap();
         Some(())
     }
@@ -198,7 +198,7 @@ impl AppOp {
         self.server_url = server;
 
         self.backend
-            .send(BKCommand::Guest(self.server_url.to_string()))  // TODO: Change command type to url
+            .send(BKCommand::Guest(self.server_url.clone()))
             .unwrap();
     }
 
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index c3e8094f..19b61698 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -121,7 +121,7 @@ impl AppOp {
                 });
             });
 
-            self.roomlist = widgets::RoomList::new(adj, Some(self.server_url.to_string()));
+            self.roomlist = widgets::RoomList::new(adj, Some(self.server_url.clone()));
             self.roomlist.add_rooms(roomlist);
             container.add(self.roomlist.widget());
 
diff --git a/fractal-gtk/src/passwd.rs b/fractal-gtk/src/passwd.rs
index 518ddfa1..16afa93d 100644
--- a/fractal-gtk/src/passwd.rs
+++ b/fractal-gtk/src/passwd.rs
@@ -27,8 +27,8 @@ pub trait PasswordStorage {
         &self,
         username: String,
         password: String,
-        server: String,
-        identity: String,
+        server: Url,
+        identity: Url,
     ) -> Result<(), Error> {
         ss_storage::store_pass(username, password, server, identity)
     }
@@ -133,8 +133,8 @@ mod ss_storage {
     pub fn store_pass(
         username: String,
         password: String,
-        server: String,
-        identity: String,
+        server: Url,
+        identity: Url,
     ) -> Result<(), Error> {
         let ss = SecretService::new(EncryptionType::Dh)?;
         let collection = ss.get_default_collection()?;
@@ -149,8 +149,8 @@ mod ss_storage {
             key, // label
             vec![
                 ("username", &username),
-                ("server", &server),
-                ("identity", &identity),
+                ("server", server.as_str()),
+                ("identity", identity.as_str()),
             ], // properties
             password.as_bytes(), //secret
             true, // replace item with same attributes
@@ -188,7 +188,7 @@ mod ss_storage {
             .iter()
             .find(|&ref x| x.0 == "server")
             .ok_or(Error::SecretServiceError)?;
-        let server = attr.1.clone();
+        let server = Url::parse(&attr.1)?;
         let pwd = String::from_utf8(secret).unwrap();
 
         // removing old
@@ -196,7 +196,7 @@ mod ss_storage {
             p.delete()?;
         }
         /* Fallback to default identity server if there is none */
-        let identity = globals::DEFAULT_IDENTITYSERVER.to_string();
+        let identity = globals::DEFAULT_IDENTITYSERVER.clone();
 
         store_pass(username, pwd, server, identity)?;
 
diff --git a/fractal-gtk/src/widgets/address.rs b/fractal-gtk/src/widgets/address.rs
index 99995b1b..93634609 100644
--- a/fractal-gtk/src/widgets/address.rs
+++ b/fractal-gtk/src/widgets/address.rs
@@ -163,7 +163,7 @@ impl<'a> Address<'a> {
         let entry = self.entry.clone();
         let address = self.address.clone();
         let server_url = self.op.server_url.clone();
-        let id_server = self.op.identity_url.to_string();
+        let id_server = self.op.identity_url.clone();
         let backend = self.op.backend.clone();
         self.signal_id = Some(self.button.clone().connect_clicked(move |w| {
             if !w.get_sensitive() || !w.is_visible() {
@@ -195,7 +195,7 @@ impl<'a> Address<'a> {
                     add_address(
                         &backend,
                         medium,
-                        id_server.clone(), // TODO: Change type to Url
+                        id_server.clone(),
                         entry.get_text().map_or(None, |gstr| Some(gstr.to_string())),
                         server_url.clone(),
                         access_token.clone(),
@@ -228,7 +228,7 @@ fn delete_address(
 fn add_address(
     backend: &Sender<BKCommand>,
     medium: Medium,
-    id_server: String,
+    id_server: Url,
     address: Option<String>,
     server_url: Url,
     access_token: AccessToken,
diff --git a/fractal-gtk/src/widgets/login.rs b/fractal-gtk/src/widgets/login.rs
index baef5d61..74ccbff1 100644
--- a/fractal-gtk/src/widgets/login.rs
+++ b/fractal-gtk/src/widgets/login.rs
@@ -103,8 +103,7 @@ impl LoginWidget {
                     };
 
                     let mut idserver = globals::DEFAULT_IDENTITYSERVER.clone();
-                    match get_well_known(&txt) {
-                        // TODO: Use Url everywhere
+                    match get_well_known(homeserver_url.clone()) {
                         Ok(response) => {
                             info!("Got well-known response from {}: {:#?}", &txt, response);
                             homeserver_url = response.homeserver.base_url;
diff --git a/fractal-gtk/src/widgets/roomlist.rs b/fractal-gtk/src/widgets/roomlist.rs
index 6d4080ee..f5453ad6 100644
--- a/fractal-gtk/src/widgets/roomlist.rs
+++ b/fractal-gtk/src/widgets/roomlist.rs
@@ -466,12 +466,9 @@ macro_rules! run_in_group {
 }
 
 impl RoomList {
-    // TODO: Change url to Url
-    pub fn new(adj: Option<gtk::Adjustment>, url: Option<String>) -> RoomList {
+    pub fn new(adj: Option<gtk::Adjustment>, url: Option<Url>) -> RoomList {
         let widget = gtk::Box::new(gtk::Orientation::Vertical, 6);
-        let baseu = url
-            .and_then(|u| Url::parse(&u).ok())
-            .unwrap_or(globals::DEFAULT_HOMESERVER.clone());
+        let baseu = url.unwrap_or(globals::DEFAULT_HOMESERVER.clone());
 
         let inv = RGroup::new(
             &baseu,
diff --git a/fractal-matrix-api/src/backend/directory.rs b/fractal-matrix-api/src/backend/directory.rs
index 6c58aaa7..675bf519 100644
--- a/fractal-matrix-api/src/backend/directory.rs
+++ b/fractal-matrix-api/src/backend/directory.rs
@@ -50,7 +50,7 @@ pub fn room_search(
     bk: &Backend,
     base: Url,
     access_token: AccessToken,
-    homeserver: Option<String>, // TODO: Use Url or HostAndPort?
+    homeserver: Option<String>, // TODO: Use HostAndPort?
     generic_search_term: Option<String>,
     third_party: Option<String>,
     more: bool,
diff --git a/fractal-matrix-api/src/backend/media.rs b/fractal-matrix-api/src/backend/media.rs
index 52f45f30..0f966605 100644
--- a/fractal-matrix-api/src/backend/media.rs
+++ b/fractal-matrix-api/src/backend/media.rs
@@ -2,6 +2,7 @@ use crate::backend::types::Backend;
 use crate::error::Error;
 use crate::globals;
 use serde_json::json;
+use std::str::Split;
 use std::sync::mpsc::Sender;
 use std::thread;
 use url::Url;
@@ -68,12 +69,15 @@ pub fn get_media_url(bk: &Backend, baseu: Url, media: String, tx: Sender<String>
     });
 }
 
-pub fn get_file_async(url: String, tx: Sender<String>) -> Result<(), Error> {
-    let name = url.split('/').last().unwrap_or_default();
+pub fn get_file_async(url: Url, tx: Sender<String>) -> Result<(), Error> {
+    let name = url
+        .path_segments()
+        .and_then(Split::last)
+        .unwrap_or_default();
     let fname = cache_dir_path(Some("files"), name)?;
 
     thread::spawn(move || {
-        let fname = download_file(&url, fname, None).unwrap_or_default();
+        let fname = download_file(url, fname, None).unwrap_or_default();
         tx.send(fname).expect_log("Connection closed");
     });
 
@@ -115,7 +119,7 @@ fn get_room_media_list(
     let path = format!("rooms/{}/messages", roomid);
     let url = client_url(baseu, &path, &params)?;
 
-    let r = json_q("get", &url, &json!(null))?;
+    let r = json_q("get", url, &json!(null))?;
     let array = r["chunk"].as_array();
     let prev_batch = r["end"].to_string().trim_matches('"').to_string();
     if array.is_none() || array.unwrap().is_empty() {
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 99b349cb..2e470fe3 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -88,20 +88,15 @@ impl Backend {
         match cmd {
             // Register module
             Ok(BKCommand::Login(user, passwd, server)) => {
-                let r = register::login(self, user, passwd, &server);
-                bkerror!(r, tx, BKResponse::LoginError);
+                register::login(self, user, passwd, server)
             }
             Ok(BKCommand::Logout(server, access_token)) => {
                 register::logout(self, server, access_token)
             }
             Ok(BKCommand::Register(user, passwd, server)) => {
-                let r = register::register(self, user, passwd, &server);
-                bkerror!(r, tx, BKResponse::LoginError);
-            }
-            Ok(BKCommand::Guest(server)) => {
-                let r = register::guest(self, &server);
-                bkerror!(r, tx, BKResponse::GuestLoginError);
+                register::register(self, user, passwd, server)
             }
+            Ok(BKCommand::Guest(server)) => register::guest(self, server),
             Ok(BKCommand::SetToken(token, uid)) => register::set_token(self, token, uid),
 
             // User module
diff --git a/fractal-matrix-api/src/backend/register.rs b/fractal-matrix-api/src/backend/register.rs
index 32ffd90d..7975ecf8 100644
--- a/fractal-matrix-api/src/backend/register.rs
+++ b/fractal-matrix-api/src/backend/register.rs
@@ -27,12 +27,10 @@ use crate::util::HTTP_CLIENT;
 use crate::backend::types::BKResponse;
 use crate::backend::types::Backend;
 
-pub fn guest(bk: &Backend, server: &str) -> Result<(), Error> {
+pub fn guest(bk: &Backend, base: Url) {
     let tx = bk.tx.clone();
     let data = bk.data.clone();
 
-    let base = Url::parse(server)?;
-
     let params = RegisterParameters {
         kind: RegistrationKind::Guest,
     };
@@ -68,16 +66,12 @@ pub fn guest(bk: &Backend, server: &str) -> Result<(), Error> {
             }
         }
     });
-
-    Ok(())
 }
 
-pub fn login(bk: &Backend, user: String, password: String, server: &str) -> Result<(), Error> {
+pub fn login(bk: &Backend, user: String, password: String, base: Url) {
     let tx = bk.tx.clone();
     let data = bk.data.clone();
 
-    let base = Url::parse(server)?;
-
     let body = if globals::EMAIL_RE.is_match(&user) {
         LoginBody {
             auth: Auth::Password { password },
@@ -134,8 +128,6 @@ pub fn login(bk: &Backend, user: String, password: String, server: &str) -> Resu
             }
         }
     });
-
-    Ok(())
 }
 
 pub fn set_token(bk: &Backend, token: AccessToken, uid: String) {
@@ -173,11 +165,10 @@ pub fn logout(bk: &Backend, server: Url, access_token: AccessToken) {
     });
 }
 
-pub fn register(bk: &Backend, user: String, password: String, server: &str) -> Result<(), Error> {
+pub fn register(bk: &Backend, user: String, password: String, base: Url) {
     let data = bk.data.clone();
     let tx = bk.tx.clone();
 
-    let base = Url::parse(server)?;
     let params = Default::default();
     let body = RegisterBody {
         username: Some(user),
@@ -213,18 +204,14 @@ pub fn register(bk: &Backend, user: String, password: String, server: &str) -> R
             }
         }
     });
-
-    Ok(())
 }
 
-pub fn get_well_known(domain: &str) -> Result<DomainInfoResponse, Error> {
-    domain_info(Url::parse(domain)?)
-        .map_err(Into::into)
-        .and_then(|request| {
-            HTTP_CLIENT
-                .get_client()?
-                .execute(request)?
-                .json::<DomainInfoResponse>()
-                .map_err(Into::into)
-        })
+pub fn get_well_known(domain: Url) -> Result<DomainInfoResponse, Error> {
+    domain_info(domain).map_err(Into::into).and_then(|request| {
+        HTTP_CLIENT
+            .get_client()?
+            .execute(request)?
+            .json::<DomainInfoResponse>()
+            .map_err(Into::into)
+    })
 }
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index fa96bd26..a38b9926 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -70,7 +70,7 @@ pub fn get_room_detail(
     let tx = bk.tx.clone();
     let keys = key.clone();
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let k = keys.split('.').last().unwrap();
 
@@ -101,7 +101,7 @@ pub fn get_room_avatar(
     )?;
     let tx = bk.tx.clone();
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let avatar = r["url"].as_str().and_then(|s| Url::parse(s).ok());
             let dest = cache_dir_path(None, &roomid).ok();
@@ -148,7 +148,7 @@ pub fn get_room_members(
 
     let tx = bk.tx.clone();
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let joined = r["joined"].as_object().unwrap();
             let ms: Vec<Member> = joined
@@ -202,7 +202,7 @@ pub fn get_room_messages(
     )?;
     let tx = bk.tx.clone();
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let array = r["chunk"].as_array();
             let evs = array.unwrap().iter().rev();
@@ -259,7 +259,7 @@ fn parse_context(
     )?;
 
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let mut id: Option<String> = None;
 
@@ -354,7 +354,7 @@ pub fn send_msg(
     let tx = bk.tx.clone();
     query!(
         "put",
-        &url,
+        url,
         &attrs,
         move |js: JsonValue| {
             let evid = js["event_id"].as_str().unwrap_or_default();
@@ -390,7 +390,7 @@ pub fn send_typing(
     });
 
     let tx = bk.tx.clone();
-    query!("put", &url, &attrs, move |_| {}, |err| {
+    query!("put", url, &attrs, move |_| {}, |err| {
         tx.send(BKResponse::SendTypingError(err))
             .expect_log("Connection closed");
     });
@@ -422,7 +422,7 @@ pub fn redact_msg(
     let tx = bk.tx.clone();
     query!(
         "put",
-        &url,
+        url,
         &attrs,
         move |js: JsonValue| {
             let evid = js["event_id"].as_str().unwrap_or_default();
@@ -456,7 +456,7 @@ pub fn join_room(
     let tx = bk.tx.clone();
     let data = bk.data.clone();
     post!(
-        &url,
+        url,
         move |_: JsonValue| {
             data.lock().unwrap().join_to_room = roomid.clone();
             tx.send(BKResponse::JoinRoom(Ok(())))
@@ -486,7 +486,7 @@ pub fn leave_room(
 
     let tx = bk.tx.clone();
     post!(
-        &url,
+        url,
         move |_: JsonValue| {
             tx.send(BKResponse::LeaveRoom(Ok(())))
                 .expect_log("Connection closed");
@@ -518,7 +518,7 @@ pub fn mark_as_read(
     let e = eventid.clone();
     let tx = bk.tx.clone();
     post!(
-        &url,
+        url,
         move |_: JsonValue| {
             tx.send(BKResponse::MarkedAsRead(Ok((r, e))))
                 .expect_log("Connection closed");
@@ -543,7 +543,7 @@ pub fn mark_as_read(
         "m.fully_read": eventid,
         "m.read": json!(null),
     });
-    post!(&url, &attrs, |_| {}, |_| {});
+    post!(url, &attrs, |_| {}, |_| {});
 
     Ok(())
 }
@@ -569,7 +569,7 @@ pub fn set_room_name(
     let tx = bk.tx.clone();
     query!(
         "put",
-        &url,
+        url,
         &attrs,
         |_| {
             tx.send(BKResponse::SetRoomName(Ok(())))
@@ -605,7 +605,7 @@ pub fn set_room_topic(
     let tx = bk.tx.clone();
     query!(
         "put",
-        &url,
+        url,
         &attrs,
         |_| {
             tx.send(BKResponse::SetRoomTopic(Ok(())))
@@ -651,7 +651,7 @@ pub fn set_room_avatar(
                 let uri = js["content_uri"].as_str().unwrap_or_default();
                 let attrs = json!({ "url": uri });
                 put!(
-                    &roomurl,
+                    roomurl,
                     &attrs,
                     |_| {
                         tx.send(BKResponse::SetRoomAvatar(Ok(())))
@@ -771,7 +771,7 @@ pub fn new_room(
 
     let tx = bk.tx.clone();
     post!(
-        &url,
+        url,
         &attrs,
         move |r: JsonValue| {
             let id = String::from(r["room_id"].as_str().unwrap_or_default());
@@ -790,7 +790,7 @@ pub fn new_room(
 
 pub fn update_direct_chats(url: Url, data: Arc<Mutex<BackendData>>, user: String, room: String) {
     get!(
-        &url,
+        url.clone(),
         |r: JsonValue| {
             let mut directs: HashMap<String, Vec<String>> = HashMap::new();
             let direct_obj = r.as_object().unwrap();
@@ -815,7 +815,7 @@ pub fn update_direct_chats(url: Url, data: Arc<Mutex<BackendData>>, user: String
             data.lock().unwrap().m_direct = directs.clone();
 
             let attrs = json!(directs.clone());
-            put!(&url, &attrs, |_| {}, |err| error!("{:?}", err));
+            put!(url, &attrs, |_| {}, |err| error!("{:?}", err));
         },
         |err| {
             error!("Can't set m.direct: {:?}", err);
@@ -856,7 +856,7 @@ pub fn direct_chat(
     let tx = bk.tx.clone();
     let data = bk.data.clone();
     post!(
-        &url,
+        url,
         &attrs,
         move |r: JsonValue| {
             let id = String::from(r["room_id"].as_str().unwrap_or_default());
@@ -900,7 +900,7 @@ pub fn add_to_fav(
     let method = if tofav { "put" } else { "delete" };
     query!(
         method,
-        &url,
+        url,
         &attrs,
         |_| {
             tx.send(BKResponse::AddedToFav(Ok((roomid.clone(), tofav))))
@@ -934,7 +934,7 @@ pub fn invite(
     });
 
     let tx = bk.tx.clone();
-    post!(&url, &attrs, |_| {}, |err| {
+    post!(url, &attrs, |_| {}, |err| {
         tx.send(BKResponse::InviteError(err))
             .expect_log("Connection closed");
     });
diff --git a/fractal-matrix-api/src/backend/stickers.rs b/fractal-matrix-api/src/backend/stickers.rs
index 86424db6..e41d68f3 100644
--- a/fractal-matrix-api/src/backend/stickers.rs
+++ b/fractal-matrix-api/src/backend/stickers.rs
@@ -41,7 +41,7 @@ pub fn list(bk: &Backend, access_token: AccessToken) -> Result<(), Error> {
 
     let tx = bk.tx.clone();
     get!(
-        &url,
+        url,
         |r: JsonValue| {
             let mut stickers = vec![];
             for sticker_group in r["assets"].as_array().unwrap_or(&vec![]).iter() {
@@ -74,7 +74,7 @@ pub fn get_sticker_widget_id(
 
     let url = vurl(&d, &access_token, "widgets/request", vec![]).unwrap();
     post!(
-        &url,
+        url,
         &data,
         |r: JsonValue| {
             let mut id = String::new();
@@ -145,7 +145,7 @@ pub fn send(
     let tx = bk.tx.clone();
     query!(
         "put",
-        &url,
+        url,
         &attrs,
         move |js: JsonValue| {
             let evid = js["event_id"].as_str().unwrap_or_default();
@@ -183,7 +183,7 @@ pub fn purchase(bk: &Backend, access_token: AccessToken, group: StickerGroup) ->
     let tx = bk.tx.clone();
     let itx = bk.internal_tx.clone();
     get!(
-        &url,
+        url,
         |_| if let Some(t) = itx {
             t.send(BKCommand::ListStickers(access_token))
                 .expect_log("Connection closed");
@@ -207,12 +207,12 @@ fn get_scalar_token(
     let params = &[("access_token", access_token.to_string())];
     let path = &format!("user/{}/openid/request_token", uid);
     let url = client_url(&base, path, params)?;
-    let js = json_q("post", &url, &json!({}))?;
+    let js = json_q("post", url, &json!({}))?;
 
     let vurl = base
         .join("/api/register")
         .expect("Wrong URL in get_scalar_token()");
-    let js = json_q("post", &vurl, &js)?;
+    let js = json_q("post", vurl, &js)?;
 
     match js["scalar_token"].as_str() {
         Some(st) => {
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index ae1392f5..34a8909d 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -20,20 +20,20 @@ use url::Url;
 
 #[derive(Debug)]
 pub enum BKCommand {
-    Login(String, String, String),
+    Login(String, String, Url),
     SetToken(AccessToken, String),
     Logout(Url, AccessToken),
     #[allow(dead_code)]
-    Register(String, String, String),
+    Register(String, String, Url),
     #[allow(dead_code)]
-    Guest(String),
+    Guest(Url),
     GetUsername(Url),
     SetUserName(Url, AccessToken, String),
     GetThreePID(Url, AccessToken),
-    GetTokenEmail(Url, AccessToken, String, String, String),
-    GetTokenPhone(Url, AccessToken, String, String, String),
+    GetTokenEmail(Url, AccessToken, Url, String, String),
+    GetTokenPhone(Url, AccessToken, Url, String, String),
     SubmitPhoneToken(Url, String, String, String),
-    AddThreePID(Url, AccessToken, String, String, String),
+    AddThreePID(Url, AccessToken, Url, String, String),
     DeleteThreePID(Url, AccessToken, Medium, String),
     ChangePassword(Url, AccessToken, String, String, String),
     AccountDestruction(Url, AccessToken, String, String),
@@ -56,7 +56,7 @@ pub enum BKCommand {
         Option<String>,
         Sender<(Vec<Message>, String)>,
     ),
-    GetFileAsync(String, Sender<String>),
+    GetFileAsync(Url, Sender<String>),
     GetAvatarAsync(Url, Option<Member>, Sender<String>),
     GetMedia(Url, String),
     GetMediaUrl(Url, String, Sender<String>),
diff --git a/fractal-matrix-api/src/backend/user.rs b/fractal-matrix-api/src/backend/user.rs
index 79171909..e43df202 100644
--- a/fractal-matrix-api/src/backend/user.rs
+++ b/fractal-matrix-api/src/backend/user.rs
@@ -152,13 +152,13 @@ pub fn get_threepid(
 pub fn get_email_token(
     base: Url,
     access_token: AccessToken,
-    identity: String,
+    identity: Url,
     email: String,
     client_secret: String,
 ) -> Result<(String, String), Error> {
     let params = EmailTokenParameters { access_token };
     let body = EmailTokenBody {
-        id_server: Url::parse(&identity)?.try_into()?,
+        id_server: identity.try_into()?,
         client_secret: client_secret.clone(),
         email,
         send_attempt: 1,
@@ -190,13 +190,13 @@ pub fn get_email_token(
 pub fn get_phone_token(
     base: Url,
     access_token: AccessToken,
-    identity: String,
+    identity: Url,
     phone: String,
     client_secret: String,
 ) -> Result<(String, String), Error> {
     let params = PhoneTokenParameters { access_token };
     let body = PhoneTokenBody {
-        id_server: Url::parse(&identity)?.try_into()?,
+        id_server: identity.try_into()?,
         client_secret: client_secret.clone(),
         phone_number: phone,
         country: String::new(),
@@ -229,14 +229,14 @@ pub fn get_phone_token(
 pub fn add_threepid(
     base: Url,
     access_token: AccessToken,
-    identity: String,
+    identity: Url,
     client_secret: String,
     sid: String,
 ) -> Result<(), Error> {
     let params = AddThreePIDParameters { access_token };
     let body = AddThreePIDBody {
         three_pid_creds: ThreePIDCredentials {
-            id_server: Url::parse(&identity)?.try_into()?,
+            id_server: identity.try_into()?,
             sid: sid.clone(),
             client_secret,
         },
diff --git a/fractal-matrix-api/src/util.rs b/fractal-matrix-api/src/util.rs
index 408d0111..4b53e4c0 100644
--- a/fractal-matrix-api/src/util.rs
+++ b/fractal-matrix-api/src/util.rs
@@ -201,7 +201,7 @@ pub fn get_prev_batch_from(
     let path = format!("rooms/{}/context/{}", roomid, evid);
     let url = client_url(baseu, &path, params)?;
 
-    let r = json_q("get", &url, &json!(null))?;
+    let r = json_q("get", url, &json!(null))?;
     let prev_batch = r["start"].to_string().trim_matches('"').to_string();
 
     Ok(prev_batch)
@@ -263,10 +263,10 @@ pub fn dw_media(
         Some(d) => String::from(d),
     };
 
-    download_file(url.as_str(), fname, dest)
+    download_file(url, fname, dest)
 }
 
-pub fn download_file(url: &str, fname: String, dest: Option<&str>) -> Result<String, Error> {
+pub fn download_file(url: Url, fname: String, dest: Option<&str>) -> Result<String, Error> {
     let fpath = Path::new(&fname);
 
     // If the file is already cached and recent enough, don't download it
@@ -287,12 +287,12 @@ pub fn download_file(url: &str, fname: String, dest: Option<&str>) -> Result<Str
     }
 }
 
-pub fn json_q(method: &str, url: &Url, attrs: &JsonValue) -> Result<JsonValue, Error> {
+pub fn json_q(method: &str, url: Url, attrs: &JsonValue) -> Result<JsonValue, Error> {
     let mut conn = match method {
-        "post" => HTTP_CLIENT.get_client()?.post(url.as_str()),
-        "put" => HTTP_CLIENT.get_client()?.put(url.as_str()),
-        "delete" => HTTP_CLIENT.get_client()?.delete(url.as_str()),
-        _ => HTTP_CLIENT.get_client()?.get(url.as_str()),
+        "post" => HTTP_CLIENT.get_client()?.post(url),
+        "put" => HTTP_CLIENT.get_client()?.put(url),
+        "delete" => HTTP_CLIENT.get_client()?.delete(url),
+        _ => HTTP_CLIENT.get_client()?.get(url),
     };
 
     if !attrs.is_null() {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]