From 5a5abbedb171986dbf6f5a37577ec6afa892b66b Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 7 Jun 2021 16:31:18 +0200 Subject: [PATCH 1/2] Use GUri instead of SoupURI In preparation for libsoup3 where SoupURI has been removed in favor of GUri. Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/73] Signed-off-by: Khem Raj --- configure.ac | 2 +- src/goabackend/goaoauth2provider.c | 11 +-- src/goabackend/goaoauthprovider.c | 8 +- src/goabackend/goaowncloudprovider.c | 107 ++++++++++++++++----------- src/goabackend/goawebview.c | 9 +-- 5 files changed, 80 insertions(+), 57 deletions(-) diff --git a/configure.ac b/configure.ac index 1f88bbd..7c0b39d 100644 --- a/configure.ac +++ b/configure.ac @@ -90,7 +90,7 @@ GTK_DOC_CHECK([1.3]) # Libraries # -PKG_CHECK_MODULES(GLIB, [glib-2.0 gio-2.0 gio-unix-2.0 >= 2.52]) +PKG_CHECK_MODULES(GLIB, [glib-2.0 gio-2.0 gio-unix-2.0 >= 2.67.4]) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) diff --git a/src/goabackend/goaoauth2provider.c b/src/goabackend/goaoauth2provider.c index 3715431..2757838 100644 --- a/src/goabackend/goaoauth2provider.c +++ b/src/goabackend/goaoauth2provider.c @@ -763,7 +763,7 @@ on_web_view_decide_policy (WebKitWebView *web_view, GHashTable *key_value_pairs; WebKitNavigationAction *action; WebKitURIRequest *request; - SoupURI *uri; + GUri *uri; const gchar *fragment; const gchar *oauth2_error; const gchar *query; @@ -793,9 +793,9 @@ on_web_view_decide_policy (WebKitWebView *web_view, if (!g_str_has_prefix (requested_uri, redirect_uri)) goto default_behaviour; - uri = soup_uri_new (requested_uri); - fragment = soup_uri_get_fragment (uri); - query = soup_uri_get_query (uri); + uri = g_uri_parse (requested_uri, G_URI_FLAGS_ENCODED, NULL); + fragment = g_uri_get_fragment (uri); + query = g_uri_get_query (uri); /* Three cases: * 1) we can either have the backend handle the URI for us, or @@ -808,7 +808,7 @@ on_web_view_decide_policy (WebKitWebView *web_view, { gchar *url; - url = soup_uri_to_string (uri, FALSE); + url = g_uri_to_string (uri); if (!goa_oauth2_provider_process_redirect_url (self, url, &priv->access_token, &priv->error)) { g_prefix_error (&priv->error, _("Authorization response: ")); @@ -889,6 +889,7 @@ on_web_view_decide_policy (WebKitWebView *web_view, goto ignore_request; ignore_request: + g_uri_unref (uri); g_assert (response_id != GTK_RESPONSE_NONE); if (response_id < 0) gtk_dialog_response (priv->dialog, response_id); diff --git a/src/goabackend/goaoauthprovider.c b/src/goabackend/goaoauthprovider.c index 0bfab6b..ff0927e 100644 --- a/src/goabackend/goaoauthprovider.c +++ b/src/goabackend/goaoauthprovider.c @@ -643,7 +643,7 @@ on_web_view_decide_policy (WebKitWebView *web_view, { GHashTable *key_value_pairs; IdentifyData *data = user_data; - SoupURI *uri; + GUri *uri; WebKitNavigationAction *action; WebKitURIRequest *request; const gchar *query; @@ -664,8 +664,8 @@ on_web_view_decide_policy (WebKitWebView *web_view, if (!g_str_has_prefix (requested_uri, redirect_uri)) goto default_behaviour; - uri = soup_uri_new (requested_uri); - query = soup_uri_get_query (uri); + uri = g_uri_parse (requested_uri, G_URI_FLAGS_ENCODED, NULL); + query = g_uri_get_query (uri); if (query != NULL) { @@ -678,6 +678,8 @@ on_web_view_decide_policy (WebKitWebView *web_view, g_hash_table_unref (key_value_pairs); } + g_uri_unref (uri); + if (data->oauth_verifier != NULL) goto ignore_request; diff --git a/src/goabackend/goaowncloudprovider.c b/src/goabackend/goaowncloudprovider.c index d142966..10734be 100644 --- a/src/goabackend/goaowncloudprovider.c +++ b/src/goabackend/goaowncloudprovider.c @@ -22,8 +22,6 @@ #include -#include - #include "goahttpclient.h" #include "goaprovider.h" #include "goaowncloudprovider.h" @@ -78,45 +76,42 @@ get_provider_features (GoaProvider *provider) /* ---------------------------------------------------------------------------------------------------- */ static char * -uri_to_string_with_path (SoupURI *soup_uri, const gchar *path) +uri_to_string_with_path (GUri *uri, const gchar *path) { gchar *uri_string; gchar *uri_tmp; - if (soup_uri == NULL) + if (uri == NULL) return NULL; - uri_tmp = soup_uri_to_string (soup_uri, FALSE); + uri_tmp = g_uri_to_string (uri); uri_string = g_strconcat (uri_tmp, path, NULL); g_free (uri_tmp); return uri_string; } -static char *get_webdav_uri (SoupURI *soup_uri) +static char *get_webdav_uri (GUri *uri) { - SoupURI *uri_tmp; + GUri *uri_tmp; gchar *uri_webdav; const gchar *scheme; - guint port; - if (soup_uri == NULL) + if (uri == NULL) return NULL; - scheme = soup_uri_get_scheme (soup_uri); - port = soup_uri_get_port (soup_uri); - uri_tmp = soup_uri_copy (soup_uri); - - if (g_strcmp0 (scheme, SOUP_URI_SCHEME_HTTPS) == 0) - soup_uri_set_scheme (uri_tmp, "davs"); - else - soup_uri_set_scheme (uri_tmp, "dav"); - - if (!soup_uri_uses_default_port (soup_uri)) - soup_uri_set_port (uri_tmp, port); + scheme = g_uri_get_scheme (uri); + uri_tmp = g_uri_build (g_uri_get_flags (uri), + g_strcmp0 (scheme, "https") == 0 ? "davs" : "dav", + g_uri_get_userinfo (uri), + g_uri_get_host (uri), + g_uri_get_port (uri), + g_uri_get_path (uri), + g_uri_get_query (uri), + g_uri_get_fragment (uri)); uri_webdav = uri_to_string_with_path (uri_tmp, WEBDAV_ENDPOINT); - soup_uri_free (uri_tmp); + g_uri_unref (uri_tmp); return uri_webdav; } @@ -140,7 +135,7 @@ build_object (GoaProvider *provider, gchar *uri_carddav; gchar *uri_webdav; GoaPasswordBased *password_based = NULL; - SoupURI *uri = NULL; + GUri *uri = NULL; gboolean accept_ssl_errors; gboolean calendar_enabled; gboolean contacts_enabled; @@ -176,9 +171,24 @@ build_object (GoaProvider *provider, account = goa_object_get_account (GOA_OBJECT (object)); identity = goa_account_get_identity (account); uri_string = g_key_file_get_string (key_file, group, "Uri", NULL); - uri = soup_uri_new (uri_string); + uri = g_uri_parse (uri_string, G_URI_FLAGS_ENCODED, NULL); if (uri != NULL) - soup_uri_set_user (uri, identity); + { + GUri *tmp_uri; + + tmp_uri = g_uri_build_with_user (g_uri_get_flags (uri), + g_uri_get_scheme (uri), + identity, + g_uri_get_password (uri), + g_uri_get_auth_params (uri), + g_uri_get_host (uri), + g_uri_get_port (uri), + g_uri_get_path (uri), + g_uri_get_query (uri), + g_uri_get_fragment (uri)); + g_uri_unref (uri); + uri = tmp_uri; + } accept_ssl_errors = g_key_file_get_boolean (key_file, group, "AcceptSslErrors", NULL); @@ -224,7 +234,7 @@ build_object (GoaProvider *provider, out: g_clear_object (&password_based); - g_clear_pointer (&uri, soup_uri_free); + g_clear_pointer (&uri, g_uri_unref); g_free (uri_string); return ret; } @@ -354,8 +364,11 @@ add_entry (GtkWidget *grid, static gchar * normalize_uri (const gchar *address, gchar **server) { - SoupURI *uri = NULL; + GUri *uri = NULL; + GUri *uri_tmp = NULL; const gchar *path; + const gchar *new_scheme; + gchar *new_path = NULL; gchar *ret = NULL; gchar *scheme = NULL; gchar *uri_string = NULL; @@ -384,48 +397,56 @@ normalize_uri (const gchar *address, gchar **server) else goto out; - uri = soup_uri_new (uri_string); + uri = g_uri_parse (uri_string, G_URI_FLAGS_ENCODED, NULL); if (uri == NULL) goto out; if (g_strcmp0 (scheme, "dav") == 0) - soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP); + new_scheme = "http"; else if (g_strcmp0 (scheme, "davs") == 0) - soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTPS); + new_scheme = "https"; + else + new_scheme = g_uri_get_scheme (uri); - path = soup_uri_get_path (uri); + path = g_uri_get_path (uri); if (!g_str_has_suffix (path, "/")) - { - gchar *new_path; - new_path = g_strconcat (path, "/", NULL); - soup_uri_set_path (uri, new_path); - path = soup_uri_get_path (uri); - g_free (new_path); - } + + uri_tmp = g_uri_build (g_uri_get_flags (uri), + new_scheme, + g_uri_get_userinfo (uri), + g_uri_get_host (uri), + g_uri_get_port (uri), + new_path ? new_path : path, + g_uri_get_query (uri), + g_uri_get_fragment (uri)); + g_free (new_path); + g_uri_unref (uri); + uri = uri_tmp; + path = g_uri_get_path (uri); if (server != NULL) { gchar *port_string; gchar *pretty_path; - guint port; + gint port; - port = soup_uri_get_port (uri); - port_string = g_strdup_printf (":%u", port); + port = g_uri_get_port (uri); + port_string = g_strdup_printf (":%d", port); pretty_path = g_strdup (path); pretty_path[strlen(pretty_path) - 1] = '\0'; - *server = g_strconcat (soup_uri_get_host (uri), (port == std_port) ? "" : port_string, pretty_path, NULL); + *server = g_strconcat (g_uri_get_host (uri), (port == std_port || port == -1) ? "" : port_string, pretty_path, NULL); g_free (port_string); g_free (pretty_path); } - ret = soup_uri_to_string (uri, FALSE); + ret = g_uri_to_string (uri); out: - g_clear_pointer (&uri, soup_uri_free); + g_clear_pointer (&uri, g_uri_unref); g_free (scheme); g_free (uri_string); return ret; diff --git a/src/goabackend/goawebview.c b/src/goabackend/goawebview.c index 2438e0c..3df600e 100644 --- a/src/goabackend/goawebview.c +++ b/src/goabackend/goawebview.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include "goawebview.h" @@ -77,17 +76,17 @@ web_view_clear_notify_progress_cb (gpointer user_data) static char * web_view_create_loading_title (const gchar *url) { - SoupURI *uri; + GUri *uri; const gchar *hostname; gchar *title; g_return_val_if_fail (url != NULL && url[0] != '\0', NULL); - uri = soup_uri_new (url); - hostname = soup_uri_get_host (uri); + uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL); + hostname = g_uri_get_host (uri); /* translators: %s here is the address of the web page */ title = g_strdup_printf (_("Loading ā€œ%sā€ā€¦"), hostname); - soup_uri_free (uri); + g_uri_unref (uri); return title; } -- 2.33.1