summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2022-07-14 17:54:17 +0200
committerMilan Crha <mcrha@redhat.com>2022-07-18 11:47:45 +0200
commit2020b4280ee054fdf03a4c0c1686507bb532a4d4 (patch)
tree4bc57a6f41bd2d92011ce1245c1d5285c44660bb
parent60cf5e3227c97571b7ab772eba9e2ae1d4db4f8e (diff)
downloadevolution-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.c25
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");
+ }
}
/**