diff options
author | Milan Crha <mcrha@redhat.com> | 2022-07-14 17:54:17 +0200 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2022-07-18 11:47:45 +0200 |
commit | 2020b4280ee054fdf03a4c0c1686507bb532a4d4 (patch) | |
tree | 4bc57a6f41bd2d92011ce1245c1d5285c44660bb | |
parent | 60cf5e3227c97571b7ab772eba9e2ae1d4db4f8e (diff) | |
download | evolution-data-server-2020b4280ee054fdf03a4c0c1686507bb532a4d4.tar.gz |
ESoupAuthBearer: Check for token expiration in e_soup_auth_bearer_is_authenticated()
Consider the auth unauthenticated when the token is missing and also
when the token is expired. Without it the code could repeat requests
with a wrong token.
-rw-r--r-- | src/libedataserver/e-soup-auth-bearer.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/libedataserver/e-soup-auth-bearer.c b/src/libedataserver/e-soup-auth-bearer.c index 46b2bcf5f..9da1f4d90 100644 --- a/src/libedataserver/e-soup-auth-bearer.c +++ b/src/libedataserver/e-soup-auth-bearer.c @@ -120,7 +120,8 @@ e_soup_auth_bearer_is_authenticated (SoupAuth *auth) g_mutex_lock (&bearer->priv->property_lock); - authenticated = (bearer->priv->access_token != NULL); + authenticated = (bearer->priv->access_token != NULL) && + !e_soup_auth_bearer_is_expired_locked (bearer); g_mutex_unlock (&bearer->priv->property_lock); @@ -213,6 +214,7 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer, { gboolean was_authenticated; gboolean now_authenticated; + gboolean changed; g_return_if_fail (E_IS_SOUP_AUTH_BEARER (bearer)); @@ -220,13 +222,12 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer, g_mutex_lock (&bearer->priv->property_lock); - if (g_strcmp0 (bearer->priv->access_token, access_token) == 0) { - g_mutex_unlock (&bearer->priv->property_lock); - return; - } + changed = g_strcmp0 (bearer->priv->access_token, access_token) != 0; - g_free (bearer->priv->access_token); - bearer->priv->access_token = g_strdup (access_token); + if (changed) { + g_free (bearer->priv->access_token); + bearer->priv->access_token = g_strdup (access_token); + } if (expires_in_seconds > 0) bearer->priv->expiry = time (NULL) + expires_in_seconds - 5; @@ -235,12 +236,12 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer, g_mutex_unlock (&bearer->priv->property_lock); - now_authenticated = soup_auth_is_authenticated (SOUP_AUTH (bearer)); + if (changed) { + now_authenticated = soup_auth_is_authenticated (SOUP_AUTH (bearer)); - if (was_authenticated != now_authenticated) - g_object_notify ( - G_OBJECT (bearer), - SOUP_AUTH_IS_AUTHENTICATED); + if (was_authenticated != now_authenticated) + g_object_notify (G_OBJECT (bearer), "is-authenticated"); + } } /** |