Never ignore SQL errors when reading SOCKS5 settings

Otherwise we may accidentally connect directly due to temporary error.
This commit is contained in:
link2xt
2021-08-22 18:29:51 +00:00
parent ab1de69fbc
commit 3aa2b57ac1
5 changed files with 28 additions and 36 deletions

View File

@@ -311,9 +311,12 @@ pub unsafe extern "C" fn dc_get_oauth2_url(
let redirect = to_string_lossy(redirect); let redirect = to_string_lossy(redirect);
block_on(async move { block_on(async move {
match oauth2::dc_get_oauth2_url(ctx, &addr, &redirect).await { match oauth2::dc_get_oauth2_url(ctx, &addr, &redirect)
Some(res) => res.strdup(), .await
None => ptr::null_mut(), .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) ctx.get_config_bool(config::Config::Socks5Enabled)
.await .await
.log_err(ctx, "Can't get config") .log_err(ctx, "Can't get config")
.unwrap_or_default()
}); });
match block_on(provider::get_provider_info(addr.as_str(), socks5_enabled)) { match socks5_enabled {
Some(provider) => provider, Ok(socks5_enabled) => {
None => ptr::null_mut(), match block_on(provider::get_provider_info(addr.as_str(), socks5_enabled)) {
Some(provider) => provider,
None => ptr::null_mut(),
}
}
Err(_) => ptr::null_mut(),
} }
} }

View File

@@ -1170,8 +1170,7 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu
ensure!(!arg1.is_empty(), "Argument <addr> missing."); ensure!(!arg1.is_empty(), "Argument <addr> missing.");
let socks5_enabled = context let socks5_enabled = context
.get_config_bool(config::Config::Socks5Enabled) .get_config_bool(config::Config::Socks5Enabled)
.await .await?;
.unwrap_or_default();
match provider::get_provider_info(arg1, socks5_enabled).await { match provider::get_provider_info(arg1, socks5_enabled).await {
Some(info) => { Some(info) => {
println!("Information for provider belonging to {}:", arg1); println!("Information for provider belonging to {}:", arg1);

View File

@@ -392,7 +392,7 @@ async fn handle_cmd(
"oauth2" => { "oauth2" => {
if let Some(addr) = ctx.get_config(config::Config::Addr).await? { if let Some(addr) = ctx.get_config(config::Config::Addr).await? {
let oauth2_url = 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() { if oauth2_url.is_none() {
println!("OAuth2 not available for {}.", &addr); println!("OAuth2 not available for {}.", &addr);
} else { } else {

View File

@@ -63,10 +63,7 @@ impl Socks5Config {
pub async fn from_database(context: &Context) -> Result<Option<Self>> { pub async fn from_database(context: &Context) -> Result<Option<Self>> {
let sql = &context.sql; let sql = &context.sql;
let enabled = sql let enabled = sql.get_raw_config_bool("socks5_enabled").await?;
.get_raw_config_bool("socks5_enabled")
.await
.unwrap_or(false);
if enabled { if enabled {
let host = sql.get_raw_config("socks5_host").await?.unwrap_or_default(); let host = sql.get_raw_config("socks5_host").await?.unwrap_or_default();
let port: u16 = sql let port: u16 = sql

View File

@@ -56,26 +56,19 @@ pub async fn dc_get_oauth2_url(
context: &Context, context: &Context,
addr: &str, addr: &str,
redirect_uri: &str, redirect_uri: &str,
) -> Option<String> { ) -> Result<Option<String>> {
let socks5_enabled = context let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?;
.get_config_bool(Config::Socks5Enabled)
.await
.unwrap_or(false);
if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await { if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await {
if context context
.sql .sql
.set_raw_config("oauth2_pending_redirect_uri", Some(redirect_uri)) .set_raw_config("oauth2_pending_redirect_uri", Some(redirect_uri))
.await .await?;
.is_err()
{
return None;
}
let oauth2_url = replace_in_uri(oauth2.get_code, "$CLIENT_ID", oauth2.client_id); 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); let oauth2_url = replace_in_uri(&oauth2_url, "$REDIRECT_URI", redirect_uri);
Some(oauth2_url) Ok(Some(oauth2_url))
} else { } else {
None Ok(None)
} }
} }
@@ -85,10 +78,7 @@ pub async fn dc_get_oauth2_access_token(
code: &str, code: &str,
regenerate: bool, regenerate: bool,
) -> Result<Option<String>> { ) -> Result<Option<String>> {
let socks5_enabled = context let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?;
.get_config_bool(Config::Socks5Enabled)
.await
.unwrap_or(false);
if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await { if let Some(oauth2) = Oauth2::from_address(addr, socks5_enabled).await {
let lock = context.oauth2_mutex.lock().await; let lock = context.oauth2_mutex.lock().await;
@@ -234,10 +224,7 @@ pub async fn dc_get_oauth2_addr(
addr: &str, addr: &str,
code: &str, code: &str,
) -> Result<Option<String>> { ) -> Result<Option<String>> {
let socks5_enabled = context let socks5_enabled = context.get_config_bool(Config::Socks5Enabled).await?;
.get_config_bool(Config::Socks5Enabled)
.await
.unwrap_or(false);
let oauth2 = match Oauth2::from_address(addr, socks5_enabled).await { let oauth2 = match Oauth2::from_address(addr, socks5_enabled).await {
Some(o) => o, Some(o) => o,
None => return Ok(None), None => return Ok(None),
@@ -412,7 +399,9 @@ mod tests {
let ctx = TestContext::new().await; let ctx = TestContext::new().await;
let addr = "dignifiedquire@gmail.com"; let addr = "dignifiedquire@gmail.com";
let redirect_uri = "chat.delta:/com.b44t.messenger"; 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())); 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()));
} }