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