Don't restore a BOSH session without knowing the JID

This commit is contained in:
JC Brand 2019-04-22 14:13:23 +02:00
parent f8fcdc7eb8
commit 25a0a898f2
6 changed files with 170 additions and 103 deletions

View File

@ -6,6 +6,7 @@
- Bugfix: Modal auto-closes when you open it for a second time.
- Take roster nickname into consideration when rendering messages and chat headings.
- 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
- #1532: Converse reloads on enter pressed in the filter box

98
dist/converse.js vendored
View File

@ -64221,6 +64221,47 @@ _converse.initConnection = function () {
_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() {
strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
_converse.log(msg, level);
@ -64239,12 +64280,14 @@ function setUpXMLLogging() {
};
}
function finishInitialization() {
async function finishInitialization() {
initClientConfig();
initPlugins();
_converse.initConnection();
await initSession();
_converse.logIn();
_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 () {
if (!_converse.config.get('trusted') || isTestEnv()) {
window.localStorage.clear();
@ -64899,8 +64923,6 @@ _converse.initialize = async function (settings, callback) {
_converse.setUserJID();
_converse.initSession();
_converse.enableCarbons();
_converse.initStatus(reconnecting);
@ -65057,25 +65079,29 @@ _converse.initialize = async function (settings, callback) {
this.restoreBOSHSession = function (jid_is_required) {
/* 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!";
if (jid_is_required) {
throw new Error(msg);
} else {
_converse.log(msg);
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);
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);
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()) {
finishInitialization();
await finishInitialization();
return _converse;
} 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, {
@ -65228,7 +65254,7 @@ _converse.initialize = async function (settings, callback) {
}
}
finishInitialization();
await finishInitialization();
return init_promise;
};
/**
@ -66180,7 +66206,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-dis
_converse.api.trigger('discoInitialized');
}
_converse.api.listen.on('sessionInitialized', initStreamFeatures);
_converse.api.listen.on('setUserJID', initStreamFeatures);
_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.api.listen.on('sessionInitialized', _converse.initVCardCollection);
_converse.api.listen.on('setUserJID', _converse.initVCardCollection);
_converse.api.listen.on('statusInitialized', () => {
const vcards = _converse.vcards;

View File

@ -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 () {
Strophe.log = function (level, msg) {
_converse.log(msg, level);
@ -441,10 +466,11 @@ function setUpXMLLogging () {
}
function finishInitialization () {
async function finishInitialization () {
initClientConfig();
initPlugins();
_converse.initConnection();
await initSession();
_converse.logIn();
_converse.registerGlobalEventHandlers();
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 () {
if (!_converse.config.get('trusted') || isTestEnv()) {
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.setUserJID();
_converse.initSession();
_converse.enableCarbons();
_converse.initStatus(reconnecting)
};
@ -1155,24 +1165,28 @@ _converse.initialize = async function (settings, callback) {
this.restoreBOSHSession = function (jid_is_required) {
/* 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!";
if (jid_is_required) {
throw new Error(msg);
} else {
_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()) {
finishInitialization();
await finishInitialization();
return _converse;
} else if (!_.isUndefined(i18n)) {
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);
}
}
finishInitialization();
await finishInitialization();
return init_promise;
};

View File

@ -311,7 +311,7 @@ converse.plugins.add('converse-disco', {
_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('connected', initializeDisco);

View File

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

View File

@ -42062,6 +42062,47 @@ _converse.initConnection = function () {
_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() {
strophe_js__WEBPACK_IMPORTED_MODULE_0__["Strophe"].log = function (level, msg) {
_converse.log(msg, level);
@ -42080,12 +42121,14 @@ function setUpXMLLogging() {
};
}
function finishInitialization() {
async function finishInitialization() {
initClientConfig();
initPlugins();
_converse.initConnection();
await initSession();
_converse.logIn();
_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 () {
if (!_converse.config.get('trusted') || isTestEnv()) {
window.localStorage.clear();
@ -42740,8 +42764,6 @@ _converse.initialize = async function (settings, callback) {
_converse.setUserJID();
_converse.initSession();
_converse.enableCarbons();
_converse.initStatus(reconnecting);
@ -42898,25 +42920,29 @@ _converse.initialize = async function (settings, callback) {
this.restoreBOSHSession = function (jid_is_required) {
/* 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!";
if (jid_is_required) {
throw new Error(msg);
} else {
_converse.log(msg);
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);
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);
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()) {
finishInitialization();
await finishInitialization();
return _converse;
} 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, {
@ -43069,7 +43095,7 @@ _converse.initialize = async function (settings, callback) {
}
}
finishInitialization();
await finishInitialization();
return init_promise;
};
/**
@ -44021,7 +44047,7 @@ _converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins.add('converse-dis
_converse.api.trigger('discoInitialized');
}
_converse.api.listen.on('sessionInitialized', initStreamFeatures);
_converse.api.listen.on('setUserJID', initStreamFeatures);
_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.api.listen.on('sessionInitialized', _converse.initVCardCollection);
_converse.api.listen.on('setUserJID', _converse.initVCardCollection);
_converse.api.listen.on('statusInitialized', () => {
const vcards = _converse.vcards;