Add a test for the passphrase storage. Updates #111
This commit is contained in:
parent
e3b8a8f9dd
commit
398142c7de
34
converse.js
34
converse.js
@ -262,6 +262,20 @@
|
||||
}
|
||||
};
|
||||
|
||||
this.getSessionPassphrase = function () {
|
||||
if (this.prebind) {
|
||||
var key = hex_sha1(this.connection.jid),
|
||||
pass = window.sessionStorage[key];
|
||||
if (typeof pass === 'undefined') {
|
||||
pass = Math.floor(Math.random()*4294967295).toString();
|
||||
window.sessionStorage[key] = pass;
|
||||
}
|
||||
return pass;
|
||||
} else {
|
||||
return this.connection.pass;
|
||||
}
|
||||
};
|
||||
|
||||
this.getVCard = function (jid, callback, errback) {
|
||||
if (!this.use_vcards) {
|
||||
if (callback) {
|
||||
@ -567,25 +581,11 @@
|
||||
}
|
||||
},
|
||||
|
||||
getSessionPassphrase: function () {
|
||||
if (converse.prebind) {
|
||||
var key = hex_sha1(converse.connection.jid),
|
||||
pass = window.sessionStorage[key];
|
||||
if (typeof pass === 'undefined') {
|
||||
pass = Math.floor(Math.random()*4294967295);
|
||||
window.sessionStorage[key] = pass;
|
||||
}
|
||||
return pass;
|
||||
} else {
|
||||
return converse.connection.pass;
|
||||
}
|
||||
},
|
||||
|
||||
generatePrivateKey: function (callback, instance_tag) {
|
||||
var cipher = CryptoJS.lib.PasswordBasedCipher;
|
||||
var key = new DSA();
|
||||
if (converse.cache_otr_key) {
|
||||
pass = this.getSessionPassphrase();
|
||||
pass = converse.getSessionPassphrase();
|
||||
if (typeof pass !== "undefined") {
|
||||
// Encrypt the key and set in sessionStorage. Also store instance tag.
|
||||
window.sessionStorage[hex_sha1(this.id+'priv_key')] =
|
||||
@ -602,12 +602,10 @@
|
||||
},
|
||||
|
||||
getSession: function (callback) {
|
||||
// FIXME: sessionStorage is not supported in IE < 8. Perhaps a
|
||||
// user alert is required here...
|
||||
var cipher = CryptoJS.lib.PasswordBasedCipher;
|
||||
var result, pass, instance_tag, saved_key;
|
||||
if (converse.cache_otr_key) {
|
||||
pass = this.getSessionPassphrase();
|
||||
pass = converse.getSessionPassphrase();
|
||||
if (typeof pass !== "undefined") {
|
||||
instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')];
|
||||
saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')];
|
||||
|
@ -8,60 +8,34 @@
|
||||
);
|
||||
} (this, function (mock, utils) {
|
||||
return describe("Converse", $.proxy(function(mock, utils) {
|
||||
|
||||
beforeEach($.proxy(function () {
|
||||
window.localStorage.clear();
|
||||
window.sessionStorage.clear();
|
||||
}, converse));
|
||||
|
||||
it("allows you to subscribe to emitted events", function () {
|
||||
this.callback = function () {};
|
||||
spyOn(this, 'callback');
|
||||
converse.on('onInitialized', this.callback);
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback).toHaveBeenCalled();
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 2);
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 3);
|
||||
});
|
||||
it("can store a session passphrase in session storage", $.proxy(function () {
|
||||
var pp;
|
||||
// With no prebind, the user's XMPP password is used and nothing is
|
||||
// stored in session storage.
|
||||
this.prebind = false;
|
||||
this.connection.pass = 's3cr3t!';
|
||||
expect(this.getSessionPassphrase()).toBe(this.connection.pass);
|
||||
expect(window.sessionStorage.length).toBe(0);
|
||||
expect(window.localStorage.length).toBe(0);
|
||||
|
||||
it("allows you to listen once for an emitted event", function () {
|
||||
this.callback = function () {};
|
||||
spyOn(this, 'callback');
|
||||
converse.once('onInitialized', this.callback);
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback).toHaveBeenCalled();
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 1);
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 1);
|
||||
});
|
||||
// With prebind, a random passphrase is generated and stored in
|
||||
// session storage.
|
||||
this.prebind = true;
|
||||
pp = this.getSessionPassphrase();
|
||||
expect(pp).not.toBe(this.connection.pass);
|
||||
expect(window.sessionStorage.length).toBe(1);
|
||||
expect(window.localStorage.length).toBe(0);
|
||||
expect(pp).toBe(window.sessionStorage[hex_sha1(converse.connection.jid)]);
|
||||
|
||||
it("allows you to stop listening or subscribing to an event", function () {
|
||||
this.callback = function () {};
|
||||
this.anotherCallback = function () {};
|
||||
this.neverCalled = function () {};
|
||||
// Clean up
|
||||
this.prebind = false;
|
||||
}, converse));
|
||||
|
||||
spyOn(this, 'callback');
|
||||
spyOn(this, 'anotherCallback');
|
||||
spyOn(this, 'neverCalled');
|
||||
converse.on('onInitialized', this.callback);
|
||||
converse.on('onInitialized', this.anotherCallback);
|
||||
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback).toHaveBeenCalled();
|
||||
expect(this.anotherCallback).toHaveBeenCalled();
|
||||
|
||||
converse.off('onInitialized', this.callback);
|
||||
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 1);
|
||||
expect(this.anotherCallback.callCount, 2);
|
||||
|
||||
converse.once('onInitialized', this.neverCalled);
|
||||
converse.off('onInitialized', this.neverCalled);
|
||||
|
||||
converse.emit('onInitialized');
|
||||
expect(this.callback.callCount, 1);
|
||||
expect(this.anotherCallback.callCount, 3);
|
||||
expect(this.neverCalled).not.toHaveBeenCalled();
|
||||
});
|
||||
}, converse, mock, utils));
|
||||
}));
|
||||
|
Loading…
Reference in New Issue
Block a user