Merge branch 'pathchanges'

This commit is contained in:
Bill Church 2020-03-14 11:25:33 -04:00
commit 546ac911c9
15 changed files with 37 additions and 268 deletions

View file

@ -9,7 +9,7 @@
}, },
"dependencies": { "dependencies": {
"mute": [ "mute": [
"read-config", "read-config-ng",
"socket.io", "socket.io",
"standard", "standard",
"bithound" "bithound"

View file

@ -1,8 +1,25 @@
# Change Log # Change Log
### 0.2.10 [TBD] ### 0.2.10-1 [TBD]
### Added ### Added
- Add configuration option to restrict connections to specified subnets thanks to @Mierdin - Add configuration option to restrict connections to specified subnets thanks to @Mierdin
### Changed
- Using new repo for read-config -> read-config-ng
### Potentially Breaking Changes
- Move all child resources to start from under /ssh
- /socket.io -> /ssh/socket.io
- /webssh2.css -> /ssh/webssh2.css
- /webssh2.bundle.js -> /ssh/webssh2.bundle.js
- /reauth -> /ssh/reauth
- perhaps more
### Fixes
- Typo in config.json.sample, thanks @wuchihsu, fixes #173
### Housekeeping
- Removed irrelavant build scripts from /scripts
### 0.2.9 [2019-06-13] ### 0.2.9 [2019-06-13]
### Changes ### Changes
- Missing require('fs') in `server/app.js` See issue [#135](../../issues/135) - Missing require('fs') in `server/app.js` See issue [#135](../../issues/135)

View file

@ -5,7 +5,7 @@
<style> <style>
html, body {background-color: #000;height: 100%;margin: 0;}.dropup-content {display: none;} html, body {background-color: #000;height: 100%;margin: 0;}.dropup-content {display: none;}
</style> </style>
<link rel="stylesheet" href="/webssh2.css" /> <link rel="stylesheet" href="/ssh/webssh2.css" />
</head> </head>
<body> <body>
<div class="box"> <div class="box">
@ -20,6 +20,6 @@
<div id="status"></div> <div id="status"></div>
</div> </div>
</div> </div>
<script src="/webssh2.bundle.js" defer></script> <script src="/ssh/webssh2.bundle.js" defer></script>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

View file

@ -5,7 +5,7 @@
<style> <style>
html, body {background-color: #000;height: 100%;margin: 0;}.dropup-content {display: none;} html, body {background-color: #000;height: 100%;margin: 0;}.dropup-content {display: none;}
</style> </style>
<link rel="stylesheet" href="/webssh2.css" /> <link rel="stylesheet" href="/ssh/webssh2.css" />
</head> </head>
<body> <body>
<div class="box"> <div class="box">
@ -20,6 +20,6 @@
<div id="status"></div> <div id="status"></div>
</div> </div>
</div> </div>
<script src="/webssh2.bundle.js" defer></script> <script src="/ssh/webssh2.bundle.js" defer></script>
</body> </body>
</html> </html>

View file

@ -40,16 +40,9 @@ function resizeScreen () {
socket.emit('resize', { cols: term.cols, rows: term.rows }) socket.emit('resize', { cols: term.cols, rows: term.rows })
} }
if (document.location.pathname) { socket = io.connect({
var parts = document.location.pathname.split('/') path: "/ssh/socket.io"
var base = parts.slice(0, parts.length - 1).join('/') + '/' })
var resource = base.substring(1) + 'socket.io'
socket = io.connect(null, {
resource: resource
})
} else {
socket = io.connect()
}
term.onData(function (data) { term.onData(function (data) {
socket.emit('data', data) socket.emit('data', data)
@ -173,7 +166,7 @@ function drawMenu (data) {
// reauthenticate // reauthenticate
function reauthSession () { // eslint-disable-line function reauthSession () { // eslint-disable-line
console.log('re-authenticating') console.log('re-authenticating')
window.location.href = '/reauth' window.location.href = '/ssh/reauth'
return false return false
} }

7
app/package-lock.json generated
View file

@ -6654,9 +6654,10 @@
"integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==",
"dev": true "dev": true
}, },
"read-config": { "read-config-ng": {
"version": "git+https://github.com/billchurch/nodejs-read-config.git#6e79091d220afd384915289ca578aa30a17ffb0a", "version": "1.6.1",
"from": "git+https://github.com/billchurch/nodejs-read-config.git", "resolved": "https://registry.npmjs.org/read-config-ng/-/read-config-ng-1.6.1.tgz",
"integrity": "sha512-tFNIA0+ZqrhJnqLcj175ZMGpn6TJtpTaY64KulfEsgdP0OZPqgVommAonhY9r4eN/PZLpt6cxnvf9yIE+SZEwA==",
"requires": { "requires": {
"async": "~1.5.2", "async": "~1.5.2",
"js-yaml": "~3.13.1", "js-yaml": "~3.13.1",

View file

@ -35,7 +35,7 @@
"express": "~4.17.1", "express": "~4.17.1",
"express-session": "~1.17.0", "express-session": "~1.17.0",
"morgan": "~1.9.1", "morgan": "~1.9.1",
"read-config": "git+https://github.com/billchurch/nodejs-read-config.git", "read-config-ng": "~1.6.1",
"socket.io": "2.2.0", "socket.io": "2.2.0",
"ssh2": "~0.8.6", "ssh2": "~0.8.6",
"terser-webpack-plugin": "^2.2.1", "terser-webpack-plugin": "^2.2.1",

View file

@ -91,7 +91,7 @@ let config = {
try { try {
if (fs.existsSync(configPath)) { if (fs.existsSync(configPath)) {
console.log('ephemeral_auth service reading config from: ' + configPath) console.log('ephemeral_auth service reading config from: ' + configPath)
config = require('read-config')(configPath) config = require('read-config-ng')(configPath)
} else { } else {
console.error('\n\nERROR: Missing config.json for webssh. Current config: ' + JSON.stringify(config)) console.error('\n\nERROR: Missing config.json for webssh. Current config: ' + JSON.stringify(config))
console.error('\n See config.json.sample for details\n\n') console.error('\n See config.json.sample for details\n\n')
@ -115,7 +115,7 @@ var server = require('http').Server(app)
var myutil = require('./util') var myutil = require('./util')
myutil.setDefaultCredentials(config.user.name, config.user.password, config.user.privatekey); myutil.setDefaultCredentials(config.user.name, config.user.password, config.user.privatekey);
var validator = require('validator') var validator = require('validator')
var io = require('socket.io')(server, { serveClient: false }) var io = require('socket.io')(server, { serveClient: false, path: '/ssh/socket.io' })
var socket = require('./socket') var socket = require('./socket')
var expressOptions = require('./expressOptions') var expressOptions = require('./expressOptions')
@ -127,9 +127,9 @@ if (config.accesslog) app.use(logger('common'))
app.disable('x-powered-by') app.disable('x-powered-by')
// static files // static files
app.use(express.static(publicPath, expressOptions)) app.use('/ssh', express.static(publicPath, expressOptions))
app.get('/reauth', function (req, res, next) { app.get('/ssh/reauth', function (req, res, next) {
var r = req.headers.referer || '/' var r = req.headers.referer || '/'
res.status(401).send('<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=' + r + '"></head><body bgcolor="#000"></body></html>') res.status(401).send('<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=' + r + '"></head><body bgcolor="#000"></body></html>')
}) })

View file

@ -1,42 +0,0 @@
#!/bin/bash
## Syncs from BIG-IP and builds a release based on version in extensions/ephemeral_auth/package.json
#
source ./scripts/env.sh
source ./scripts/util.sh
./scripts/pull.sh
if [ $? -ne 0 ]; then
# failure
tput bel;tput bel;tput bel;tput bel
echo -e "\n${fgLtRed}Pull command failed. Giving up.${fgLtWhi}\n"
echo ${output}
exit 255
fi
# get version of package from package.json
package_version=$(jq -r ".version" workspace/extensions/webssh2/package.json)
# creates new workspace name with version
webssh_workspace_name=$webssh_workspace_name-$package_version
echoNotice "Creating workspace package"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost /bin/tar --exclude='./extensions/webssh2/config.json' -czf - -C /var/ilx/workspaces/Common/$webssh_workspace_name . > Build/Release/$webssh_package_name-$package_version.tgz"
echoNotice "Creating SHA256 hash"
runCommand "shasum -a 256 Build/Release/$webssh_package_name-$package_version.tgz > Build/Release/$webssh_package_name-$package_version.tgz.sha256"
echoNotice "Copying to current"
runCommand "cp Build/Release/$webssh_package_name-$package_version.tgz $webssh_pua_location/$webssh_package_name-current.tgz && \
cp Build/Release/$webssh_package_name-$package_version.tgz.sha256 $webssh_pua_location/$webssh_package_name-current.tgz.sha256"
echoNotice "Deleting any '.DS_Store' files"
runCommand "find . -name '.DS_Store' -type f -delete"
echo -e "\nWorkspace packages located at:\n"
echo " Build/Release/$webssh_package_name-$package_version.tgz"
echo " Build/Release/$webssh_package_name-$package_version.tgz.sha256"
echo " $webssh_pua_location/$webssh_package_name-current.tgz"
echo " $webssh_pua_location/$webssh_package_name-current.tgz.sha256"
echo -e "\n👍 Build Complete 👍\n"
exit 0

View file

@ -1,6 +0,0 @@
#!/bin/sh
#webssh_ilxhost=root@192.168.30.209
webssh_ilxhost=root@192.168.30.203
webssh_workspace_name=webssh2
webssh_package_name=BIG-IP-ILX-WebSSH2
webssh_pua_location=./bin

View file

@ -1,30 +0,0 @@
#!/bin/bash
#
# ./scripts/pull.sh
#
# bill@f5.com
#
# Pulls an ILX workspace from a BIG-IP and syncs to ./workspace, excludes
# ./workspace/extensions/ephemeral_auth/node_modules.
#
source ./scripts/env.sh
source ./scripts/util.sh
# get version of package from package.json
PACKAGE_VERSION=$(jq -r ".version" workspace/extensions/webssh2/package.json 2>&1)
# creates new workspace name with version
webssh_workspace_name=$webssh_workspace_name-$PACKAGE_VERSION
echo "Pull ${fgLtCya}$webssh_workspace_name${fgLtWhi} from ${fgLtCya}$webssh_ilxhost${fgLtWhi}"
# check to see if the workspace actually exists before attempting to copy over
echoNotice "Checking for existing workspace ${fgLtCya}$webssh_workspace_name${fgLtWhi}"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost tmsh list ilx workspace $webssh_workspace_name one-line 2>&1"
echoNotice "Pulling ${fgLtCya}$webssh_workspace_name${fgLtWhi} from ${fgLtCya}$webssh_ilxhost${fgLtWhi}"
runCommand "rsync -e 'ssh -o ClearAllForwardings=yes -ax' -avq --include=\"extensions/ephemeral_auth/node_modules/f5-*\" --exclude=\".DS_Store\" --exclude=\"extensions/ephemeral_auth/node_modules/*\" $webssh_ilxhost:/var/ilx/workspaces/Common/$webssh_workspace_name/. workspace/. 2>&1"
echo -e "\n👍 Pull complete 👍\n"
exit 0

View file

@ -1,61 +0,0 @@
#!/bin/bash
#
# ./scripts/push.sh
#
# bill@f5.com
#
# Pushes ./workspace to a BIG-IP ILX workspace
#
source ./scripts/env.sh
source ./scripts/util.sh
# get version of package from package.json
PACKAGE_VERSION=$(jq -r ".version" workspace/extensions/webssh2/package.json 2>&1)
# creates new workspace name with version
webssh_workspace_name=$webssh_workspace_name-$PACKAGE_VERSION
echo "Push ${fgLtCya}$webssh_workspace_name${fgLtWhi} to ${fgLtCya}$webssh_ilxhost${fgLtWhi}"
echoNotice "Checking $webssh_ilxhost for workspace $webssh_workspace_name"
output=$(ssh -o ClearAllForwardings=yes $webssh_ilxhost tmsh list ilx workspace $webssh_workspace_name one-line 2>&1)
result="$?" 2>&1
if [ $result -ne 0 ]; then
echo "❌"
echoNotice "Attempting to create workspace"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost \"tmsh create ilx workspace $webssh_workspace_name node-version 6.9.1\" 2>&1"
else
echo "✅"
fi
echoNotice "Pushing ./workspace to $webssh_ilxhost at $webssh_workspace_name"
runCommand "rsync -e 'ssh -o ClearAllForwardings=yes -ax' -avq --delete --exclude='.DS_Store' --exclude extensions/webssh2/node_modules workspace/. $webssh_ilxhost:/var/ilx/workspaces/Common/$webssh_workspace_name/."
echoNotice "Installing node modules at $webssh_workspace_name on $webssh_ilxhost"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost \"cd /var/ilx/workspaces/Common/$webssh_workspace_name/extensions/webssh2; npm i --production\" 2>&1"
echoNotice "Setting permissions at $webssh_workspace_name on $webssh_ilxhost"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost \"chown -R root.sdm /var/ilx/workspaces/Common/$webssh_workspace_name/; \
chmod -R ug+rwX,o-w /var/ilx/workspaces/Common/$webssh_workspace_name/; \
chmod u+rw,go-w /var/ilx/workspaces/Common/$webssh_workspace_name/version; \
chmod u+rw,go-w /var/ilx/workspaces/Common/$webssh_workspace_name/node_version\" 2>&1"
echoNotice "Deleting $webssh_workspace_name/node_modules/.bin on $webssh_ilxhost"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost \"cd /var/ilx/workspaces/Common/$webssh_workspace_name/extensions/webssh2; rm -rf node_modules/.bin\" 2>&1"
# switch plugin to new workspace
echoNotice "Checking to see if plugin exists"
output=$(ssh -o ClearAllForwardings=yes $webssh_ilxhost tmsh list ilx plugin WebSSH_plugin one-line 2>&1)
result="$?" 2>&1
if [ $result -ne 0 ]; then
echo "❌"
echoNotice "Attempting to create plugin"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost tmsh create ilx plugin WebSSH_plugin from-workspace $webssh_workspace_name extensions { webssh2 { concurrency-mode single ilx-logging enabled } } 2>&1"
else
echo "✅"
echoNotice "Switching plugin to $webssh_workspace_name"
runCommand "ssh -o ClearAllForwardings=yes $webssh_ilxhost tmsh modify ilx plugin WebSSH_plugin from-workspace $webssh_workspace_name extensions { webssh2 { concurrency-mode single ilx-logging enabled } } 2>&1"
fi
echo -e "\n👍 Push complete 👍\n"
exit 0

View file

@ -1,74 +0,0 @@
#!/bin/bash
# Utility functions / scripts
echoNotice () { echo -e -n "\n$@... "; }
fgLtRed=$(tput bold;tput setaf 1)
fgLtGrn=$(tput bold;tput setaf 2)
fgLtYel=$(tput bold;tput setaf 3)
fgLtBlu=$(tput bold;tput setaf 4)
fgLtMag=$(tput bold;tput setaf 5)
fgLtCya=$(tput bold;tput setaf 6)
fgLtWhi=$(tput bold;tput setaf 7)
fgLtGry=$(tput bold;tput setaf 8)
echo ${fgLtWhi}
# check for jq and try to install...
output=$(which jq 2>&1)
if [[ $? -ne 0 ]]; then
echo -e "You need to install jq: https://stedolan.github.io/jq\n"
echo -e "If you have *brew* you can install with:\n"
echo -e " brew install jq\n"
echo -n "Do you want me to try and install that for you (Y/n)? "
read -n1 yesno
echo
if [[ ("$yesno" != "y") ]]; then
echo -e "\nUnable to continue, install jq first.\n\n"
exit 255
else
which brew
if [[ $? -ne 0 ]]; then
echo -e "\nYou're a mess... You don't even have brew installed...\nMaybe you should check it out\n"
echo -e " https://brew.sh/\n\n"
exit 255
fi
echo
brew install jq
if [[ $? -ne 0 ]]; then
echo -e "\nLooks like that failed, I can't do everything... Quitting, install jq...\n"
exit 255
fi
fi
fi
# checks the output of a command to get the status and report/handle failure
checkOutput() {
if [ $result -eq 0 ]; then
# success
#echo "${fgLtGrn}[OK]${fgLtWhi}"
echo "✅"
return
else
# failure
tput bel;tput bel;tput bel;tput bel
#echo "${fgLtRed}[FAILED]${fgLtWhi}"
echo "❌"
echo -e "\nPrevious command failed in ${script_path}/${scriptname} with error level: ${result}"
echo -e "\nCommand:\n"
echo " ${command}"
echo -e "\nSTDOUT/STDERR:\n"
echo ${output}
exit 255
fi
}
# run a comand and check call checkOutput
runCommand() {
# $1 command
command=$@
output=$((eval $command) 2>&1)
result="$?" 2>&1
prevline=$(($LINENO-2))
checkOutput
}

View file

@ -1,29 +0,0 @@
#!/bin/bash
## displays and optionally changes version of product
source ./scripts/env.sh
source ./scripts/util.sh
echo
# get current version of workspace, ask to change or rebuild
webssh_ver=$(jq -r ".version" ./app/package.json 2>&1)
if [[ $? -ne 0 ]]; then exit; echo "error reading package version";fi
echo "Current version of package is: $webssh_ver"
echo -n "If you want to change this version, enter it now otherwise press enter to retain: "
read newver
echo
if [[ ("$newver" != "") ]]; then
echo "Updating version of package to: $newver"
export newver
jq --arg newver "$newver" '.version = $newver' < ./app/package.json > ./app/package.json.new
if [[ $? -ne 0 ]]; then exit; echo "error changing version - ilx";fi
mv ./app/package.json.new ./app/package.json
else
echo "No changes made"
fi