diff --git a/src/routes/provision.js b/src/routes/provision.js index cacf0cc4c..9a17910d6 100644 --- a/src/routes/provision.js +++ b/src/routes/provision.js @@ -16,8 +16,8 @@ var assert = require('assert'), HttpError = require('connect-lastmile').HttpError, HttpSuccess = require('connect-lastmile').HttpSuccess, provision = require('../provision.js'), - settings = require('../settings.js'), - superagent = require('superagent'); + request = require('request'), + settings = require('../settings.js'); function providerTokenAuth(req, res, next) { assert.strictEqual(typeof req.body, 'object'); @@ -25,11 +25,11 @@ function providerTokenAuth(req, res, next) { if (settings.provider() === 'ami') { if (typeof req.body.providerToken !== 'string' || !req.body.providerToken) return next(new HttpError(400, 'providerToken must be a non empty string')); - superagent.get('http://169.254.169.254/latest/meta-data/instance-id').timeout(30 * 1000).end(function (error, result) { - if (error && !error.response) return next(new HttpError(500, error)); - if (result.statusCode !== 200) return next(new HttpError(500, 'Unable to get meta data')); + request.get('http://169.254.169.254/latest/meta-data/instance-id', { timeout: 30 * 1000 }, function (error, result) { + if (error) return next(new HttpError(422, `Network error getting EC2 metadata: ${error.message}`)); + if (result.statusCode !== 200) return next(new HttpError(422, `Unable to get EC2 meta data. statusCode: ${result.statusCode}`)); - if (result.text !== req.body.providerToken) return next(new HttpError(401, 'Invalid providerToken')); + if (result.body !== req.body.providerToken) return next(new HttpError(422, 'Instance ID does not match')); next(); });