greenlock.js/lib/community.js

81 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);
}