mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "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 <a href="/">Home</a>'; | ||
|  |         } | ||
|  |     }); | ||
|  | 
 | ||
|  |     app.get("/", function(req, res) { | ||
|  |         res.setHeader("Content-Type", "text/html; charset=utf-8"); | ||
|  |         res.end('<a href="/browse/">View Files</a>' + "  |  " + '<a href="/logout/">Logout</a>'); | ||
|  |     }); | ||
|  |     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   |   <a href="/">Home</a>'); | ||
|  |     }); | ||
|  |     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; | ||
|  | } |