%PDF- %PDF-
Direktori : /home/opti/workflow/node_modules/public-address/ |
Current File : /home/opti/workflow/node_modules/public-address/index.js |
'use strict'; var http = require('http'); var dns = require('dns'); var net = require('net'); module.exports = resolve; function resolve(options, callback) { var requestOptions = { hostname: 'api.ipify.org', port: 80, path: '/?format=json', method: 'GET' }; if (!callback && typeof options == 'function') { callback = options; options = undefined; } options = options || {}; Object.keys(options).forEach(function (key) { requestOptions[key] = options[key]; }); http.get(requestOptions, function (res) { var chunks = [], chunklen = 0; if (res.statusCode != 200) { res.on('data', function () {}); res.on('end', function () { callback(new Error('Invalid response code ' + res.statusCode)); }); return; } res.on('data', function (chunk) { chunks.push(chunk); chunklen += chunk.length; }); res.on('end', function () { var data; var ip; try { data = JSON.parse(Buffer.concat(chunks, chunklen).toString()); } catch (exception) {} if (!data) { return callback(new Error('Invalid response from server')); } else { ip = data.ip; if (!ip || !net.isIP(ip)) { return callback(new Error('IP address missing from server response')); } dns.reverse(ip, function (err, hostnames) { var response = { address: ip }; if (!err && hostnames && hostnames.length) { response.hostname = hostnames[0]; } callback(null, response); }); } }); }).on('error', function (err) { callback(err); }); }