mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
(cherry picked from commit ee2314ae2b4872c1c7452d3ead2515b4696b7583) (cherry picked from commit a4afb15f181100dffa17a9130541125698824e27)
This commit is contained in:
parent
6351af28d4
commit
bc40ebbb86
@ -15,95 +15,14 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
define(function(require) {
|
||||
require("jquery");
|
||||
require("jquery-ui");
|
||||
|
||||
var WMKS = require("wmks");
|
||||
var UtilsConnection = require("utils/info-connection/utils");
|
||||
|
||||
var _wmks;
|
||||
var _is_encrypted = "";
|
||||
|
||||
function setStatus(message="", status=""){
|
||||
$(".VMRC_message").text(message);
|
||||
$("#VMRC_status_msg").text(status);
|
||||
}
|
||||
|
||||
function connected(){
|
||||
setStatus(null, "VMRC " + _wmks.connectionState);
|
||||
}
|
||||
|
||||
function disconnectedFromServer(e){
|
||||
if (e.detail.clean) {
|
||||
setStatus(null, "VMRC " + _wmks.connectionState);
|
||||
} else {
|
||||
setStatus("Something went wrong, connection is closed", "Failed");
|
||||
}
|
||||
}
|
||||
|
||||
function sendCtrlAltDel() {
|
||||
if (_wmks) { _wmks.sendCAD(); }
|
||||
}
|
||||
|
||||
function enterFullScreen() {
|
||||
if (_wmks) { _wmks.enterFullScreen(); }
|
||||
}
|
||||
|
||||
function selectLanguage() {
|
||||
if(!_wmks) return;
|
||||
var keyboardLayoutId = $("#selectLanguage").find(":selected").val();
|
||||
_wmks.setOption("keyboardLayoutId",keyboardLayoutId);
|
||||
}
|
||||
|
||||
function keyboardSelector() {
|
||||
$("#selectLanguage").toggle();
|
||||
}
|
||||
|
||||
function updateScreen() {
|
||||
_wmks.updateScreen();
|
||||
}
|
||||
|
||||
document.querySelector("#sendCtrlAltDelButton").style.display = "inline";
|
||||
document.querySelector("#sendCtrlAltDelButton").onclick = sendCtrlAltDel;
|
||||
|
||||
document.querySelector("#fullScreenButton").onclick = enterFullScreen;
|
||||
document.querySelector("#keyboardSelector").onclick = keyboardSelector;
|
||||
document.querySelector("#selectLanguage").onchange = selectLanguage;
|
||||
|
||||
var endpoint = new URL(window.location.href);
|
||||
var encoded_socket = endpoint.searchParams.get("socket");
|
||||
var socket_string = atob(encoded_socket);
|
||||
|
||||
var socket_endpoint = new URL(socket_string);
|
||||
var host = socket_endpoint.searchParams.get("host");
|
||||
var port = socket_endpoint.searchParams.get("port");
|
||||
var info = socket_endpoint.searchParams.get("info");
|
||||
var ticket = socket_endpoint.searchParams.get("ticket");
|
||||
|
||||
var info_decode = UtilsConnection.decodeInfoConnection(info);
|
||||
UtilsConnection.printInfoConnection($(".VMRC_info"), info_decode);
|
||||
|
||||
|
||||
try{
|
||||
_wmks = WMKS.createWMKS("wmksContainer", {
|
||||
fixANSIEquivalentKeys: true,
|
||||
})
|
||||
.register(WMKS.CONST.Events.CONNECTION_STATE_CHANGE,
|
||||
function (_, data) {
|
||||
if (typeof cons !== "undefined" && data.state == cons.ConnectionState.CONNECTED) {
|
||||
console.log("connection state change: connected");
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
_wmks.eventHandlers["connectionstatechange"].push(connected);
|
||||
_wmks.eventHandlers["disconnect"] = disconnectedFromServer;
|
||||
_wmks.vm_name = info_decode && info_decode.name;
|
||||
|
||||
_wmks.connect(socket_string);
|
||||
}catch(err){
|
||||
setStatus("Something went wrong, connection is closed", "Failed");
|
||||
}
|
||||
|
||||
$(window).resize(updateScreen);
|
||||
UtilsConnection.printInfoConnection($('.VMRC_info'), info_decode);
|
||||
});
|
||||
|
@ -25,8 +25,6 @@ require.config({
|
||||
/* jQuery */
|
||||
"jquery": "../bower_components/jquery/dist/jquery",
|
||||
"jquery-ui": "../bower_components/jquery-ui/jquery-ui",
|
||||
/* WMKS */
|
||||
"wmks" : "../bower_components/wmks/wmks_AMD.min",
|
||||
|
||||
/** Wickedpicker */
|
||||
"wickedpicker": "../bower_components/wickedpicker/dist/wickedpicker.min",
|
||||
@ -114,7 +112,6 @@ require.config({
|
||||
"jquery",
|
||||
"foundation",
|
||||
"jquery-ui",
|
||||
"wmks",
|
||||
"tabs/provision-tab",
|
||||
"tabs/dashboard-tab",
|
||||
"tabs/system-top-tab",
|
||||
@ -173,14 +170,6 @@ require.config({
|
||||
"foundation": {
|
||||
deps: ["jquery"]
|
||||
},
|
||||
/* WMKS */
|
||||
"wmks": {
|
||||
deps: [
|
||||
"jquery",
|
||||
"jquery-ui"
|
||||
],
|
||||
exports: "WMKS"
|
||||
},
|
||||
|
||||
/* Flot Graphs */
|
||||
"flot": {
|
||||
|
@ -15,8 +15,6 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
define(function(require) {
|
||||
require("foundation");
|
||||
|
||||
var OpenNebulaVM = require("opennebula/vm");
|
||||
var OpenNebulaService = require("opennebula/service");
|
||||
|
||||
|
@ -21,9 +21,9 @@
|
||||
"wickedpicker": "https://github.com/OpenNebula/sunstone-deps.git#9398b3f",
|
||||
"guacamole-common-js": "https://github.com/OpenNebula/sunstone-deps.git#fe6e35b885",
|
||||
"webauthn-json": "https://registry.npmjs.org/@github/webauthn-json/-/webauthn-json-0.4.1.tgz",
|
||||
"wmks": "https://github.com/OpenNebula/sunstone-deps.git#cb0251c",
|
||||
"wmks": "https://github.com/OpenNebula/sunstone-deps.git#e742205",
|
||||
"socket.io-client": "4.1.2",
|
||||
"ace-builds": "https://github.com/OpenNebula/sunstone-deps.git#01ae12a"
|
||||
"ace-builds": "https://github.com/OpenNebula/sunstone-deps.git#01ae12a"
|
||||
},
|
||||
"authors": [
|
||||
"Daniel Molina <dmolina@opennebula.org>",
|
||||
|
@ -1,115 +1,219 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= params['vm_name']%></title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<link rel="apple-touch-startup-image" href="images/screen_320x460.png" />
|
||||
<link rel="apple-touch-icon" href="images/screen_57x57.png">
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" type="text/css" href="css/app.css" title="plain">
|
||||
<link rel="stylesheet" type="text/css" href="css/vmrc-custom.css" title="plain">
|
||||
<% view = $views_config.view(session[:user], session[:user_gname], session[:default_view]) %>
|
||||
<!-- JQuery -->
|
||||
<script src="bower_components/jquery/dist/jquery.min.js"></script>
|
||||
<script src="bower_components/jquery-ui/jquery-ui.min.js"></script>
|
||||
<!-- Scripts -->
|
||||
<script type="text/javascript">
|
||||
var csrftoken = '<%= session[:csrftoken] %>';
|
||||
var view = JSON.parse('<%= view.to_json %>')
|
||||
var available_views = JSON.parse('["<%=
|
||||
$views_config.available_views(session[:user], session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_labels = JSON.parse('["<%=
|
||||
$views_config.get_all_labels(session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_views = JSON.parse('["<%=
|
||||
$views_config.get_all_views.join('","')
|
||||
%>"]')
|
||||
if ('<%= $conf[:addons] %>'){
|
||||
var addons = JSON.parse('<%= $conf[:addons].to_json %>');
|
||||
}
|
||||
var config = {
|
||||
'user_config' : {
|
||||
'lang' : '<%= session[:lang] %>',
|
||||
'vnc_wss' : '<%= session[:vnc_wss] %>',
|
||||
'table_order' : '<%= session[:table_order] %>',
|
||||
'default_view' : '<%= session[:default_view] %>',
|
||||
'page_length' : '<%= session[:page_length] %>'
|
||||
},
|
||||
'system_config' : {
|
||||
'marketplace_url' : '<%= $conf[:marketplace_url] %>',
|
||||
'vnc_request_password' : <%= $conf[:vnc_request_password] || false %>,
|
||||
'vnc_proxy_port' : '<%= $vnc.proxy_port %>',
|
||||
'vnc_client_port' : '<%= $conf[:vnc_client_port] %>',
|
||||
'max_upload_file_size' : <%= $conf[:max_upload_file_size] ? $conf[:max_upload_file_size] : "undefined" %>
|
||||
},
|
||||
'view' : view,
|
||||
'available_views' : available_views,
|
||||
'all_labels' : all_labels,
|
||||
'all_views' : all_views,
|
||||
'user_id' : '<%= session[:user_id] %>',
|
||||
'user_gid' : '<%= session[:user_gid] %>',
|
||||
'display_name' : '<%= session[:display_name] %>',
|
||||
'zone_name' : '<%= session[:zone_name] %>',
|
||||
'zone_id' : '<%= session[:zone_id] %>',
|
||||
'federation_mode' : '<%= session[:federation_mode] %>',
|
||||
'vm_logos' : <%= logos_conf.to_json %>,
|
||||
'oned_conf' : <%= oned_conf.to_json %>,
|
||||
'support' : <%= support.to_json %>,
|
||||
'upgrade' : <%= upgrade.to_json %>,
|
||||
'mode' : '<%= session[:mode] %>'
|
||||
};
|
||||
</script>
|
||||
<script src="bower_components/wmks/wmks.min.js"></script>
|
||||
<script src="dist/console/vmrc.js?v=<%= OpenNebula::VERSION %>"></script>
|
||||
</head>
|
||||
<body style="margin: 0px;">
|
||||
<div id="VMRC_screen">
|
||||
<div style="background: #f7f7f7; padding: 1.5em 1.5em 0.8em;">
|
||||
<div style="max-width: 1250px; margin: 0 auto;">
|
||||
<div id="VMRC_status_bar" class="noVNC_status_bar" style="display: flex; align-items: center;">
|
||||
<img src="images/opennebula-5.0.png" style="height:40px;">
|
||||
|
||||
<h5 id="VMRC_status" style="position: relative;">
|
||||
<div class="container">
|
||||
<div class="remote_logo">
|
||||
<img src="images/remote_console/vmrc.png">
|
||||
</div>
|
||||
<div id="VMRC_status_msg">
|
||||
Loading
|
||||
</div>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= params['vm_name']%></title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<link rel="apple-touch-startup-image" href="images/screen_320x460.png" />
|
||||
<link rel="apple-touch-icon" href="images/screen_57x57.png">
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" type="text/css" href="css/app.css" title="plain">
|
||||
<link rel="stylesheet" type="text/css" href="css/vmrc-custom.css" title="plain">
|
||||
<% view = $views_config.view(session[:user], session[:user_gname], session[:default_view]) %>
|
||||
<!-- JQuery -->
|
||||
<script src="bower_components/jquery/dist/jquery.min.js"></script>
|
||||
<script src="bower_components/jquery-ui/jquery-ui.min.js"></script>
|
||||
<!-- WMKS -->
|
||||
<script src="bower_components/wmks/wmks.js"></script>
|
||||
<!-- Scripts -->
|
||||
<script type="text/javascript">
|
||||
var csrftoken = '<%= session[:csrftoken] %>';
|
||||
var view = JSON.parse('<%= view.to_json %>')
|
||||
var available_views = JSON.parse('["<%=
|
||||
$views_config.available_views(session[:user], session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_labels = JSON.parse('["<%=
|
||||
$views_config.get_all_labels(session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_views = JSON.parse('["<%=
|
||||
$views_config.get_all_views.join('","')
|
||||
%>"]')
|
||||
if ('<%= $conf[:addons] %>'){
|
||||
var addons = JSON.parse('<%= $conf[:addons].to_json %>');
|
||||
}
|
||||
var config = {
|
||||
'user_config' : {
|
||||
'lang' : '<%= session[:lang] %>',
|
||||
'vnc_wss' : '<%= session[:vnc_wss] %>',
|
||||
'table_order' : '<%= session[:table_order] %>',
|
||||
'default_view' : '<%= session[:default_view] %>',
|
||||
'page_length' : '<%= session[:page_length] %>'
|
||||
},
|
||||
'system_config' : {
|
||||
'marketplace_url' : '<%= $conf[:marketplace_url] %>',
|
||||
'vnc_request_password' : <%= $conf[:vnc_request_password] || false %>,
|
||||
'vnc_proxy_port' : '<%= $vnc.proxy_port %>',
|
||||
'vnc_client_port' : '<%= $conf[:vnc_client_port] %>',
|
||||
'max_upload_file_size' : <%= $conf[:max_upload_file_size] ? $conf[:max_upload_file_size] : "undefined" %>
|
||||
},
|
||||
'view' : view,
|
||||
'available_views' : available_views,
|
||||
'all_labels' : all_labels,
|
||||
'all_views' : all_views,
|
||||
'user_id' : '<%= session[:user_id] %>',
|
||||
'user_gid' : '<%= session[:user_gid] %>',
|
||||
'display_name' : '<%= session[:display_name] %>',
|
||||
'zone_name' : '<%= session[:zone_name] %>',
|
||||
'zone_id' : '<%= session[:zone_id] %>',
|
||||
'federation_mode' : '<%= session[:federation_mode] %>',
|
||||
'vm_logos' : <%= logos_conf.to_json %>,
|
||||
'oned_conf' : <%= oned_conf.to_json %>,
|
||||
'support' : <%= support.to_json %>,
|
||||
'upgrade' : <%= upgrade.to_json %>,
|
||||
'mode' : '<%= session[:mode] %>'
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin: 0px;">
|
||||
<div id="VMRC_screen">
|
||||
<div style="background: #f7f7f7; padding: 1.5em 1.5em 0.8em;">
|
||||
<div style="max-width: 1250px; margin: 0 auto;">
|
||||
<div id="VMRC_status_bar" class="noVNC_status_bar" style="display: flex; align-items: center;">
|
||||
<img src="images/opennebula-5.0.png" style="height:40px;">
|
||||
|
||||
<h5 id="VMRC_status" style="position: relative;">
|
||||
<div class="container">
|
||||
<div class="remote_logo">
|
||||
<img src="images/remote_console/vmrc.png">
|
||||
</div>
|
||||
<div id="VMRC_status_msg">
|
||||
Loading
|
||||
</div>
|
||||
</h5>
|
||||
|
||||
<div id="VMRC_buttons">
|
||||
<button class="button alert" id="sendCtrlAltDelButton">Send CtrlAltDel</button>
|
||||
<button class="button info" id="fullScreenButton"><i class="fas fa-expand"></i></button>
|
||||
<button class="button info" id="keyboardSelector"><i class="fas fa-keyboard"></i></button>
|
||||
<select style="width: auto;" id="selectLanguage" hidden>
|
||||
<option value="en-US">English</option>
|
||||
<option value="ja-JP_106/109">Japanese</option>
|
||||
<option value="de-DE">German</option>
|
||||
<option value="it-IT">Italian</option>
|
||||
<option value="es-ES">Spanish</option>
|
||||
<option value="pt-PT">Portuguese</option>
|
||||
<option value="fr-FR">French</option>
|
||||
<option value="fr-CH">Swiss-French</option>
|
||||
<option value="de-CH">Swiss-German</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="VMRC_info"></div>
|
||||
</div>
|
||||
</div>
|
||||
</h5>
|
||||
|
||||
<div id="VMRC_canvas">
|
||||
<div id="wmksContainer" class="wmksContainer"></div>
|
||||
<div class="VMRC_message"></div>
|
||||
<div id="VMRC_buttons">
|
||||
<button class="button alert" id="sendCtrlAltDelButton">Send CtrlAltDel</button>
|
||||
<button class="button info" id="fullScreenButton"><i class="fas fa-expand"></i></button>
|
||||
<button class="button info" id="keyboardSelector"><i class="fas fa-keyboard"></i></button>
|
||||
<select style="width: auto;" id="selectLanguage" hidden>
|
||||
<option value="en-US">English</option>
|
||||
<option value="fr-FR">French</option>
|
||||
<option value="fr-CH">French (Switzerland)</option>
|
||||
<option value="de-DE">German</option>
|
||||
<option value="de-CH">German (Switzerland)</option>
|
||||
<option value="it-IT">Italian</option>
|
||||
<option value="ja-JP_106/109">Japanese</option>
|
||||
<option value="pt-PT">Portuguese</option>
|
||||
<option value="es-ES">Spanish</option>
|
||||
<option value="sv_SE">Swedish</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="VMRC_info"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<div id="VMRC_canvas">
|
||||
<div id="wmksContainer" class="wmksContainer"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var cad = $("#sendCtrlAltDelButton");
|
||||
var container = $("#container");
|
||||
var fullscreen = $("#fullScreenButton");
|
||||
var languageSelector = $("#selectLanguage");
|
||||
var keyboardSelector = $("#keyboardSelector");
|
||||
|
||||
/**
|
||||
* Send the Ctrl + Alt + Del Action.
|
||||
*/
|
||||
cad.on("click", function() {
|
||||
wmks.sendCAD();
|
||||
});
|
||||
|
||||
/**
|
||||
* When language is selected, update the console language to match with
|
||||
* The expected behavior.
|
||||
*/
|
||||
languageSelector.on("change", function (evt) {
|
||||
var keyboardLayoutId = languageSelector.find(":selected").val();
|
||||
wmks.setOption('keyboardLayoutId',keyboardLayoutId);
|
||||
});
|
||||
|
||||
/**
|
||||
* Toggle the language selector.
|
||||
*/
|
||||
keyboardSelector.on("click", function(){
|
||||
languageSelector.toggle();
|
||||
});
|
||||
|
||||
function updateStatus(){
|
||||
$("#VMRC_status_msg").text("VMRC " + wmks.connectionState);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function adjusts the console size.
|
||||
*/
|
||||
function layout() {
|
||||
var w = $(window).width();
|
||||
var h = $(window).height();
|
||||
container.width(w).height(h);
|
||||
if(!wmks.isFullScreen()) {
|
||||
wmks.updateScreen();
|
||||
} else {
|
||||
container.css({
|
||||
top: 0,
|
||||
left: 0
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Create the wmks variable to control the VMRC console
|
||||
var wmks = WMKS.createWMKS("wmksContainer", {});
|
||||
|
||||
/**
|
||||
* When the connection state change, update the status message.
|
||||
*/
|
||||
wmks.register(WMKS.CONST.Events.CONNECTION_STATE_CHANGE, function(evt, data) {
|
||||
updateStatus();
|
||||
});
|
||||
|
||||
/**
|
||||
* When an error occurs write it in the console.
|
||||
*/
|
||||
wmks.register(WMKS.CONST.Events.ERROR, function(evt, data) {
|
||||
console.log("VMRC Error: " + data.errorType);
|
||||
});
|
||||
|
||||
/**
|
||||
* When the screen size changes, resize the console.
|
||||
*/
|
||||
wmks.register(WMKS.CONST.Events.REMOTE_SCREEN_SIZE_CHANGE, function(evt, data) {
|
||||
layout();
|
||||
});
|
||||
|
||||
if (wmks.canFullScreen()) {
|
||||
fullscreen.on("click", function (evt) {
|
||||
wmks.enterFullScreen();
|
||||
});
|
||||
} else {
|
||||
fullscreen.hide();
|
||||
}
|
||||
|
||||
//listen for window events
|
||||
$(window).on("resize", layout);
|
||||
|
||||
// if params are provided, no need to show chrome
|
||||
if (location.search) {
|
||||
var endpoint = new URL(window.location.href);
|
||||
var encoded_socket = endpoint.searchParams.get("socket");
|
||||
var socket_string = atob(encoded_socket);
|
||||
|
||||
var socket_endpoint = new URL(socket_string);
|
||||
wmks.connect(socket_string);
|
||||
layout();
|
||||
|
||||
// After the VMRC console is connected, import the info bar to have
|
||||
// The VM information in this view
|
||||
$.getScript("dist/console/vmrc.js?v=<%= OpenNebula::VERSION %>");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user