mirror of
				https://github.com/retspen/webvirtcloud
				synced 2025-07-31 12:41:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			308 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			308 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
| {% extends "console-base.html" %}
 | |
| {% load i18n %}
 | |
| {% load staticfiles %}
 | |
| 
 | |
| {% block head %}
 | |
|     <!--
 | |
|     noVNC example: lightweight example using minimal UI and features
 | |
|     Copyright (C) 2012 Joel Martin
 | |
|     Copyright (C) 2017 Samuel Mannehed for Cendio AB
 | |
|     noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
 | |
|     This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
 | |
| 
 | |
|     Connect parameters are provided in query string:
 | |
|         http://example.com/?host=HOST&port=PORT&encrypt=1
 | |
|     or the fragment:
 | |
|         http://example.com/#host=HOST&port=PORT&encrypt=1
 | |
|     -->
 | |
|     <title>WebVirtCloud - noVNC - Lite</title>
 | |
| 
 | |
|     <meta charset="utf-8">
 | |
| 
 | |
|     <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
 | |
|                 Remove this if you use the .htaccess -->
 | |
|     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 | |
| 
 | |
|     <!-- Icons (see Makefile for what the sizes are for) -->
 | |
|     <link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
 | |
|     <link rel="icon" sizes="24x24" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-24x24.png" %}">
 | |
|     <link rel="icon" sizes="32x32" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-32x32.png" %}">
 | |
|     <link rel="icon" sizes="48x48" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-48x48.png" %}">
 | |
|     <link rel="icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
 | |
|     <link rel="icon" sizes="64x64" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-64x64.png" %}">
 | |
|     <link rel="icon" sizes="72x72" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-72x72.png" %}">
 | |
|     <link rel="icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
 | |
|     <link rel="icon" sizes="96x96" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-96x96.png" %}">
 | |
|     <link rel="icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
 | |
|     <link rel="icon" sizes="144x144" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-144x144.png" %}">
 | |
|     <link rel="icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
 | |
|     <link rel="icon" sizes="192x192" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-192x192.png" %}">
 | |
|     <!-- Firefox currently mishandles SVG, see #1419039
 | |
|     <link rel="icon" sizes="any" type="image/svg+xml" href="{% static "js/novnc/app/images/icons/novnc-icon.svg" %}">
 | |
|     -->
 | |
|     <!-- Repeated last so that legacy handling will pick this -->
 | |
|     <link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
 | |
| 
 | |
|     <!-- Apple iOS Safari settings -->
 | |
|     <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" />
 | |
|     <!-- Home Screen Icons (favourites and bookmarks use the normal icons) -->
 | |
|     <link rel="apple-touch-icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
 | |
|     <link rel="apple-touch-icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
 | |
|     <link rel="apple-touch-icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
 | |
|     <link rel="apple-touch-icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
 | |
| 
 | |
|     <!-- Stylesheets -->
 | |
|     <link rel="stylesheet" href="{% static "js/novnc/app/styles/lite.css" %}">
 | |
| 
 | |
|      <!--
 | |
|     <script type='text/javascript'
 | |
|         src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
 | |
|     -->
 | |
| 
 | |
|     <!-- promise polyfills promises for IE11 -->
 | |
|     <script src="{% static "js/novnc/vendor/promise.js" %}"></script>
 | |
|     <!-- ES2015/ES6 modules polyfill -->
 | |
|     <script type="module"> window._noVNC_has_module_support = true;</script>
 | |
|     <script>
 | |
|         window.addEventListener("load", function() {
 | |
|             if (window._noVNC_has_module_support) return;
 | |
|             var loader = document.createElement("script");
 | |
|             loader.src = "{% static "js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js" %}";
 | |
|             document.head.appendChild(loader);
 | |
|         });
 | |
|     </script>
 | |
| 
 | |
|             <!-- actual script modules -->
 | |
|     <script type="module" crossorigin="anonymous">
 | |
|         // Load supporting scripts
 | |
|         import * as WebUtil from '{% static "js/novnc/app/webutil.js" %}';
 | |
|         import RFB from '{% static "js/novnc/core/rfb.js" %}';
 | |
| 
 | |
|         var rfb;
 | |
|         var desktopName;
 | |
| 
 | |
|         function updateDesktopName(e) {
 | |
|             desktopName = e.detail.name;
 | |
|         }
 | |
|         function credentials(e) {
 | |
|             var html;
 | |
| 
 | |
|             var form = document.createElement('form');
 | |
|             form.innerHTML = '<label></label>';
 | |
|             form.innerHTML += '<input type=password size=10 id="password_input">';
 | |
|             form.onsubmit = setPassword;
 | |
| 
 | |
|             // bypass status() because it sets text content
 | |
|             document.getElementById('noVNC_status_bar').setAttribute("class", "noVNC_status_warn");
 | |
|             document.getElementById('noVNC_status').innerHTML = '';
 | |
|             document.getElementById('noVNC_status').appendChild(form);
 | |
|             document.getElementById('noVNC_status').querySelector('label').textContent = 'Password Required: ';
 | |
|         }
 | |
