melib/jmap: construct session resource url from user settings

async
Manos Pitsidianakis 2019-12-13 00:36:26 +02:00
parent b3cf45b457
commit 2ed9ffb145
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
3 changed files with 16 additions and 7 deletions

View File

@ -48,18 +48,27 @@ impl JmapConnection {
.danger_accept_invalid_certs(server_conf.danger_accept_invalid_certs) .danger_accept_invalid_certs(server_conf.danger_accept_invalid_certs)
.default_headers(headers) .default_headers(headers)
.build()?; .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 let req = client
.get(&server_conf.server_hostname) .get(&jmap_session_resource_url)
.basic_auth( .basic_auth(
&server_conf.server_username, &server_conf.server_username,
Some(&server_conf.server_password), Some(&server_conf.server_password),
) )
.send()?; .send()?;
let res_text = req.text()?; 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 if !session
.capabilities .capabilities
.contains_key("urn:ietf:params:jmap:core") .contains_key("urn:ietf:params:jmap:core")

View File

@ -76,7 +76,7 @@ impl BackendOp for JmapOp {
.client .client
.lock() .lock()
.unwrap() .unwrap()
.get(&downloadRequestFormat( .get(&download_request_format(
&self.connection.session, &self.connection.session,
self.connection.mail_account_id(), self.connection.mail_account_id(),
blob_id, blob_id,

View File

@ -485,7 +485,7 @@ impl<OBJ: Object> ChangesResponse<OBJ> {
_impl!(get_mut destroyed_mut, destroyed: Vec<String>); _impl!(get_mut destroyed_mut, destroyed: Vec<String>);
} }
pub fn downloadRequestFormat( pub fn download_request_format(
session: &JmapSession, session: &JmapSession,
account_id: &Id, account_id: &Id,
blob_id: &Id, blob_id: &Id,
@ -520,7 +520,7 @@ pub fn downloadRequestFormat(
ret 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}/", //"uploadUrl": "https://jmap.fastmail.com/upload/{accountId}/",
let mut ret = String::with_capacity(session.upload_url.len() + account_id.len()); let mut ret = String::with_capacity(session.upload_url.len() + account_id.len());
let mut prev_pos = 0; let mut prev_pos = 0;