| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // WARNING: Not for noobs
 | 
					
						
							|  |  |  | // Try the simple example first
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This demo is used with tunnel-server.js and tunnel-client.js
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | var email = "john.doe@gmail.com"; | 
					
						
							|  |  |  | var domains = ["example.com"]; | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | var agreeLeTos = true; | 
					
						
							| 
									
										
										
										
											2018-04-25 11:29:59 -06:00
										 |  |  | //var secret = "My Little Brony";
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | var secret = require("crypto") | 
					
						
							|  |  |  | 	.randomBytes(16) | 
					
						
							|  |  |  | 	.toString("hex"); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | require("../") | 
					
						
							|  |  |  | 	.create({ | 
					
						
							|  |  |  | 		version: "draft-11", | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 		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
 | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 		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); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | function remoteAccess(secret) { | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	var express = require("express"); | 
					
						
							|  |  |  | 	var basicAuth = require("express-basic-auth"); | 
					
						
							|  |  |  | 	var serveIndex = require("serve-index"); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	var rootIndex = serveIndex("/", { hidden: true, icons: true, view: "details" }); | 
					
						
							|  |  |  | 	var rootFs = express.static("/", { dotfiles: "allow", redirect: true, index: false }); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	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 }); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	var app = express(); | 
					
						
							|  |  |  | 	var realm = "Login Required"; | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	var myAuth = basicAuth({ | 
					
						
							|  |  |  | 		users: { root: secret, user: secret }, | 
					
						
							|  |  |  | 		challenge: true, | 
					
						
							|  |  |  | 		realm: realm, | 
					
						
							|  |  |  | 		unauthorizedResponse: function(/*req*/) { | 
					
						
							|  |  |  | 			return 'Unauthorized <a href="/">Home</a>'; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	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"); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	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(""); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 	return app; | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | } |