diff --git a/examples/old-demo.js b/examples/old-demo.js
deleted file mode 100644
index 8000314..0000000
--- a/examples/old-demo.js
+++ /dev/null
@@ -1,75 +0,0 @@
-"use strict";
-
-// npm install spdy@3.x
-
-//var Greenlock = require('greenlock-express')
-var Greenlock = require("../");
-
-var greenlock = Greenlock.create({
- // Let's Encrypt v2 is ACME draft 11
- version: "draft-11",
-
- server: "https://acme-v02.api.letsencrypt.org/directory",
- // Note: If at first you don't succeed, stop and switch to staging
- // https://acme-staging-v02.api.letsencrypt.org/directory
-
- // You MUST change this to a valid email address
- email: "jon@example.com",
-
- // You MUST NOT build clients that accept the ToS without asking the user
- agreeTos: true,
-
- // You MUST change these to valid domains
- // NOTE: all domains will validated and listed on the certificate
- approvedDomains: ["example.com", "www.example.com"],
-
- // You MUST have access to write to directory where certs are saved
- // ex: /home/foouser/acme/etc
- configDir: "~/.config/acme/",
-
- // Get notified of important updates and help me make greenlock better
- communityMember: true
-
- //, debug: true
-});
-
-////////////////////////
-// http-01 Challenges //
-////////////////////////
-
-// http-01 challenge happens over http/1.1, not http2
-var redirectHttps = require("redirect-https")();
-var acmeChallengeHandler = greenlock.middleware(function(req, res) {
- res.setHeader("Content-Type", "text/html; charset=utf-8");
- res.end(
- "
Hello, ⚠️ Insecure World!
Visit Secure Site" +
- ''
- );
-});
-require("http")
- .createServer(acmeChallengeHandler)
- .listen(80, function() {
- console.log("Listening for ACME http-01 challenges on", this.address());
- });
-
-////////////////////////
-// http2 via SPDY h2 //
-////////////////////////
-
-// spdy is a drop-in replacement for the https API
-var spdyOptions = Object.assign({}, greenlock.tlsOptions);
-spdyOptions.spdy = { protocols: ["h2", "http/1.1"], plain: false };
-var server = require("spdy").createServer(
- spdyOptions,
- require("express")().use("/", function(req, res) {
- res.setHeader("Content-Type", "text/html; charset=utf-8");
- res.end("Hello, 🔐 Secure World!
");
- })
-);
-server.on("error", function(err) {
- console.error(err);
-});
-server.on("listening", function() {
- console.log("Listening for SPDY/http2/https requests on", this.address());
-});
-server.listen(443);
diff --git a/examples/old-force-renew.js b/examples/old-force-renew.js
deleted file mode 100644
index 6869f6f..0000000
--- a/examples/old-force-renew.js
+++ /dev/null
@@ -1,30 +0,0 @@
-"use strict";
-
-//require('greenlock-express')
-require("../")
- .create({
- // Let's Encrypt v2 is ACME draft 11
- version: "draft-11",
-
- server: "https://acme-v02.api.letsencrypt.org/directory",
- // Note: If at first you don't succeed, stop and switch to staging
- // https://acme-staging-v02.api.letsencrypt.org/directory
-
- email: "john.doe@example.com",
-
- agreeTos: true,
-
- approvedDomains: ["example.com", "www.example.com"],
-
- app: require("express")().use("/", function(req, res) {
- res.end("Hello, World!");
- }),
-
- renewWithin: 91 * 24 * 60 * 60 * 1000,
- renewBy: 90 * 24 * 60 * 60 * 1000,
-
- // Get notified of important updates and help me make greenlock better
- communityMember: true,
- debug: true
- })
- .listen(80, 443);
diff --git a/examples/old-remote-access.js b/examples/old-remote-access.js
deleted file mode 100644
index 2852aa1..0000000
--- a/examples/old-remote-access.js
+++ /dev/null
@@ -1,104 +0,0 @@
-"use strict";
-
-//
-// WARNING: Not for noobs
-// Try the simple example first
-//
-
-//
-// This demo is used with tunnel-server.js and tunnel-client.js
-//
-
-var email = "john.doe@gmail.com";
-var domains = ["example.com"];
-var agreeLeTos = true;
-//var secret = "My Little Brony";
-var secret = require("crypto")
- .randomBytes(16)
- .toString("hex");
-
-require("../")
- .create({
- version: "draft-11",
-
- server: "https://acme-v02.api.letsencrypt.org/directory",
- // Note: If at first you don't succeed, stop and switch to staging
- // https://acme-staging-v02.api.letsencrypt.org/directory
-
- email: email,
- agreeTos: agreeLeTos,
- approveDomains: domains,
- configDir: "~/.config/acme/",
- app: remoteAccess(secret),
- // Get notified of important updates and help me make greenlock better
- communityMember: true
- //, debug: true
- })
- .listen(3000, 8443);
-
-function remoteAccess(secret) {
- var express = require("express");
- var basicAuth = require("express-basic-auth");
- var serveIndex = require("serve-index");
-
- var rootIndex = serveIndex("/", { hidden: true, icons: true, view: "details" });
- var rootFs = express.static("/", { dotfiles: "allow", redirect: true, index: false });
-
- var userIndex = serveIndex(require("os").homedir(), { hidden: true, icons: true, view: "details" });
- var userFs = express.static(require("os").homedir(), { dotfiles: "allow", redirect: true, index: false });
-
- var app = express();
- var realm = "Login Required";
-
- var myAuth = basicAuth({
- users: { root: secret, user: secret },
- challenge: true,
- realm: realm,
- unauthorizedResponse: function(/*req*/) {
- return 'Unauthorized Home';
- }
- });
-
- app.get("/", function(req, res) {
- res.setHeader("Content-Type", "text/html; charset=utf-8");
- res.end('View Files' + " | " + 'Logout');
- });
- app.use("/logout", function(req, res) {
- res.setHeader("Content-Type", "text/html; charset=utf-8");
- res.setHeader("WWW-Authenticate", 'Basic realm="' + realm + '"');
- res.statusCode = 401;
- //res.setHeader('Location', '/');
- res.end('Logged out | Home');
- });
- app.use("/browse", myAuth);
- app.use("/browse", function(req, res, next) {
- if ("root" === req.auth.user) {
- rootFs(req, res, function() {
- rootIndex(req, res, next);
- });
- return;
- }
- if ("user" === req.auth.user) {
- userFs(req, res, function() {
- userIndex(req, res, next);
- });
- return;
- }
- res.end("Sad Panda");
- });
-
- console.log("");
- console.log("");
- console.log("Usernames are\n");
- console.log("\troot");
- console.log("\tuser");
- console.log("");
- console.log("Password (for both) is\n");
- console.log("\t" + secret);
- console.log("");
- console.log("Shhhh... It's a secret to everybody!");
- console.log("");
- console.log("");
-
- return app;
-}
diff --git a/examples/old-vhost.js b/examples/old-vhost.js
deleted file mode 100644
index ed93322..0000000
--- a/examples/old-vhost.js
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env node
-"use strict";
-
-///////////////////
-// vhost example //
-///////////////////
-
-//
-// virtual hosting example
-//
-
-// The prefix where sites go by name.
-// For example: whatever.com may live in /srv/www/whatever.com, thus /srv/www is our path
-var srv = process.argv[3] || "/srv/www/";
-
-var path = require("path");
-var fs = require("fs").promises;
-var finalhandler = require("finalhandler");
-var serveStatic = require("serve-static");
-
-//var glx = require('greenlock-express')
-var glx = require("./").create({
- version: "draft-11", // Let's Encrypt v2 is ACME draft 11
-
- server: "https://acme-v02.api.letsencrypt.org/directory", // If at first you don't succeed, stop and switch to staging
- // https://acme-staging-v02.api.letsencrypt.org/directory
-
- configDir: process.argv[4] || "~/.config/acme/", // You MUST have access to write to directory where certs
- // are saved. ex: /home/foouser/.config/acme
-
- approveDomains: myApproveDomains, // Greenlock's wraps around tls.SNICallback. Check the
- // domain name here and reject invalid ones
-
- app: myVhostApp, // Any node-style http app (i.e. express, koa, hapi, rill)
-
- /* CHANGE TO A VALID EMAIL */
- email: process.argv[2] || "jon.doe@example.com", // Email for Let's Encrypt account and Greenlock Security
- agreeTos: true // Accept Let's Encrypt ToS
- //, communityMember: true // Join Greenlock to get important updates, no spam
-
- //, debug: true
-});
-
-var server = glx.listen(80, 443);
-server.on("listening", function() {
- console.info(server.type + " listening on", server.address());
-});
-
-function myApproveDomains(opts, certs, cb) {
- console.log("sni:", opts.domain);
- // In this example the filesystem is our "database".
- // We check in /srv/www for whatever.com and if it exists, it's allowed
-
- // SECURITY Greenlock validates opts.domains ahead-of-time so you don't have to
- return checkWwws(opts.domains[0])
- .then(function() {
- //opts.email = email;
- opts.agreeTos = true;
- cb(null, { options: opts, certs: certs });
- })
- .catch(cb);
-}
-
-function checkWwws(_hostname) {
- if (!_hostname) {
- // SECURITY, don't allow access to the 'srv' root
- // (greenlock-express uses middleware to check '..', etc)
- return "";
- }
- var hostname = _hostname;
- var _hostdir = path.join(srv, hostname);
- var hostdir = _hostdir;
- // TODO could test for www/no-www both in directory
- return fs
- .readdir(hostdir)
- .then(function() {
- // TODO check for some sort of htaccess.json and use email in that
- // NOTE: you can also change other options such as `challengeType` and `challenge`
- // opts.challengeType = 'http-01';
- // opts.challenge = require('le-challenge-fs').create({});
- return hostname;
- })
- .catch(function() {
- if ("www." === hostname.slice(0, 4)) {
- // Assume we'll redirect to non-www if it's available.
- hostname = hostname.slice(4);
- hostdir = path.join(srv, hostname);
- return fs.readdir(hostdir).then(function() {
- // TODO list both domains?
- return hostname;
- });
- } else {
- // Or check and see if perhaps we should redirect non-www to www
- hostname = "www." + hostname;
- hostdir = path.join(srv, hostname);
- return fs.readdir(hostdir).then(function() {
- // TODO list both domains?
- return hostname;
- });
- }
- })
- .catch(function() {
- throw new Error("rejecting '" + _hostname + "' because '" + _hostdir + "' could not be read");
- });
-}
-
-function myVhostApp(req, res) {
- // SECURITY greenlock pre-sanitizes hostnames to prevent unauthorized fs access so you don't have to
- // (also: only domains approved above will get here)
- console.log("vhost:", req.headers.host);
- if (!req.headers.host) {
- // SECURITY, don't allow access to the 'srv' root
- // (greenlock-express uses middleware to check '..', etc)
- return res.end();
- }
-
- // We could cache wether or not a host exists for some amount of time
- var fin = finalhandler(req, res);
- return checkWwws(req.headers.host)
- .then(function(hostname) {
- if (hostname !== req.headers.host) {
- res.statusCode = 302;
- res.setHeader("Location", "https://" + hostname);
- // SECURITY this is safe only because greenlock disallows invalid hostnames
- res.end("");
- return;
- }
- var serve = serveStatic(path.join(srv, hostname), { redirect: true });
- serve(req, res, fin);
- })
- .catch(function() {
- fin();
- });
-}
diff --git a/examples/old-wildcard.js b/examples/old-wildcard.js
deleted file mode 100644
index 349846e..0000000
--- a/examples/old-wildcard.js
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env node
-"use strict";
-/*global Promise*/
-
-///////////////////////
-// wildcard example //
-//////////////////////
-
-//
-// wildcard example
-//
-
-//var glx = require('greenlock-express')
-var glx = require("../").create({
- version: "draft-11", // Let's Encrypt v2 is ACME draft 11
-
- server: "https://acme-staging-v02.api.letsencrypt.org/directory",
- //, server: 'https://acme-v02.api.letsencrypt.org/directory' // If at first you don't succeed, stop and switch to staging
- // https://acme-staging-v02.api.letsencrypt.org/directory
-
- configDir: "~/acme/", // You MUST have access to write to directory where certs
- // are saved. ex: /home/foouser/.config/acme
-
- approveDomains: myApproveDomains, // Greenlock's wraps around tls.SNICallback. Check the
- // domain name here and reject invalid ones
-
- app: require("./my-express-app.js"), // Any node-style http app (i.e. express, koa, hapi, rill)
-
- /* CHANGE TO A VALID EMAIL */
- email: "jon.doe@example.com", // Email for Let's Encrypt account and Greenlock Security
- agreeTos: true, // Accept Let's Encrypt ToS
- communityMember: true, // Join Greenlock to (very rarely) get important updates
-
- //, debug: true
- store: require("le-store-fs")
-});
-
-var server = glx.listen(80, 443);
-server.on("listening", function() {
- console.info(server.type + " listening on", server.address());
-});
-
-function myApproveDomains(opts) {
- console.log("sni:", opts.domain);
-
- // must be 'example.com' or start with 'example.com'
- if (
- "example.com" !== opts.domain &&
- "example.com" !==
- opts.domain
- .split(".")
- .slice(1)
- .join(".")
- ) {
- return Promise.reject(new Error("we don't serve your kind here: " + opts.domain));
- }
-
- // the primary domain for the cert
- opts.subject = "example.com";
- // the altnames (including the primary)
- opts.domains = [opts.subject, "*.example.com"];
-
- if (!opts.challenges) {
- opts.challenges = {};
- }
- opts.challenges["http-01"] = require("le-challenge-fs").create({});
- // Note: When implementing a dns-01 plugin you should make it check in a loop
- // until it can positively confirm that the DNS changes have propagated.
- // That could take several seconds to a few minutes.
- opts.challenges["dns-01"] = require("le-challenge-dns").create({});
-
- // explicitly set account id and certificate.id
- opts.account = { id: opts.email };
- opts.certificate = { id: opts.subject };
-
- return Promise.resolve(opts);
-}