User pass (#156)
* Accept default username/password overrides from config. Clarified supplying custom config. (#146) * feat(auth): username and password may now be sourced from config.json fixes #104
This commit is contained in:
parent
eebc32b2c9
commit
212df80fb6
3 changed files with 27 additions and 5 deletions
17
README.md
17
README.md
|
@ -22,7 +22,7 @@ To install:
|
||||||
|
|
||||||
1. Clone to a location somewhere and then `cd app` and `npm install --production`. If you want to develop and rebuild javascript and other files utilize `npm install` instead.
|
1. Clone to a location somewhere and then `cd app` and `npm install --production`. If you want to develop and rebuild javascript and other files utilize `npm install` instead.
|
||||||
|
|
||||||
2. If desired, edit config.json to change the listener to your liking. There are also some default options which may be definied for a few of the variables.
|
2. If desired, edit app/config.json to change the listener to your liking. There are also some default options which may be definied for a few of the variables.
|
||||||
|
|
||||||
3. Run `npm start`
|
3. Run `npm start`
|
||||||
|
|
||||||
|
@ -35,24 +35,33 @@ You will be prompted for credentials to use on the SSH server via HTTP Basic aut
|
||||||
|
|
||||||
# Docker Instructions
|
# Docker Instructions
|
||||||
|
|
||||||
Modify config.json
|
Copy app/config.json.template to app/config.json and modify the latter:
|
||||||
|
|
||||||
```json
|
```js
|
||||||
{
|
{
|
||||||
|
// ...
|
||||||
"listen": {
|
"listen": {
|
||||||
"ip": "0.0.0.0",
|
"ip": "0.0.0.0",
|
||||||
"port": 2222
|
"port": 2222
|
||||||
}
|
}
|
||||||
|
// ...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Build and run
|
Rebuild and run
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -t webssh2 .
|
docker build -t webssh2 .
|
||||||
docker run --name webssh2 -d -p 2222:2222 webssh2
|
docker run --name webssh2 -d -p 2222:2222 webssh2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Alternatively if you don't want to rebuild, mount the config at runtime:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --name webssh2 -d -p 2222:2222 -v `pwd`/app/config.json:/usr/src/config.json webssh2
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# Options
|
# Options
|
||||||
|
|
||||||
## GET request vars
|
## GET request vars
|
||||||
|
|
|
@ -111,6 +111,7 @@ var app = express()
|
||||||
var compression = require('compression')
|
var compression = require('compression')
|
||||||
var server = require('http').Server(app)
|
var server = require('http').Server(app)
|
||||||
var myutil = require('./util')
|
var myutil = require('./util')
|
||||||
|
myutil.setDefaultCredentials(config.user.name, config.user.password);
|
||||||
var validator = require('validator')
|
var validator = require('validator')
|
||||||
var io = require('socket.io')(server, { serveClient: false })
|
var io = require('socket.io')(server, { serveClient: false })
|
||||||
var socket = require('./socket')
|
var socket = require('./socket')
|
||||||
|
|
|
@ -7,6 +7,13 @@ require('colors') // allow for color property extensions in log messages
|
||||||
var debug = require('debug')('WebSSH2')
|
var debug = require('debug')('WebSSH2')
|
||||||
var Auth = require('basic-auth')
|
var Auth = require('basic-auth')
|
||||||
|
|
||||||
|
let defaultCredentials = {username: null, password: null};
|
||||||
|
|
||||||
|
exports.setDefaultCredentials = function (username, password) {
|
||||||
|
defaultCredentials.username = username;
|
||||||
|
defaultCredentials.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
exports.basicAuth = function basicAuth (req, res, next) {
|
exports.basicAuth = function basicAuth (req, res, next) {
|
||||||
var myAuth = Auth(req)
|
var myAuth = Auth(req)
|
||||||
if (myAuth && myAuth.pass !== '') {
|
if (myAuth && myAuth.pass !== '') {
|
||||||
|
@ -15,13 +22,18 @@ exports.basicAuth = function basicAuth (req, res, next) {
|
||||||
debug('myAuth.name: ' + myAuth.name.yellow.bold.underline +
|
debug('myAuth.name: ' + myAuth.name.yellow.bold.underline +
|
||||||
' and password ' + ((myAuth.pass) ? 'exists'.yellow.bold.underline
|
' and password ' + ((myAuth.pass) ? 'exists'.yellow.bold.underline
|
||||||
: 'is blank'.underline.red.bold))
|
: 'is blank'.underline.red.bold))
|
||||||
next()
|
|
||||||
} else {
|
} else {
|
||||||
|
req.session.username = defaultCredentials.username;
|
||||||
|
req.session.userpassword = defaultCredentials.password;
|
||||||
|
}
|
||||||
|
if (!req.session.userpassword) {
|
||||||
res.statusCode = 401
|
res.statusCode = 401
|
||||||
debug('basicAuth credential request (401)')
|
debug('basicAuth credential request (401)')
|
||||||
res.setHeader('WWW-Authenticate', 'Basic realm="WebSSH"')
|
res.setHeader('WWW-Authenticate', 'Basic realm="WebSSH"')
|
||||||
res.end('Username and password required for web SSH service.')
|
res.end('Username and password required for web SSH service.')
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
// takes a string, makes it boolean (true if the string is true, false otherwise)
|
// takes a string, makes it boolean (true if the string is true, false otherwise)
|
||||||
|
|
Loading…
Reference in a new issue