| From 5a5abbedb171986dbf6f5a37577ec6afa892b66b Mon Sep 17 00:00:00 2001 |
| From: Carlos Garcia Campos <cgarcia@igalia.com> |
| 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 <raj.khem@gmail.com> |
| --- |
| 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 <glib/gi18n-lib.h> |
| |
| -#include <libsoup/soup.h> |
| - |
| #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 <glib.h> |
| #include <glib/gi18n-lib.h> |
| #include <jsc/jsc.h> |
| -#include <libsoup/soup.h> |
| #include <webkit2/webkit2.h> |
| |
| #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 |
| |