|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<title>Jumpserver web terminal</title>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
body {
|
|
|
|
padding-bottom: 40px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.terminal {
|
|
|
|
border: #000 solid 5px;
|
|
|
|
font-family: "Monaco", "DejaVu Sans Mono", "Liberation Mono", monospace;
|
|
|
|
font-size: 11px;
|
|
|
|
color: #f0f0f0;
|
|
|
|
background: #000;
|
|
|
|
width: 600px;
|
|
|
|
box-shadow: rgba(0, 0, 0, 0.8) 2px 2px 20px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.reverse-video {
|
|
|
|
color: #000;
|
|
|
|
background: #f0f0f0;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<div class="container">
|
|
|
|
<div id="term">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script type="application/javascript" src="/static/js/jquery-2.1.1.js">
|
|
|
|
</script>
|
|
|
|
<script type="application/javascript" src="/static/js/term.js">
|
|
|
|
</script>
|
|
|
|
<script type="application/javascript">
|
|
|
|
function WSSHClient() {
|
|
|
|
}
|
|
|
|
|
|
|
|
WSSHClient.prototype.connect = function(options) {
|
|
|
|
var endpoint = '{{ web_terminal_uri }}';
|
|
|
|
|
|
|
|
if (window.WebSocket) {
|
|
|
|
this._connection = new WebSocket(endpoint);
|
|
|
|
}
|
|
|
|
else if (window.MozWebSocket) {
|
|
|
|
this._connection = MozWebSocket(endpoint);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
options.onError('WebSocket Not Supported');
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
|
|
|
|
this._connection.onopen = function() {
|
|
|
|
options.onConnect();
|
|
|
|
};
|
|
|
|
|
|
|
|
this._connection.onmessage = function (evt) {
|
|
|
|
var data = JSON.parse(evt.data.toString());
|
|
|
|
if (data.error !== undefined) {
|
|
|
|
options.onError(data.error);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
options.onData(data.data);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
this._connection.onclose = function(evt) {
|
|
|
|
options.onClose();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
WSSHClient.prototype.send = function(data) {
|
|
|
|
this._connection.send(JSON.stringify({'data': data}));
|
|
|
|
};
|
|
|
|
|
|
|
|
function openTerminal(options) {
|
|
|
|
var client = new WSSHClient();
|
|
|
|
var term = new Terminal(80, 24, function(key) {
|
|
|
|
client.send(key);
|
|
|
|
});
|
|
|
|
term.open();
|
|
|
|
$('.terminal').detach().appendTo('#term');
|
|
|
|
term.resize(80, 24);
|
|
|
|
term.write('Connecting...');
|
|
|
|
client.connect($.extend(options, {
|
|
|
|
onError: function(error) {
|
|
|
|
term.write('Error: ' + error + '\r\n');
|
|
|
|
},
|
|
|
|
onConnect: function() {
|
|
|
|
// Erase our connecting message
|
|
|
|
term.write('\r');
|
|
|
|
},
|
|
|
|
onClose: function() {
|
|
|
|
term.write('Connection Reset By Peer');
|
|
|
|
},
|
|
|
|
onData: function(data) {
|
|
|
|
term.write(data);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script type='application/javascript'>
|
|
|
|
$(document).ready(function() {
|
|
|
|
var options = {
|
|
|
|
};
|
|
|
|
|
|
|
|
$('#ssh').show();
|
|
|
|
openTerminal(options);
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|