Updates #721 Restore sessions when logging in anonymously

together with keepalive.
This commit is contained in:
JC Brand 2016-11-07 17:30:10 +00:00
parent 9a09409ead
commit 9bf00241de
4 changed files with 33 additions and 36 deletions

View File

@ -1,5 +1,8 @@
# Changelog
## 2.0.2 (Unreleased)
- #721 keepalive not working with anonymous authentication [jcbrand]
## 2.0.1 (2016-11-07)
- #203 New configuration setting [muc_domain](https://conversejs.org/docs/html/configuration.html#muc_domain) [jcbrand]
- #705 White content after submitting password on chatrooms [jcbrand]

View File

@ -57,7 +57,7 @@
"po2json": "^0.4.4",
"requirejs": "2.3.2",
"requirejs-undertemplate": "~0.0.4",
"strophe.js": "1.2.9",
"strophe.js": "https://github.com/strophe/strophejs#b82171f81db469050bf55fa5394b3283c9b3d3bd",
"strophejs-plugins": "0.0.7",
"text": "requirejs/text#2.0.15",
"underscore": "~1.8.3"

View File

@ -46,13 +46,11 @@
}));
it("needs jid, rid and sid values when not using keepalive", mock.initConverse(function (converse) {
var authentication = converse.authentication;
var jid = converse.jid;
delete converse.jid;
converse.authentication = "prebind";
expect(converse.logIn.bind(converse)).toThrow(
new Error("attemptPreboundSession: If you use prebind and not keepalive, then you MUST supply JID, RID and SID values"));
converse.authentication= authentication;
new Error("attemptPreboundSession: If you use prebind and not keepalive, then you MUST supply JID, RID and SID values or a prebind_url."));
converse.bosh_service_url = undefined;
converse.jid = jid;
}));

View File

@ -1757,31 +1757,30 @@
};
this.startNewBOSHSession = function () {
var that = this;
$.ajax({
url: this.prebind_url,
type: 'GET',
dataType: "json",
success: function (response) {
this.connection.attach(
that.connection.attach(
response.jid,
response.sid,
response.rid,
this.onConnectStatusChanged
that.onConnectStatusChanged
);
}.bind(this),
},
error: function (response) {
delete this.connection;
this.emit('noResumeableSession');
}.bind(this)
delete that.connection;
that.emit('noResumeableSession');
}
});
};
this.attemptPreboundSession = function (tokens) {
/* Handle session resumption or initialization when prebind is being used.
*/
if (this.jid && this.sid && this.rid) {
return this.connection.attach(this.jid, this.sid, this.rid, this.onConnectStatusChanged);
} else if (this.keepalive) {
if (this.keepalive) {
if (!this.jid) {
throw new Error("attemptPreboundSession: when using 'keepalive' with 'prebind, "+
"you must supply the JID of the current user.");
@ -1792,18 +1791,16 @@
this.log("Could not restore session for jid: "+this.jid+" Error message: "+e.message);
this.clearSession(); // If there's a roster, we want to clear it (see #555)
}
}
// No keepalive, or session resumption has failed.
if (this.jid && this.sid && this.rid) {
return this.connection.attach(this.jid, this.sid, this.rid, this.onConnectStatusChanged);
} else if (this.prebind_url) {
return this.startNewBOSHSession();
} else {
throw new Error("attemptPreboundSession: If you use prebind and not keepalive, "+
"then you MUST supply JID, RID and SID values");
}
// We haven't been able to attach yet. Let's see if there
// is a prebind_url, otherwise there's nothing with which
// we can attach.
if (this.prebind_url) {
this.startNewBOSHSession();
} else {
delete this.connection;
this.emit('noResumeableSession');
"then you MUST supply JID, RID and SID values or a prebind_url.");
}
};
@ -1844,7 +1841,7 @@
}
};
this.attemptNonPreboundSession = function () {
this.attemptNonPreboundSession = function (credentials) {
/* Handle session resumption or initialization when prebind is not being used.
*
* Two potential options exist and are handled in this method:
@ -1860,7 +1857,11 @@
}
}
if (this.auto_login) {
if (this.credentials_url) {
if (credentials) {
// When credentials are passed in, they override prebinding
// or credentials fetching via HTTP
this.autoLogin(credentials);
} else if (this.credentials_url) {
this.fetchLoginCredentials().done(this.autoLogin.bind(this));
} else if (!this.jid) {
throw new Error(
@ -1870,24 +1871,19 @@
"username and password can be fetched (via credentials_url)."
);
} else {
// Probably ANONYMOUS login
this.autoLogin();
}
}
};
this.logIn = function (credentials) {
if (credentials || this.authentication === converse.ANONYMOUS) {
// When credentials are passed in, they override prebinding
// or credentials fetching via HTTP
this.autoLogin(credentials);
// We now try to resume or automatically set up a new session.
// Otherwise the user will be shown a login form.
if (this.authentication === converse.PREBIND) {
this.attemptPreboundSession();
} else {
// We now try to resume or automatically set up a new session.
// Otherwise the user will be shown a login form.
if (this.authentication === converse.PREBIND) {
this.attemptPreboundSession();
} else {
this.attemptNonPreboundSession();
}
this.attemptNonPreboundSession(credentials);
}
};