1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-25 23:55:24 +00:00

Merge pull request #334 from catborise/wsproxy

wsproxy patch
This commit is contained in:
Anatoliy Guskov 2020-06-28 20:59:34 +03:00 committed by GitHub
commit f23e6b000f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 306 additions and 283 deletions

View file

@ -35,7 +35,16 @@ jobs:
python3 -m pip install --upgrade pip python3 -m pip install --upgrade pip
if [ -f dev/requirements.txt ]; then pip3 install -r dev/requirements.txt; fi if [ -f dev/requirements.txt ]; then pip3 install -r dev/requirements.txt; fi
- name: Super-Linter - name: Super-Linter
uses: github/super-linter@v2.1.0 uses: docker://github/super-linter:v2.2.0
env: env:
VALIDATE_RUBY: false
VALIDATE_ANSIBLE: false VALIDATE_ANSIBLE: false
VALIDATE_CLOJURE: false
VALIDATE_COFFEE: false
VALIDATE_GO: false
VALIDATE_POWERSHELL: false
VALIDATE_KOTLIN: false
VALIDATE_RUBY: false
VALIDATE_PERL: false
VALIDATE_PHP: false
VALIDATE_TERRAFORM: false

View file

@ -1,11 +1,28 @@
FROM phusion/baseimage:0.11 FROM phusion/baseimage:18.04-1.0.0
EXPOSE 80
EXPOSE 6080
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
RUN echo 'APT::Get::Clean=always;' >> /etc/apt/apt.conf.d/99AutomaticClean RUN echo 'APT::Get::Clean=always;' >> /etc/apt/apt.conf.d/99AutomaticClean
RUN apt-get update -qqy RUN apt-get update -qqy
RUN DEBIAN_FRONTEND=noninteractive apt-get -qyy install \ RUN DEBIAN_FRONTEND=noninteractive apt-get -qyy install \
-o APT::Install-Suggests=false \ -o APT::Install-Suggests=false \
git python3-virtualenv python3-dev python3-lxml virtualenv libvirt-dev zlib1g-dev nginx libsasl2-modules git \
python3-virtualenv \
python3-dev \
python3-lxml \
virtualenv \
libvirt-dev \
zlib1g-dev \
nginx \
libsasl2-modules
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ADD . /srv/webvirtcloud ADD . /srv/webvirtcloud
RUN chown -R www-data:www-data /srv/webvirtcloud RUN chown -R www-data:www-data /srv/webvirtcloud
@ -39,11 +56,7 @@ ADD conf/runit/nginx-log-forwarder /etc/service/nginx-log-forwarder/run
ADD conf/runit/novncd.sh /etc/service/novnc/run ADD conf/runit/novncd.sh /etc/service/novnc/run
ADD conf/runit/webvirtcloud.sh /etc/service/webvirtcloud/run ADD conf/runit/webvirtcloud.sh /etc/service/webvirtcloud/run
EXPOSE 80
EXPOSE 6080
# Define mountable directories. # Define mountable directories.
#VOLUME [] #VOLUME []
# Use baseimage-docker's init system. WORKDIR /srv/webvirtcloud
CMD ["/sbin/my_init"]

View file

@ -300,6 +300,12 @@ datasource:
metadata_urls: [ "http://webvirtcloud.domain.com/datasource" ] metadata_urls: [ "http://webvirtcloud.domain.com/datasource" ]
``` ```
### Reverse-Proxy
Edit WS_PUBLIC_PORT at settings.py file to expose redirect to 80. Default: 6080
```
WS_PUBLIC_PORT = 80
```
### How To Update ### How To Update
```bash ```bash
# Go to Installation Directory # Go to Installation Directory

View file

@ -15,9 +15,21 @@ server {
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port; proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $remote_addr; proxy_set_header X-Forwarded-Proto $remote_addr;
proxy_set_header X-Forwarded-Ssl off;
proxy_connect_timeout 600; proxy_connect_timeout 600;
proxy_read_timeout 600; proxy_read_timeout 600;
proxy_send_timeout 600; proxy_send_timeout 600;
client_max_body_size 1024M; client_max_body_size 1024M;
} }
location /novncd/ {
proxy_pass http://wsnovncd;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
upstream wsnovncd {
server 127.0.0.1:6080;
} }

View file

