minor formatting and name cleanup

This commit is contained in:
billchurch 2017-03-24 11:23:45 -04:00
parent 35009f91f4
commit 6b05e5e34f
4 changed files with 59 additions and 45 deletions

View file

@ -3,21 +3,19 @@
* Bill Church - https://github.com/billchurch - April 2016 * Bill Church - https://github.com/billchurch - April 2016
* *
*/ */
var express = require('express'),
var express = require('express'); app = express(),
var app = express(); cookieParser = require('cookie-parser'),
var cookieParser = require('cookie-parser'); server = require('http').Server(app),
var server = require('http').Server(app); io = require('socket.io')(server),
var io = require('socket.io')(server); path = require('path'),
var path = require('path'); basicAuth = require('basic-auth'),
ssh = require('ssh2').Client,
var basicAuth = require('basic-auth'); readConfig = require('read-config'),
var ssh = require('ssh2').Client; config = readConfig(__dirname + '/config.json'),
var readConfig = require('read-config'), myError = " - ",
config = readConfig(__dirname + '/config.json'); termCols,
var myError = " - "; termRows;
var termCols;
var termRows;
function logErrors(err, req, res, next) { function logErrors(err, req, res, next) {
console.error(err.stack); console.error(err.stack);
@ -55,13 +53,18 @@ app.use(express.static(__dirname + '/public')).use(function(req, res, next) {
}).use(cookieParser()).get('/ssh/host/:host?', function(req, res) { }).use(cookieParser()).get('/ssh/host/:host?', function(req, res) {
res.sendFile(path.join(__dirname + '/public/client.htm')); res.sendFile(path.join(__dirname + '/public/client.htm'));
config.ssh.host = req.params.host; config.ssh.host = req.params.host;
if (typeof req.query.port !== 'undefined' && req.query.port !== null){ config.ssh.port = req.query.port;} if (typeof req.query.port !== 'undefined' && req.query.port !== null) {
if (typeof req.query.header !== 'undefined' && req.query.header !== null){ config.header.text = req.query.header;} config.ssh.port = req.query.port;
if (typeof req.query.headerBackground !== 'undefined' && req.query.headerBackground !== null){ config.header.background = req.query.headerBackground;} }
if (typeof req.query.header !== 'undefined' && req.query.header !== null) {
config.header.text = req.query.header;
}
if (typeof req.query.headerBackground !== 'undefined' && req.query.headerBackground !== null) {
config.header.background = req.query.headerBackground;
}
console.log('webssh2 Login: user=' + config.user.name + ' from=' + req.ip + ' host=' + config.ssh.host + ' port=' + config.ssh.port + ' sessionID=' + req.headers.sessionid + ' allowreplay=' + req.headers.allowreplay); console.log('webssh2 Login: user=' + config.user.name + ' from=' + req.ip + ' host=' + config.ssh.host + ' port=' + config.ssh.port + ' sessionID=' + req.headers.sessionid + ' allowreplay=' + req.headers.allowreplay);
console.log('Headers: ' + JSON.stringify(req.headers)); console.log('Headers: ' + JSON.stringify(req.headers));
config.options.allowreplay = req.headers.allowreplay; config.options.allowreplay = req.headers.allowreplay;
}).use('/style', express.static(__dirname + '/public')).use('/src', express.static(__dirname + '/node_modules/xterm/dist')).use('/addons', express.static(__dirname + '/node_modules/xterm/dist/addons')); }).use('/style', express.static(__dirname + '/public')).use('/src', express.static(__dirname + '/node_modules/xterm/dist')).use('/addons', express.static(__dirname + '/node_modules/xterm/dist/addons'));
io.on('connection', function(socket) { io.on('connection', function(socket) {
@ -70,6 +73,7 @@ io.on('connection', function(socket) {
termCols = cols; termCols = cols;
termRows = rows; termRows = rows;
}); });
conn.on('banner', function(d) { conn.on('banner', function(d) {
//need to convert to cr/lf for proper formatting //need to convert to cr/lf for proper formatting
d = d.replace(/\r?\n/g, "\r\n"); d = d.replace(/\r?\n/g, "\r\n");
@ -83,7 +87,11 @@ io.on('connection', function(socket) {
socket.emit('statusBackground', 'green'); socket.emit('statusBackground', 'green');
socket.emit('allowreplay', config.options.allowreplay); socket.emit('allowreplay', config.options.allowreplay);
conn.shell( { term: config.ssh.term, cols: termCols, rows: termRows }, function(err, stream) { conn.shell({
term: config.ssh.term,
cols: termCols,
rows: termRows
}, function(err, stream) {
if (err) { if (err) {
console.log(err.message); console.log(err.message);
myError = myError + err.message; myError = myError + err.message;
@ -101,6 +109,7 @@ io.on('connection', function(socket) {
console.log('controlData: ' + controlData); console.log('controlData: ' + controlData);
} }
}); });
stream.on('data', function(d) { stream.on('data', function(d) {
socket.emit('data', d.toString('binary')); socket.emit('data', d.toString('binary'));
}).on('close', function(code, signal) { }).on('close', function(code, signal) {

View file

@ -3,9 +3,9 @@
<title>Web SSH</title> <title>Web SSH</title>
<link rel="stylesheet" href="/src/xterm.css" /> <link rel="stylesheet" href="/src/xterm.css" />
<link rel="stylesheet" href="/style/style.css" /> <link rel="stylesheet" href="/style/style.css" />
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js" defer></script>
<script src="/src/xterm.js"></script> <script src="/src/xterm.js" defer></script>
<script src="/addons/fit/fit.js"></script> <script src="/addons/fit/fit.js" defer></script>
<script src="/client.js" defer></script> <script src="/client.js" defer></script>
</head> </head>
<body> <body>
@ -17,7 +17,7 @@
<div id="status"></div> <div id="status"></div>
<div id="credentials"><a class="credentials" href="javascript:void(0);" onclick="replayCredentials()">CREDENTIALS</a></div> <div id="credentials"><a class="credentials" href="javascript:void(0);" onclick="replayCredentials()">CREDENTIALS</a></div>
<div id="downloadLog"><a class="downloadLog" href="javascript:void(0);" onclick="downloadLog()">Download Log</a></div> <div id="downloadLog"><a class="downloadLog" href="javascript:void(0);" onclick="downloadLog()">Download Log</a></div>
<div id="startLog"><a class="startLog" href="javascript:void(0);" onclick="startLog();">Start Log</a></div> <div id="toggleLog"><a class="toggleLog" href="javascript:void(0);" onclick="toggleLog();">Start Log</a></div>
</div> </div>
</div> </div>
</body> </body>

View file

@ -32,10 +32,12 @@ function replayCredentials() {
return false; return false;
} }
function startLog() { // Set variable to toggle log data from client/server to a varialble
// for later download
function toggleLog() {
if (sessionLogEnable == true) { if (sessionLogEnable == true) {
sessionLogEnable = false; sessionLogEnable = false;
document.getElementById('startLog').innerHTML = '<a class="startLog" href="javascript:void(0);" onclick="startLog();">Start Log</a>'; document.getElementById('toggleLog').innerHTML = '<a class="toggleLog" href="javascript:void(0);" onclick="toggleLog();">Start Log</a>';
console.log("stopping log, " + sessionLogEnable); console.log("stopping log, " + sessionLogEnable);
currentDate = new Date(); currentDate = new Date();
sessionLog = sessionLog + "\r\n\r\nLog End for " + sessionFooter + ": " + currentDate.getFullYear() + "/" + (currentDate.getMonth() + 1) + "/" + currentDate.getDate() + " @ " + currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds() + "\r\n"; sessionLog = sessionLog + "\r\n\r\nLog End for " + sessionFooter + ": " + currentDate.getFullYear() + "/" + (currentDate.getMonth() + 1) + "/" + currentDate.getDate() + " @ " + currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds() + "\r\n";
@ -43,7 +45,7 @@ function startLog() {
return false; return false;
} else { } else {
sessionLogEnable = true; sessionLogEnable = true;
document.getElementById('startLog').innerHTML = '<a class="startLog" href="javascript:void(0)" onclick="startLog();">Logging - STOP LOG</a>'; document.getElementById('toggleLog').innerHTML = '<a class="toggleLog" href="javascript:void(0)" onclick="toggleLog();">Logging - STOP LOG</a>';
document.getElementById('downloadLog').style.display = 'inline'; document.getElementById('downloadLog').style.display = 'inline';
console.log("starting log, " + sessionLogEnable); console.log("starting log, " + sessionLogEnable);
currentDate = new Date(); currentDate = new Date();
@ -53,6 +55,8 @@ function startLog() {
} }
} }
// cross browser method to "download" an element to the local system
// used for our client-side logging feature
function downloadLog() { function downloadLog() {
myFile = "WebSSH2-" + logDate.getFullYear() + (logDate.getMonth() + 1) + logDate.getDate() + "_" + logDate.getHours() + logDate.getMinutes() + logDate.getSeconds() + ".log"; myFile = "WebSSH2-" + logDate.getFullYear() + (logDate.getMonth() + 1) + logDate.getDate() + "_" + logDate.getHours() + logDate.getMinutes() + logDate.getSeconds() + ".log";
var blob = new Blob([sessionLog], { var blob = new Blob([sessionLog], {
@ -69,6 +73,7 @@ function downloadLog() {
document.body.removeChild(elem); document.body.removeChild(elem);
} }
} }
socket.on('connect', function() { socket.on('connect', function() {
socket.emit('geometry', term.cols, term.rows); socket.emit('geometry', term.cols, term.rows);
term.on('data', function(data) { term.on('data', function(data) {
@ -99,7 +104,7 @@ socket.on('connect', function() {
if (sessionLogEnable) { if (sessionLogEnable) {
sessionLog = sessionLog + data; sessionLog = sessionLog + data;
} }
}).on('disconnect', function() { }).on('disconnect', function(err) {
document.getElementById('status').style.backgroundColor = 'red'; document.getElementById('status').style.backgroundColor = 'red';
document.getElementById('status').innerHTML = 'WEBSOCKET SERVER DISCONNECTED' + err; document.getElementById('status').innerHTML = 'WEBSOCKET SERVER DISCONNECTED' + err;
socket.io.reconnection(false); socket.io.reconnection(false);

View file

@ -106,7 +106,7 @@ a.downloadLog {
color: rgb(240, 240, 240); color: rgb(240, 240, 240);
text-decoration: none; text-decoration: none;
} }
#startLog { #toggleLog {
display: inline-block; display: inline-block;
color: rgb(240, 240, 240); color: rgb(240, 240, 240);
background-color: rgb(0, 127, 0); background-color: rgb(0, 127, 0);
@ -118,7 +118,7 @@ a.downloadLog {
text-align: left; text-align: left;
z-index: 100; z-index: 100;
} }
a.startLog { a.toggleLog {
color: rgb(240, 240, 240); color: rgb(240, 240, 240);
text-decoration: none; text-decoration: none;
} }