From 6d2ce0027c91be861f23254bac00ce54484232e4 Mon Sep 17 00:00:00 2001
From: Austin King <shout@ozten.com>
Date: Fri, 4 May 2012 16:16:00 -0700
Subject: [PATCH] Extracting callback for wanted fields to outside of loop.

---
 lib/primary.js            | 15 +++++++++++----
 lib/wsapi/address_info.js |  7 ++++++-
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/lib/primary.js b/lib/primary.js
index 52be47ec4..b9d0c4167 100644
--- a/lib/primary.js
+++ b/lib/primary.js
@@ -56,13 +56,14 @@ function parseWellKnownBody(body, domain, delegates, cb) {
         bail = true;
         return cb("Too many hops while delegating authority " + JSON.stringify(dels));
       }
-      logger.debug(domain,' is delegating to', v[k]);
+      logger.debug(domain + ' is delegating to' + v[k]);
       // recurse into low level get /.well-known/browserid and parse again?
       // If everything goes well, finally call our original callback
       delegates[domain] = dels.length;
       getWellKnown(v[k], delegates, function (err, nbody, ndomain, ndelegates) {
         if (err) {
-          cb(err);
+          bail = true;
+          return cb(err);
         }
         parseWellKnownBody(nbody, ndomain, ndelegates, cb);
       });
@@ -70,13 +71,16 @@ function parseWellKnownBody(body, domain, delegates, cb) {
     }
   });
   if (bail) return;
+  var missing_keys = [];
   want.forEach(function(k) {
     if (-1 === got.indexOf(k)) {
-      cb("missing required key: " + k);
+      missing_keys.push(k);
       bail = true;
     }
   });
-  if (bail) return;
+  if (bail) {
+    return cb("missing required key: " + missing_keys.join(', '));
+  };
 
   // Allow SHIMMED_PRIMARIES to change example.com into 127.0.0.1:10005
   var url_prefix = 'https://' + domain;
@@ -193,6 +197,8 @@ exports.checkSupport = function(domain, cb, delegates) {
   if (typeof domain !== 'string' || !domain.length) {
     return process.nextTick(function() { cb("invalid domain"); });
   }
+
+
   getWellKnown(domain, delegates, function (err, body, domain, cbdelegates) {
     if (err) {
       logger.debug(err);
@@ -221,6 +227,7 @@ exports.checkSupport = function(domain, cb, delegates) {
       }
     }
   });
+
 };
 
 
diff --git a/lib/wsapi/address_info.js b/lib/wsapi/address_info.js
index 778bd4291..9a4c9009f 100644
--- a/lib/wsapi/address_info.js
+++ b/lib/wsapi/address_info.js
@@ -30,8 +30,13 @@ exports.process = function(req, res) {
   if (!m) {
     return httputils.badRequest(res, "invalid email address");
   }
-
+  // Saftey value for production branch only
+  var done = false;
   primary.checkSupport(m[1], function(err, urls, publicKey, delegates) {
+    if (done) {
+      return;
+    }
+    done = true;
     if (err) {
       logger.warn('error checking "' + m[1] + '" for primary support: ' + err);
       return httputils.serverError(res, "can't check email address");
-- 
GitLab