112 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | // We believe in a proactive approach to sustainable open source.
 | ||
|  | // As part of that we make it easy for you to opt-in to following our progress
 | ||
|  | // and we also stay up-to-date on telemetry such as operating system and node
 | ||
|  | // version so that we can focus our efforts where they'll have the greatest impact.
 | ||
|  | //
 | ||
|  | // Want to learn more about our Terms, Privacy Policy, and Mission?
 | ||
|  | // Check out https://therootcompany.com/legal/
 | ||
|  | 
 | ||
|  | var os = require('os'); | ||
|  | var crypto = require('crypto'); | ||
|  | var https = require('https'); | ||
|  | var pkg = require('../package.json'); | ||
|  | 
 | ||
|  | // to help focus our efforts in the right places
 | ||
|  | var data = { | ||
|  |   package: pkg.name | ||
|  | , version: pkg.version | ||
|  | , node: process.version | ||
|  | , arch: process.arch || os.arch() | ||
|  | , platform: process.platform || os.platform() | ||
|  | , release: os.release() | ||
|  | }; | ||
|  | 
 | ||
|  | function addCommunityMember(opts) { | ||
|  |   setTimeout(function () { | ||
|  |     var req = https.request({ | ||
|  |       hostname: 'api.therootcompany.com' | ||
|  |     , port: 443 | ||
|  |     , path: '/api/therootcompany.com/public/community' | ||
|  |     , method: 'POST' | ||
|  |     , headers: { 'Content-Type': 'application/json' } | ||
|  |     }, function (resp) { | ||
|  |       // let the data flow, so we can ignore it
 | ||
|  |       resp.on('data', function () {}); | ||
|  |       //resp.on('data', function (chunk) { console.log(chunk.toString()); });
 | ||
|  |       resp.on('error', function () { /*ignore*/ }); | ||
|  |       //resp.on('error', function (err) { console.error(err); });
 | ||
|  |     }); | ||
|  |     var obj = JSON.parse(JSON.stringify(data)); | ||
|  |     obj.action = 'updates'; | ||
|  |     try { | ||
|  |       obj.ppid = ppid(obj.action); | ||
|  |     } catch(e) { | ||
|  |       // ignore
 | ||
|  |       //console.error(e);
 | ||
|  |     } | ||
|  |     obj.name = opts.name || undefined; | ||
|  |     obj.address = opts.email; | ||
|  |     obj.community = 'node.js@therootcompany.com'; | ||
|  | 
 | ||
|  |     req.write(JSON.stringify(obj, 2, null)); | ||
|  |     req.end(); | ||
|  |     req.on('error', function () { /*ignore*/ }); | ||
|  |     //req.on('error', function (err) { console.error(err); });
 | ||
|  |   }, 50); | ||
|  | } | ||
|  | 
 | ||
|  | function ping(action) { | ||
|  |   setTimeout(function () { | ||
|  |     var req = https.request({ | ||
|  |       hostname: 'api.therootcompany.com' | ||
|  |     , port: 443 | ||
|  |     , path: '/api/therootcompany.com/public/ping' | ||
|  |     , method: 'POST' | ||
|  |     , headers: { 'Content-Type': 'application/json' } | ||
|  |     }, function (resp) { | ||
|  |       // let the data flow, so we can ignore it
 | ||
|  |       resp.on('data', function () { }); | ||
|  |       //resp.on('data', function (chunk) { console.log(chunk.toString()); });
 | ||
|  |       resp.on('error', function () { /*ignore*/ }); | ||
|  |       //resp.on('error', function (err) { console.error(err); });
 | ||
|  |     }); | ||
|  |     var obj = JSON.parse(JSON.stringify(data)); | ||
|  |     obj.action = action; | ||
|  |     try { | ||
|  |       obj.ppid = ppid(obj.action); | ||
|  |     } catch(e) { | ||
|  |       // ignore
 | ||
|  |       //console.error(e);
 | ||
|  |     } | ||
|  | 
 | ||
|  |     req.write(JSON.stringify(obj, 2, null)); | ||
|  |     req.end(); | ||
|  |     req.on('error', function (/*e*/) { /*console.error('req.error', e);*/ }); | ||
|  |   }, 50); | ||
|  | } | ||
|  | 
 | ||
|  | // to help identify unique installs without getting
 | ||
|  | // the personally identifiable info that we don't want
 | ||
|  | function ppid(action) { | ||
|  |   var parts = [ action, data.package, data.version, data.node, data.arch, data.platform, data.release ]; | ||
|  |   var ifaces = os.networkInterfaces(); | ||
|  |   Object.keys(ifaces).forEach(function (ifname) { | ||
|  |     if (/^en/.test(ifname) || /^eth/.test(ifname) || /^wl/.test(ifname)) { | ||
|  |       if  (ifaces[ifname] && ifaces[ifname].length) { | ||
|  |         parts.push(ifaces[ifname][0].mac); | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  |   return crypto.createHash('sha1').update(parts.join(',')).digest('base64'); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports.ping = ping; | ||
|  | module.exports.joinCommunity = addCommunityMember; | ||
|  | 
 | ||
|  | if (require.main === module) { | ||
|  |   ping('install'); | ||
|  |   //addCommunityMember({ name: "AJ ONeal", email: 'coolaj86@gmail.com' });
 | ||
|  | } |