diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-12-13 00:36:26 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-12-13 00:36:26 +0200 |
commit | 2ed9ffb14549cbab7c7bc30b7a23a45cf3382930 (patch) | |
tree | d21d4ff06ed46acf979c5f65ba895028192231d7 /melib | |
parent | b3cf45b457e1dbcf8812f33f2b9f8b512da52925 (diff) |
melib/jmap: construct session resource url from user settings
Diffstat (limited to 'melib')
-rw-r--r-- | melib/src/backends/jmap/connection.rs | 17 | ||||
-rw-r--r-- | melib/src/backends/jmap/operations.rs | 2 | ||||
-rw-r--r-- | melib/src/backends/jmap/rfc8620.rs | 4 |
3 files changed, 16 insertions, 7 deletions
diff --git a/melib/src/backends/jmap/connection.rs b/melib/src/backends/jmap/connection.rs index 321aeb26..dfa0cfe4 100644 --- a/melib/src/backends/jmap/connection.rs +++ b/melib/src/backends/jmap/connection.rs @@ -48,18 +48,27 @@ impl JmapConnection { .danger_accept_invalid_certs(server_conf.danger_accept_invalid_certs) .default_headers(headers) .build()?; + let mut jmap_session_resource_url = if server_conf.server_hostname.starts_with("https://") { + server_conf.server_hostname.to_string() + } else { + format!("https://{}", &server_conf.server_hostname) + }; + if server_conf.server_port != 443 { + jmap_session_resource_url.push(':'); + jmap_session_resource_url.extend(server_conf.server_port.to_string().chars()); + } + jmap_session_resource_url.push_str("/.well-known/jmap"); + let req = client - .get(&server_conf.server_hostname) + .get(&jmap_session_resource_url) .basic_auth( &server_conf.server_username, Some(&server_conf.server_password), ) .send()?; let res_text = req.text()?; - debug!(&res_text); - - let session: JmapSession = serde_json::from_str(&res_text)?; + let session: JmapSession = serde_json::from_str(&res_text).map_err(|_| MeliError::new(format!("Could not connect to JMAP server endpoint for {}. Is your server hostname setting correct? (i.e. \"jmap.mailserver.org\") (Note: only session resource discovery via /.well-known/jmap is supported. DNS SRV records are not suppported.)", &server_conf.server_hostname)))?; if !session .capabilities .contains_key("urn:ietf:params:jmap:core") diff --git a/melib/src/backends/jmap/operations.rs b/melib/src/backends/jmap/operations.rs index 8ec3712f..68f58e24 100644 --- a/melib/src/backends/jmap/operations.rs +++ b/melib/src/backends/jmap/operations.rs @@ -76,7 +76,7 @@ impl BackendOp for JmapOp { .client .lock() .unwrap() - .get(&downloadRequestFormat( + .get(&download_request_format( &self.connection.session, self.connection.mail_account_id(), blob_id, diff --git a/melib/src/backends/jmap/rfc8620.rs b/melib/src/backends/jmap/rfc8620.rs index 7f668418..3d5d8d80 100644 --- a/melib/src/backends/jmap/rfc8620.rs +++ b/melib/src/backends/jmap/rfc8620.rs @@ -485,7 +485,7 @@ impl<OBJ: Object> ChangesResponse<OBJ> { _impl!(get_mut destroyed_mut, destroyed: Vec<String>); } -pub fn downloadRequestFormat( +pub fn download_request_format( session: &JmapSession, account_id: &Id, blob_id: &Id, @@ -520,7 +520,7 @@ pub fn downloadRequestFormat( ret } -pub fn uploadRequestFormat(session: &JmapSession, account_id: &Id) -> String { +pub fn upload_request_format(session: &JmapSession, account_id: &Id) -> String { //"uploadUrl": "https://jmap.fastmail.com/upload/{accountId}/", let mut ret = String::with_capacity(session.upload_url.len() + account_id.len()); let mut prev_pos = 0; |