66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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);
 | |
| }
 |