forked from coolaj86/eckles.js
		
	
		
			
	
	
		
			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' });
							 | 
						||
| 
								 | 
							
								}
							 |