[evolution-data-server] I#204 - GOA-configured Nextcloud account not appearing



commit 605aad4a646893d2a4102721981428072a32fd26
Author: Milan Crha <mcrha redhat com>
Date:   Tue Mar 31 15:30:36 2020 +0200

    I#204 - GOA-configured Nextcloud account not appearing
    
    Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/204

 src/addressbook/backends/carddav/e-book-backend-carddav.c      |  3 ++-
 src/calendar/backends/caldav/e-cal-backend-caldav.c            |  3 ++-
 .../backends/webdav-notes/e-cal-backend-webdav-notes.c         |  3 ++-
 src/libebackend/e-backend.c                                    | 10 ++++++----
 src/libebackend/e-webdav-collection-backend.c                  |  9 ++++++++-
 5 files changed, 20 insertions(+), 8 deletions(-)
---
diff --git a/src/addressbook/backends/carddav/e-book-backend-carddav.c 
b/src/addressbook/backends/carddav/e-book-backend-carddav.c
index b5f3f917c..f1cf3ccf7 100644
--- a/src/addressbook/backends/carddav/e-book-backend-carddav.c
+++ b/src/addressbook/backends/carddav/e-book-backend-carddav.c
@@ -251,7 +251,8 @@ ebb_carddav_connect_sync (EBookMetaBackend *meta_backend,
                gboolean credentials_empty;
                gboolean is_ssl_error;
 
-               credentials_empty = (!credentials || !e_named_parameters_count (credentials)) &&
+               credentials_empty = (!credentials || !e_named_parameters_count (credentials) ||
+                       (e_named_parameters_count (credentials) == 1 && e_named_parameters_exists 
(credentials, E_SOURCE_CREDENTIAL_SSL_TRUST))) &&
                        e_soup_session_get_authentication_requires_credentials (E_SOUP_SESSION (webdav));
                is_ssl_error = g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED);
 
diff --git a/src/calendar/backends/caldav/e-cal-backend-caldav.c 
b/src/calendar/backends/caldav/e-cal-backend-caldav.c
index 3f69c4e14..002e6c77e 100644
--- a/src/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/src/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -235,7 +235,8 @@ ecb_caldav_connect_sync (ECalMetaBackend *meta_backend,
                gboolean credentials_empty;
                gboolean is_ssl_error;
 
-               credentials_empty = (!credentials || !e_named_parameters_count (credentials)) &&
+               credentials_empty = (!credentials || !e_named_parameters_count (credentials) ||
+                       (e_named_parameters_count (credentials) == 1 && e_named_parameters_exists 
(credentials, E_SOURCE_CREDENTIAL_SSL_TRUST))) &&
                        e_soup_session_get_authentication_requires_credentials (E_SOUP_SESSION (webdav));
                is_ssl_error = g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED);
 
diff --git a/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c 
b/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
index a4d2bd01d..203dd1889 100644
--- a/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
+++ b/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
@@ -157,7 +157,8 @@ ecb_webdav_notes_connect_sync (ECalMetaBackend *meta_backend,
                gboolean credentials_empty;
                gboolean is_ssl_error;
 
-               credentials_empty = (!credentials || !e_named_parameters_count (credentials)) &&
+               credentials_empty = (!credentials || !e_named_parameters_count (credentials) ||
+                       (e_named_parameters_count (credentials) == 1 && e_named_parameters_exists 
(credentials, E_SOURCE_CREDENTIAL_SSL_TRUST))) &&
                        e_soup_session_get_authentication_requires_credentials (E_SOUP_SESSION (webdav));
                is_ssl_error = g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED);
 