@ -31,17 +31,8 @@
<link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" />
<!-- ES2015/ES6 modules polyfill --> <!-- ES2015/ES6 modules polyfill -->
<script type="module"> <script nomodule src='{% static "thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js" %}'></script>
window._spice_has_module_support = true;
</script>
<script>
window.addEventListener("load", function () {
if (window._spice_has_module_support) return;
var loader = document.createElement("script");
loader.src = '{% static "thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js" %}';
document.head.appendChild(loader);
});
</script>
<script type="module" crossorigin="anonymous"> <script type="module" crossorigin="anonymous">
@ -70,7 +61,8 @@
sc.stop(); sc.stop();
} }
uri = scheme + host + ":" + port; // uri = scheme + host + ":" + port;
uri = scheme + "{{ ws_host }}:{{ ws_port }}{{ ws_path }}";
document.getElementById('connectButton').innerHTML = "Stop"; document.getElementById('connectButton').innerHTML = "Stop";
document.getElementById('connectButton').onclick = disconnect; document.getElementById('connectButton').onclick = disconnect;

View file

@ -31,17 +31,7 @@
<link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" />
<!-- ES2015/ES6 modules polyfill --> <!-- ES2015/ES6 modules polyfill -->
<script type="module"> <script nomodule src='{% static "thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js" %}'></script>
window._spice_has_module_support = true;
</script>
<script>
window.addEventListener("load", function () {
if (window._spice_has_module_support) return;
var loader = document.createElement("script");
loader.src = '{% static "thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js" %}';
document.head.appendChild(loader);
});
</script>
<script type="module" crossorigin="anonymous"> <script type="module" crossorigin="anonymous">
import * as SpiceHtml5 from '{% static "js/spice-html5/main.js" %}'; import * as SpiceHtml5 from '{% static "js/spice-html5/main.js" %}';
@ -65,7 +55,7 @@
function spice_error(e) { function spice_error(e) {
disconnect(); disconnect();
if (e !== undefined && e.message === "Permission denied.") { if (e !== undefined && e.message === "Permission denied.") {
var pass = prompt("Password"); var pass = prompt('{% trans "Password" %}');
connect(pass); connect(pass);
} }
} }
@ -108,7 +98,8 @@
} }
if (password === 'None') password = ''; if (password === 'None') password = '';
var path = spice_query_var('path', 'websockify'); //var path = spice_query_var('path', 'websockify');
var path = spice_query_var('path', '{{ ws_path }}');
if ((!host) || (!port)) { if ((!host) || (!port)) {
console.log('{% trans "must specify host and port in URL" %}'); console.log('{% trans "must specify host and port in URL" %}');
@ -119,7 +110,8 @@
sc.stop(); sc.stop();
} }
uri = scheme + host + ":" + port; // uri = scheme + host + ":" + port;
uri = scheme + "{{ ws_host }}:{{ ws_port }}{{ ws_path }}";
if (path) { if (path) {
uri += path[0] == '/' ? path : ('/' + path); uri += path[0] == '/' ? path : ('/' + path);

View file

@ -42,10 +42,14 @@
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<!-- Home Screen Icons (favourites and bookmarks use the normal icons) --> <!-- 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="60x60" type="image/png"
<link rel="apple-touch-icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}"> href="{% static "js/novnc/app/images/icons/novnc-60x60.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="76x76" type="image/png"
<link rel="apple-touch-icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.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 --> <!-- Stylesheets -->
<link rel="stylesheet" href="{% static "js/novnc/app/styles/base.css" %}" /> <link rel="stylesheet" href="{% static "js/novnc/app/styles/base.css" %}" />
@ -61,17 +65,8 @@
<!-- promise polyfills promises for IE11 --> <!-- promise polyfills promises for IE11 -->
<script src="{% static "js/novnc/vendor/promise.js" %}"></script> <script src="{% static "js/novnc/vendor/promise.js" %}"></script>
<!-- ES2015/ES6 modules polyfill --> <!-- ES2015/ES6 modules polyfill -->
<script type="module"> <script nomodule
window._noVNC_has_module_support = true; src='{% static "js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js" %}'></script>
</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 --> <!-- actual script modules -->
<script type="module" crossorigin="anonymous" src="{% static "js/novnc/app/ui.js" %}"></script> <script type="module" crossorigin="anonymous" src="{% static "js/novnc/app/ui.js" %}"></script>
<!-- end scripts --> <!-- end scripts -->
@ -90,7 +85,9 @@
<div id="noVNC_control_bar_anchor" class="noVNC_vcenter"> <div id="noVNC_control_bar_anchor" class="noVNC_vcenter">
<div id="noVNC_control_bar"> <div id="noVNC_control_bar">
<div id="noVNC_control_bar_handle" title="Hide/Show the control bar"><div></div></div> <div id="noVNC_control_bar_handle" title="Hide/Show the control bar">
<div></div>
</div>
<div class="noVNC_scroll"> <div class="noVNC_scroll">
@ -98,61 +95,47 @@
<!-- Drag/Pan the viewport --> <!-- Drag/Pan the viewport -->
<input type="image" alt="viewport drag" src="{% static "js/novnc/app/images/drag.svg" %}" <input type="image" alt="viewport drag" src="{% static "js/novnc/app/images/drag.svg" %}"
id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden" id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden" title="Move/Drag Viewport" />
title="Move/Drag Viewport" />
<!--noVNC Touch Device only buttons--> <!--noVNC Touch Device only buttons-->
<div id="noVNC_mobile_buttons"> <div id="noVNC_mobile_buttons">
<input type="image" alt="No mousebutton" src="{% static "js/novnc/app/images/mouse_none.svg" %}" <input type="image" alt="No mousebutton" src="{% static "js/novnc/app/images/mouse_none.svg" %}"
id="noVNC_mouse_button0" class="noVNC_button" id="noVNC_mouse_button0" class="noVNC_button" title="Active Mouse Button" />
title="Active Mouse Button"/>
<input type="image" alt="Left mousebutton" src="{% static "js/novnc/app/images/mouse_left.svg" %}" <input type="image" alt="Left mousebutton" src="{% static "js/novnc/app/images/mouse_left.svg" %}"
id="noVNC_mouse_button1" class="noVNC_button" id="noVNC_mouse_button1" class="noVNC_button" title="Active Mouse Button" />
title="Active Mouse Button"/>
<input type="image" alt="Middle mousebutton" src="{% static "js/novnc/app/images/mouse_middle.svg" %}" <input type="image" alt="Middle mousebutton" src="{% static "js/novnc/app/images/mouse_middle.svg" %}"
id="noVNC_mouse_button2" class="noVNC_button" id="noVNC_mouse_button2" class="noVNC_button" title="Active Mouse Button" />
title="Active Mouse Button"/>
<input type="image" alt="Right mousebutton" src="{% static "js/novnc/app/images/mouse_right.svg" %}" <input type="image" alt="Right mousebutton" src="{% static "js/novnc/app/images/mouse_right.svg" %}"
id="noVNC_mouse_button4" class="noVNC_button" id="noVNC_mouse_button4" class="noVNC_button" title="Active Mouse Button" />
title="Active Mouse Button"/>
<input type="image" alt="Keyboard" src="{% static "js/novnc/app/images/keyboard.svg" %}" <input type="image" alt="Keyboard" src="{% static "js/novnc/app/images/keyboard.svg" %}"
id="noVNC_keyboard_button" class="noVNC_button" id="noVNC_keyboard_button" class="noVNC_button" value="Keyboard" title="Show Keyboard" />
value="Keyboard" title="Show Keyboard" />
</div> </div>
<!-- Extra manual keys --> <!-- Extra manual keys -->
<div id="noVNC_extra_keys"> <div id="noVNC_extra_keys">
<input type="image" alt="Extra keys" src="{% static "js/novnc/app/images/toggleextrakeys.svg" %}" <input type="image" alt="Extra keys" src="{% static "js/novnc/app/images/toggleextrakeys.svg" %}"
id="noVNC_toggle_extra_keys_button" class="noVNC_button" id="noVNC_toggle_extra_keys_button" class="noVNC_button" title="Show Extra Keys" />
title="Show Extra Keys"/>
<div class="noVNC_vcenter"> <div class="noVNC_vcenter">
<div id="noVNC_modifiers" class="noVNC_panel"> <div id="noVNC_modifiers" class="noVNC_panel">
<input type="image" alt="Ctrl" src="{% static "js/novnc/app/images/ctrl.svg" %}" <input type="image" alt="Ctrl" src="{% static "js/novnc/app/images/ctrl.svg" %}"
id="noVNC_toggle_ctrl_button" class="noVNC_button" id="noVNC_toggle_ctrl_button" class="noVNC_button" title="Toggle Ctrl" />
title="Toggle Ctrl"/>
<input type="image" alt="Alt" src="{% static "js/novnc/app/images/alt.svg" %}" <input type="image" alt="Alt" src="{% static "js/novnc/app/images/alt.svg" %}"
id="noVNC_toggle_alt_button" class="noVNC_button" id="noVNC_toggle_alt_button" class="noVNC_button" title="Toggle Alt" />
title="Toggle Alt"/>
<input type="image" alt="Windows" src="{% static "js/novnc/app/images/windows.svg" %}" <input type="image" alt="Windows" src="{% static "js/novnc/app/images/windows.svg" %}"
id="noVNC_toggle_windows_button" class="noVNC_button" id="noVNC_toggle_windows_button" class="noVNC_button" title="Toggle Windows">
title="Toggle Windows">
<input type="image" alt="Tab" src="{% static "js/novnc/app/images/tab.svg" %}" <input type="image" alt="Tab" src="{% static "js/novnc/app/images/tab.svg" %}"
id="noVNC_send_tab_button" class="noVNC_button" id="noVNC_send_tab_button" class="noVNC_button" title="Send Tab" />
title="Send Tab"/>
<input type="image" alt="Esc" src="{% static "js/novnc/app/images/esc.svg" %}" <input type="image" alt="Esc" src="{% static "js/novnc/app/images/esc.svg" %}"
id="noVNC_send_esc_button" class="noVNC_button" id="noVNC_send_esc_button" class="noVNC_button" title="Send Escape" />
title="Send Escape"/>
<input type="image" alt="Ctrl+Alt+Del" src="{% static "js/novnc/app/images/ctrlaltdel.svg" %}" <input type="image" alt="Ctrl+Alt+Del" src="{% static "js/novnc/app/images/ctrlaltdel.svg" %}"
id="noVNC_send_ctrl_alt_del_button" class="noVNC_button" id="noVNC_send_ctrl_alt_del_button" class="noVNC_button" title="Send Ctrl-Alt-Del" />
title="Send Ctrl-Alt-Del" />
</div> </div>
</div> </div>
</div> </div>
<!-- Shutdown/Reboot --> <!-- Shutdown/Reboot -->
<input type="image" alt="Shutdown/Reboot" src="{% static "js/novnc/app/images/power.svg" %}" <input type="image" alt="Shutdown/Reboot" src="{% static "js/novnc/app/images/power.svg" %}"
id="noVNC_power_button" class="noVNC_button" id="noVNC_power_button" class="noVNC_button" title="Shutdown/Reboot..." />
title="Shutdown/Reboot..." />
<div class="noVNC_vcenter"> <div class="noVNC_vcenter">
<div id="noVNC_power" class="noVNC_panel"> <div id="noVNC_power" class="noVNC_panel">
<div class="noVNC_heading"> <div class="noVNC_heading">
@ -166,8 +149,7 @@
<!-- Clipboard --> <!-- Clipboard -->
<input type="image" alt="Clipboard" src="{% static "js/novnc/app/images/clipboard.svg" %}" <input type="image" alt="Clipboard" src="{% static "js/novnc/app/images/clipboard.svg" %}"
id="noVNC_clipboard_button" class="noVNC_button" id="noVNC_clipboard_button" class="noVNC_button" title="Clipboard" />
title="Clipboard" />
<div class="noVNC_vcenter"> <div class="noVNC_vcenter">
<div id="noVNC_clipboard" class="noVNC_panel"> <div id="noVNC_clipboard" class="noVNC_panel">
<div class="noVNC_heading"> <div class="noVNC_heading">
@ -175,20 +157,17 @@
</div> </div>
<textarea id="noVNC_clipboard_text" rows=5></textarea> <textarea id="noVNC_clipboard_text" rows=5></textarea>
<br /> <br />
<input id="noVNC_clipboard_clear_button" type="button" <input id="noVNC_clipboard_clear_button" type="button" value="Clear" class="noVNC_submit" />
value="Clear" class="noVNC_submit" />
</div> </div>
</div> </div>
<!-- Toggle fullscreen --> <!-- Toggle fullscreen -->
<input type="image" alt="Fullscreen" src="{% static "js/novnc/app/images/fullscreen.svg" %}" <input type="image" alt="Fullscreen" src="{% static "js/novnc/app/images/fullscreen.svg" %}"
id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden" id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden" title="Fullscreen" />
title="Fullscreen" />
<!-- Settings --> <!-- Settings -->
<input type="image" alt="Settings" src="{% static "js/novnc/app/images/settings.svg" %}" <input type="image" alt="Settings" src="{% static "js/novnc/app/images/settings.svg" %}"
id="noVNC_settings_button" class="noVNC_button" id="noVNC_settings_button" class="noVNC_button" title="Settings" />
title="Settings" />
<div class="noVNC_vcenter"> <div class="noVNC_vcenter">
<div id="noVNC_settings" class="noVNC_panel"> <div id="noVNC_settings" class="noVNC_panel">
<ul> <ul>
@ -201,7 +180,9 @@
<li> <li>
<label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label> <label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label>
</li> </li>
<li><hr></li> <li>
<hr>
</li>
<li> <li>
<label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label> <label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
</li> </li>
@ -213,19 +194,24 @@
<option value="remote">Remote Resizing</option> <option value="remote">Remote Resizing</option>
</select> </select>
</li> </li>
<li><hr></li> <li>
<hr>
</li>
<li> <li>
<div class="noVNC_expander">Advanced</div> <div class="noVNC_expander">Advanced</div>
<div><ul> <div>
<ul>
<li> <li>
<label for="noVNC_setting_repeaterID">Repeater ID:</label> <label for="noVNC_setting_repeaterID">Repeater ID:</label>
<input id="noVNC_setting_repeaterID" type="input" value="" /> <input id="noVNC_setting_repeaterID" type="input" value="" />
</li> </li>
<li> <li>
<div class="noVNC_expander">WebSocket</div> <div class="noVNC_expander">WebSocket</div>
<div><ul> <div>
<ul>
<li> <li>
<label><input id="noVNC_setting_encrypt" type="checkbox"/>Encrypt</label> <label><input id="noVNC_setting_encrypt"
type="checkbox" />Encrypt</label>
</li> </li>
<li> <li>
<label for="noVNC_setting_host">Host:</label> <label for="noVNC_setting_host">Host:</label>
@ -233,28 +219,39 @@
</li> </li>
<li> <li>
<label for="noVNC_setting_port">Port:</label> <label for="noVNC_setting_port">Port:</label>
<input id="noVNC_setting_port" value="{{ ws_port }}" type="number"/> <input id="noVNC_setting_port" value="{{ ws_port }}"
type="number" />
</li> </li>
<li> <li>
<label for="noVNC_setting_path">Path:</label> <label for="noVNC_setting_path">Path:</label>
<input id="noVNC_setting_path" type="input" value="websockify"/> <!-- <input id="noVNC_setting_path" type="input" value="websockify"/> -->
<input id="noVNC_setting_path" type="input" value="{{ ws_path }}" />
</li> </li>
</ul></div> </ul>
</div>
</li> </li>
<li><hr></li>
<li> <li>
<label><input id="noVNC_setting_reconnect" type="checkbox" />Automatic Reconnect</label> <hr>
</li>
<li>
<label><input id="noVNC_setting_reconnect" type="checkbox" />Automatic
Reconnect</label>
<input id="noVNC_setting_autoconnect" type="checkbox" value="true" hidden /> <input id="noVNC_setting_autoconnect" type="checkbox" value="true" hidden />
</li> </li>
<li> <li>
<label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label> <label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label>
<input id="noVNC_setting_reconnect_delay" type="number" /> <input id="noVNC_setting_reconnect_delay" type="number" />
</li> </li>
<li><hr></li>
<li> <li>
<label><input id="noVNC_setting_show_dot" type="checkbox">Show Dot when No Cursor</label> <hr>
</li>
<li>
<label><input id="noVNC_setting_show_dot" type="checkbox">Show Dot when No
Cursor</label>
</li>
<li>
<hr>
</li> </li>
<li><hr></li>
<!-- Logging selection dropdown --> <!-- Logging selection dropdown -->
<li> <li>
<label>Logging: <label>Logging:
@ -262,7 +259,8 @@
</select> </select>
</label> </label>
</li> </li>
</ul></div> </ul>
</div>
</li> </li>
</ul> </ul>
</div> </div>
@ -270,8 +268,7 @@
<!-- Connection Controls --> <!-- Connection Controls -->
<input type="image" alt="Disconnect" src="{% static "js/novnc/app/images/disconnect.svg" %}" <input type="image" alt="Disconnect" src="{% static "js/novnc/app/images/disconnect.svg" %}"
id="noVNC_disconnect_button" class="noVNC_button" id="noVNC_disconnect_button" class="noVNC_button" title="Disconnect" />
title="Disconnect" />
</div> </div>
</div> </div>
@ -295,7 +292,8 @@
<!-- Password Dialog --> <!-- Password Dialog -->
<div class="noVNC_center noVNC_connect_layer"> <div class="noVNC_center noVNC_connect_layer">
<div id="noVNC_password_dlg" class="noVNC_panel"><form aria-label="noVNC password form"> <div id="noVNC_password_dlg" class="noVNC_panel">
<form aria-label="noVNC password form">
<ul> <ul>
<li> <li>
<label>Password:</label> <label>Password:</label>
@ -305,7 +303,8 @@
<input id="noVNC_password_button" type="submit" value="Send Password" class="noVNC_submit" /> <input id="noVNC_password_button" type="submit" value="Send Password" class="noVNC_submit" />
</li> </li>
</ul> </ul>
</form></div> </form>
</div>
</div> </div>
<!-- Transition Screens --> <!-- Transition Screens -->
@ -323,8 +322,7 @@
html attributes which attempt to disable text suggestions on the html attributes which attempt to disable text suggestions on the
on-screen keyboard. Let's hope Chrome implements the ime-mode on-screen keyboard. Let's hope Chrome implements the ime-mode
style for example --> style for example -->
<textarea id="noVNC_keyboardinput" autocapitalize="off" <textarea id="noVNC_keyboardinput" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false"
autocorrect="off" autocomplete="off" spellcheck="false"
mozactionhint="Enter" tabindex="-1"></textarea> mozactionhint="Enter" tabindex="-1"></textarea>
</div> </div>

View file

@ -3,7 +3,6 @@
{% load staticfiles %} {% load staticfiles %}
{% block head %} {% block head %}
<!-- <!--
noVNC example: lightweight example using minimal UI and features noVNC example: lightweight example using minimal UI and features
This is a self-contained file which doesn't import WebUtil or external CSS. This is a self-contained file which doesn't import WebUtil or external CSS.
@ -169,8 +168,8 @@
const host = readQueryVariable('host', '{{ ws_host }}'); const host = readQueryVariable('host', '{{ ws_host }}');
let port = readQueryVariable('port', '{{ ws_port }}'); let port = readQueryVariable('port', '{{ ws_port }}');
const password = readQueryVariable('password'); const password = readQueryVariable('password');
const path = readQueryVariable('path', 'websockify'); //const path = readQueryVariable('path', 'websockify');
const path = readQueryVariable('path', '{{ ws_path }}');
// | | | | | | // | | | | | |
// | | | Connect | | | // | | | Connect | | |

View file

@ -3,7 +3,7 @@ from django.shortcuts import render
from libvirt import libvirtError from libvirt import libvirtError
from instances.models import Instance from instances.models import Instance
from vrtManager.instance import wvmInstance from vrtManager.instance import wvmInstance
from webvirtcloud.settings import WS_PUBLIC_PORT, WS_PUBLIC_HOST from webvirtcloud.settings import WS_PUBLIC_PATH, WS_PUBLIC_PORT, WS_PUBLIC_HOST
def console(request): def console(request):
@ -41,6 +41,7 @@ def console(request):
ws_port = console_websocket_port if console_websocket_port else WS_PUBLIC_PORT ws_port = console_websocket_port if console_websocket_port else WS_PUBLIC_PORT
ws_host = WS_PUBLIC_HOST if WS_PUBLIC_HOST else request.get_host() ws_host = WS_PUBLIC_HOST if WS_PUBLIC_HOST else request.get_host()
ws_path = WS_PUBLIC_PATH if WS_PUBLIC_PATH else '/'
if ':' in ws_host: if ':' in ws_host:
ws_host = re.sub(':[0-9]+', '', ws_host) ws_host = re.sub(':[0-9]+', '', ws_host)

View file

@ -2,8 +2,6 @@ body
{ {
background-color: #999999; background-color: #999999;
color: #000000; margin: 0; padding: 0; color: #000000; margin: 0; padding: 0;
font-family: "Lucida Grande", "Lucida Sans Unicode", "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
font-size: 12pt;
line-height: 1.5em; line-height: 1.5em;
} }

View file

@ -151,7 +151,10 @@ WS_PUBLIC_PORT = 6080
# Websock public host # Websock public host
WS_PUBLIC_HOST = None WS_PUBLIC_HOST = None
# Websock SSL connection # Websock public path
WS_PUBLIC_PATH = '/novncd/'
# Websock Certificate for SSL
WS_CERT = None WS_CERT = None
# List of console listen addresses # List of console listen addresses