Commit 25a0a898 authored by JC Brand's avatar JC Brand

Don't restore a BOSH session without knowing the JID

parent f8fcdc7e
...@@ -6,6 +6,7 @@ ...@@ -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
......
...@@ -64221,6 +64221,47 @@ _converse.initConnection = function () { ...@@ -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() { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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 { return false;
this.connection.restore(this.jid, this.onConnectStatusChanged); }
return true; } else {
} catch (e) { try {
_converse.log("Could not restore session for jid: " + this.jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN); 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) { ...@@ -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) { ...@@ -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 ...@@ -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 ...@@ -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;
...@@ -424,6 +424,31 @@ _converse.initConnection = function () { ...@@ -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 () { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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 { else {
this.connection.restore(this.jid, this.onConnectStatusChanged); try {
return true; this.connection.restore(jid, this.onConnectStatusChanged);
} catch (e) { return true;
_converse.log( } catch (e) {
"Could not restore session for jid: "+ _converse.log(
this.jid+" Error message: "+e.message, Strophe.LogLevel.WARN); "Could not restore session for jid: "+
this.clearSession(); // We want to clear presences (see #555) jid+" Error message: "+e.message, Strophe.LogLevel.WARN);
return false; this.clearSession(); // We want to clear presences (see #555)
return false;
}
} }
}; };
...@@ -1313,7 +1327,7 @@ _converse.initialize = async function (settings, callback) { ...@@ -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) { ...@@ -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;
}; };
......
...@@ -311,7 +311,7 @@ converse.plugins.add('converse-disco', { ...@@ -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);
......
...@@ -125,7 +125,7 @@ converse.plugins.add('converse-vcard', { ...@@ -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', () => {
......
...@@ -42062,6 +42062,47 @@ _converse.initConnection = function () { ...@@ -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() { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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 { return false;
this.connection.restore(this.jid, this.onConnectStatusChanged); }
return true; } else {
} catch (e) { try {
_converse.log("Could not restore session for jid: " + this.jid + " Error message: " + e.message, strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].LogLevel.WARN); 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) { ...@@ -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) { ...@@ -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 ...@@ -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 ...@@ -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;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment