2016-10-08 16:40:58 -07:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
exports = module.exports = {
|
2017-02-23 22:03:44 -08:00
|
|
|
getPublicIp: getPublicIp
|
2016-10-08 16:40:58 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var assert = require('assert'),
|
2016-11-29 15:26:25 +01:00
|
|
|
async = require('async'),
|
|
|
|
|
config = require('../config.js'),
|
|
|
|
|
superagent = require('superagent'),
|
2016-10-08 16:40:58 -07:00
|
|
|
SysInfoError = require('../sysinfo.js').SysInfoError;
|
|
|
|
|
|
2017-02-23 22:03:44 -08:00
|
|
|
function getPublicIp(callback) {
|
2016-10-08 16:40:58 -07:00
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2018-01-18 13:41:10 -08:00
|
|
|
if (process.env.BOX_ENV === 'test') return callback(null, '127.0.0.1');
|
|
|
|
|
|
2016-11-29 15:26:25 +01:00
|
|
|
async.retry({ times: 10, interval: 5000 }, function (callback) {
|
|
|
|
|
superagent.get(config.apiServerOrigin() + '/api/v1/helper/public_ip').timeout(30 * 1000).end(function (error, result) {
|
|
|
|
|
if (error || result.statusCode !== 200) {
|
|
|
|
|
console.error('Error getting IP', error);
|
|
|
|
|
return callback(new SysInfoError(SysInfoError.INTERNAL_ERROR, 'Unable to contact api server'));
|
|
|
|
|
}
|
|
|
|
|
if (!result.body && !result.body.ip) {
|
|
|
|
|
console.error('Unexpected answer. No "ip" found in response body.', result.body);
|
|
|
|
|
return callback(new SysInfoError(SysInfoError.INTERNAL_ERROR, 'No IP found in body'));
|
2016-10-08 16:40:58 -07:00
|
|
|
}
|
|
|
|
|
|
2016-11-29 15:26:25 +01:00
|
|
|
callback(null, result.body.ip);
|
|
|
|
|
});
|
|
|
|
|
}, function (error, result) {
|
|
|
|
|
if (error) return callback(error);
|
2016-10-08 16:40:58 -07:00
|
|
|
|
2016-11-29 15:26:25 +01:00
|
|
|
callback(null, result);
|
|
|
|
|
});
|
|
|
|
|
}
|