34 lines
1 KiB
JavaScript
34 lines
1 KiB
JavaScript
// server
|
|
// /app/routes.js
|
|
const createDebug = require("debug")
|
|
const debug = createDebug("webssh2:routes")
|
|
const express = require("express")
|
|
const router = express.Router()
|
|
const handleConnection = require("./connectionHandler")
|
|
const basicAuth = require("basic-auth")
|
|
|
|
function auth(req, res, next) {
|
|
debug("Authenticating user with HTTP Basic Auth")
|
|
var credentials = basicAuth(req)
|
|
if (!credentials) {
|
|
res.setHeader("WWW-Authenticate", 'Basic realm="WebSSH2"')
|
|
return res.status(401).send("Authentication required.")
|
|
}
|
|
// Store credentials in session
|
|
req.session.sshCredentials = credentials
|
|
next()
|
|
}
|
|
|
|
// Scenario 1: No auth required, uses websocket authentication instead
|
|
router.get("/", function (req, res) {
|
|
debug("Accessed /ssh route")
|
|
handleConnection(req, res)
|
|
})
|
|
|
|
// Scenario 2: Auth required, uses HTTP Basic Auth
|
|
router.get("/host/:host", auth, function (req, res) {
|
|
debug(`Accessed /ssh/host/${req.params.host} route`)
|
|
handleConnection(req, res, { host: req.params.host })
|
|
})
|
|
|
|
module.exports = router
|