[evolution-data-server] Bug 761450 - CalDAV fails to recognize "Daily Limit Exceeded" error from Google/GOA



commit 24b3f04e2ab11a20415ddfb6b5fa2522b6b17cbc
Author: Milan Crha <mcrha redhat com>
Date:   Wed Aug 24 17:49:22 2016 +0200

    Bug 761450 - CalDAV fails to recognize "Daily Limit Exceeded" error from Google/GOA

 calendar/backends/caldav/e-cal-backend-caldav.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c
index 94e2cce..164d918 100644
--- a/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -404,6 +404,8 @@ caldav_maybe_prepare_bearer_auth (ECalBackendCalDAV *cbdav,
 
        success = caldav_setup_bearer_auth (cbdav, E_SOUP_AUTH_BEARER (soup_auth), cancellable, error);
        if (success) {
+               cbdav->priv->using_bearer_auth = TRUE;
+
                soup_auth_manager_use_auth (
                        SOUP_AUTH_MANAGER (feature),
                        soup_uri, soup_auth);
@@ -690,7 +692,24 @@ status_code_to_result (SoupMessage *message,
                break;
 
        case SOUP_STATUS_FORBIDDEN:
-               g_propagate_error (perror, EDC_ERROR (AuthenticationRequired));
+               if (cbdav->priv->using_bearer_auth && message->response_body &&
+                   message->response_body->data && message->response_body->length) {
+                       gchar *body = g_strndup (message->response_body->data, 
message->response_body->length);
+
+                       /* Do not localize this string, it is returned by the server. */
+                       if (body && (e_util_strstrcase (body, "Daily Limit Exceeded") ||
+                           e_util_strstrcase (body, "https://console.developers.google.com/";))) {
+                               /* Special-case this condition and provide this error up to the UI. */
+                               g_propagate_error (perror,
+                                       e_data_cal_create_error_fmt (OtherError, _("Failed to login to the 
server: %s"), body));
+                       } else {
+                               g_propagate_error (perror, EDC_ERROR (AuthenticationRequired));
+                       }
+
+                       g_free (body);
+               } else {
+                       g_propagate_error (perror, EDC_ERROR (AuthenticationRequired));
+               }
                break;
 
        case SOUP_STATUS_UNAUTHORIZED:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]