[epiphany/wip/sync: 28/31] sync-service: Handle case when trying to destroy a session with missing sessionToken due to a sign i



commit b74c800c74e0bc24c7639caa0ba9b7f11063ee13
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date:   Fri Apr 14 17:09:09 2017 +0300

    sync-service: Handle case when trying to destroy a session with missing sessionToken due to a sign in 
error

 src/sync/ephy-sync-service.c |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/src/sync/ephy-sync-service.c b/src/sync/ephy-sync-service.c
index 40c5c90..01ccec0 100644
--- a/src/sync/ephy-sync-service.c
+++ b/src/sync/ephy-sync-service.c
@@ -527,7 +527,8 @@ destroy_session_cb (SoupSession *session,
 }
 
 static void
-ephy_sync_service_destroy_session (EphySyncService *self)
+ephy_sync_service_destroy_session (EphySyncService *self,
+                                   const char      *sessionToken)
 {
   SyncCryptoHawkOptions *hoptions;
   SyncCryptoHawkHeader *hheader;
@@ -541,7 +542,9 @@ ephy_sync_service_destroy_session (EphySyncService *self)
   const char *request_body = "{}";
 
   g_return_if_fail (EPHY_IS_SYNC_SERVICE (self));
-  g_return_if_fail (ephy_sync_service_get_secret (self, secrets[SESSION_TOKEN]));
+  if (!sessionToken)
+    sessionToken = ephy_sync_service_get_secret (self, secrets[SESSION_TOKEN]);
+  g_return_if_fail (sessionToken);
 
   url = g_strdup_printf ("%ssession/destroy", MOZILLA_FXA_SERVER_URL);
   ephy_sync_crypto_process_session_token (ephy_sync_service_get_secret (self, secrets[SESSION_TOKEN]),
@@ -1256,7 +1259,7 @@ sync_secrets_store_finished_cb (EphySyncService *self,
   g_assert (EPHY_IS_SYNC_SERVICE (self));
 
   if (error) {
-    ephy_sync_service_destroy_session (self);
+    ephy_sync_service_destroy_session (self, NULL);
     g_clear_pointer (&self->user_email, g_free);
     g_hash_table_remove_all (self->secrets);
   } else {
@@ -1428,13 +1431,14 @@ ephy_sync_service_set_secret (EphySyncService *self,
 static void
 ephy_sync_service_report_sign_in_error (EphySyncService *self,
                                         const char      *message,
+                                        const char      *sessionToken,
                                         gboolean         clear_secrets)
 {
   g_assert (EPHY_IS_SYNC_SERVICE (self));
   g_assert (message);
 
   g_signal_emit (self, signals[SIGN_IN_ERROR], 0, message);
-  ephy_sync_service_destroy_session (self);
+  ephy_sync_service_destroy_session (self, sessionToken);
 
   if (clear_secrets) {
     g_clear_pointer (&self->user_email, g_free);
@@ -1539,7 +1543,7 @@ store_secrets:
   ephy_sync_secret_store_secrets (self);
   goto out_no_error;
 out_error:
-  ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve crypto keys."), TRUE);
+  ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve crypto keys."), NULL, TRUE);
 out_no_error:
   if (bundle)
     ephy_sync_crypto_key_bundle_free (bundle);
@@ -1699,7 +1703,7 @@ obtain_crypto_keys:
   goto out_no_error;
 out_error:
   message = message ? message : _("Failed to verify storage version.");
-  ephy_sync_service_report_sign_in_error (self, message, TRUE);
+  ephy_sync_service_report_sign_in_error (self, message, NULL, TRUE);
 out_no_error:
   if (parser)
     g_object_unref (parser);
@@ -1738,7 +1742,8 @@ ephy_sync_service_conclude_sign_in (EphySyncService *self,
   if (!ephy_sync_crypto_compute_sync_keys (bundle, data->respHMACkey,
                                            data->respXORkey, unwrapKB,
                                            &kA, &kB, TOKEN_LENGTH)) {
-    ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve the Sync Key"), FALSE);
+    ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve the Sync Key"),
+                                            data->sessionToken, FALSE);
     goto out;
   }
 
@@ -1809,7 +1814,8 @@ get_account_keys_cb (SoupSession *session,
              msg->status_code, msg->response_body->data);
 
 out_error:
-  ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve the Sync Key"), FALSE);
+  ephy_sync_service_report_sign_in_error (self, _("Failed to retrieve the Sync Key"),
+                                          data->sessionToken, FALSE);
   sign_in_async_data_free (data);
 out_no_error:
   if (node)
@@ -1871,7 +1877,7 @@ ephy_sync_service_do_sign_out (EphySyncService *self)
 
   ephy_sync_service_unregister_client_id (self);
   ephy_sync_service_stop_periodical_sync (self);
-  ephy_sync_service_destroy_session (self);
+  ephy_sync_service_destroy_session (self, NULL);
   ephy_sync_service_clear_storage_credentials (self);
   ephy_sync_secret_forget_secrets ();
   g_hash_table_remove_all (self->secrets);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]