diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index 89d11ec99..42347a9cf 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -311,9 +311,12 @@ pub unsafe extern "C" fn dc_get_oauth2_url( let redirect = to_string_lossy(redirect); block_on(async move { - match oauth2::dc_get_oauth2_url(ctx, &addr, &redirect).await { - Some(res) => res.strdup(), - None => ptr::null_mut(), + match oauth2::dc_get_oauth2_url(ctx, &addr, &redirect) + .await + .log_err(ctx, "dc_get_oauth2_url failed") + { + Ok(Some(res)) => res.strdup(), + Ok(None) | Err(_) => ptr::null_mut(), } }) } @@ -3620,12 +3623,16 @@ pub unsafe extern "C" fn dc_provider_new_from_email( ctx.get_config_bool(config::Config::Socks5Enabled) .await .log_err(ctx, "Can't get config") - .unwrap_or_default() }); - match block_on(provider::get_provider_info(addr.as_str(), socks5_enabled)) { - Some(provider) => provider, - None => ptr::null_mut(), + match socks5_enabled { + Ok(socks5_enabled) => { + match block_on(provider::get_provider_info(addr.as_str(), socks5_enabled)) { + Some(provider) => provider, + None => ptr::null_mut(), + } + } + Err(_) => ptr::null_mut(), } } diff --git a/examples/repl/cmdline.rs b/examples/repl/cmdline.rs index 381b4fe24..ef8ece2d8 100644 --- a/examples/repl/cmdline.rs +++ b/examples/repl/cmdline.rs @@ -1170,8 +1170,7 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu ensure!(!arg1.is_empty(), "Argument missing."); let socks5_enabled = context .get_config_bool(config::Config::Socks5Enabled) - .await - .unwrap_or_default(); + .await?; match provider::get_provider_info(arg1, socks5_enabled).await { Some(info) => { println!("Information for provider belonging to {}:", arg1); diff --git a/examples/repl/main.rs b/examples/repl/main.rs index 4838d2ef5..1cf52e1ea 100644 --- a/examples/repl/main.rs +++ b/examples/repl/main.rs @@ -392,7 +392,7 @@ async fn handle_cmd( "oauth2" => { if let Some(addr) = ctx.get_config(config::Config::Addr).await? { let oauth2_url = - dc_get_oauth2_url(&ctx, &addr, "chat.delta:/com.b44t.messenger").await; + dc_get_oauth2_url(&ctx, &addr, "chat.delta:/com.b44t.messenger").await?; if oauth2_url.is_none() { println!("OAuth2 not available for {}.", &addr); } else { diff --git a/src/login_param.rs b/src/login_param.rs index bc03d42fb..c02a20978 100644 --- a/src/login_param.rs +++ b/src/login_param.rs @@ -63,10 +63,7 @@ impl Socks5Config { pub async fn from_database(context: &Context) -> Result> { let sql = &context.sql; - let enabled = sql - .get_raw_config_bool("socks5_enabled") - .await - .unwrap_or(false); + let enabled = sql.get_raw_config_bool("socks5_enabled").await?; if enabled { let host = sql.get_raw_config("socks5_host").await?.unwrap_or_default(); let port: u16 = sql diff --git a/src/oauth2.rs b/src/oauth2.rs index 15d25a1d3..11c492038 100644 --- a/src/oauth2.rs +++ b/src/oauth2.rs @@ -56,26 +56,19 @@ pub async fn dc_get_oauth2_url( context: &Context, addr: &str, redirect_uri: &str, -) -> Option { - let socks5_enabled = context - .get_config_bool(Config::Socks5Enabled) - .await - .unwrap_or(false); +) -> Result> { + let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?; if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await { - if context + context .sql .set_raw_config("oauth2_pending_redirect_uri", Some(redirect_uri)) - .await - .is_err() - { - return None; - } + .await?; let oauth2_url = replace_in_uri(oauth2.get_code, "$CLIENT_ID", oauth2.client_id); let oauth2_url = replace_in_uri(&oauth2_url, "$REDIRECT_URI", redirect_uri); - Some(oauth2_url) + Ok(Some(oauth2_url)) } else { - None + Ok(None) } } @@ -85,10 +78,7 @@ pub async fn dc_get_oauth2_access_token( code: &str, regenerate: bool, ) -> Result> { - let socks5_enabled = context - .get_config_bool(Config::Socks5Enabled) - .await - .unwrap_or(false); + let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?; if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await { let lock = context.oauth2_mutex.lock().await; @@ -234,10 +224,7 @@ pub async fn dc_get_oauth2_addr( addr: &str, code: &str, ) -> Result> { - let socks5_enabled = context - .get_config_bool(Config::Socks5Enabled) - .await - .unwrap_or(false); + let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?; let oauth2 = match Oauth2::from_address(addr, socks5_enabled).await { Some(o) => o, None => return Ok(None), @@ -412,7 +399,9 @@ mod tests { let ctx = TestContext::new().await; let addr = "dignifiedquire@gmail.com"; let redirect_uri = "chat.delta:/com.b44t.messenger"; - let res = dc_get_oauth2_url(&ctx.ctx, addr, redirect_uri).await; + let res = dc_get_oauth2_url(&ctx.ctx, addr, redirect_uri) + .await + .unwrap(); assert_eq!(res, Some("https://accounts.google.com/o/oauth2/auth?client_id=959970109878%2D4mvtgf6feshskf7695nfln6002mom908%2Eapps%2Egoogleusercontent%2Ecom&redirect_uri=chat%2Edelta%3A%2Fcom%2Eb44t%2Emessenger&response_type=code&scope=https%3A%2F%2Fmail.google.com%2F%20email&access_type=offline".into())); }