|         function setPassword() {
 | |
|             rfb.sendCredentials({ password: document.getElementById('password_input').value });
 | |
|             return false;
 | |
|         }
 | |
|         function fullscreen() {
 | |
|             if (document.fullscreenElement || // alternative standard method
 | |
|                 document.mozFullScreenElement || // currently working methods
 | |
|                 document.webkitFullscreenElement ||
 | |
|                 document.msFullscreenElement) {
 | |
|                 if (document.exitFullscreen) {
 | |
|                     document.exitFullscreen();
 | |
|                 } else if (document.mozCancelFullScreen) {
 | |
|                     document.mozCancelFullScreen();
 | |
|                 } else if (document.webkitExitFullscreen) {
 | |
|                     document.webkitExitFullscreen();
 | |
|                 } else if (document.msExitFullscreen) {
 | |
|                     document.msExitFullscreen();
 | |
|                 }
 | |
|             } else {
 | |
|                 if (document.documentElement.requestFullscreen) {
 | |
|                     document.documentElement.requestFullscreen();
 | |
|                 } else if (document.documentElement.mozRequestFullScreen) {
 | |
|                     document.documentElement.mozRequestFullScreen();
 | |
|                 } else if (document.documentElement.webkitRequestFullscreen) {
 | |
|                     document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
 | |
|                 } else if (document.body.msRequestFullscreen) {
 | |
|                     document.body.msRequestFullscreen();
 | |
|                 }
 | |
|             }
 | |
|             return false;
 | |
|         }
 | |
|         function sendCtrlAltFN(f) {
 | |
|             rfb.sendCtrlAltFN(f);
 | |
|             return false;
 | |
|         }
 | |
|         function sendCtrlAltDel() {
 | |
|             rfb.sendCtrlAltDel();
 | |
|             return false;
 | |
|         }
 | |
|         function machineShutdown() {
 | |
|             rfb.machineShutdown();
 | |
|             return false;
 | |
|         }
 | |
|         function machineReboot() {
 | |
|             rfb.machineReboot();
 | |
|             return false;
 | |
|         }
 | |
|         function machineReset() {
 | |
|             rfb.machineReset();
 | |
|             return false;
 | |
|         }
 | |
|         function status(text, level) {
 | |
|             switch (level) {
 | |
|                 case 'normal':
 | |
|                 case 'warn':
 | |
|                 case 'error':
 | |
|                     break;
 | |
|                 default:
 | |
|                     level = "warn";
 | |
|             }
 | |
|             document.getElementById('noVNC_status_bar').className = "noVNC_status_" + level;
 | |
|             document.getElementById('noVNC_status').textContent = text;
 | |
|         }
 | |
| 
 | |
