Bladeren bron

Don't restore a BOSH session without knowing the JID

JC Brand 6 jaren geleden
bovenliggende
commit
25a0a898f2
6 gewijzigde bestanden met toevoegingen van 170 en 103 verwijderingen
  1. 1 0
      CHANGES.md
  2. 62 36
      dist/converse.js
  3. 43 29
      src/headless/converse-core.js
  4. 1 1
      src/headless/converse-disco.js
  5. 1 1
      src/headless/converse-vcard.js
  6. 62 36
      src/headless/dist/converse-headless.js

+ 1 - 0
CHANGES.md

@@ -6,6 +6,7 @@
 - Bugfix: Modal auto-closes when you open it for a second time.
 - Bugfix: Modal auto-closes when you open it for a second time.
 - Take roster nickname into consideration when rendering messages and chat headings.
 - Take roster nickname into consideration when rendering messages and chat headings.
 - Hide the textarea when a user is muted in a groupchat.
 - Hide the textarea when a user is muted in a groupchat.
+- Don't restore a BOSH session without knowing the JID
 - #1296: `embedded` view mode shows `chatbox-navback` arrow in header
 - #1296: `embedded` view mode shows `chatbox-navback` arrow in header
 - #1532: Converse reloads on enter pressed in the filter box
 - #1532: Converse reloads on enter pressed in the filter box
 
 

+ 62 - 36
dist/converse.js

@@ -64221,6 +64221,47 @@ _converse.initConnection = function () {
   _converse.api.trigger('connectionInitialized');
   _converse.api.trigger('connectionInitialized');
 };
 };
 
 
+async function initSession() {
+  const id = 'converse.bosh-session';
+  _converse.session = new Backbone.Model({
+    id
+  });
+  _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
+
+  try {
+    await new es6_promise_dist_es6_promise_auto__WEBPACK_IMPORTED_MODULE_3___default.a((success, error) => _converse.session.fetch({
+      success,
+      error
+    }));
+
+    if (_converse.jid && _converse.session.get('jid') !== _converse.jid) {
+      _converse.session.clear({
+        'silent': true
+      });
+
+      _converse.session.save({
+        'jid': _converse.jid,
+        id
+      });
+    }
+  } catch (e) {
+    if (_converse.jid) {
+      _converse.session.save({
+        'jid': _converse.jid
+      });
+    }
+  }
+  /**
+   * Triggered once the session has been initialized. The session is a
+   * persistent object which stores session information in the browser storage.
+   * @event _converse#sessionInitialized
+   * @memberOf _converse
+   */
+
+
+  _converse.api.trigger('sessionInitialized');
+}
+
 function setUpXMLLogging() {
 function setUpXMLLogging() {
   strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
   strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
     _converse.log(msg, level);
     _converse.log(msg, level);
@@ -64239,12 +64280,14 @@ function setUpXMLLogging() {
   };
   };
 }
 }
 
 
-function finishInitialization() {
+async function finishInitialization() {
   initClientConfig();
   initClientConfig();
   initPlugins();
   initPlugins();
 
 
   _converse.initConnection();
   _converse.initConnection();
 
 
+  await initSession();
+
   _converse.logIn();
   _converse.logIn();
 
 
   _converse.registerGlobalEventHandlers();
   _converse.registerGlobalEventHandlers();
@@ -64687,25 +64730,6 @@ _converse.initialize = async function (settings, callback) {
     }
     }
   };
   };
 
 
