From 5095403b1539ca6ea90a817cb1761b6a6b840708 Mon Sep 17 00:00:00 2001 From: Shane Tomlinson <stomlinson@mozilla.com> Date: Wed, 13 Jun 2012 14:04:39 +0100 Subject: [PATCH] When a user completes the verification, set their logged in status for the site so a silent assertion can get generated. * Add countdown until the redirect. --- lib/static_resources.js | 3 +- resources/static/css/style.css | 10 +++++-- .../static/pages/verify_secondary_address.js | 28 +++++++++++++++++-- .../cases/pages/verify_secondary_address.js | 8 ++++-- resources/views/add_email_address.ejs | 12 +++++--- resources/views/verify_email_address.ejs | 6 +++- 6 files changed, 51 insertions(+), 16 deletions(-) diff --git a/lib/static_resources.js b/lib/static_resources.js index d86bfd740..3e0cf15d6 100644 --- a/lib/static_resources.js +++ b/lib/static_resources.js @@ -22,6 +22,7 @@ var common_js = [ '/lib/bidbundle.js', '/lib/ejs.js', '/lib/micrajax.js', + '/lib/urlparse.js', '/shared/javascript-extensions.js', '/i18n/:locale/client.json', '/shared/gettext.js', @@ -75,8 +76,6 @@ var dialog_min_js = '/production/:locale/dialog.js'; var dialog_js = und.flatten([ common_js, [ - '/lib/urlparse.js', - '/shared/command.js', '/shared/history.js', '/shared/state_machine.js', diff --git a/resources/static/css/style.css b/resources/static/css/style.css index 4cecf7645..35bfa524a 100644 --- a/resources/static/css/style.css +++ b/resources/static/css/style.css @@ -557,12 +557,16 @@ button.delete:active { } #congrats .siteinfo { - margin-top: 10px; + margin-top: 10px; } #congrats .website { - display: block; - text-align: center; + display: block; + text-align: center; +} + +#redirection { + text-align: center; } diff --git a/resources/static/pages/verify_secondary_address.js b/resources/static/pages/verify_secondary_address.js index 47ce8d191..df4561ec3 100644 --- a/resources/static/pages/verify_secondary_address.js +++ b/resources/static/pages/verify_secondary_address.js @@ -9,6 +9,7 @@ BrowserID.verifySecondaryAddress = (function() { var ANIMATION_TIME=250, bid = BrowserID, user = bid.User, + storage = bid.Storage, errors = bid.Errors, pageHelpers = bid.PageHelpers, dom = bid.DOM, @@ -22,9 +23,11 @@ BrowserID.verifySecondaryAddress = (function() { mustAuth, verifyFunction, doc = document, - REDIRECT_TIMEOUT = 5000, + REDIRECT_SECONDS = 5, + secondsRemaining = REDIRECT_SECONDS, + email, redirectTo, - redirectTimeout; // set in config if available, use REDIRECT_TIMEOUT otw. + redirectTimeout; // set in config if available, use REDIRECT_SECONDS otw. function showError(el, oncomplete) { dom.hide(".hint,#signUpForm"); @@ -36,10 +39,20 @@ BrowserID.verifySecondaryAddress = (function() { if (info.returnTo) { dom.setInner(".website", info.returnTo); + updateRedirectTimeout(); dom.show(".siteinfo"); } } + function updateRedirectTimeout() { + if (secondsRemaining > 0) { + dom.setInner("#redirectTimeout", secondsRemaining); + + secondsRemaining--; + setTimeout(updateRedirectTimeout, 1000); + } + } + function submit(oncomplete) { var pass = dom.getInner("#password") || undefined, vpass = dom.getInner("#vpassword") || undefined, @@ -57,6 +70,14 @@ BrowserID.verifySecondaryAddress = (function() { pageHelpers.replaceFormWithNotice(selector, function() { if (redirectTo && verified) { + + // set the loggedIn status for the site. This allows us to get + // a silent assertion without relying on the dialog to set the + // loggedIn status for the domain. This is useful when the user + // closes the dialog OR if redirection happens before the dialog + // has had a chance to finish its business. + storage.setLoggedIn(URLParse(redirectTo).originOnly(), email); + setTimeout(function() { doc.location.href = redirectTo; complete(oncomplete, verified); @@ -85,6 +106,7 @@ BrowserID.verifySecondaryAddress = (function() { user.tokenInfo(token, function(info) { if (info) { redirectTo = info.returnTo; + email = info.email; showRegistrationInfo(info); needsPassword = info.needs_password; @@ -126,7 +148,7 @@ BrowserID.verifySecondaryAddress = (function() { redirectTimeout = options.redirectTimeout; if (typeof redirectTimeout === "undefined") { - redirectTimeout = REDIRECT_TIMEOUT; + redirectTimeout = REDIRECT_SECONDS * 1000; } startVerification(options.ready); diff --git a/resources/static/test/cases/pages/verify_secondary_address.js b/resources/static/test/cases/pages/verify_secondary_address.js index 99d2917af..0d74afe90 100644 --- a/resources/static/test/cases/pages/verify_secondary_address.js +++ b/resources/static/test/cases/pages/verify_secondary_address.js @@ -71,14 +71,16 @@ }); asyncTest("no password: start with good token and site", function() { - storage.setReturnTo("browserid.org"); + var returnTo = "https://test.domain/path"; + storage.setReturnTo(returnTo); createController(config, function() { testEmail(); ok($(".siteinfo").is(":visible"), "siteinfo is visible when we say what it is"); - equal($(".website:nth(0)").text(), "browserid.org", "origin is updated"); + equal($(".website:nth(0)").text(), returnTo, "website is updated"); testHasClass("body", "complete"); - equal(doc.location.href, "browserid.org", "redirection occurred to correct URL"); + equal(doc.location.href, returnTo, "redirection occurred to correct URL"); + equal(storage.getLoggedIn("https://test.domain"), "testuser@testuser.com", "logged in status set"); start(); }); }); diff --git a/resources/views/add_email_address.ejs b/resources/views/add_email_address.ejs index 4a05fa34e..9a4128aee 100644 --- a/resources/views/add_email_address.ejs +++ b/resources/views/add_email_address.ejs @@ -60,11 +60,15 @@ <div id="congrats"> <p> - <%- gettext('<strong class="email">Your address</strong> has been verified!') %> + <%- gettext('<strong class="email">Your address</strong> has been verified!') %> + </p> + + <p class="siteinfo"> + <%- format(gettext('Your new address is set up and ready to go. You will be redirected to %s'), ["<strong class='website'></strong>"]) %> + </p> - <p class="siteinfo"> - <%= gettext('Your new address is set up and ready to go. You will be redirected to') %> <strong class="website"></strong> - </p> + <p id="redirection" class="siteinfo"> + <%- format(gettext("Redirecting in %s seconds"), ["<span id='redirectTimeout'></span>" ]) %> </p> </div> </div> diff --git a/resources/views/verify_email_address.ejs b/resources/views/verify_email_address.ejs index 5e5ffa4ca..d033b9417 100644 --- a/resources/views/verify_email_address.ejs +++ b/resources/views/verify_email_address.ejs @@ -62,7 +62,11 @@ </p> <p class="siteinfo"> - <%= gettext('Your new address is set up and ready to go. You will be redirected to') %> <strong class="website"></strong> + <%- format(gettext('Your new address is set up and ready to go. You will be redirected to %s'), ["<strong class='website'></strong>"]) %> + </p> + + <p id="redirection" class="siteinfo"> + <%- format(gettext("Redirecting in %s seconds"), ["<span id='redirectTimeout'></span>" ]) %> </p> </div> -- GitLab