diff --git a/README.md b/README.md index 81fb898..44bfd5d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,47 @@ # le-challenge-fs -A fs-based strategy for node-letsencrypt for setting, retrieving, and clearing ACME challenges issued by the ACME server + +A fs-based strategy for node-letsencrypt for setting, retrieving, +and clearing ACME challenges issued by the ACME server + +This places the acme challenge in an appropriate directory in the specified `webrootPath` +and removes it once the challenge has either completed or failed. + +* Safe to use with node cluster +* Safe to use with ephemeral services (Heroku, Joyent, etc) + +Install +------- + +```bash +npm install --save le-challenge-fs@2.x +``` + +Usage +----- + +```bash +var leChallenge = require('le-challenge-fs').create({ + webrootPath: '~/letsencrypt/srv/www/:hostname/.well-known/acme-challenge' +, debug: false +}); + +var LE = require('letsencrypt'); + +LE.create({ + server: LE.stagingServerUrl // Change to LE.productionServerUrl in production +, challenge: leChallenge +}); +``` + +Exposed Methods +--------------- + +For ACME Challenge: + +* `setChallange(opts, domain, key, val, done)` +* `getChallange(domain, key, done)` +* `removeChallange(domain, key, done)` + +For node-letsencrypt internals: + +* `getOptions()` returns the internal defaults merged with the user-supplied options diff --git a/index.js b/index.js new file mode 100644 index 0000000..9982539 --- /dev/null +++ b/index.js @@ -0,0 +1,40 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); + +module.exports.agreeToTerms = function (args, agreeCb) { + agreeCb(null, args.agreeTos); +}; + +module.exports.setChallenge = function (args, domain, challengePath, keyAuthorization, done) { + //var hostname = args.domains[0]; + var mkdirp = require('mkdirp'); + + // TODO should be args.webrootPath + //console.log('args.webrootPath, challengePath'); + //console.log(args.webrootPath, challengePath); + mkdirp(args.webrootPath, function (err) { + if (err) { + done(err); + return; + } + + fs.writeFile(path.join(args.webrootPath, challengePath), keyAuthorization, 'utf8', function (err) { + done(err); + }); + }); +}; + +module.exports.getChallenge = function (args, domain, key, done) { + //var hostname = args.domains[0]; + + //console.log("getting the challenge", args, key); + fs.readFile(path.join(args.webrootPath, key), 'utf8', done); +}; + +module.exports.removeChallenge = function (args, domain, key, done) { + //var hostname = args.domains[0]; + + fs.unlink(path.join(args.webrootPath, key), done); +};