static void e_webdav_discover_content_credentials_prompt_done_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { RefreshData *rd = user_data; ENamedParameters *credentials = NULL; ESource *source = NULL; GError *local_error = NULL; g_return_if_fail (rd != NULL); g_return_if_fail (E_IS_CREDENTIALS_PROMPTER (source_object)); if (!e_credentials_prompter_prompt_finish (E_CREDENTIALS_PROMPTER (source_object), result, &source, &credentials, &local_error)) { g_simple_async_result_take_error (rd->simple, local_error); local_error = NULL; g_simple_async_result_complete (rd->simple); refresh_data_free (rd); } else { e_named_parameters_free (rd->credentials); rd->credentials = credentials; credentials = NULL; e_webdav_discover_sources (source, rd->base_url, E_WEBDAV_DISCOVER_SUPPORTS_NONE, rd->credentials, rd->cancellable, e_webdav_discover_content_refresh_done_cb, rd); } e_named_parameters_free (credentials); g_clear_object (&source); g_clear_error (&local_error); }
static void refresh_data_free (gpointer ptr) { RefreshData *rd = ptr; if (rd) { if (rd->content) { EWebDAVDiscoverContentData *data; data = g_object_get_data (G_OBJECT (rd->content), WEBDAV_DISCOVER_CONTENT_DATA_KEY); if (data) { if (data->info_bar && gtk_info_bar_get_message_type (data->info_bar) == GTK_MESSAGE_INFO) { gtk_widget_destroy (GTK_WIDGET (data->info_bar)); data->info_bar = NULL; } gtk_widget_set_sensitive (GTK_WIDGET (data->sources_tree_view), TRUE); if (data->email_addresses_combo) gtk_widget_set_sensitive (GTK_WIDGET (data->email_addresses_combo), TRUE); } } g_clear_object (&rd->content); g_clear_object (&rd->cancellable); g_clear_object (&rd->simple); g_free (rd->base_url); e_named_parameters_free (rd->credentials); g_free (rd); } }
static guint send_and_handle_ssl (EBookBackendWebdav *webdav, SoupMessage *message, GCancellable *cancellable) { guint status_code; status_code = soup_session_send_message (webdav->priv->session, message); if (status_code == SOUP_STATUS_SSL_FAILED) { ESource *source; ESourceWebdav *extension; ESourceRegistry *registry; EBackend *backend; ETrustPromptResponse response; ENamedParameters *parameters; backend = E_BACKEND (webdav); source = e_backend_get_source (backend); registry = e_book_backend_get_registry (E_BOOK_BACKEND (backend)); extension = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND); parameters = e_named_parameters_new (); response = e_source_webdav_prepare_ssl_trust_prompt (extension, message, registry, parameters); if (response == E_TRUST_PROMPT_RESPONSE_UNKNOWN) { response = e_backend_trust_prompt_sync (backend, parameters, cancellable, NULL); if (response != E_TRUST_PROMPT_RESPONSE_UNKNOWN) e_source_webdav_store_ssl_trust_prompt (extension, message, response); } e_named_parameters_free (parameters); if (response == E_TRUST_PROMPT_RESPONSE_ACCEPT || response == E_TRUST_PROMPT_RESPONSE_ACCEPT_TEMPORARILY) { g_object_set (webdav->priv->session, SOUP_SESSION_SSL_STRICT, FALSE, NULL); status_code = soup_session_send_message (webdav->priv->session, message); } } return status_code; }