| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | '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; | 
					
						
							| 
									
										
										
										
											2018-04-25 11:29:59 -06:00
										 |  |  | //var secret = "My Little Brony";
 | 
					
						
							|  |  |  | var secret = require('crypto').randomBytes(16).toString('hex'); | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | require('../').create({ | 
					
						
							|  |  |  |   version: 'draft-11' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 17:54:08 -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
										 |  |  | 
 | 
					
						
							|  |  |  | , email: email | 
					
						
							|  |  |  | , agreeTos: agreeLeTos | 
					
						
							|  |  |  | , approveDomains: domains | 
					
						
							| 
									
										
										
										
											2018-07-03 03:25:12 -06:00
										 |  |  | , configDir: '~/.config/acme/' | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | , app: remoteAccess(secret) | 
					
						
							| 
									
										
										
										
											2018-05-10 00:53:45 -06:00
										 |  |  |   // Get notified of important updates and help me make greenlock better
 | 
					
						
							|  |  |  | , communityMember: true | 
					
						
							| 
									
										
										
										
											2018-04-25 01:08:31 -06:00
										 |  |  | //, 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; | 
					
						
							|  |  |  | } |