From 3284989060d586c2b2d81dd0c917cc88aef8b5cd Mon Sep 17 00:00:00 2001 From: Sean McArthur <sean.monstar@gmail.com> Date: Fri, 6 Jul 2012 13:30:02 -0700 Subject: [PATCH] setting a timeout for provisioning of 20s --- resources/static/common/js/provisioning.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/resources/static/common/js/provisioning.js b/resources/static/common/js/provisioning.js index 538595471..7c9ffab4c 100644 --- a/resources/static/common/js/provisioning.js +++ b/resources/static/common/js/provisioning.js @@ -7,9 +7,13 @@ BrowserID.Provisioning = (function() { "use strict"; var jwcrypto = require("./lib/jwcrypto"); + var MAX_TIMEOUT = 20000; // 20s var Provisioning = function(args, successCB, failureCB) { + var timeoutID; + function tearDown() { + if (timeoutID) timeoutID = clearTimeout(timeoutID); if (chan) chan.destroy(); chan = undefined; if (iframe) document.body.removeChild(iframe); @@ -35,8 +39,9 @@ BrowserID.Provisioning = (function() { // extract the expected origin from the provisioning url // (this may be a different domain than the email domain part, if the // domain delates authority) + var origin; try { - var origin = /^(https?:\/\/[^\/]+)\//.exec(args.url)[1]; + origin = /^(https?:\/\/[^\/]+)\//.exec(args.url)[1]; } catch(e) { alert(e); } if (!origin) { return fail('internal', 'bad provisioning url, can\'t extract origin'); @@ -92,7 +97,10 @@ BrowserID.Provisioning = (function() { successCB(keypair, cert); }); - // XXX: set a timeout for the amount of time that provisioning is allowed to take + // a timeout for the amount of time that provisioning is allowed to take + timeoutID = setTimeout(function provisionTimedOut() { + fail('timeoutError', 'Provisioning timed out.'); + }, MAX_TIMEOUT); }; return Provisioning; -- GitLab