Toshaan Bharvani
2 years ago
commit
b53389c523
4 changed files with 2590 additions and 0 deletions
@ -0,0 +1,116 @@
@@ -0,0 +1,116 @@
|
||||
From 08ec37272bb945625daed7e6ae7ed2bd663cdabd Mon Sep 17 00:00:00 2001 |
||||
From: Milan Crha <mcrha@redhat.com> |
||||
Date: Wed, 4 May 2022 15:30:49 +0200 |
||||
Subject: [PATCH] I#388 - Google OAuth out-of-band (oob) flow will be |
||||
deprecated |
||||
|
||||
Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/388 |
||||
--- |
||||
src/libedataserver/e-oauth2-service-google.c | 62 +++++++++++++++++--- |
||||
1 file changed, 55 insertions(+), 7 deletions(-) |
||||
|
||||
diff --git a/src/libedataserver/e-oauth2-service-google.c b/src/libedataserver/e-oauth2-service-google.c |
||||
index 4d262d32f..93af1cb0b 100644 |
||||
--- a/src/libedataserver/e-oauth2-service-google.c |
||||
+++ b/src/libedataserver/e-oauth2-service-google.c |
||||
@@ -24,6 +24,7 @@ |
||||
#include "e-oauth2-service-google.h" |
||||
|
||||
/* https://developers.google.com/identity/protocols/OAuth2InstalledApp */ |
||||
+/* https://developers.google.com/identity/protocols/oauth2/native-app */ |
||||
|
||||
/* Forward Declarations */ |
||||
static void e_oauth2_service_google_oauth2_service_init (EOAuth2ServiceInterface *iface); |
||||
@@ -122,14 +123,60 @@ static const gchar * |
||||
eos_google_get_authentication_uri (EOAuth2Service *service, |
||||
ESource *source) |
||||
{ |
||||
- return "https://accounts.google.com/o/oauth2/auth"; |
||||
+ return "https://accounts.google.com/o/oauth2/v2/auth"; |
||||
} |
||||
|
||||
static const gchar * |
||||
eos_google_get_refresh_uri (EOAuth2Service *service, |
||||
ESource *source) |
||||
{ |
||||
- return "https://www.googleapis.com/oauth2/v3/token"; |
||||
+ return "https://oauth2.googleapis.com/token"; |
||||
+} |
||||
+ |
||||
+static const gchar * |
||||
+eos_google_get_redirect_uri (EOAuth2Service *service, |
||||
+ ESource *source) |
||||
+{ |
||||
+ G_LOCK_DEFINE_STATIC (redirect_uri); |
||||
+ const gchar *key_name = "oauth2-google-redirect-uri"; |
||||
+ gchar *value; |
||||
+ |
||||
+ G_LOCK (redirect_uri); |
||||
+ |
||||
+ value = g_object_get_data (G_OBJECT (service), key_name); |
||||
+ if (!value) { |
||||
+ const gchar *client_id = eos_google_get_client_id (service, source); |
||||
+ |
||||
+ if (client_id) { |
||||
+ GPtrArray *array; |
||||
+ gchar **strv; |
||||
+ gchar *joinstr; |
||||
+ guint ii; |
||||
+ |
||||
+ strv = g_strsplit (client_id, ".", -1); |
||||
+ array = g_ptr_array_new (); |
||||
+ |
||||
+ for (ii = 0; strv[ii]; ii++) { |
||||
+ g_ptr_array_insert (array, 0, strv[ii]); |
||||
+ } |
||||
+ |
||||
+ g_ptr_array_add (array, NULL); |
||||
+ |
||||
+ joinstr = g_strjoinv (".", (gchar **) array->pdata); |
||||
+ /* Use reverse-DNS of the client ID with the below path */ |
||||
+ value = g_strconcat (joinstr, ":/oauth2redirect", NULL); |
||||
+ |
||||
+ g_ptr_array_free (array, TRUE); |
||||
+ g_strfreev (strv); |
||||
+ g_free (joinstr); |
||||
+ |
||||
+ g_object_set_data_full (G_OBJECT (service), key_name, value, g_free); |
||||
+ } |
||||
+ } |
||||
+ |
||||
+ G_UNLOCK (redirect_uri); |
||||
+ |
||||
+ return value; |
||||
} |
||||
|
||||
static void |
||||
@@ -191,13 +238,13 @@ eos_google_extract_authorization_code (EOAuth2Service *service, |
||||
|
||||
params = soup_form_decode (query); |
||||
if (params) { |
||||
- const gchar *response; |
||||
+ const gchar *code; |
||||
|
||||
- response = g_hash_table_lookup (params, "response"); |
||||
- if (response && g_ascii_strncasecmp (response, "code=", 5) == 0) { |
||||
- *out_authorization_code = g_strdup (response + 5); |
||||
+ code = g_hash_table_lookup (params, "code"); |
||||
+ if (code && *code) { |
||||
+ *out_authorization_code = g_strdup (code); |
||||
known = TRUE; |
||||
- } else if (response && g_ascii_strncasecmp (response, "error", 5) == 0) { |
||||
+ } else if (g_hash_table_lookup (params, "error")) { |
||||
known = TRUE; |
||||
} |
||||
|
||||
@@ -225,6 +272,7 @@ e_oauth2_service_google_oauth2_service_init (EOAuth2ServiceInterface *iface) |
||||
iface->get_client_secret = eos_google_get_client_secret; |
||||
iface->get_authentication_uri = eos_google_get_authentication_uri; |
||||
iface->get_refresh_uri = eos_google_get_refresh_uri; |
||||
+ iface->get_redirect_uri = eos_google_get_redirect_uri; |
||||
iface->prepare_authentication_uri_query = eos_google_prepare_authentication_uri_query; |
||||
iface->extract_authorization_code = eos_google_extract_authorization_code; |
||||
} |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
diff --git a/src/calendar/backends/file/e-cal-backend-file.c b/src/calendar/backends/file/e-cal-backend-file.c |
||||
index f40bf807c..79ae53632 100644 |
||||
--- a/src/calendar/backends/file/e-cal-backend-file.c |
||||
+++ b/src/calendar/backends/file/e-cal-backend-file.c |
||||
@@ -904,6 +904,7 @@ scan_vcalendar (ECalBackendFile *cbfile) |
||||
if (e_cal_component_set_icalcomponent (comp, icomp)) { |
||||
/* Thus it's not freed while being used in the 'comp' */ |
||||
g_object_ref (icomp); |
||||
+ i_cal_object_set_owner (I_CAL_OBJECT (icomp), G_OBJECT (priv->vcalendar)); |
||||
|
||||
check_dup_uid (cbfile, comp); |
||||
|
||||
diff --git a/src/calendar/backends/http/e-cal-backend-http.c b/src/calendar/backends/http/e-cal-backend-http.c |
||||
index a7e930ca0..bfe9b4554 100644 |
||||
--- a/src/calendar/backends/http/e-cal-backend-http.c |
||||
+++ b/src/calendar/backends/http/e-cal-backend-http.c |
||||
@@ -477,13 +477,18 @@ ecb_http_get_changes_sync (ECalMetaBackend *meta_backend, |
||||
} else { |
||||
iter = i_cal_component_begin_component (maincomp, I_CAL_VCALENDAR_COMPONENT); |
||||
subcomp = i_cal_comp_iter_deref (iter); |
||||
+ if (subcomp) |
||||
+ i_cal_object_set_owner (I_CAL_OBJECT (subcomp), G_OBJECT (maincomp)); |
||||
} |
||||
|
||||
while (subcomp && success) { |
||||
ICalComponent *next_subcomp = NULL; |
||||
|
||||
- if (iter) |
||||
+ if (iter) { |
||||
next_subcomp = i_cal_comp_iter_next (iter); |
||||
+ if (next_subcomp) |
||||
+ i_cal_object_set_owner (I_CAL_OBJECT (next_subcomp), G_OBJECT (maincomp)); |
||||
+ } |
||||
|
||||
if (i_cal_component_isa (subcomp) == I_CAL_VCALENDAR_COMPONENT) { |
||||
success = e_cal_meta_backend_gather_timezones_sync (meta_backend, subcomp, TRUE, cancellable, error); |
||||
diff --git a/src/calendar/libecal/e-cal-component.c b/src/calendar/libecal/e-cal-component.c |
||||
index a3dddcc8f..c7629813a 100644 |
||||
--- a/src/calendar/libecal/e-cal-component.c |
||||
+++ b/src/calendar/libecal/e-cal-component.c |
||||
@@ -95,6 +95,8 @@ foreach_subcomponent (ICalComponent *icalcomp, |
||||
while (subcomp) { |
||||
ICalComponent *next_subcomp; |
||||
|
||||
+ i_cal_object_set_owner (I_CAL_OBJECT (subcomp), G_OBJECT (icalcomp)); |
||||
+ |
||||
next_subcomp = i_cal_comp_iter_next (iter); |
||||
|
||||
if (!func (icalcomp, subcomp, user_data)) { |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
diff -up evolution-data-server-3.28.5/src/modules/secret-monitor/module-secret-monitor.c.secret-monitor-warnings evolution-data-server-3.28.5/src/modules/secret-monitor/module-secret-monitor.c |
||||
--- evolution-data-server-3.28.5/src/modules/secret-monitor/module-secret-monitor.c.secret-monitor-warnings 2018-07-30 15:17:06.000000000 +0200 |
||||
+++ evolution-data-server-3.28.5/src/modules/secret-monitor/module-secret-monitor.c 2021-11-22 12:52:08.683986536 +0100 |
||||
@@ -167,7 +167,7 @@ secret_monitor_scan_secrets_thread (gpoi |
||||
g_list_free_full (list, (GDestroyNotify) g_object_unref); |
||||
|
||||
if (local_error != NULL) { |
||||
- g_warning ("%s: %s", G_STRFUNC, local_error->message); |
||||
+ e_source_registry_debug_print ("%s: %s", G_STRFUNC, local_error->message); |
||||
g_error_free (local_error); |
||||
} |
||||
|
||||
@@ -206,7 +206,7 @@ secret_monitor_scan_secrets_timeout_cb ( |
||||
g_thread_unref (thread); |
||||
|
||||
if (local_error != NULL) { |
||||
- g_warning ("%s: %s", G_STRFUNC, local_error->message); |
||||
+ e_source_registry_debug_print ("%s: %s", G_STRFUNC, local_error->message); |
||||
g_error_free (local_error); |
||||
g_object_unref (server); |
||||
} |
Loading…
Reference in new issue