diff --git a/src/libebackend/e-backend.c b/src/libebackend/e-backend.c
index 04e2c0b02..b48fe1fa8 100644
--- a/src/libebackend/e-backend.c
+++ b/src/libebackend/e-backend.c
@@ -158,7 +158,7 @@ backend_network_monitor_can_reach_cb (GObject *source_object,
 
        if (G_IS_IO_ERROR (error, G_IO_ERROR_CANCELLED) ||
            host_is_reachable == e_backend_get_online (crd->backend)) {
-               if (!G_IS_IO_ERROR (error, G_IO_ERROR_CANCELLED)) {
+               if (!G_IS_IO_ERROR (error, G_IO_ERROR_CANCELLED) && !host_is_reachable) {
                        if (e_source_get_connection_status (source) == E_SOURCE_CONNECTION_STATUS_SSL_FAILED)
                                e_source_set_connection_status (source, 
E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
 
@@ -245,8 +245,10 @@ backend_update_online_state_timeout_cb (gpointer user_data)
                backend->priv->network_monitor_cancellable = cancellable;
                g_mutex_unlock (&backend->priv->network_monitor_cancellable_lock);
 
-               e_source_unset_last_credentials_required_arguments (e_backend_get_source (backend), NULL,
-                       backend_source_unset_last_credentials_required_arguments_cb, NULL);
+               if (!e_backend_get_online (backend)) {
+                       e_source_unset_last_credentials_required_arguments (e_backend_get_source (backend), 
NULL,
+                               backend_source_unset_last_credentials_required_arguments_cb, NULL);
+               }
 
                e_backend_set_online (backend, TRUE);
        } else {
@@ -932,7 +934,7 @@ e_backend_set_online (EBackend *backend,
        g_object_notify (G_OBJECT (backend), "online");
 
        if (!backend->priv->online && backend->priv->source)
-               e_source_set_connection_status (backend->priv->source, 
E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
+               backend_set_source_disconnected (backend->priv->source);
 }
 
 /**
diff --git a/src/libebackend/e-webdav-collection-backend.c b/src/libebackend/e-webdav-collection-backend.c
index 9fad3b253..b63c687b0 100644
--- a/src/libebackend/e-webdav-collection-backend.c
+++ b/src/libebackend/e-webdav-collection-backend.c
@@ -518,6 +518,7 @@ e_webdav_collection_backend_discover_sync (EWebDAVCollectionBackend *webdav_back
        GList *sources;
        GSList *discovered_sources = NULL;
        ENamedParameters *credentials_copy = NULL;
+       gboolean credentials_empty;
        gboolean any_success = FALSE;
        GError *local_error = NULL;
 
@@ -531,6 +532,9 @@ e_webdav_collection_backend_discover_sync (EWebDAVCollectionBackend *webdav_back
            (!e_source_collection_get_contacts_enabled (collection_extension) || !contacts_url))
                return E_SOURCE_AUTHENTICATION_ACCEPTED;
 
+       credentials_empty = !credentials || !e_named_parameters_count (credentials) ||
+               (e_named_parameters_count (credentials) == 1 && e_named_parameters_exists (credentials, 
E_SOURCE_CREDENTIAL_SSL_TRUST));
+
        if (credentials && !e_named_parameters_get (credentials, E_SOURCE_CREDENTIAL_USERNAME)) {
                credentials_copy = e_named_parameters_new_clone (credentials);
                e_named_parameters_set (credentials_copy, E_SOURCE_CREDENTIAL_USERNAME, 
e_source_collection_get_identity (collection_extension));
@@ -618,7 +622,10 @@ e_webdav_collection_backend_discover_sync (EWebDAVCollectionBackend *webdav_back
                e_collection_backend_authenticate_children (collection, credentials);
        } else if (g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_UNAUTHORIZED) ||
                   g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_FORBIDDEN)) {
-               result = E_SOURCE_AUTHENTICATION_REJECTED;
+               if (credentials_empty)
+                       result = E_SOURCE_AUTHENTICATION_REQUIRED;
+               else
+                       result = E_SOURCE_AUTHENTICATION_REJECTED;
                g_clear_error (&local_error);
        } else if (g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED)) {
                result = E_SOURCE_AUTHENTICATION_ERROR_SSL_FAILED;


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