AJ ONeal
6 years ago
2 changed files with 95 additions and 60 deletions
@ -1,60 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
var express = require('express'); |
|||
var basicAuth = require('express-basic-auth'); |
|||
var crypto = require('crypto'); |
|||
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 secret = crypto.randomBytes(16).toString('hex'); |
|||
|
|||
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.status(401); |
|||
res.statusCode = 401; |
|||
//res.setHeader('Location', '/');
|
|||
res.end('Logged out | <a href="/">Home</a>'); |
|||
}); |
|||
app.use('/browse', function (req, res, next) { |
|||
myAuth(req, res, next); |
|||
}); |
|||
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('\t' + secret); |
|||
console.log(''); |
|||
console.log("\tShhhh... It's a secret to everybody!"); |
|||
console.log(''); |
|||
console.log(''); |
|||
|
|||
module.exports = app; |
@ -0,0 +1,95 @@ |
|||
'use strict'; |
|||
|
|||
//
|
|||
// WARNING: Not for noobs
|
|||
// Try the simple example first
|
|||
//
|
|||
|
|||
//
|
|||
// This demo is used with tunnel-server.js and tunnel-client.js
|
|||
//
|
|||
|
|||
var crypto = require('crypto'); |
|||
|
|||
var email = 'john.doe@gmail.com'; |
|||
var domains = [ 'example.com' ]; |
|||
var agreeLeTos = true; |
|||
var secret = crypto.randomBytes(16).toString('hex'); |
|||
|
|||
require('../').create({ |
|||
version: 'draft-11' |
|||
|
|||
// WARNING: This runs PRODUCTION by default.
|
|||
// Uncomment staging instead if you're a first-timer.
|
|||
, server: 'https://acme-v02.api.letsencrypt.org/directory' // production
|
|||
//, server: 'https://acme-staging-v02.api.letsencrypt.org/directory' // staging
|
|||
|
|||
, email: email |
|||
, agreeTos: agreeLeTos |
|||
, approveDomains: domains |
|||
, configDir: require('path').join(require('os').homedir(), 'acme', 'etc') |
|||
, app: remoteAccess(secret) |
|||
//, 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; |
|||
} |
Loading…
Reference in new issue