|         function connected(e) {
 | |
|             document.getElementById('sendCtrlAltDelButton').disabled = false;
 | |
|             if (WebUtil.getConfigVar('encrypt', (window.location.protocol === "https:"))) {
 | |
|                 status("Connected (encrypted) to " + desktopName, "normal");
 | |
|             } else {
 | |
|                 status("Connected (unencrypted) to " + desktopName, "normal");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         function disconnected(e) {
 | |
|             document.getElementById('sendCtrlAltDelButton').disabled = true;
 | |
|             updatePowerButtons();
 | |
|             if (e.detail.clean) {
 | |
|                 status("Disconnected", "normal");
 | |
|             } else {
 | |
|                 status("Something went wrong, connection is closed", "error");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         function updatePowerButtons() {
 | |
|             var powerbuttons;
 | |
|             powerbuttons = document.getElementById('noVNC_power_buttons');
 | |
|             if (rfb.capabilities.power) {
 | |
|                 powerbuttons.className= "noVNC_shown";
 | |
|             } else {
 | |
|                 powerbuttons.className = "noVNC_hidden";
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         document.getElementById('sendCtrlAltDelButton').onclick = sendCtrlAltDel;
 | |
|         document.getElementById('machineShutdownButton').onclick = machineShutdown;
 | |
|         document.getElementById('machineRebootButton').onclick = machineReboot;
 | |
|         document.getElementById('machineResetButton').onclick = machineReset;
 | |
|         document.getElementById('fullscreen_button').onclick = fullscreen;
 | |
| 
 | |
|         document.getElementById('ctrlaltdel').addEventListener('click', sendCtrlAltDel);
 | |
|         document.getElementById('ctrlaltf1').addEventListener('click', function(){sendCtrlAltFN(0);});
 | |
|         document.getElementById('ctrlaltf2').addEventListener('click', function(){sendCtrlAltFN(1);});
 | |
|         document.getElementById('ctrlaltf3').addEventListener('click', function(){sendCtrlAltFN(2);});
 | |
|         document.getElementById('ctrlaltf4').addEventListener('click', function(){sendCtrlAltFN(3);});
 | |
|         document.getElementById('ctrlaltf5').addEventListener('click', function(){sendCtrlAltFN(4);});
 | |
|         document.getElementById('ctrlaltf6').addEventListener('click', function(){sendCtrlAltFN(5);});
 | |
|         document.getElementById('ctrlaltf7').addEventListener('click', function(){sendCtrlAltFN(6);});
 | |
|         document.getElementById('ctrlaltf8').addEventListener('click', function(){sendCtrlAltFN(7);});
 | |
|         document.getElementById('ctrlaltf9').addEventListener('click', function(){sendCtrlAltFN(8);});
 | |
|         document.getElementById('ctrlaltf10').addEventListener('click', function(){sendCtrlAltFN(9);});
 | |
|         document.getElementById('ctrlaltf11').addEventListener('click', function(){sendCtrlAltFN(10);});
 | |
|         document.getElementById('ctrlaltf12').addEventListener('click', function(){sendCtrlAltFN(11);});
 | |
| 
 | |
|         WebUtil.init_logging(WebUtil.getConfigVar('logging', 'warn'));
 | |
|         document.title = WebUtil.getConfigVar('title', 'noVNC');
 | |
|         // By default, use the host and port of server that served this file
 | |
|         //var host = WebUtil.getConfigVar('host', window.location.hostname);
 | |
|         //var port = WebUtil.getConfigVar('port', window.location.port);
 | |
|         var host = '{{ ws_host }}';
 | |
|         var port = '{{ ws_port }}';
 | |
| 
 | |
|         // if port == 80 (or 443) then it won't be present and should be
 | |
|         // set manually
 | |
|         if (!port) {
 | |
|             if (window.location.protocol.substring(0,5) == 'https') {
 | |
|                 port = 443;
 | |
|             }
 | |
|             else if (window.location.protocol.substring(0,4) == 'http') {
 | |
|                 port = 80;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //var password = WebUtil.getConfigVar('password', '');
 | |
|         var password = '{{ console_passwd }}';
 | |
| 
 | |
|         var path = WebUtil.getConfigVar('path', 'websockify');
 | |
| 
 | |
|         // If a token variable is passed in, set the parameter in a cookie.
 | |
|         // This is used by nova-novncproxy.
 | |
|         var token = WebUtil.getConfigVar('token', null);
 | |
|         if (token) {
 | |
|             // if token is already present in the path we should use it
 | |
|             path = WebUtil.injectParamIfMissing(path, "token", token);
 | |
| 
 | |
|             WebUtil.createCookie('token', token, 1)
 | |
|         }
 | |
| 
 | |
|         (function() {
 | |
| 
 | |
|             status("Connecting", "normal");
 | |
| 
 | |
|             if ((!host) || (!port)) {
 | |
|                 status('Must specify host and port in URL', 'error');
 | |
|             }
 | |
| 
 | |
|             var url;
 | |
| 
 | |
|             if (WebUtil.getConfigVar('encrypt', (window.location.protocol === "https:"))) {
 | |
|                 url = 'wss';
 | |
|             } else {
 | |
|                 url = 'ws';
 | |
|             }
 | |
| 
 | |
|             url += '://' + host;
 | |
|             if(port) {
 | |
|                 url += ':' + port;
 | |
|             }
 | |
|             url += '/' + path;
 | |
| 
 | |
|           //rfb = new RFB(document.body, url,
 | |
|           //             { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
 | |
|           //               shared: WebUtil.getConfigVar('shared', true),
 | |
|           //               credentials: { password: password } });
 | |
|             rfb = new RFB(document.getElementById('noVNC_container'), url,
 | |
|                          { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
 | |
|                            shared: WebUtil.getConfigVar('shared', true),
 | |
|                            credentials: { password: password } });
 | |
| 
 | |
|             rfb.viewOnly = WebUtil.getConfigVar('view_only', false);
 | |
|             rfb.addEventListener("connect",  connected);
 | |
|             rfb.addEventListener("disconnect", disconnected);
 | |
|             rfb.addEventListener("capabilities", function () { updatePowerButtons(); });
 | |
|             rfb.addEventListener("credentialsrequired", credentials);
 | |
|             rfb.addEventListener("desktopname", updateDesktopName);
 | |
|             rfb.scaleViewport = WebUtil.getConfigVar('scale', false);
 | |
|             rfb.resizeSession = WebUtil.getConfigVar('resize', false);
 | |
|         })();
 | |
|     </script>
 | |
| {% endblock %}
 | |
| 
 | |
| 
 | |
| {% block content %}
 | |
|     <div id="noVNC_status_bar">
 | |
|         <div id="noVNC_left_dummy_elem"></div>
 | |
|         <div id="noVNC_status">{% trans 'Loading' %}</div>
 | |
|         <div id="noVNC_buttons">
 | |
|             <input type=button value="Send CtrlAltDel" id="sendCtrlAltDelButton" class="noVNC_shown">
 | |
|             <span id="noVNC_power_buttons" class="noVNC_hidden">
 | |
|                 <input type=button value="Shutdown" id="machineShutdownButton">
 | |
|                 <input type=button value="Reboot" id="machineRebootButton">
 | |
|                 <input type=button value="Reset" id="machineResetButton">
 | |
|             </span>
 | |
|         </div>
 | |
|     </div>
 | |
|     <div id='noVNC_container'></div>
 | |
| {% endblock %}
 |