[evolution-data-server/gnome-3-22] Bug 779161 - [Google Auth] Asks for re-sign when cannot reach server to refresh token
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-22] Bug 779161 - [Google Auth] Asks for re-sign when cannot reach server to refresh token
- Date: Tue, 28 Feb 2017 17:27:21 +0000 (UTC)
commit e389e4f926b839bc982702ee686c3d84cd5ff540
Author: Milan Crha <mcrha redhat com>
Date: Tue Feb 28 18:20:01 2017 +0100
Bug 779161 - [Google Auth] Asks for re-sign when cannot reach server to refresh token
.../e-source-credentials-provider-impl-google.c | 2 +-
.../e-credentials-prompter-impl-google.c | 21 ++++++++++++++++++-
2 files changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/libedataserver/e-source-credentials-provider-impl-google.c
b/libedataserver/e-source-credentials-provider-impl-google.c
index e333cfa..3ae767e 100644
--- a/libedataserver/e-source-credentials-provider-impl-google.c
+++ b/libedataserver/e-source-credentials-provider-impl-google.c
@@ -673,7 +673,7 @@ e_source_credentials_google_util_decode_from_secret (const gchar *secret,
g_return_val_if_fail (key1_name != NULL, FALSE);
g_return_val_if_fail (out_value1 != NULL, FALSE);
- if (!secret)
+ if (!secret || !*secret)
return FALSE;
parser = json_parser_new ();
diff --git a/libedataserverui/e-credentials-prompter-impl-google.c
b/libedataserverui/e-credentials-prompter-impl-google.c
index 2e8fe3b..9c70183 100644
--- a/libedataserverui/e-credentials-prompter-impl-google.c
+++ b/libedataserverui/e-credentials-prompter-impl-google.c
@@ -58,6 +58,7 @@ struct _ECredentialsPrompterImplGooglePrivate {
ESource *cred_source;
gchar *error_text;
ENamedParameters *credentials;
+ gboolean refresh_failed_with_transport_error;
GtkDialog *dialog;
#ifdef ENABLE_GOOGLE_AUTH
@@ -852,15 +853,19 @@ e_credentials_prompter_impl_google_manage_dialog_idle_cb (gpointer user_data)
g_mutex_lock (&prompter_google->priv->property_lock);
if (g_source_get_id (g_main_current_source ()) == prompter_google->priv->show_dialog_idle_id) {
- gboolean success;
+ gboolean success, refresh_failed_with_transport_error;
prompter_google->priv->show_dialog_idle_id = 0;
+ refresh_failed_with_transport_error =
prompter_google->priv->refresh_failed_with_transport_error;
+
g_mutex_unlock (&prompter_google->priv->property_lock);
g_warn_if_fail (prompter_google->priv->dialog == NULL);
if (e_named_parameters_exists (prompter_google->priv->credentials,
E_SOURCE_CREDENTIAL_PASSWORD))
success = TRUE;
+ else if (refresh_failed_with_transport_error)
+ success = FALSE;
else
success = e_credentials_prompter_impl_google_show_dialog (prompter_google);
@@ -923,12 +928,20 @@ cpi_google_check_existing_token_thread (gpointer user_data)
cancellable = td->cancellable;
+ prompter_google = g_weak_ref_get (td->prompter_google);
+ if (!prompter_google)
+ goto exit;
+
if (g_cancellable_is_cancelled (cancellable))
goto exit;
if (!e_source_credentials_google_util_decode_from_secret (td->secret, E_GOOGLE_SECRET_REFRESH_TOKEN,
&refresh_token, NULL))
goto exit;
+ g_mutex_lock (&prompter_google->priv->property_lock);
+ prompter_google->priv->refresh_failed_with_transport_error = FALSE;
+ g_mutex_unlock (&prompter_google->priv->property_lock);
+
if (refresh_token) {
gchar *post_data, *response_json = NULL;
guint soup_status;
@@ -954,6 +967,10 @@ cpi_google_check_existing_token_thread (gpointer user_data)
g_free (access_token);
g_free (expires_in);
+ } else if (SOUP_STATUS_IS_TRANSPORT_ERROR (soup_status)) {
+ g_mutex_lock (&prompter_google->priv->property_lock);
+ prompter_google->priv->refresh_failed_with_transport_error = TRUE;
+ g_mutex_unlock (&prompter_google->priv->property_lock);
}
g_free (response_json);
@@ -961,7 +978,6 @@ cpi_google_check_existing_token_thread (gpointer user_data)
}
exit:
- prompter_google = g_weak_ref_get (td->prompter_google);
if (prompter_google && !g_cancellable_is_cancelled (cancellable)) {
g_mutex_lock (&prompter_google->priv->property_lock);
prompter_google->priv->show_dialog_idle_id = g_idle_add (
@@ -1052,6 +1068,7 @@ e_credentials_prompter_impl_google_process_prompt (ECredentialsPrompterImpl *pro
} else {
#endif /* ENABLE_GOOGLE_AUTH */
g_mutex_lock (&prompter_google->priv->property_lock);
+ prompter_google->priv->refresh_failed_with_transport_error = FALSE;
prompter_google->priv->show_dialog_idle_id = g_idle_add (
e_credentials_prompter_impl_google_manage_dialog_idle_cb,
prompter_google);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]