'use strict'; //var Greenlock = require('greenlock'); var Greenlock = require('../'); var db = {}; var config = { server: 'https://acme-v02.api.letsencrypt.org/directory' , version: 'draft-11' , configDir: require('os').homedir() + '/acme/etc' // or /etc/acme or wherever , privkeyPath: ':config/live/:hostname/privkey.pem' // , fullchainPath: ':config/live/:hostname/fullchain.pem' // Note: both that :config and :hostname , certPath: ':config/live/:hostname/cert.pem' // will be templated as expected , chainPath: ':config/live/:hostname/chain.pem' // , rsaKeySize: 2048 , debug: true }; var handlers = { setChallenge: function (opts, hostname, key, val, cb) { // called during the ACME server handshake, before validation db[key] = { hostname: hostname , key: key , val: val }; cb(null); } , removeChallenge: function (opts, hostname, key, cb) { // called after validation on both success and failure db[key] = null; cb(null); } , getChallenge: function (opts, hostname, key, cb) { // this is special because it is called by the webserver cb(null, db[key].val); // (see greenlock-cli/bin & greenlock-express/standalone), // not by the library itself } , agreeToTerms: function (tosUrl, cb) { // gives you an async way to expose the legal agreement cb(null, tosUrl); // (terms of use) to your users before accepting } }; var greenlock = Greenlock.create(config, handlers); console.error("CHANGE THE EMAIL, DOMAINS, AND AGREE TOS IN THE EXAMPLE BEFORE RUNNING IT"); process.exit(1); // checks :conf/renewal/:hostname.conf greenlock.register({ // and either renews or registers domains: ['example.com'] // CHANGE TO YOUR DOMAIN , email: 'user@email.com' // CHANGE TO YOUR EMAIL , agreeTos: false // set to true to automatically accept an agreement // which you have pre-approved (not recommended) , rsaKeySize: 2048 }, function (err) { if (err) { // Note: you must have a webserver running // and expose handlers.getChallenge to it // in order to pass validation // See greenlock-cli and or greenlock-express console.error('[Error]: greenlock/examples/standalone'); console.error(err.stack); } else { console.log('success'); } });