From 3788e907bdb3e2abf716bf7f360afae5c5ebac3b Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 31 Mar 2020 15:30:36 +0200 Subject: [PATCH] I#204 - GOA-configured Nextcloud account not appearing Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/204 --- .../backends/carddav/e-book-backend-carddav.c | 3 +- .../backends/caldav/e-cal-backend-caldav.c | 3 +- .../webdav-notes/e-cal-backend-webdav-notes.c | 1433 +++++++++++++++++ src/libebackend/e-backend.c | 10 +- src/libebackend/e-webdav-collection-backend.c | 9 +- 5 files changed, 1451 insertions(+), 7 deletions(-) create mode 100644 src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c 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/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 19bfc03e1..5983eafa5 100644 --- a/src/libebackend/e-webdav-collection-backend.c +++ b/src/libebackend/e-webdav-collection-backend.c @@ -513,6 +513,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; @@ -526,6 +527,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)); @@ -611,7 +615,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; -- 2.26.0