diff --git a/resources/static/dialog/controllers/dialog_controller.js b/resources/static/dialog/controllers/dialog_controller.js index 7e0af554a29e7489762926c6030f748596e598cf..3386e7f0b4671ed661b1be3eba1a50907186c72f 100644 --- a/resources/static/dialog/controllers/dialog_controller.js +++ b/resources/static/dialog/controllers/dialog_controller.js @@ -95,6 +95,7 @@ var self=this; self.onsuccess = onsuccess; self.onerror = onerror; + self.allowPersistent = true; // XXX We need to get this info from somewhere. if('onLine' in navigator && !navigator.onLine) { self.doOffline(); @@ -217,11 +218,13 @@ }, doPickEmail: function() { - this.element.pickemail({ + var self=this; + self.element.pickemail({ // XXX ideal is to get rid of this and have a User function // that takes care of getting email addresses AND the last used email // for this site. - origin: user.getHostname() + origin: user.getHostname(), + allow_persistent: self.allowPersistent }); }, diff --git a/resources/static/dialog/controllers/pickemail_controller.js b/resources/static/dialog/controllers/pickemail_controller.js index 01cea06fa081d06c60431a99c3fbfcc52031075d..e60ca3099107fb7b92489554deb4d9005513f6d8 100644 --- a/resources/static/dialog/controllers/pickemail_controller.js +++ b/resources/static/dialog/controllers/pickemail_controller.js @@ -65,7 +65,7 @@ var self=this; animateSwap("#addEmail", "#selectEmail", function() { - if(!self.find("input[type=radio]:checked").length) { + if (!self.find("input[type=radio]:checked").length) { // If none are already checked, select the first one. self.find('input[type=radio]').eq(0).attr('checked', true); } @@ -86,7 +86,7 @@ function checkEmail(email) { var identity = user.getStoredEmailKeypair(email); - if(!identity) { + if (!identity) { alert("The selected email is invalid or has been deleted."); this.close("assertion_generated", { assertion: null @@ -97,7 +97,7 @@ } function tryClose() { - if(typeof assertion !== "undefined" && animationComplete) { + if (typeof assertion !== "undefined" && animationComplete) { this.close("assertion_generated", { assertion: assertion }); @@ -116,7 +116,7 @@ function startAnimation() { var self=this; - if(!animationComplete) { + if (!animationComplete) { $("#signIn").animate({"width" : "685px"}, "slow", function () { // post animation body.delay(500).animate({ "opacity" : "0.5"}, "fast", function () { @@ -140,7 +140,11 @@ if (valid) { var origin = user.getOrigin(); storage.site.set(origin, "email", email); - storage.site.set(origin, "remember", $("#remember").is(":checked")); + + if (self.allowPersistent) { + storage.site.set(origin, "remember", $("#remember").is(":checked")); + } + getAssertion.call(self, email); } } @@ -151,12 +155,12 @@ cancelEvent(event); - if(!bid.Validation.email(email)) { + if (!bid.Validation.email(email)) { return; } user.isEmailRegistered(email, function onComplete(registered) { - if(registered) { + if (registered) { bid.Tooltip.showTooltip("#already_taken"); } else { @@ -179,29 +183,35 @@ PageController.extend("Pickemail", {}, { init: function(el, options) { - var origin = user.getOrigin(); - this._super(el, { + var origin = user.getOrigin(), + self=this; + + options = options || {}; + + self.allowPersistent = options.allow_persistent; + + self._super(el, { bodyTemplate: "pickemail", bodyVars: { identities: user.getStoredEmailKeypairs(), - // XXX ideal is to get rid of this and have a User function + // XXX ideal is to get rid of self and have a User function // that takes care of getting email addresses AND the last used email - // for this site. + // for self site. siteemail: storage.site.get(origin, "email"), + allow_persistent: options.allow_persistent || false, remember: storage.site.get(origin, "remember") || false } }); - body.css("opacity", "1"); - if(dom.getElements("#selectEmail input[type=radio]:visible").length === 0) { + if (dom.getElements("#selectEmail input[type=radio]:visible").length === 0) { // If there is only one email address, the radio button is never shown, // instead focus the sign in button so that the user can click enter. // issue #412 $("#signInButton").focus(); } - pickEmailState.call(this); + pickEmailState.call(self); }, "#useNewEmail click": addEmailState, diff --git a/resources/static/dialog/views/pickemail.ejs b/resources/static/dialog/views/pickemail.ejs index e14c07fe17753f2a5f8c6faeab0ba587549e6857..0a0319b02df1b25a00b7fdf848758c6ccd5a1d49 100644 --- a/resources/static/dialog/views/pickemail.ejs +++ b/resources/static/dialog/views/pickemail.ejs @@ -17,10 +17,12 @@ <div class="submit add cf"> - <label for="remember" class="selectable"> - <input type="checkbox" id="remember" name="remember" <% if (remember) { %> checked="checked" <% } %> /> - Always sign in using this email - </label> + <% if (allow_persistent) { %> + <label for="remember" class="selectable"> + <input type="checkbox" id="remember" name="remember" <% if (remember) { %> checked="checked" <% } %> /> + Always sign in using this email + </label> + <% } %> <button id="signInButton">sign in</button> diff --git a/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js b/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js index 75390108f736adca6113bbde3c45e3913031aaed..1a88f607c5e1a41c29abca1b99414aebbc11e44a 100644 --- a/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js +++ b/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js @@ -95,29 +95,38 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con equal(label.hasClass("preselected"), false, "the label has no class"); }); - function testRemember(remember) { + function testRemember(allowPersistent, remember) { storage.site.set(testOrigin, "remember", remember); - controller = el.pickemail().controller(); + controller = el.pickemail({ + allow_persistent: allowPersistent + }).controller(); ok(controller, "controller created"); - equal($("#remember").is(":checked"), remember, "appropriate checkbox check"); + // remember can only be checked if allowPersistent is allowed + equal($("#remember").is(":checked"), allowPersistent ? remember : false, "appropriate checkbox check"); } - test("pickemail controller with remember set to false", function() { - testRemember(false); + test("pickemail controller with allow_persistent and remember set to false", function() { + testRemember(false, false); + }); + + test("pickemail controller with allow_persistent set to false and remember set to true", function() { + testRemember(false, true); }); - test("pickemail controller with remember set to true", function() { - testRemember(true); + test("pickemail controller with allow_persistent and remember set to true", function() { + testRemember(true, true); }); - test("signIn saves email, remember status to storage", function() { + test("signIn saves email, remember status to storage when allow_persistent set to true", function() { storage.addEmail("testuser@testuser.com", {priv: "priv", pub: "pub"}); storage.addEmail("testuser2@testuser.com", {priv: "priv", pub: "pub"}); - controller = el.pickemail().controller(); + controller = el.pickemail({ + allow_persistent: true + }).controller(); $("input[type=radio]").eq(1).click(); $("#remember").attr("checked", true); @@ -136,5 +145,31 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con equal(storage.site.get(testOrigin, "remember"), false, "remember saved correctly"); }); + test("signIn saves email, but not remember status when allow_persistent set to false", function() { + storage.addEmail("testuser@testuser.com", {priv: "priv", pub: "pub"}); + storage.addEmail("testuser2@testuser.com", {priv: "priv", pub: "pub"}); + storage.site.set(testOrigin, "remember", false); + + controller = el.pickemail({ + allow_persistent: false + }).controller(); + + $("input[type=radio]").eq(1).click(); + $("#remember").attr("checked", true); + + controller.signIn(); + + equal(storage.site.get(testOrigin, "email"), "testuser2@testuser.com", "email saved correctly"); + equal(storage.site.get(testOrigin, "remember"), false, "remember saved correctly"); + + $("input[type=radio]").eq(0).click(); + $("#remember").removeAttr("checked"); + + controller.signIn(); + + equal(storage.site.get(testOrigin, "email"), "testuser@testuser.com", "email saved correctly"); + equal(storage.site.get(testOrigin, "remember"), false, "remember saved correctly"); + }); + });