-  this.initSession = function () {
-    const id = 'converse.bosh-session';
-    _converse.session = new Backbone.Model({
-      id
-    });
-    _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
-
-    _converse.session.fetch();
-    /**
-     * Triggered once the session has been initialized. The session is a
-     * persistent object which stores session information in the browser storage.
-     * @event _converse#sessionInitialized
-     * @memberOf _converse
-     */
-
-
-    _converse.api.trigger('sessionInitialized');
-  };
-
   this.clearSession = function () {
   this.clearSession = function () {
     if (!_converse.config.get('trusted') || isTestEnv()) {
     if (!_converse.config.get('trusted') || isTestEnv()) {
       window.localStorage.clear();
       window.localStorage.clear();
@@ -64899,8 +64923,6 @@ _converse.initialize = async function (settings, callback) {
 
 
     _converse.setUserJID();
     _converse.setUserJID();
 
 
-    _converse.initSession();
-
     _converse.enableCarbons();
     _converse.enableCarbons();
 
 
     _converse.initStatus(reconnecting);
     _converse.initStatus(reconnecting);
@@ -65057,25 +65079,29 @@ _converse.initialize = async function (settings, callback) {
 
 
   this.restoreBOSHSession = function (jid_is_required) {
   this.restoreBOSHSession = function (jid_is_required) {
     /* Tries to restore a cached BOSH session. */
     /* Tries to restore a cached BOSH session. */
-    if (!this.jid) {
+    const jid = _converse.session.get('jid');
+
+    if (!jid) {
       const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session " + "but we don't have the JID for the user!";
       const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session " + "but we don't have the JID for the user!";
 
 
       if (jid_is_required) {
       if (jid_is_required) {
         throw new Error(msg);
         throw new Error(msg);
       } else {
       } else {
         _converse.log(msg);
         _converse.log(msg);
-      }
-    }
 
 
-    try {
-      this.connection.restore(this.jid, this.onConnectStatusChanged);
-      return true;
-    } catch (e) {
-      _converse.log("Could not restore session for jid: " + this.jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN);
+        return false;
+      }
+    } else {
+      try {
+        this.connection.restore(jid, this.onConnectStatusChanged);
+        return true;
+      } catch (e) {
+        _converse.log("Could not restore session for jid: " + jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN);
 
 
-      this.clearSession(); // We want to clear presences (see #555)
+        this.clearSession(); // We want to clear presences (see #555)
 
 
-      return false;
+        return false;
+      }
     }
     }
   };
   };
 
 
@@ -65214,7 +65240,7 @@ _converse.initialize = async function (settings, callback) {
   }
   }
 
 
   if (isTestEnv()) {
   if (isTestEnv()) {
-    finishInitialization();
+    await finishInitialization();
     return _converse;
     return _converse;
   } else if (!_lodash_noconflict__WEBPACK_IMPORTED_MODULE_4___default.a.isUndefined(_i18n__WEBPACK_IMPORTED_MODULE_6__["default"])) {
   } else if (!_lodash_noconflict__WEBPACK_IMPORTED_MODULE_4___default.a.isUndefined(_i18n__WEBPACK_IMPORTED_MODULE_6__["default"])) {
     const url = _converse_headless_utils_core__WEBPACK_IMPORTED_MODULE_11__["default"].interpolate(_converse.locales_url, {
     const url = _converse_headless_utils_core__WEBPACK_IMPORTED_MODULE_11__["default"].interpolate(_converse.locales_url, {
@@ -65228,7 +65254,7 @@ _converse.initialize = async function (settings, callback) {
     }
     }
   }
   }
 
 
-  finishInitialization();
+  await finishInitialization();
   return init_promise;
   return init_promise;
 };
 };
 /**
 /**
@@ -66180,7 +66206,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-dis
       _converse.api.trigger('discoInitialized');
       _converse.api.trigger('discoInitialized');
     }
     }
 
 
-    _converse.api.listen.on('sessionInitialized', initStreamFeatures);
+    _converse.api.listen.on('setUserJID', initStreamFeatures);
 
 
     _converse.api.listen.on('reconnected', initializeDisco);
     _converse.api.listen.on('reconnected', initializeDisco);
 
 
@@ -70620,7 +70646,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-vca
       _converse.vcards.fetch();
       _converse.vcards.fetch();
     };
     };
 
 
-    _converse.api.listen.on('sessionInitialized', _converse.initVCardCollection);
+    _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
 
 
     _converse.api.listen.on('statusInitialized', () => {
     _converse.api.listen.on('statusInitialized', () => {
       const vcards = _converse.vcards;
       const vcards = _converse.vcards;

+ 43 - 29
src/headless/converse-core.js

@@ -424,6 +424,31 @@ _converse.initConnection = function () {
 }
 }
 
 
 
 
+async function initSession () {
+   const id = 'converse.bosh-session';
+   _converse.session = new Backbone.Model({id});
+   _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
+   try {
+      await new Promise((success, error) => _converse.session.fetch({success, error}));
+      if (_converse.jid && _converse.session.get('jid') !== _converse.jid) {
+         _converse.session.clear({'silent': true});
+         _converse.session.save({'jid': _converse.jid, id});
+      }
+   } catch (e) {
+      if (_converse.jid) {
+         _converse.session.save({'jid': _converse.jid});
+      }
+   }
+   /**
+    * Triggered once the session has been initialized. The session is a
+    * persistent object which stores session information in the browser storage.
+    * @event _converse#sessionInitialized
+    * @memberOf _converse
+    */
+   _converse.api.trigger('sessionInitialized');
+}
+
+
 function setUpXMLLogging () {
 function setUpXMLLogging () {
     Strophe.log = function (level, msg) {
     Strophe.log = function (level, msg) {
         _converse.log(msg, level);
         _converse.log(msg, level);
@@ -441,10 +466,11 @@ function setUpXMLLogging () {
 }
 }
 
 
 
 
-function finishInitialization () {
+async function finishInitialization () {
     initClientConfig();
     initClientConfig();
     initPlugins();
     initPlugins();
     _converse.initConnection();
     _converse.initConnection();
+    await initSession();
     _converse.logIn();
     _converse.logIn();
     _converse.registerGlobalEventHandlers();
     _converse.registerGlobalEventHandlers();
     if (!Backbone.history.started) {
     if (!Backbone.history.started) {
@@ -830,21 +856,6 @@ _converse.initialize = async function (settings, callback) {
         }
         }
     }
     }
 
 
-
-    this.initSession = function () {
-        const id = 'converse.bosh-session';
-        _converse.session = new Backbone.Model({id});
-        _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
-        _converse.session.fetch();
-        /**
-         * Triggered once the session has been initialized. The session is a
-         * persistent object which stores session information in the browser storage.
-         * @event _converse#sessionInitialized
-         * @memberOf _converse
-         */
-        _converse.api.trigger('sessionInitialized');
-    };
-
     this.clearSession = function () {
     this.clearSession = function () {
         if (!_converse.config.get('trusted') || isTestEnv()) {
         if (!_converse.config.get('trusted') || isTestEnv()) {
             window.localStorage.clear();
             window.localStorage.clear();
@@ -1007,7 +1018,6 @@ _converse.initialize = async function (settings, callback) {
          */
          */
         _converse.connection.flush(); // Solves problem of returned PubSub BOSH response not received by browser
         _converse.connection.flush(); // Solves problem of returned PubSub BOSH response not received by browser
         _converse.setUserJID();
         _converse.setUserJID();
-        _converse.initSession();
         _converse.enableCarbons();
         _converse.enableCarbons();
         _converse.initStatus(reconnecting)
         _converse.initStatus(reconnecting)
     };
     };
@@ -1155,24 +1165,28 @@ _converse.initialize = async function (settings, callback) {
 
 
     this.restoreBOSHSession = function (jid_is_required) {
     this.restoreBOSHSession = function (jid_is_required) {
         /* Tries to restore a cached BOSH session. */
         /* Tries to restore a cached BOSH session. */
-        if (!this.jid) {
+        const jid = _converse.session.get('jid');
+        if (!jid) {
             const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session "+
             const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session "+
                 "but we don't have the JID for the user!";
                 "but we don't have the JID for the user!";
             if (jid_is_required) {
             if (jid_is_required) {
                 throw new Error(msg);
                 throw new Error(msg);
             } else {
             } else {
                 _converse.log(msg);
                 _converse.log(msg);
+                return false;
             }
             }
         }
         }
-        try {
-            this.connection.restore(this.jid, this.onConnectStatusChanged);
-            return true;
-        } catch (e) {
-            _converse.log(
-                "Could not restore session for jid: "+
-                this.jid+" Error message: "+e.message, Strophe.LogLevel.WARN);
-            this.clearSession(); // We want to clear presences (see #555)
-            return false;
+        else {
+            try {
+                this.connection.restore(jid, this.onConnectStatusChanged);
+                return true;
+            } catch (e) {
+                _converse.log(
+                    "Could not restore session for jid: "+
+                    jid+" Error message: "+e.message, Strophe.LogLevel.WARN);
+                this.clearSession(); // We want to clear presences (see #555)
+                return false;
+            }
         }
         }
     };
     };
 
 
@@ -1313,7 +1327,7 @@ _converse.initialize = async function (settings, callback) {
     }
     }
 
 
     if (isTestEnv()) {
     if (isTestEnv()) {
-        finishInitialization();
+        await finishInitialization();
         return _converse;
         return _converse;
     } else if (!_.isUndefined(i18n)) {
     } else if (!_.isUndefined(i18n)) {
         const url = u.interpolate(_converse.locales_url, {'locale': _converse.locale});
         const url = u.interpolate(_converse.locales_url, {'locale': _converse.locale});
@@ -1323,7 +1337,7 @@ _converse.initialize = async function (settings, callback) {
             _converse.log(e.message, Strophe.LogLevel.FATAL);
             _converse.log(e.message, Strophe.LogLevel.FATAL);
         }
         }
     }
     }
-    finishInitialization();
+    await finishInitialization();
     return init_promise;
     return init_promise;
 };
 };
 
 

+ 1 - 1
src/headless/converse-disco.js

@@ -311,7 +311,7 @@ converse.plugins.add('converse-disco', {
             _converse.api.trigger('discoInitialized');
             _converse.api.trigger('discoInitialized');
         }
         }
 
 
-        _converse.api.listen.on('sessionInitialized', initStreamFeatures);
+        _converse.api.listen.on('setUserJID', initStreamFeatures);
         _converse.api.listen.on('reconnected', initializeDisco);
         _converse.api.listen.on('reconnected', initializeDisco);
         _converse.api.listen.on('connected', initializeDisco);
         _converse.api.listen.on('connected', initializeDisco);
 
 

+ 1 - 1
src/headless/converse-vcard.js

@@ -125,7 +125,7 @@ converse.plugins.add('converse-vcard', {
             _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.config.get('storage')](id);
             _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.config.get('storage')](id);
             _converse.vcards.fetch();
             _converse.vcards.fetch();
         }
         }
-        _converse.api.listen.on('sessionInitialized', _converse.initVCardCollection);
+        _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
 
 
 
 
         _converse.api.listen.on('statusInitialized', () => {
         _converse.api.listen.on('statusInitialized', () => {

+ 62 - 36
src/headless/dist/converse-headless.js

@@ -42062,6 +42062,47 @@ _converse.initConnection = function () {
   _converse.api.trigger('connectionInitialized');
   _converse.api.trigger('connectionInitialized');
 };
 };
 
 
+async function initSession() {
+  const id = 'converse.bosh-session';
+  _converse.session = new Backbone.Model({
+    id
+  });
+  _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
+
+  try {
+    await new es6_promise_dist_es6_promise_auto__WEBPACK_IMPORTED_MODULE_3___default.a((success, error) => _converse.session.fetch({
+      success,
+      error
+    }));
+
+    if (_converse.jid && _converse.session.get('jid') !== _converse.jid) {
+      _converse.session.clear({
+        'silent': true
+      });
+
+      _converse.session.save({
+        'jid': _converse.jid,
+        id
+      });
+    }
+  } catch (e) {
+    if (_converse.jid) {
+      _converse.session.save({
+        'jid': _converse.jid
+      });
+    }
+  }
+  /**
+   * Triggered once the session has been initialized. The session is a
+   * persistent object which stores session information in the browser storage.
+   * @event _converse#sessionInitialized
+   * @memberOf _converse
+   */
+
+
+  _converse.api.trigger('sessionInitialized');
+}
+
 function setUpXMLLogging() {
 function setUpXMLLogging() {
   strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
   strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
     _converse.log(msg, level);
     _converse.log(msg, level);
@@ -42080,12 +42121,14 @@ function setUpXMLLogging() {
   };
   };
 }
 }
 
 
-function finishInitialization() {
+async function finishInitialization() {
   initClientConfig();
   initClientConfig();
   initPlugins();
   initPlugins();
 
 
   _converse.initConnection();
   _converse.initConnection();
 
 
+  await initSession();
+
   _converse.logIn();
   _converse.logIn();
 
 
   _converse.registerGlobalEventHandlers();
   _converse.registerGlobalEventHandlers();
@@ -42528,25 +42571,6 @@ _converse.initialize = async function (settings, callback) {
     }
     }
   };
   };
 
 
-  this.initSession = function () {
-    const id = 'converse.bosh-session';
-    _converse.session = new Backbone.Model({
-      id
-    });
-    _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
-
-    _converse.session.fetch();
-    /**
-     * Triggered once the session has been initialized. The session is a
-     * persistent object which stores session information in the browser storage.
-     * @event _converse#sessionInitialized
-     * @memberOf _converse
-     */
-
-
-    _converse.api.trigger('sessionInitialized');
-  };
-
   this.clearSession = function () {
   this.clearSession = function () {
     if (!_converse.config.get('trusted') || isTestEnv()) {
     if (!_converse.config.get('trusted') || isTestEnv()) {
       window.localStorage.clear();
       window.localStorage.clear();
@@ -42740,8 +42764,6 @@ _converse.initialize = async function (settings, callback) {
 
 
     _converse.setUserJID();
     _converse.setUserJID();
 
 
-    _converse.initSession();
-
     _converse.enableCarbons();
     _converse.enableCarbons();
 
 
     _converse.initStatus(reconnecting);
     _converse.initStatus(reconnecting);
@@ -42898,25 +42920,29 @@ _converse.initialize = async function (settings, callback) {
 
 
   this.restoreBOSHSession = function (jid_is_required) {
   this.restoreBOSHSession = function (jid_is_required) {
     /* Tries to restore a cached BOSH session. */
     /* Tries to restore a cached BOSH session. */
-    if (!this.jid) {
+    const jid = _converse.session.get('jid');
+
+    if (!jid) {
       const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session " + "but we don't have the JID for the user!";
       const msg = "restoreBOSHSession: tried to restore a \"keepalive\" session " + "but we don't have the JID for the user!";
 
 
       if (jid_is_required) {
       if (jid_is_required) {
         throw new Error(msg);
         throw new Error(msg);
       } else {
       } else {
         _converse.log(msg);
         _converse.log(msg);
-      }
-    }
 
 
-    try {
-      this.connection.restore(this.jid, this.onConnectStatusChanged);
-      return true;
-    } catch (e) {
-      _converse.log("Could not restore session for jid: " + this.jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN);
+        return false;
+      }
+    } else {
+      try {
+        this.connection.restore(jid, this.onConnectStatusChanged);
+        return true;
+      } catch (e) {
+        _converse.log("Could not restore session for jid: " + jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN);
 
 
-      this.clearSession(); // We want to clear presences (see #555)
+        this.clearSession(); // We want to clear presences (see #555)
 
 
-      return false;
+        return false;
+      }
     }
     }
   };
   };
 
 
@@ -43055,7 +43081,7 @@ _converse.initialize = async function (settings, callback) {
   }
   }
 
 
   if (isTestEnv()) {
   if (isTestEnv()) {
-    finishInitialization();
+    await finishInitialization();
     return _converse;
     return _converse;
   } else if (!_lodash_noconflict__WEBPACK_IMPORTED_MODULE_4___default.a.isUndefined(_i18n__WEBPACK_IMPORTED_MODULE_6__["default"])) {
   } else if (!_lodash_noconflict__WEBPACK_IMPORTED_MODULE_4___default.a.isUndefined(_i18n__WEBPACK_IMPORTED_MODULE_6__["default"])) {
     const url = _converse_headless_utils_core__WEBPACK_IMPORTED_MODULE_11__["default"].interpolate(_converse.locales_url, {
     const url = _converse_headless_utils_core__WEBPACK_IMPORTED_MODULE_11__["default"].interpolate(_converse.locales_url, {
@@ -43069,7 +43095,7 @@ _converse.initialize = async function (settings, callback) {
     }
     }
   }
   }
 
 
-  finishInitialization();
+  await finishInitialization();
   return init_promise;
   return init_promise;
 };
 };
 /**
 /**
@@ -44021,7 +44047,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-dis
       _converse.api.trigger('discoInitialized');
       _converse.api.trigger('discoInitialized');
     }
     }
 
 
-    _converse.api.listen.on('sessionInitialized', initStreamFeatures);
+    _converse.api.listen.on('setUserJID', initStreamFeatures);
 
 
     _converse.api.listen.on('reconnected', initializeDisco);
     _converse.api.listen.on('reconnected', initializeDisco);
 
 
@@ -48461,7 +48487,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-vca
       _converse.vcards.fetch();
       _converse.vcards.fetch();
     };
     };
 
 
-    _converse.api.listen.on('sessionInitialized', _converse.initVCardCollection);
+    _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
 
 
     _converse.api.listen.on('statusInitialized', () => {
     _converse.api.listen.on('statusInitialized', () => {
       const vcards = _converse.vcards;
       const vcards = _converse.vcards;