community.js 2.04 KB
'use strict';

function addCommunityMember(opts) {
	// { name, version, email, domains, action, communityMember, telemetry }
	var https = require('https');
	var req = https.request(
		{
			hostname: 'api.ppl.family',
			port: 443,
			path: '/api/ppl.family/public/list',
			method: 'POST',
			headers: {
				'Content-Type': 'application/json'
			}
		},
		function(err, resp) {
			if (err) {
				return;
			}
			resp.on('data', function() {});
		}
	);
	req.on('error', function(error) {
		/* ignore */
	});
	var os = require('os');
	var data = {
		address: opts.email,
		// greenlock-security is transactional and security only
		list: opts.communityMember
			? opts.name + '@ppl.family'
			: 'greenlock-security@ppl.family',
		action: opts.action, // reg | renew
		package: opts.name,
		// hashed for privacy, but so we can still get some telemetry and inform users
		// if abnormal things are happening (like several registrations for the same domain each day)
		domain: (opts.domains || [])
			.map(function(d) {
				return require('crypto')
					.createHash('sha1')
					.update(d)
					.digest('base64')
					.replace(/\//g, '_')
					.replace(/\+/g, '-')
					.replace(/=/g, '');
			})
			.join(',')
	};
	if (false !== opts.telemetry) {
		data.arch = process.arch || os.arch();
		data.platform = process.platform || os.platform();
		data.release = os.release();
		data.version = opts.version;
		data.node = process.version;
	}
	req.write(JSON.stringify(data, 2, null));
	req.end();
}

function delay(ms) {
	return new Promise(function(resolve) {
		return setTimeout(resolve, ms);
	});
}

module.exports.add = function(opts) {
	return delay(50)
		.then(() => {
			return addCommunityMember(opts);
		})
		.catch(function(ex) {
			/* ignore */
		});
};

if (require.main === module) {
	//addCommunityMember('greenlock-express.js', 'reg', 'coolaj86+test42@gmail.com', ['coolaj86.com'], true);
	//addCommunityMember('greenlock.js', 'reg', 'coolaj86+test37@gmail.com', ['oneal.im'], false);
	//addCommunityMember('greenlock.js', 'reg', 'coolaj86+test11@gmail.com', ['ppl.family'], true);
}