blob: 11fc96bc28eeaf9a166bd3013403d79aebc663bf [file] [log] [blame]
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