├── .DS_Store ├── LICENSE.md ├── README.md ├── apps ├── index.php ├── noVNC │ ├── LICENSE.txt │ ├── README.md │ ├── VERSION │ ├── app │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── error-handler.js │ │ ├── images │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── alt.svg │ │ │ ├── clipboard.svg │ │ │ ├── connect.svg │ │ │ ├── ctrl.svg │ │ │ ├── ctrlaltdel.svg │ │ │ ├── disconnect.svg │ │ │ ├── drag.svg │ │ │ ├── error.svg │ │ │ ├── esc.svg │ │ │ ├── expander.svg │ │ │ ├── fullscreen.svg │ │ │ ├── handle.svg │ │ │ ├── handle_bg.svg │ │ │ ├── icons │ │ │ │ ├── Makefile │ │ │ │ ├── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ ├── novnc-120x120.png │ │ │ │ ├── novnc-144x144.png │ │ │ │ ├── novnc-152x152.png │ │ │ │ ├── novnc-16x16.png │ │ │ │ ├── novnc-192x192.png │ │ │ │ ├── novnc-24x24.png │ │ │ │ ├── novnc-32x32.png │ │ │ │ ├── novnc-48x48.png │ │ │ │ ├── novnc-60x60.png │ │ │ │ ├── novnc-64x64.png │ │ │ │ ├── novnc-72x72.png │ │ │ │ ├── novnc-76x76.png │ │ │ │ ├── novnc-96x96.png │ │ │ │ ├── novnc-icon-sm.svg │ │ │ │ └── novnc-icon.svg │ │ │ ├── info.svg │ │ │ ├── keyboard.svg │ │ │ ├── mouse_left.svg │ │ │ ├── mouse_middle.svg │ │ │ ├── mouse_none.svg │ │ │ ├── mouse_right.svg │ │ │ ├── power.svg │ │ │ ├── settings.svg │ │ │ ├── tab.svg │ │ │ ├── toggleextrakeys.svg │ │ │ └── warning.svg │ │ ├── locale │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── de.json │ │ │ ├── el.json │ │ │ ├── es.json │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── sv.json │ │ │ ├── tr.json │ │ │ ├── zh.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ │ ├── localization.js │ │ ├── sounds │ │ │ ├── CREDITS │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── bell.mp3 │ │ │ └── bell.oga │ │ ├── styles │ │ │ ├── Orbitron700.ttf │ │ │ ├── Orbitron700.woff │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── base.css │ │ │ └── lite.css │ │ ├── ui.js │ │ └── webutil.js │ ├── core │ │ ├── .DS_Store │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── base64.js │ │ ├── des.js │ │ ├── display.js │ │ ├── encodings.js │ │ ├── inflator.js │ │ ├── input │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── domkeytable.js │ │ │ ├── fixedkeys.js │ │ │ ├── keyboard.js │ │ │ ├── keysym.js │ │ │ ├── keysymdef.js │ │ │ ├── mouse.js │ │ │ ├── util.js │ │ │ ├── vkeys.js │ │ │ └── xtscancodes.js │ │ ├── rfb.js │ │ ├── util │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── browser.js │ │ │ ├── cursor.js │ │ │ ├── events.js │ │ │ ├── eventtarget.js │ │ │ ├── logging.js │ │ │ ├── polyfill.js │ │ │ └── strings.js │ │ └── websock.js │ ├── index.html │ ├── karma.conf.js │ ├── package.json │ ├── po │ │ ├── Makefile │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── de.po │ │ ├── el.po │ │ ├── es.po │ │ ├── nl.po │ │ ├── noVNC.pot │ │ ├── pl.po │ │ ├── po2js │ │ ├── sv.po │ │ ├── tr.po │ │ ├── xgettext-html │ │ ├── zh.po │ │ ├── zh_CN.po │ │ └── zh_TW.po │ ├── tests │ │ ├── .eslintrc │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── assertions.js │ │ ├── fake.websocket.js │ │ ├── karma-test-main.js │ │ ├── playback-ui.js │ │ ├── playback.js │ │ ├── test.base64.js │ │ ├── test.display.js │ │ ├── test.helper.js │ │ ├── test.keyboard.js │ │ ├── test.localization.js │ │ ├── test.mouse.js │ │ ├── test.rfb.js │ │ ├── test.util.js │ │ ├── test.websock.js │ │ ├── test.webutil.js │ │ └── vnc_playback.html │ ├── utils │ │ ├── .eslintrc │ │ ├── README.md │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── b64-to-binary.pl │ │ ├── genkeysymdef.js │ │ ├── img2js.py │ │ ├── json2graph.py │ │ ├── launch.sh │ │ ├── u2x11 │ │ ├── use_require.js │ │ ├── use_require_helpers.js │ │ └── websockify │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── .travis.yml │ │ │ ├── CHANGES.txt │ │ │ ├── LICENSE.txt │ │ │ ├── MANIFEST.in │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── Windows │ │ │ ├── Windows Service Readme.txt │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ └── noVNC Websocket Service Project │ │ │ │ ├── Program.cs │ │ │ │ ├── ProjectInstaller.Designer.cs │ │ │ │ ├── ProjectInstaller.cs │ │ │ │ ├── ProjectInstaller.resx │ │ │ │ ├── Properties │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ ├── Service1.Designer.cs │ │ │ │ ├── Service1.cs │ │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ │ ├── noVNC Websocket.csproj │ │ │ │ └── noVNC Websocket.sln │ │ │ ├── _notes │ │ │ └── dwsync.xml │ │ │ ├── docs │ │ │ ├── LICENSE.GPL-3 │ │ │ ├── LICENSE.LGPL-3 │ │ │ ├── LICENSE.MPL-2.0 │ │ │ ├── TODO │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── flash_policy.txt │ │ │ ├── latency_results.txt │ │ │ ├── notes │ │ │ ├── release.txt │ │ │ └── websockify.1 │ │ │ ├── include │ │ │ ├── VT100.js │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── keysym.js │ │ │ ├── util.js │ │ │ ├── websock.js │ │ │ ├── webutil.js │ │ │ ├── wsirc.js │ │ │ └── wstelnet.js │ │ │ ├── other │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── js │ │ │ │ ├── README.md │ │ │ │ ├── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ ├── package.json │ │ │ │ └── websockify.js │ │ │ ├── launch.sh │ │ │ ├── project.clj │ │ │ ├── websocket.c │ │ │ ├── websocket.h │ │ │ ├── websocket.rb │ │ │ ├── websockify.c │ │ │ ├── websockify.clj │ │ │ ├── websockify.rb │ │ │ └── wswrap │ │ │ ├── rebind │ │ │ ├── rebind.c │ │ │ ├── run │ │ │ ├── setup.py │ │ │ ├── test-requirements.txt │ │ │ ├── tests │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── echo.html │ │ │ ├── echo.py │ │ │ ├── echo.rb │ │ │ ├── echo_client.py │ │ │ ├── include │ │ │ │ ├── VT100.js │ │ │ │ ├── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ ├── keysym.js │ │ │ │ ├── util.js │ │ │ │ ├── websock.js │ │ │ │ ├── webutil.js │ │ │ │ ├── wsirc.js │ │ │ │ └── wstelnet.js │ │ │ ├── latency.html │ │ │ ├── latency.py │ │ │ ├── load.html │ │ │ ├── load.py │ │ │ ├── plain_echo.html │ │ │ ├── simple.html │ │ │ ├── test_auth_plugins.py │ │ │ ├── test_websocket.py │ │ │ ├── test_websocketproxy.py │ │ │ └── test_websockifyserver.py │ │ │ ├── tox.ini │ │ │ ├── websockify.py │ │ │ ├── websockify │ │ │ ├── __init__.py │ │ │ ├── __init__.pyc │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── auth_plugins.py │ │ │ ├── auth_plugins.pyc │ │ │ ├── token_plugins.py │ │ │ ├── token_plugins.pyc │ │ │ ├── websocket.py │ │ │ ├── websocket.pyc │ │ │ ├── websocketproxy.py │ │ │ ├── websocketproxy.pyc │ │ │ ├── websocketserver.py │ │ │ ├── websocketserver.pyc │ │ │ ├── websockifyserver.py │ │ │ └── websockifyserver.pyc │ │ │ ├── wsirc.html │ │ │ └── wstelnet.html │ ├── vendor │ │ ├── _notes │ │ │ └── dwsync.xml │ │ ├── browser-es-module-loader │ │ │ ├── .npmignore │ │ │ ├── README.md │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ ├── dist │ │ │ │ ├── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ ├── babel-worker.js │ │ │ │ ├── browser-es-module-loader.js │ │ │ │ └── browser-es-module-loader.js.map │ │ │ ├── rollup.config.js │ │ │ └── src │ │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ │ ├── babel-worker.js │ │ │ │ └── browser-es-module-loader.js │ │ ├── pako │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ └── lib │ │ │ │ ├── utils │ │ │ │ ├── _notes │ │ │ │ │ └── dwsync.xml │ │ │ │ └── common.js │ │ │ │ └── zlib │ │ │ │ ├── _notes │ │ │ │ └── dwsync.xml │ │ │ │ ├── adler32.js │ │ │ │ ├── constants.js │ │ │ │ ├── crc32.js │ │ │ │ ├── deflate.js │ │ │ │ ├── gzheader.js │ │ │ │ ├── inffast.js │ │ │ │ ├── inflate.js │ │ │ │ ├── inftrees.js │ │ │ │ ├── messages.js │ │ │ │ ├── trees.js │ │ │ │ └── zstream.js │ │ ├── promise.js │ │ └── sinon.js │ ├── vnc.html │ ├── vnc_lite.html │ └── vnc_screen.html └── password_compat_vm │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── composer.json │ ├── lib │ └── password.php │ ├── phpunit.xml.dist │ ├── test │ └── Unit │ │ ├── PasswordGetInfoTest.php │ │ ├── PasswordHashTest.php │ │ ├── PasswordNeedsRehashTest.php │ │ └── PasswordVerifyTest.php │ └── version-test.php ├── assets ├── .DS_Store ├── css │ ├── .DS_Store │ ├── dashboard.css │ ├── docs.min.css │ ├── docs.min.css.map │ ├── initial-setup.css │ └── login.css ├── img │ ├── favicon.png │ ├── paused.png │ ├── shutdown.png │ └── squarelogo.png ├── js │ ├── .DS_Store │ ├── core │ │ ├── jquery.min.js │ │ └── popper.min.js │ ├── plugins │ │ └── bootstrap-notify.js │ ├── src │ │ ├── application.js │ │ ├── ie-emulation-modes-warning.js │ │ └── pwa.js │ └── vendor │ │ ├── anchor.min.js │ │ ├── clipboard.min.js │ │ ├── holder.min.js │ │ ├── jquery-slim.min.js │ │ └── popper.min.js └── scss │ ├── .DS_Store │ ├── _ads.scss │ ├── _algolia.scss │ ├── _anchor.scss │ ├── _brand.scss │ ├── _browser-bugs.scss │ ├── _buttons.scss │ ├── _callouts.scss │ ├── _clipboard-js.scss │ ├── _colors.scss │ ├── _component-examples.scss │ ├── _content.scss │ ├── _examples.scss │ ├── _footer.scss │ ├── _masthead.scss │ ├── _nav.scss │ ├── _sidebar.scss │ ├── _skiplink.scss │ ├── _syntax.scss │ ├── _variables.scss │ └── docs.scss ├── changelog.php ├── dist ├── .DS_Store ├── css │ ├── bootstrap-grid.css │ ├── bootstrap-grid.css.map │ ├── bootstrap-grid.min.css │ ├── bootstrap-grid.min.css.map │ ├── bootstrap-reboot.css │ ├── bootstrap-reboot.css.map │ ├── bootstrap-reboot.min.css │ ├── bootstrap-reboot.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ └── bootstrap.min.css.map └── js │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ ├── bootstrap.js │ ├── bootstrap.js.map │ ├── bootstrap.min.js │ └── bootstrap.min.js.map ├── index.php ├── logs ├── index.php └── readme.txt ├── pages ├── .DS_Store ├── config │ ├── index.php │ ├── lang │ │ ├── english.php │ │ └── spanish.php │ ├── preferences.php │ ├── settings.php │ ├── setup-configuration.php │ ├── update.php │ └── version.php ├── domain │ ├── .DS_Store │ ├── domain-list.php │ └── domain-single.php ├── footer.php ├── header.php ├── host │ └── host-info.php ├── libvirt.php ├── login.php ├── navbar.php ├── network │ └── network-list.php ├── storage │ └── storage-pools.php └── vnc.php └── tokens.php /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/.DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | VM Dashboard is a web-based front end for libvirt based KVM virtual machines. 2 | 3 | Setup instructions for Ubuntu and CentOS are available at https://vmdashboard.org/download 4 | 5 | New to the software? Screenshots can be viewed at https://vmdashboard.org/screenshots 6 | -------------------------------------------------------------------------------- /apps/index.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/noVNC/LICENSE.txt: -------------------------------------------------------------------------------- 1 | noVNC is Copyright (C) 2011 Joel Martin 2 | 3 | The noVNC core library files are licensed under the MPL 2.0 (Mozilla 4 | Public License 2.0). The noVNC core library is composed of the 5 | Javascript code necessary for full noVNC operation. This includes (but 6 | is not limited to): 7 | 8 | core/**/*.js 9 | app/*.js 10 | test/playback.js 11 | 12 | The HTML, CSS, font and images files that included with the noVNC 13 | source distibution (or repository) are not considered part of the 14 | noVNC core library and are licensed under more permissive licenses. 15 | The intent is to allow easy integration of noVNC into existing web 16 | sites and web applications. 17 | 18 | The HTML, CSS, font and image files are licensed as follows: 19 | 20 | *.html : 2-Clause BSD license 21 | 22 | app/styles/*.css : 2-Clause BSD license 23 | 24 | app/styles/Orbitron* : SIL Open Font License 1.1 25 | (Copyright 2009 Matt McInerney) 26 | 27 | app/images/ : Creative Commons Attribution-ShareAlike 28 | http://creativecommons.org/licenses/by-sa/3.0/ 29 | 30 | Some portions of noVNC are copyright to their individual authors. 31 | Please refer to the individual source files and/or to the noVNC commit 32 | history: https://github.com/novnc/noVNC/commits/master 33 | 34 | The are several files and projects that have been incorporated into 35 | the noVNC core library. Here is a list of those files and the original 36 | licenses (all MPL 2.0 compatible): 37 | 38 | core/base64.js : MPL 2.0 39 | 40 | core/des.js : Various BSD style licenses 41 | 42 | vendor/pako/ : MIT 43 | 44 | vendor/browser-es-module-loader/src/ : MIT 45 | 46 | vendor/browser-es-module-loader/dist/ : Various BSD style licenses 47 | 48 | vendor/promise.js : MIT 49 | 50 | Any other files not mentioned above are typically marked with 51 | a copyright/license header at the top of the file. The default noVNC 52 | license is MPL-2.0. 53 | 54 | The following license texts are included: 55 | 56 | docs/LICENSE.MPL-2.0 57 | docs/LICENSE.OFL-1.1 58 | docs/LICENSE.BSD-3-Clause (New BSD) 59 | docs/LICENSE.BSD-2-Clause (Simplified BSD / FreeBSD) 60 | vendor/pako/LICENSE (MIT) 61 | 62 | Or alternatively the license texts may be found here: 63 | 64 | http://www.mozilla.org/MPL/2.0/ 65 | http://scripts.sil.org/OFL 66 | http://en.wikipedia.org/wiki/BSD_licenses 67 | https://opensource.org/licenses/MIT 68 | -------------------------------------------------------------------------------- /apps/noVNC/VERSION: -------------------------------------------------------------------------------- 1 | 1.0.0 2 | -------------------------------------------------------------------------------- /apps/noVNC/app/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/error-handler.js: -------------------------------------------------------------------------------- 1 | // NB: this should *not* be included as a module until we have 2 | // native support in the browsers, so that our error handler 3 | // can catch script-loading errors. 4 | 5 | 6 | (function(){ 7 | "use strict"; 8 | 9 | // Fallback for all uncought errors 10 | function handleError (event, err) { 11 | try { 12 | var msg = document.getElementById('noVNC_fallback_errormsg'); 13 | 14 | // Only show the initial error 15 | if (msg.hasChildNodes()) { 16 | return false; 17 | } 18 | 19 | var div = document.createElement("div"); 20 | div.classList.add('noVNC_message'); 21 | div.appendChild(document.createTextNode(event.message)); 22 | msg.appendChild(div); 23 | 24 | if (event.filename) { 25 | div = document.createElement("div"); 26 | div.className = 'noVNC_location'; 27 | var text = event.filename; 28 | if (event.lineno !== undefined) { 29 | text += ":" + event.lineno; 30 | if (event.colno !== undefined) { 31 | text += ":" + event.colno; 32 | } 33 | } 34 | div.appendChild(document.createTextNode(text)); 35 | msg.appendChild(div); 36 | } 37 | 38 | if (err && (err.stack !== undefined)) { 39 | div = document.createElement("div"); 40 | div.className = 'noVNC_stack'; 41 | div.appendChild(document.createTextNode(err.stack)); 42 | msg.appendChild(div); 43 | } 44 | 45 | document.getElementById('noVNC_fallback_error') 46 | .classList.add("noVNC_open"); 47 | } catch (exc) { 48 | document.write("noVNC encountered an error."); 49 | } 50 | // Don't return true since this would prevent the error 51 | // from being printed to the browser console. 52 | return false; 53 | } 54 | window.addEventListener('error', function (evt) { handleError(evt, evt.error); }); 55 | window.addEventListener('unhandledrejection', function (evt) { handleError(evt.reason, evt.reason); }); 56 | })(); 57 | -------------------------------------------------------------------------------- /apps/noVNC/app/images/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/images/handle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 54 | 57 | 58 | 60 | 61 | 63 | image/svg+xml 64 | 66 | 67 | 68 | 69 | 70 | 75 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/Makefile: -------------------------------------------------------------------------------- 1 | ICONS := \ 2 | novnc-16x16.png \ 3 | novnc-24x24.png \ 4 | novnc-32x32.png \ 5 | novnc-48x48.png \ 6 | novnc-64x64.png 7 | 8 | ANDROID_LAUNCHER := \ 9 | novnc-48x48.png \ 10 | novnc-72x72.png \ 11 | novnc-96x96.png \ 12 | novnc-144x144.png \ 13 | novnc-192x192.png 14 | 15 | IPHONE_LAUNCHER := \ 16 | novnc-60x60.png \ 17 | novnc-120x120.png 18 | 19 | IPAD_LAUNCHER := \ 20 | novnc-76x76.png \ 21 | novnc-152x152.png 22 | 23 | ALL_ICONS := $(ICONS) $(ANDROID_LAUNCHER) $(IPHONE_LAUNCHER) $(IPAD_LAUNCHER) 24 | 25 | all: $(ALL_ICONS) 26 | 27 | novnc-16x16.png: novnc-icon-sm.svg 28 | convert -density 90 \ 29 | -background transparent "$<" "$@" 30 | novnc-24x24.png: novnc-icon-sm.svg 31 | convert -density 135 \ 32 | -background transparent "$<" "$@" 33 | novnc-32x32.png: novnc-icon-sm.svg 34 | convert -density 180 \ 35 | -background transparent "$<" "$@" 36 | 37 | novnc-%.png: novnc-icon.svg 38 | convert -density $$[`echo $* | cut -d x -f 1` * 90 / 48] \ 39 | -background transparent "$<" "$@" 40 | 41 | clean: 42 | rm -f *.png 43 | -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-120x120.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-144x144.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-152x152.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-16x16.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-192x192.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-24x24.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-32x32.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-48x48.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-60x60.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-64x64.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-72x72.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-76x76.png -------------------------------------------------------------------------------- /apps/noVNC/app/images/icons/novnc-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/images/icons/novnc-96x96.png -------------------------------------------------------------------------------- /apps/noVNC/app/locale/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/locale/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Verbinden...", 3 | "Disconnecting...": "Verbindung trennen...", 4 | "Reconnecting...": "Verbindung wiederherstellen...", 5 | "Internal error": "Interner Fehler", 6 | "Must set host": "Richten Sie den Server ein", 7 | "Connected (encrypted) to ": "Verbunden mit (verschlüsselt) ", 8 | "Connected (unencrypted) to ": "Verbunden mit (unverschlüsselt) ", 9 | "Something went wrong, connection is closed": "Etwas lief schief, Verbindung wurde getrennt", 10 | "Disconnected": "Verbindung zum Server getrennt", 11 | "New connection has been rejected with reason: ": "Verbindung wurde aus folgendem Grund abgelehnt: ", 12 | "New connection has been rejected": "Verbindung wurde abgelehnt", 13 | "Password is required": "Passwort ist erforderlich", 14 | "noVNC encountered an error:": "Ein Fehler ist aufgetreten:", 15 | "Hide/Show the control bar": "Kontrollleiste verstecken/anzeigen", 16 | "Move/Drag Viewport": "Ansichtsfenster verschieben/ziehen", 17 | "viewport drag": "Ansichtsfenster ziehen", 18 | "Active Mouse Button": "Aktive Maustaste", 19 | "No mousebutton": "Keine Maustaste", 20 | "Left mousebutton": "Linke Maustaste", 21 | "Middle mousebutton": "Mittlere Maustaste", 22 | "Right mousebutton": "Rechte Maustaste", 23 | "Keyboard": "Tastatur", 24 | "Show Keyboard": "Tastatur anzeigen", 25 | "Extra keys": "Zusatztasten", 26 | "Show Extra Keys": "Zusatztasten anzeigen", 27 | "Ctrl": "Strg", 28 | "Toggle Ctrl": "Strg umschalten", 29 | "Alt": "Alt", 30 | "Toggle Alt": "Alt umschalten", 31 | "Send Tab": "Tab senden", 32 | "Tab": "Tab", 33 | "Esc": "Esc", 34 | "Send Escape": "Escape senden", 35 | "Ctrl+Alt+Del": "Strg+Alt+Entf", 36 | "Send Ctrl-Alt-Del": "Strg+Alt+Entf senden", 37 | "Shutdown/Reboot": "Herunterfahren/Neustarten", 38 | "Shutdown/Reboot...": "Herunterfahren/Neustarten...", 39 | "Power": "Energie", 40 | "Shutdown": "Herunterfahren", 41 | "Reboot": "Neustarten", 42 | "Reset": "Zurücksetzen", 43 | "Clipboard": "Zwischenablage", 44 | "Clear": "Löschen", 45 | "Fullscreen": "Vollbild", 46 | "Settings": "Einstellungen", 47 | "Shared Mode": "Geteilter Modus", 48 | "View Only": "Nur betrachten", 49 | "Clip to Window": "Auf Fenster begrenzen", 50 | "Scaling Mode:": "Skalierungsmodus:", 51 | "None": "Keiner", 52 | "Local Scaling": "Lokales skalieren", 53 | "Remote Resizing": "Serverseitiges skalieren", 54 | "Advanced": "Erweitert", 55 | "Repeater ID:": "Repeater ID:", 56 | "WebSocket": "WebSocket", 57 | "Encrypt": "Verschlüsselt", 58 | "Host:": "Server:", 59 | "Port:": "Port:", 60 | "Path:": "Pfad:", 61 | "Automatic Reconnect": "Automatisch wiederverbinden", 62 | "Reconnect Delay (ms):": "Wiederverbindungsverzögerung (ms):", 63 | "Logging:": "Protokollierung:", 64 | "Disconnect": "Verbindung trennen", 65 | "Connect": "Verbinden", 66 | "Password:": "Passwort:", 67 | "Cancel": "Abbrechen", 68 | "Canvas not supported.": "Canvas nicht unterstützt." 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/el.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Συνδέεται...", 3 | "Disconnecting...": "Aποσυνδέεται...", 4 | "Reconnecting...": "Επανασυνδέεται...", 5 | "Internal error": "Εσωτερικό σφάλμα", 6 | "Must set host": "Πρέπει να οριστεί ο διακομιστής", 7 | "Connected (encrypted) to ": "Συνδέθηκε (κρυπτογραφημένα) με το ", 8 | "Connected (unencrypted) to ": "Συνδέθηκε (μη κρυπτογραφημένα) με το ", 9 | "Something went wrong, connection is closed": "Κάτι πήγε στραβά, η σύνδεση διακόπηκε", 10 | "Disconnected": "Αποσυνδέθηκε", 11 | "New connection has been rejected with reason: ": "Η νέα σύνδεση απορρίφθηκε διότι: ", 12 | "New connection has been rejected": "Η νέα σύνδεση απορρίφθηκε ", 13 | "Password is required": "Απαιτείται ο κωδικός πρόσβασης", 14 | "noVNC encountered an error:": "το noVNC αντιμετώπισε ένα σφάλμα:", 15 | "Hide/Show the control bar": "Απόκρυψη/Εμφάνιση γραμμής ελέγχου", 16 | "Move/Drag Viewport": "Μετακίνηση/Σύρσιμο Θεατού πεδίου", 17 | "viewport drag": "σύρσιμο θεατού πεδίου", 18 | "Active Mouse Button": "Ενεργό Πλήκτρο Ποντικιού", 19 | "No mousebutton": "Χωρίς Πλήκτρο Ποντικιού", 20 | "Left mousebutton": "Αριστερό Πλήκτρο Ποντικιού", 21 | "Middle mousebutton": "Μεσαίο Πλήκτρο Ποντικιού", 22 | "Right mousebutton": "Δεξί Πλήκτρο Ποντικιού", 23 | "Keyboard": "Πληκτρολόγιο", 24 | "Show Keyboard": "Εμφάνιση Πληκτρολογίου", 25 | "Extra keys": "Επιπλέον πλήκτρα", 26 | "Show Extra Keys": "Εμφάνιση Επιπλέον Πλήκτρων", 27 | "Ctrl": "Ctrl", 28 | "Toggle Ctrl": "Εναλλαγή Ctrl", 29 | "Alt": "Alt", 30 | "Toggle Alt": "Εναλλαγή Alt", 31 | "Send Tab": "Αποστολή Tab", 32 | "Tab": "Tab", 33 | "Esc": "Esc", 34 | "Send Escape": "Αποστολή Escape", 35 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 36 | "Send Ctrl-Alt-Del": "Αποστολή Ctrl-Alt-Del", 37 | "Shutdown/Reboot": "Κλείσιμο/Επανεκκίνηση", 38 | "Shutdown/Reboot...": "Κλείσιμο/Επανεκκίνηση...", 39 | "Power": "Απενεργοποίηση", 40 | "Shutdown": "Κλείσιμο", 41 | "Reboot": "Επανεκκίνηση", 42 | "Reset": "Επαναφορά", 43 | "Clipboard": "Πρόχειρο", 44 | "Clear": "Καθάρισμα", 45 | "Fullscreen": "Πλήρης Οθόνη", 46 | "Settings": "Ρυθμίσεις", 47 | "Shared Mode": "Κοινόχρηστη Λειτουργία", 48 | "View Only": "Μόνο Θέαση", 49 | "Clip to Window": "Αποκοπή στο όριο του Παράθυρου", 50 | "Scaling Mode:": "Λειτουργία Κλιμάκωσης:", 51 | "None": "Καμία", 52 | "Local Scaling": "Τοπική Κλιμάκωση", 53 | "Remote Resizing": "Απομακρυσμένη Αλλαγή μεγέθους", 54 | "Advanced": "Για προχωρημένους", 55 | "Repeater ID:": "Repeater ID:", 56 | "WebSocket": "WebSocket", 57 | "Encrypt": "Κρυπτογράφηση", 58 | "Host:": "Όνομα διακομιστή:", 59 | "Port:": "Πόρτα διακομιστή:", 60 | "Path:": "Διαδρομή:", 61 | "Automatic Reconnect": "Αυτόματη επανασύνδεση", 62 | "Reconnect Delay (ms):": "Καθυστέρηση επανασύνδεσης (ms):", 63 | "Logging:": "Καταγραφή:", 64 | "Disconnect": "Αποσύνδεση", 65 | "Connect": "Σύνδεση", 66 | "Password:": "Κωδικός Πρόσβασης:", 67 | "Cancel": "Ακύρωση", 68 | "Canvas not supported.": "Δεν υποστηρίζεται το στοιχείο Canvas" 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Conectando...", 3 | "Connected (encrypted) to ": "Conectado (con encriptación) a", 4 | "Connected (unencrypted) to ": "Conectado (sin encriptación) a", 5 | "Disconnecting...": "Desconectando...", 6 | "Disconnected": "Desconectado", 7 | "Must set host": "Debes configurar el host", 8 | "Reconnecting...": "Reconectando...", 9 | "Password is required": "Contraseña es obligatoria", 10 | "Disconnect timeout": "Tiempo de desconexión agotado", 11 | "noVNC encountered an error:": "noVNC ha encontrado un error:", 12 | "Hide/Show the control bar": "Ocultar/Mostrar la barra de control", 13 | "Move/Drag Viewport": "Mover/Arrastrar la ventana", 14 | "viewport drag": "Arrastrar la ventana", 15 | "Active Mouse Button": "Botón activo del ratón", 16 | "No mousebutton": "Ningún botón del ratón", 17 | "Left mousebutton": "Botón izquierdo del ratón", 18 | "Middle mousebutton": "Botón central del ratón", 19 | "Right mousebutton": "Botón derecho del ratón", 20 | "Keyboard": "Teclado", 21 | "Show Keyboard": "Mostrar teclado", 22 | "Extra keys": "Teclas adicionales", 23 | "Show Extra Keys": "Mostrar Teclas Adicionales", 24 | "Ctrl": "Ctrl", 25 | "Toggle Ctrl": "Pulsar/Soltar Ctrl", 26 | "Alt": "Alt", 27 | "Toggle Alt": "Pulsar/Soltar Alt", 28 | "Send Tab": "Enviar Tabulación", 29 | "Tab": "Tabulación", 30 | "Esc": "Esc", 31 | "Send Escape": "Enviar Escape", 32 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 33 | "Send Ctrl-Alt-Del": "Enviar Ctrl+Alt+Del", 34 | "Shutdown/Reboot": "Apagar/Reiniciar", 35 | "Shutdown/Reboot...": "Apagar/Reiniciar...", 36 | "Power": "Encender", 37 | "Shutdown": "Apagar", 38 | "Reboot": "Reiniciar", 39 | "Reset": "Restablecer", 40 | "Clipboard": "Portapapeles", 41 | "Clear": "Vaciar", 42 | "Fullscreen": "Pantalla Completa", 43 | "Settings": "Configuraciones", 44 | "Shared Mode": "Modo Compartido", 45 | "View Only": "Solo visualización", 46 | "Clip to Window": "Recortar al tamaño de la ventana", 47 | "Scaling Mode:": "Modo de escalado:", 48 | "None": "Ninguno", 49 | "Local Scaling": "Escalado Local", 50 | "Local Downscaling": "Reducción de escala local", 51 | "Remote Resizing": "Cambio de tamaño remoto", 52 | "Advanced": "Avanzado", 53 | "Local Cursor": "Cursor Local", 54 | "Repeater ID:": "ID del Repetidor", 55 | "WebSocket": "WebSocket", 56 | "Encrypt": "", 57 | "Host:": "Host", 58 | "Port:": "Puesto", 59 | "Path:": "Ruta", 60 | "Automatic Reconnect": "Reconexión automática", 61 | "Reconnect Delay (ms):": "Retraso en la reconexión (ms)", 62 | "Logging:": "Logging", 63 | "Disconnect": "Desconectar", 64 | "Connect": "Conectar", 65 | "Password:": "Contraseña", 66 | "Cancel": "Cancelar", 67 | "Canvas not supported.": "Canvas no está soportado" 68 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Verbinden...", 3 | "Connected (encrypted) to ": "Verbonden (versleuteld) met ", 4 | "Connected (unencrypted) to ": "Verbonden (onversleuteld) met ", 5 | "Disconnecting...": "Verbinding verbreken...", 6 | "Disconnected": "Verbinding verbroken", 7 | "Must set host": "Host moeten worden ingesteld", 8 | "Reconnecting...": "Opnieuw verbinding maken...", 9 | "Password is required": "Wachtwoord is vereist", 10 | "Disconnect timeout": "Timeout tijdens verbreken van verbinding", 11 | "noVNC encountered an error:": "noVNC heeft een fout bemerkt:", 12 | "Hide/Show the control bar": "Verberg/Toon de bedieningsbalk", 13 | "Move/Drag Viewport": "Verplaats/Versleep Kijkvenster", 14 | "viewport drag": "kijkvenster slepen", 15 | "Active Mouse Button": "Actieve Muisknop", 16 | "No mousebutton": "Geen muisknop", 17 | "Left mousebutton": "Linker muisknop", 18 | "Middle mousebutton": "Middelste muisknop", 19 | "Right mousebutton": "Rechter muisknop", 20 | "Keyboard": "Toetsenbord", 21 | "Show Keyboard": "Toon Toetsenbord", 22 | "Extra keys": "Extra toetsen", 23 | "Show Extra Keys": "Toon Extra Toetsen", 24 | "Ctrl": "Ctrl", 25 | "Toggle Ctrl": "Ctrl aan/uitzetten", 26 | "Alt": "Alt", 27 | "Toggle Alt": "Alt aan/uitzetten", 28 | "Send Tab": "Tab Sturen", 29 | "Tab": "Tab", 30 | "Esc": "Esc", 31 | "Send Escape": "Escape Sturen", 32 | "Ctrl+Alt+Del": "Ctrl-Alt-Del", 33 | "Send Ctrl-Alt-Del": "Ctrl-Alt-Del Sturen", 34 | "Shutdown/Reboot": "Uitschakelen/Herstarten", 35 | "Shutdown/Reboot...": "Uitschakelen/Herstarten...", 36 | "Power": "Systeem", 37 | "Shutdown": "Uitschakelen", 38 | "Reboot": "Herstarten", 39 | "Reset": "Resetten", 40 | "Clipboard": "Klembord", 41 | "Clear": "Wissen", 42 | "Fullscreen": "Volledig Scherm", 43 | "Settings": "Instellingen", 44 | "Shared Mode": "Gedeelde Modus", 45 | "View Only": "Alleen Kijken", 46 | "Clip to Window": "Randen buiten venster afsnijden", 47 | "Scaling Mode:": "Schaalmodus:", 48 | "None": "Geen", 49 | "Local Scaling": "Lokaal Schalen", 50 | "Local Downscaling": "Lokaal Neerschalen", 51 | "Remote Resizing": "Op Afstand Formaat Wijzigen", 52 | "Advanced": "Geavanceerd", 53 | "Local Cursor": "Lokale Cursor", 54 | "Repeater ID:": "Repeater ID:", 55 | "WebSocket": "WebSocket", 56 | "Encrypt": "Versleutelen", 57 | "Host:": "Host:", 58 | "Port:": "Poort:", 59 | "Path:": "Pad:", 60 | "Automatic Reconnect": "Automatisch Opnieuw Verbinden", 61 | "Reconnect Delay (ms):": "Vertraging voor Opnieuw Verbinden (ms):", 62 | "Logging:": "Logmeldingen:", 63 | "Disconnect": "Verbinding verbreken", 64 | "Connect": "Verbinden", 65 | "Password:": "Wachtwoord:", 66 | "Cancel": "Annuleren", 67 | "Canvas not supported.": "Canvas wordt niet ondersteund." 68 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Łączenie...", 3 | "Disconnecting...": "Rozłączanie...", 4 | "Reconnecting...": "Łączenie...", 5 | "Internal error": "Błąd wewnętrzny", 6 | "Must set host": "Host i port są wymagane", 7 | "Connected (encrypted) to ": "Połączenie (szyfrowane) z ", 8 | "Connected (unencrypted) to ": "Połączenie (nieszyfrowane) z ", 9 | "Something went wrong, connection is closed": "Coś poszło źle, połączenie zostało zamknięte", 10 | "Disconnected": "Rozłączony", 11 | "New connection has been rejected with reason: ": "Nowe połączenie zostało odrzucone z powodu: ", 12 | "New connection has been rejected": "Nowe połączenie zostało odrzucone", 13 | "Password is required": "Hasło jest wymagane", 14 | "noVNC encountered an error:": "noVNC napotkało błąd:", 15 | "Hide/Show the control bar": "Pokaż/Ukryj pasek ustawień", 16 | "Move/Drag Viewport": "Ruszaj/Przeciągaj Viewport", 17 | "viewport drag": "przeciągnij viewport", 18 | "Active Mouse Button": "Aktywny Przycisk Myszy", 19 | "No mousebutton": "Brak przycisku myszy", 20 | "Left mousebutton": "Lewy przycisk myszy", 21 | "Middle mousebutton": "Środkowy przycisk myszy", 22 | "Right mousebutton": "Prawy przycisk myszy", 23 | "Keyboard": "Klawiatura", 24 | "Show Keyboard": "Pokaż klawiaturę", 25 | "Extra keys": "Przyciski dodatkowe", 26 | "Show Extra Keys": "Pokaż przyciski dodatkowe", 27 | "Ctrl": "Ctrl", 28 | "Toggle Ctrl": "Przełącz Ctrl", 29 | "Alt": "Alt", 30 | "Toggle Alt": "Przełącz Alt", 31 | "Send Tab": "Wyślij Tab", 32 | "Tab": "Tab", 33 | "Esc": "Esc", 34 | "Send Escape": "Wyślij Escape", 35 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 36 | "Send Ctrl-Alt-Del": "Wyślij Ctrl-Alt-Del", 37 | "Shutdown/Reboot": "Wyłącz/Uruchom ponownie", 38 | "Shutdown/Reboot...": "Wyłącz/Uruchom ponownie...", 39 | "Power": "Włączony", 40 | "Shutdown": "Wyłącz", 41 | "Reboot": "Uruchom ponownie", 42 | "Reset": "Resetuj", 43 | "Clipboard": "Schowek", 44 | "Clear": "Wyczyść", 45 | "Fullscreen": "Pełny ekran", 46 | "Settings": "Ustawienia", 47 | "Shared Mode": "Tryb Współdzielenia", 48 | "View Only": "Tylko Podgląd", 49 | "Clip to Window": "Przytnij do Okna", 50 | "Scaling Mode:": "Tryb Skalowania:", 51 | "None": "Brak", 52 | "Local Scaling": "Skalowanie lokalne", 53 | "Remote Resizing": "Skalowanie zdalne", 54 | "Advanced": "Zaawansowane", 55 | "Repeater ID:": "ID Repeatera:", 56 | "WebSocket": "WebSocket", 57 | "Encrypt": "Szyfrowanie", 58 | "Host:": "Host:", 59 | "Port:": "Port:", 60 | "Path:": "Ścieżka:", 61 | "Automatic Reconnect": "Automatycznie wznawiaj połączenie", 62 | "Reconnect Delay (ms):": "Opóźnienie wznawiania (ms):", 63 | "Logging:": "Poziom logowania:", 64 | "Disconnect": "Rozłącz", 65 | "Connect": "Połącz", 66 | "Password:": "Hasło:", 67 | "Cancel": "Anuluj", 68 | "Canvas not supported.": "Element Canvas nie jest wspierany." 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Ansluter...", 3 | "Connected (encrypted) to ": "Ansluten (krypterat) till ", 4 | "Connected (unencrypted) to ": "Ansluten (okrypterat) till ", 5 | "Disconnecting...": "Kopplar ner...", 6 | "Disconnected": "Frånkopplad", 7 | "Must set host": "Du måste specifiera en värd", 8 | "Reconnecting...": "Återansluter...", 9 | "Password is required": "Lösenord krävs", 10 | "Disconnect timeout": "Det tog för lång tid att koppla ner", 11 | "noVNC encountered an error:": "noVNC stötte på ett problem:", 12 | "Hide/Show the control bar": "Göm/Visa kontrollbaren", 13 | "Move/Drag Viewport": "Flytta/Dra Vyn", 14 | "viewport drag": "dra vy", 15 | "Active Mouse Button": "Aktiv musknapp", 16 | "No mousebutton": "Ingen musknapp", 17 | "Left mousebutton": "Vänster musknapp", 18 | "Middle mousebutton": "Mitten-musknapp", 19 | "Right mousebutton": "Höger musknapp", 20 | "Keyboard": "Tangentbord", 21 | "Show Keyboard": "Visa Tangentbord", 22 | "Extra keys": "Extraknappar", 23 | "Show Extra Keys": "Visa Extraknappar", 24 | "Ctrl": "Ctrl", 25 | "Toggle Ctrl": "Växla Ctrl", 26 | "Alt": "Alt", 27 | "Toggle Alt": "Växla Alt", 28 | "Send Tab": "Skicka Tab", 29 | "Tab": "Tab", 30 | "Esc": "Esc", 31 | "Send Escape": "Skicka Escape", 32 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 33 | "Send Ctrl-Alt-Del": "Skicka Ctrl-Alt-Del", 34 | "Shutdown/Reboot": "Stäng av/Boota om", 35 | "Shutdown/Reboot...": "Stäng av/Boota om...", 36 | "Power": "Ström", 37 | "Shutdown": "Stäng av", 38 | "Reboot": "Boota om", 39 | "Reset": "Återställ", 40 | "Clipboard": "Urklipp", 41 | "Clear": "Rensa", 42 | "Fullscreen": "Fullskärm", 43 | "Settings": "Inställningar", 44 | "Shared Mode": "Delat Läge", 45 | "View Only": "Endast Visning", 46 | "Clip to Window": "Begränsa till Fönster", 47 | "Scaling Mode:": "Skalningsläge:", 48 | "None": "Ingen", 49 | "Local Scaling": "Lokal Skalning", 50 | "Local Downscaling": "Lokal Nedskalning", 51 | "Remote Resizing": "Ändra Storlek", 52 | "Advanced": "Avancerat", 53 | "Local Cursor": "Lokal Muspekare", 54 | "Repeater ID:": "Repeater-ID:", 55 | "WebSocket": "WebSocket", 56 | "Encrypt": "Kryptera", 57 | "Host:": "Värd:", 58 | "Port:": "Port:", 59 | "Path:": "Sökväg:", 60 | "Automatic Reconnect": "Automatisk Återanslutning", 61 | "Reconnect Delay (ms):": "Fördröjning (ms):", 62 | "Logging:": "Loggning:", 63 | "Disconnect": "Koppla från", 64 | "Connect": "Anslut", 65 | "Password:": "Lösenord:", 66 | "Cancel": "Avbryt", 67 | "Canvas not supported.": "Canvas stöds ej" 68 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Bağlanıyor...", 3 | "Disconnecting...": "Bağlantı kesiliyor...", 4 | "Reconnecting...": "Yeniden bağlantı kuruluyor...", 5 | "Internal error": "İç hata", 6 | "Must set host": "Sunucuyu kur", 7 | "Connected (encrypted) to ": "Bağlı (şifrelenmiş)", 8 | "Connected (unencrypted) to ": "Bağlandı (şifrelenmemiş)", 9 | "Something went wrong, connection is closed": "Bir şeyler ters gitti, bağlantı kesildi", 10 | "Disconnected": "Bağlantı kesildi", 11 | "New connection has been rejected with reason: ": "Bağlantı aşağıdaki nedenlerden dolayı reddedildi: ", 12 | "New connection has been rejected": "Bağlantı reddedildi", 13 | "Password is required": "Şifre gerekli", 14 | "noVNC encountered an error:": "Bir hata oluştu:", 15 | "Hide/Show the control bar": "Denetim masasını Gizle/Göster", 16 | "Move/Drag Viewport": "Görünümü Taşı/Sürükle", 17 | "viewport drag": "Görüntü penceresini sürükle", 18 | "Active Mouse Button": "Aktif Fare Düğmesi", 19 | "No mousebutton": "Fare düğmesi yok", 20 | "Left mousebutton": "Farenin sol düğmesi", 21 | "Middle mousebutton": "Farenin orta düğmesi", 22 | "Right mousebutton": "Farenin sağ düğmesi", 23 | "Keyboard": "Klavye", 24 | "Show Keyboard": "Klavye Düzenini Göster", 25 | "Extra keys": "Ekstra tuşlar", 26 | "Show Extra Keys": "Ekstra tuşları göster", 27 | "Ctrl": "Ctrl", 28 | "Toggle Ctrl": "Ctrl Değiştir ", 29 | "Alt": "Alt", 30 | "Toggle Alt": "Alt Değiştir", 31 | "Send Tab": "Sekme Gönder", 32 | "Tab": "Sekme", 33 | "Esc": "Esc", 34 | "Send Escape": "Boşluk Gönder", 35 | "Ctrl+Alt+Del": "Ctrl + Alt + Del", 36 | "Send Ctrl-Alt-Del": "Ctrl-Alt-Del Gönder", 37 | "Shutdown/Reboot": "Kapat/Yeniden Başlat", 38 | "Shutdown/Reboot...": "Kapat/Yeniden Başlat...", 39 | "Power": "Güç", 40 | "Shutdown": "Kapat", 41 | "Reboot": "Yeniden Başlat", 42 | "Reset": "Sıfırla", 43 | "Clipboard": "Pano", 44 | "Clear": "Temizle", 45 | "Fullscreen": "Tam Ekran", 46 | "Settings": "Ayarlar", 47 | "Shared Mode": "Paylaşım Modu", 48 | "View Only": "Sadece Görüntüle", 49 | "Clip to Window": "Pencereye Tıkla", 50 | "Scaling Mode:": "Ölçekleme Modu:", 51 | "None": "Bilinmeyen", 52 | "Local Scaling": "Yerel Ölçeklendirme", 53 | "Remote Resizing": "Uzaktan Yeniden Boyutlandırma", 54 | "Advanced": "Gelişmiş", 55 | "Repeater ID:": "Tekralayıcı ID:", 56 | "WebSocket": "WebSocket", 57 | "Encrypt": "Şifrele", 58 | "Host:": "Ana makine:", 59 | "Port:": "Port:", 60 | "Path:": "Yol:", 61 | "Automatic Reconnect": "Otomatik Yeniden Bağlan", 62 | "Reconnect Delay (ms):": "Yeniden Bağlanma Süreci (ms):", 63 | "Logging:": "Giriş yapılıyor:", 64 | "Disconnect": "Bağlantıyı Kes", 65 | "Connect": "Bağlan", 66 | "Password:": "Parola:", 67 | "Cancel": "Vazgeç", 68 | "Canvas not supported.": "Tuval desteklenmiyor." 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "連線中...", 3 | "Disconnecting...": "正在中斷連線...", 4 | "Reconnecting...": "重新連線中...", 5 | "Internal error": "內部錯誤", 6 | "Must set host": "請提供主機資訊", 7 | "Connected (encrypted) to ": "已加密連線到", 8 | "Connected (unencrypted) to ": "未加密連線到", 9 | "Something went wrong, connection is closed": "發生錯誤,連線已關閉", 10 | "Failed to connect to server": "無法連線到伺服器", 11 | "Disconnected": "連線已中斷", 12 | "New connection has been rejected with reason: ": "連線被拒絕,原因:", 13 | "New connection has been rejected": "連線被拒絕", 14 | "Password is required": "請提供密碼", 15 | "noVNC encountered an error:": "noVNC 遇到一個錯誤:", 16 | "Hide/Show the control bar": "顯示/隱藏控制列", 17 | "Move/Drag Viewport": "拖放顯示範圍", 18 | "viewport drag": "顯示範圍拖放", 19 | "Active Mouse Button": "啟用滑鼠按鍵", 20 | "No mousebutton": "無滑鼠按鍵", 21 | "Left mousebutton": "滑鼠左鍵", 22 | "Middle mousebutton": "滑鼠中鍵", 23 | "Right mousebutton": "滑鼠右鍵", 24 | "Keyboard": "鍵盤", 25 | "Show Keyboard": "顯示鍵盤", 26 | "Extra keys": "額外按鍵", 27 | "Show Extra Keys": "顯示額外按鍵", 28 | "Ctrl": "Ctrl", 29 | "Toggle Ctrl": "切換 Ctrl", 30 | "Alt": "Alt", 31 | "Toggle Alt": "切換 Alt", 32 | "Send Tab": "送出 Tab 鍵", 33 | "Tab": "Tab", 34 | "Esc": "Esc", 35 | "Send Escape": "送出 Escape 鍵", 36 | "Ctrl+Alt+Del": "Ctrl-Alt-Del", 37 | "Send Ctrl-Alt-Del": "送出 Ctrl-Alt-Del 快捷鍵", 38 | "Shutdown/Reboot": "關機/重新啟動", 39 | "Shutdown/Reboot...": "關機/重新啟動...", 40 | "Power": "電源", 41 | "Shutdown": "關機", 42 | "Reboot": "重新啟動", 43 | "Reset": "重設", 44 | "Clipboard": "剪貼簿", 45 | "Clear": "清除", 46 | "Fullscreen": "全螢幕", 47 | "Settings": "設定", 48 | "Shared Mode": "分享模式", 49 | "View Only": "僅檢視", 50 | "Clip to Window": "限制/裁切視窗大小", 51 | "Scaling Mode:": "縮放模式:", 52 | "None": "無", 53 | "Local Scaling": "本機縮放", 54 | "Remote Resizing": "遠端調整大小", 55 | "Advanced": "進階", 56 | "Repeater ID:": "中繼站 ID", 57 | "WebSocket": "WebSocket", 58 | "Encrypt": "加密", 59 | "Host:": "主機:", 60 | "Port:": "連接埠:", 61 | "Path:": "路徑:", 62 | "Automatic Reconnect": "自動重新連線", 63 | "Reconnect Delay (ms):": "重新連線間隔 (ms):", 64 | "Logging:": "日誌級別:", 65 | "Disconnect": "中斷連線", 66 | "Connect": "連線", 67 | "Password:": "密碼:", 68 | "Cancel": "取消" 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "链接中...", 3 | "Disconnecting...": "正在中断连接...", 4 | "Reconnecting...": "重新链接中...", 5 | "Internal error": "内部错误", 6 | "Must set host": "请提供主机名", 7 | "Connected (encrypted) to ": "已加密链接到", 8 | "Connected (unencrypted) to ": "未加密链接到", 9 | "Something went wrong, connection is closed": "发生错误,链接已关闭", 10 | "Failed to connect to server": "无法链接到服务器", 11 | "Disconnected": "链接已中断", 12 | "New connection has been rejected with reason: ": "链接被拒绝,原因:", 13 | "New connection has been rejected": "链接被拒绝", 14 | "Password is required": "请提供密码", 15 | "noVNC encountered an error:": "noVNC 遇到一个错误:", 16 | "Hide/Show the control bar": "显示/隐藏控制列", 17 | "Move/Drag Viewport": "拖放显示范围", 18 | "viewport drag": "显示范围拖放", 19 | "Active Mouse Button": "启动鼠标按鍵", 20 | "No mousebutton": "禁用鼠标按鍵", 21 | "Left mousebutton": "鼠标左鍵", 22 | "Middle mousebutton": "鼠标中鍵", 23 | "Right mousebutton": "鼠标右鍵", 24 | "Keyboard": "键盘", 25 | "Show Keyboard": "显示键盘", 26 | "Extra keys": "额外按键", 27 | "Show Extra Keys": "显示额外按键", 28 | "Ctrl": "Ctrl", 29 | "Toggle Ctrl": "切换 Ctrl", 30 | "Alt": "Alt", 31 | "Toggle Alt": "切换 Alt", 32 | "Send Tab": "发送 Tab 键", 33 | "Tab": "Tab", 34 | "Esc": "Esc", 35 | "Send Escape": "发送 Escape 键", 36 | "Ctrl+Alt+Del": "Ctrl-Alt-Del", 37 | "Send Ctrl-Alt-Del": "发送 Ctrl-Alt-Del 键", 38 | "Shutdown/Reboot": "关机/重新启动", 39 | "Shutdown/Reboot...": "关机/重新启动...", 40 | "Power": "电源", 41 | "Shutdown": "关机", 42 | "Reboot": "重新启动", 43 | "Reset": "重置", 44 | "Clipboard": "剪贴板", 45 | "Clear": "清除", 46 | "Fullscreen": "全屏幕", 47 | "Settings": "设置", 48 | "Shared Mode": "分享模式", 49 | "View Only": "仅检视", 50 | "Clip to Window": "限制/裁切窗口大小", 51 | "Scaling Mode:": "缩放模式:", 52 | "None": "无", 53 | "Local Scaling": "本地缩放", 54 | "Remote Resizing": "远程调整大小", 55 | "Advanced": "高级", 56 | "Repeater ID:": "中继站 ID", 57 | "WebSocket": "WebSocket", 58 | "Encrypt": "加密", 59 | "Host:": "主机:", 60 | "Port:": "端口:", 61 | "Path:": "路径:", 62 | "Automatic Reconnect": "自动重新链接", 63 | "Reconnect Delay (ms):": "重新链接间隔 (ms):", 64 | "Logging:": "日志级别:", 65 | "Disconnect": "终端链接", 66 | "Connect": "链接", 67 | "Password:": "密码:", 68 | "Cancel": "取消" 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/locale/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "連線中...", 3 | "Disconnecting...": "正在中斷連線...", 4 | "Reconnecting...": "重新連線中...", 5 | "Internal error": "內部錯誤", 6 | "Must set host": "請提供主機資訊", 7 | "Connected (encrypted) to ": "已加密連線到", 8 | "Connected (unencrypted) to ": "未加密連線到", 9 | "Something went wrong, connection is closed": "發生錯誤,連線已關閉", 10 | "Failed to connect to server": "無法連線到伺服器", 11 | "Disconnected": "連線已中斷", 12 | "New connection has been rejected with reason: ": "連線被拒絕,原因:", 13 | "New connection has been rejected": "連線被拒絕", 14 | "Password is required": "請提供密碼", 15 | "noVNC encountered an error:": "noVNC 遇到一個錯誤:", 16 | "Hide/Show the control bar": "顯示/隱藏控制列", 17 | "Move/Drag Viewport": "拖放顯示範圍", 18 | "viewport drag": "顯示範圍拖放", 19 | "Active Mouse Button": "啟用滑鼠按鍵", 20 | "No mousebutton": "無滑鼠按鍵", 21 | "Left mousebutton": "滑鼠左鍵", 22 | "Middle mousebutton": "滑鼠中鍵", 23 | "Right mousebutton": "滑鼠右鍵", 24 | "Keyboard": "鍵盤", 25 | "Show Keyboard": "顯示鍵盤", 26 | "Extra keys": "額外按鍵", 27 | "Show Extra Keys": "顯示額外按鍵", 28 | "Ctrl": "Ctrl", 29 | "Toggle Ctrl": "切換 Ctrl", 30 | "Alt": "Alt", 31 | "Toggle Alt": "切換 Alt", 32 | "Send Tab": "送出 Tab 鍵", 33 | "Tab": "Tab", 34 | "Esc": "Esc", 35 | "Send Escape": "送出 Escape 鍵", 36 | "Ctrl+Alt+Del": "Ctrl-Alt-Del", 37 | "Send Ctrl-Alt-Del": "送出 Ctrl-Alt-Del 快捷鍵", 38 | "Shutdown/Reboot": "關機/重新啟動", 39 | "Shutdown/Reboot...": "關機/重新啟動...", 40 | "Power": "電源", 41 | "Shutdown": "關機", 42 | "Reboot": "重新啟動", 43 | "Reset": "重設", 44 | "Clipboard": "剪貼簿", 45 | "Clear": "清除", 46 | "Fullscreen": "全螢幕", 47 | "Settings": "設定", 48 | "Shared Mode": "分享模式", 49 | "View Only": "僅檢視", 50 | "Clip to Window": "限制/裁切視窗大小", 51 | "Scaling Mode:": "縮放模式:", 52 | "None": "無", 53 | "Local Scaling": "本機縮放", 54 | "Remote Resizing": "遠端調整大小", 55 | "Advanced": "進階", 56 | "Repeater ID:": "中繼站 ID", 57 | "WebSocket": "WebSocket", 58 | "Encrypt": "加密", 59 | "Host:": "主機:", 60 | "Port:": "連接埠:", 61 | "Path:": "路徑:", 62 | "Automatic Reconnect": "自動重新連線", 63 | "Reconnect Delay (ms):": "重新連線間隔 (ms):", 64 | "Logging:": "日誌級別:", 65 | "Disconnect": "中斷連線", 66 | "Connect": "連線", 67 | "Password:": "密碼:", 68 | "Cancel": "取消" 69 | } -------------------------------------------------------------------------------- /apps/noVNC/app/sounds/CREDITS: -------------------------------------------------------------------------------- 1 | bell 2 | Copyright: Dr. Richard Boulanger et al 3 | URL: http://www.archive.org/details/Berklee44v12 4 | License: CC-BY Attribution 3.0 Unported 5 | -------------------------------------------------------------------------------- /apps/noVNC/app/sounds/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/sounds/bell.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/sounds/bell.mp3 -------------------------------------------------------------------------------- /apps/noVNC/app/sounds/bell.oga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/sounds/bell.oga -------------------------------------------------------------------------------- /apps/noVNC/app/styles/Orbitron700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/styles/Orbitron700.ttf -------------------------------------------------------------------------------- /apps/noVNC/app/styles/Orbitron700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/app/styles/Orbitron700.woff -------------------------------------------------------------------------------- /apps/noVNC/app/styles/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/app/styles/lite.css: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC auto CSS 3 | * Copyright (C) 2012 Joel Martin 4 | * Copyright (C) 2017 Samuel Mannehed for Cendio AB 5 | * noVNC is licensed under the MPL 2.0 (see LICENSE.txt) 6 | * This file is licensed under the 2-Clause BSD license (see LICENSE.txt). 7 | */ 8 | 9 | body { 10 | margin:0; 11 | background-color:#313131; 12 | border-bottom-right-radius: 800px 600px; 13 | height:100%; 14 | display: flex; 15 | flex-direction: column; 16 | } 17 | 18 | html { 19 | background-color:#494949; 20 | height:100%; 21 | } 22 | 23 | #noVNC_status_bar { 24 | width: 100%; 25 | display:flex; 26 | justify-content: space-between; 27 | } 28 | 29 | #noVNC_status { 30 | color: #fff; 31 | font: bold 12px Helvetica; 32 | margin: auto; 33 | } 34 | 35 | .noVNC_status_normal { 36 | background: linear-gradient(#b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); 37 | } 38 | 39 | .noVNC_status_error { 40 | background: linear-gradient(#c83737 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); 41 | } 42 | 43 | .noVNC_status_warn { 44 | background: linear-gradient(#b4b41e 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); 45 | } 46 | 47 | .noNVC_shown { 48 | display: inline; 49 | } 50 | .noVNC_hidden { 51 | display: none; 52 | } 53 | 54 | #noVNC_left_dummy_elem { 55 | flex: 1; 56 | } 57 | 58 | #noVNC_buttons { 59 | padding: 1px; 60 | flex: 1; 61 | display: flex; 62 | justify-content: flex-end; 63 | } 64 | -------------------------------------------------------------------------------- /apps/noVNC/core/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/core/.DS_Store -------------------------------------------------------------------------------- /apps/noVNC/core/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/core/encodings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2017 Pierre Ossman for Cendio AB 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | export var encodings = { 10 | encodingRaw: 0, 11 | encodingCopyRect: 1, 12 | encodingRRE: 2, 13 | encodingHextile: 5, 14 | encodingTight: 7, 15 | 16 | pseudoEncodingQualityLevel9: -23, 17 | pseudoEncodingQualityLevel0: -32, 18 | pseudoEncodingDesktopSize: -223, 19 | pseudoEncodingLastRect: -224, 20 | pseudoEncodingCursor: -239, 21 | pseudoEncodingQEMUExtendedKeyEvent: -258, 22 | pseudoEncodingTightPNG: -260, 23 | pseudoEncodingExtendedDesktopSize: -308, 24 | pseudoEncodingXvp: -309, 25 | pseudoEncodingFence: -312, 26 | pseudoEncodingContinuousUpdates: -313, 27 | pseudoEncodingCompressLevel9: -247, 28 | pseudoEncodingCompressLevel0: -256, 29 | }; 30 | 31 | export function encodingName(num) { 32 | switch (num) { 33 | case encodings.encodingRaw: return "Raw"; 34 | case encodings.encodingCopyRect: return "CopyRect"; 35 | case encodings.encodingRRE: return "RRE"; 36 | case encodings.encodingHextile: return "Hextile"; 37 | case encodings.encodingTight: return "Tight"; 38 | default: return "[unknown encoding " + num + "]"; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /apps/noVNC/core/inflator.js: -------------------------------------------------------------------------------- 1 | import { inflateInit, inflate, inflateReset } from "../vendor/pako/lib/zlib/inflate.js"; 2 | import ZStream from "../vendor/pako/lib/zlib/zstream.js"; 3 | 4 | Inflate.prototype = { 5 | inflate: function (data, flush, expected) { 6 | this.strm.input = data; 7 | this.strm.avail_in = this.strm.input.length; 8 | this.strm.next_in = 0; 9 | this.strm.next_out = 0; 10 | 11 | // resize our output buffer if it's too small 12 | // (we could just use multiple chunks, but that would cause an extra 13 | // allocation each time to flatten the chunks) 14 | if (expected > this.chunkSize) { 15 | this.chunkSize = expected; 16 | this.strm.output = new Uint8Array(this.chunkSize); 17 | } 18 | 19 | this.strm.avail_out = this.chunkSize; 20 | 21 | inflate(this.strm, flush); 22 | 23 | return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out); 24 | }, 25 | 26 | reset: function () { 27 | inflateReset(this.strm); 28 | } 29 | }; 30 | 31 | export default function Inflate() { 32 | this.strm = new ZStream(); 33 | this.chunkSize = 1024 * 10 * 10; 34 | this.strm.output = new Uint8Array(this.chunkSize); 35 | this.windowBits = 5; 36 | 37 | inflateInit(this.strm, this.windowBits); 38 | }; 39 | -------------------------------------------------------------------------------- /apps/noVNC/core/input/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/core/input/vkeys.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2017 Pierre Ossman for Cendio AB 4 | * Licensed under MPL 2.0 or any later version (see LICENSE.txt) 5 | */ 6 | 7 | /* 8 | * Mapping between Microsoft® Windows® Virtual-Key codes and 9 | * HTML key codes. 10 | */ 11 | 12 | export default { 13 | 0x08: 'Backspace', 14 | 0x09: 'Tab', 15 | 0x0a: 'NumpadClear', 16 | 0x0d: 'Enter', 17 | 0x10: 'ShiftLeft', 18 | 0x11: 'ControlLeft', 19 | 0x12: 'AltLeft', 20 | 0x13: 'Pause', 21 | 0x14: 'CapsLock', 22 | 0x15: 'Lang1', 23 | 0x19: 'Lang2', 24 | 0x1b: 'Escape', 25 | 0x1c: 'Convert', 26 | 0x1d: 'NonConvert', 27 | 0x20: 'Space', 28 | 0x21: 'PageUp', 29 | 0x22: 'PageDown', 30 | 0x23: 'End', 31 | 0x24: 'Home', 32 | 0x25: 'ArrowLeft', 33 | 0x26: 'ArrowUp', 34 | 0x27: 'ArrowRight', 35 | 0x28: 'ArrowDown', 36 | 0x29: 'Select', 37 | 0x2c: 'PrintScreen', 38 | 0x2d: 'Insert', 39 | 0x2e: 'Delete', 40 | 0x2f: 'Help', 41 | 0x30: 'Digit0', 42 | 0x31: 'Digit1', 43 | 0x32: 'Digit2', 44 | 0x33: 'Digit3', 45 | 0x34: 'Digit4', 46 | 0x35: 'Digit5', 47 | 0x36: 'Digit6', 48 | 0x37: 'Digit7', 49 | 0x38: 'Digit8', 50 | 0x39: 'Digit9', 51 | 0x5b: 'MetaLeft', 52 | 0x5c: 'MetaRight', 53 | 0x5d: 'ContextMenu', 54 | 0x5f: 'Sleep', 55 | 0x60: 'Numpad0', 56 | 0x61: 'Numpad1', 57 | 0x62: 'Numpad2', 58 | 0x63: 'Numpad3', 59 | 0x64: 'Numpad4', 60 | 0x65: 'Numpad5', 61 | 0x66: 'Numpad6', 62 | 0x67: 'Numpad7', 63 | 0x68: 'Numpad8', 64 | 0x69: 'Numpad9', 65 | 0x6a: 'NumpadMultiply', 66 | 0x6b: 'NumpadAdd', 67 | 0x6c: 'NumpadDecimal', 68 | 0x6d: 'NumpadSubtract', 69 | 0x6e: 'NumpadDecimal', // Duplicate, because buggy on Windows 70 | 0x6f: 'NumpadDivide', 71 | 0x70: 'F1', 72 | 0x71: 'F2', 73 | 0x72: 'F3', 74 | 0x73: 'F4', 75 | 0x74: 'F5', 76 | 0x75: 'F6', 77 | 0x76: 'F7', 78 | 0x77: 'F8', 79 | 0x78: 'F9', 80 | 0x79: 'F10', 81 | 0x7a: 'F11', 82 | 0x7b: 'F12', 83 | 0x7c: 'F13', 84 | 0x7d: 'F14', 85 | 0x7e: 'F15', 86 | 0x7f: 'F16', 87 | 0x80: 'F17', 88 | 0x81: 'F18', 89 | 0x82: 'F19', 90 | 0x83: 'F20', 91 | 0x84: 'F21', 92 | 0x85: 'F22', 93 | 0x86: 'F23', 94 | 0x87: 'F24', 95 | 0x90: 'NumLock', 96 | 0x91: 'ScrollLock', 97 | 0xa6: 'BrowserBack', 98 | 0xa7: 'BrowserForward', 99 | 0xa8: 'BrowserRefresh', 100 | 0xa9: 'BrowserStop', 101 | 0xaa: 'BrowserSearch', 102 | 0xab: 'BrowserFavorites', 103 | 0xac: 'BrowserHome', 104 | 0xad: 'AudioVolumeMute', 105 | 0xae: 'AudioVolumeDown', 106 | 0xaf: 'AudioVolumeUp', 107 | 0xb0: 'MediaTrackNext', 108 | 0xb1: 'MediaTrackPrevious', 109 | 0xb2: 'MediaStop', 110 | 0xb3: 'MediaPlayPause', 111 | 0xb4: 'LaunchMail', 112 | 0xb5: 'MediaSelect', 113 | 0xb6: 'LaunchApp1', 114 | 0xb7: 'LaunchApp2', 115 | 0xe1: 'AltRight', // Only when it is AltGraph 116 | }; 117 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/browser.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2012 Joel Martin 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | import * as Log from './logging.js'; 10 | 11 | // Touch detection 12 | export var isTouchDevice = ('ontouchstart' in document.documentElement) || 13 | // requried for Chrome debugger 14 | (document.ontouchstart !== undefined) || 15 | // required for MS Surface 16 | (navigator.maxTouchPoints > 0) || 17 | (navigator.msMaxTouchPoints > 0); 18 | window.addEventListener('touchstart', function onFirstTouch() { 19 | isTouchDevice = true; 20 | window.removeEventListener('touchstart', onFirstTouch, false); 21 | }, false); 22 | 23 | var _cursor_uris_supported = null; 24 | 25 | export function supportsCursorURIs () { 26 | if (_cursor_uris_supported === null) { 27 | try { 28 | var target = document.createElement('canvas'); 29 | target.style.cursor = 'url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default'; 30 | 31 | if (target.style.cursor) { 32 | Log.Info("Data URI scheme cursor supported"); 33 | _cursor_uris_supported = true; 34 | } else { 35 | Log.Warn("Data URI scheme cursor not supported"); 36 | _cursor_uris_supported = false; 37 | } 38 | } catch (exc) { 39 | Log.Error("Data URI scheme cursor test exception: " + exc); 40 | _cursor_uris_supported = false; 41 | } 42 | } 43 | 44 | return _cursor_uris_supported; 45 | }; 46 | 47 | export function isMac() { 48 | return navigator && !!(/mac/i).exec(navigator.platform); 49 | } 50 | 51 | export function isIE() { 52 | return navigator && !!(/trident/i).exec(navigator.userAgent); 53 | } 54 | 55 | export function isEdge() { 56 | return navigator && !!(/edge/i).exec(navigator.userAgent); 57 | } 58 | 59 | export function isWindows() { 60 | return navigator && !!(/win/i).exec(navigator.platform); 61 | } 62 | 63 | export function isIOS() { 64 | return navigator && 65 | (!!(/ipad/i).exec(navigator.platform) || 66 | !!(/iphone/i).exec(navigator.platform) || 67 | !!(/ipod/i).exec(navigator.platform)); 68 | } 69 | 70 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/eventtarget.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright 2017 Pierre Ossman for Cendio AB 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | var EventTargetMixin = { 10 | _listeners: null, 11 | 12 | addEventListener: function(type, callback) { 13 | if (!this._listeners) { 14 | this._listeners = new Map(); 15 | } 16 | if (!this._listeners.has(type)) { 17 | this._listeners.set(type, new Set()); 18 | } 19 | this._listeners.get(type).add(callback); 20 | }, 21 | 22 | removeEventListener: function(type, callback) { 23 | if (!this._listeners || !this._listeners.has(type)) { 24 | return; 25 | } 26 | this._listeners.get(type).delete(callback); 27 | }, 28 | 29 | dispatchEvent: function(event) { 30 | if (!this._listeners || !this._listeners.has(event.type)) { 31 | return true; 32 | } 33 | this._listeners.get(event.type).forEach(function (callback) { 34 | callback.call(this, event); 35 | }, this); 36 | return !event.defaultPrevented; 37 | }, 38 | }; 39 | 40 | export default EventTargetMixin; 41 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/logging.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2012 Joel Martin 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | /* 10 | * Logging/debug routines 11 | */ 12 | 13 | var _log_level = 'warn'; 14 | 15 | var Debug = function (msg) {}; 16 | var Info = function (msg) {}; 17 | var Warn = function (msg) {}; 18 | var Error = function (msg) {}; 19 | 20 | export function init_logging (level) { 21 | if (typeof level === 'undefined') { 22 | level = _log_level; 23 | } else { 24 | _log_level = level; 25 | } 26 | 27 | Debug = Info = Warn = Error = function (msg) {}; 28 | if (typeof window.console !== "undefined") { 29 | switch (level) { 30 | case 'debug': 31 | Debug = console.debug.bind(window.console); 32 | case 'info': 33 | Info = console.info.bind(window.console); 34 | case 'warn': 35 | Warn = console.warn.bind(window.console); 36 | case 'error': 37 | Error = console.error.bind(window.console); 38 | case 'none': 39 | break; 40 | default: 41 | throw new Error("invalid logging type '" + level + "'"); 42 | } 43 | } 44 | }; 45 | export function get_logging () { 46 | return _log_level; 47 | }; 48 | export { Debug, Info, Warn, Error }; 49 | 50 | // Initialize logging level 51 | init_logging(); 52 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/polyfill.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright 2017 Pierre Ossman for noVNC 4 | * Licensed under MPL 2.0 or any later version (see LICENSE.txt) 5 | */ 6 | 7 | /* Polyfills to provide new APIs in old browsers */ 8 | 9 | /* Object.assign() (taken from MDN) */ 10 | if (typeof Object.assign != 'function') { 11 | // Must be writable: true, enumerable: false, configurable: true 12 | Object.defineProperty(Object, "assign", { 13 | value: function assign(target, varArgs) { // .length of function is 2 14 | 'use strict'; 15 | if (target == null) { // TypeError if undefined or null 16 | throw new TypeError('Cannot convert undefined or null to object'); 17 | } 18 | 19 | var to = Object(target); 20 | 21 | for (var index = 1; index < arguments.length; index++) { 22 | var nextSource = arguments[index]; 23 | 24 | if (nextSource != null) { // Skip over if undefined or null 25 | for (var nextKey in nextSource) { 26 | // Avoid bugs when hasOwnProperty is shadowed 27 | if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { 28 | to[nextKey] = nextSource[nextKey]; 29 | } 30 | } 31 | } 32 | } 33 | return to; 34 | }, 35 | writable: true, 36 | configurable: true 37 | }); 38 | } 39 | 40 | /* CustomEvent constructor (taken from MDN) */ 41 | (function () { 42 | function CustomEvent ( event, params ) { 43 | params = params || { bubbles: false, cancelable: false, detail: undefined }; 44 | var evt = document.createEvent( 'CustomEvent' ); 45 | evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); 46 | return evt; 47 | } 48 | 49 | CustomEvent.prototype = window.Event.prototype; 50 | 51 | if (typeof window.CustomEvent !== "function") { 52 | window.CustomEvent = CustomEvent; 53 | } 54 | })(); 55 | -------------------------------------------------------------------------------- /apps/noVNC/core/util/strings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2012 Joel Martin 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | /* 10 | * Decode from UTF-8 11 | */ 12 | export function decodeUTF8 (utf8string) { 13 | "use strict"; 14 | return decodeURIComponent(escape(utf8string)); 15 | }; 16 | -------------------------------------------------------------------------------- /apps/noVNC/index.html: -------------------------------------------------------------------------------- 1 | This page is used to test you HTTPS connection.
2 | If you are having trouble accepting a self-signed certificate for the noVNC connection 3 | add :6080 to the end of your URL.
4 | For example, https://yourURL:6080. 5 | -------------------------------------------------------------------------------- /apps/noVNC/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@novnc/novnc", 3 | "version": "1.0.0-beta", 4 | "description": "An HTML5 VNC client", 5 | "directories": { 6 | "doc": "docs", 7 | "test": "tests" 8 | }, 9 | "scripts": { 10 | "test": "PATH=$PATH:node_modules/karma/bin karma start karma.conf.js", 11 | "prepare": "node ./utils/use_require.js --as commonjs --clean" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/novnc/noVNC.git" 16 | }, 17 | "author": "Joel Martin (https://github.com/kanaka)", 18 | "contributors": [ 19 | "Solly Ross (https://github.com/directxman12)", 20 | "Peter Åstrand (https://github.com/astrand)", 21 | "Samuel Mannehed (https://github.com/samhed)", 22 | "Pierre Ossman (https://github.com/CendioOssman)" 23 | ], 24 | "license": "MPL-2.0", 25 | "bugs": { 26 | "url": "https://github.com/novnc/noVNC/issues" 27 | }, 28 | "homepage": "https://github.com/novnc/noVNC", 29 | "devDependencies": { 30 | "babel-core": "^6.22.1", 31 | "babel-plugin-add-module-exports": "^0.2.1", 32 | "babel-plugin-import-redirect": "*", 33 | "babel-plugin-syntax-dynamic-import": "^6.18.0", 34 | "babel-plugin-transform-es2015-modules-amd": "^6.22.0", 35 | "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0", 36 | "babel-plugin-transform-es2015-modules-systemjs": "^6.22.0", 37 | "babel-plugin-transform-es2015-modules-umd": "^6.22.0", 38 | "babelify": "^7.3.0", 39 | "browserify": "^13.1.0", 40 | "chai": "^3.5.0", 41 | "commander": "^2.9.0", 42 | "es-module-loader": "^2.1.0", 43 | "fs-extra": "^1.0.0", 44 | "jsdom": "*", 45 | "karma": "^1.3.0", 46 | "karma-babel-preprocessor": "^6.0.1", 47 | "karma-chai": "^0.1.0", 48 | "karma-mocha": "^1.3.0", 49 | "karma-mocha-reporter": "^2.2.0", 50 | "karma-requirejs": "^1.1.0", 51 | "karma-sauce-launcher": "^1.0.0", 52 | "mocha": "^3.1.2", 53 | "node-getopt": "*", 54 | "po2json": "*", 55 | "requirejs": "^2.3.2", 56 | "rollup": "^0.41.4", 57 | "rollup-plugin-node-resolve": "^2.0.0", 58 | "sinon-chai": "^2.8.0" 59 | }, 60 | "dependencies": {}, 61 | "keywords": [ 62 | "vnc", 63 | "rfb", 64 | "novnc", 65 | "websockify" 66 | ] 67 | } 68 | -------------------------------------------------------------------------------- /apps/noVNC/po/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | .PHONY: update-po update-js update-pot 3 | 4 | LINGUAS := de el es nl pl sv tr zh 5 | 6 | VERSION := $(shell grep '"version"' ../package.json | cut -d '"' -f 4) 7 | 8 | POFILES := $(addsuffix .po,$(LINGUAS)) 9 | JSONFILES := $(addprefix ../app/locale/,$(addsuffix .json,$(LINGUAS))) 10 | 11 | update-po: $(POFILES) 12 | update-js: $(JSONFILES) 13 | 14 | %.po: noVNC.pot 15 | msgmerge --update --lang=$* $@ $< 16 | ../app/locale/%.json: %.po 17 | ./po2js $< $@ 18 | 19 | update-pot: 20 | xgettext --output=noVNC.js.pot \ 21 | --copyright-holder="Various Authors" \ 22 | --package-name="noVNC" \ 23 | --package-version="$(VERSION)" \ 24 | --msgid-bugs-address="novnc@googlegroups.com" \ 25 | --add-comments=TRANSLATORS: \ 26 | --from-code=UTF-8 \ 27 | --sort-by-file \ 28 | ../app/*.js \ 29 | ../core/*.js \ 30 | ../core/input/*.js 31 | ./xgettext-html --output=noVNC.html.pot \ 32 | ../vnc.html 33 | msgcat --output-file=noVNC.pot \ 34 | --sort-by-file noVNC.js.pot noVNC.html.pot 35 | rm -f noVNC.js.pot noVNC.html.pot 36 | -------------------------------------------------------------------------------- /apps/noVNC/po/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/po/po2js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* 3 | * ps2js: gettext .po to noVNC .js converter 4 | * Copyright (C) 2016 Pierre Ossman 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | var getopt = require('node-getopt'); 21 | var fs = require('fs'); 22 | var po2json = require("po2json"); 23 | 24 | opt = getopt.create([ 25 | ['h' , 'help' , 'display this help'], 26 | ]).bindHelp().parseSystem(); 27 | 28 | if (opt.argv.length != 2) { 29 | console.error("Incorrect number of arguments given"); 30 | process.exit(1); 31 | } 32 | 33 | var data = po2json.parseFileSync(opt.argv[0]); 34 | 35 | var bodyPart = Object.keys(data).filter((msgid) => msgid !== "").map((msgid) => { 36 | if (msgid === "") return; 37 | var msgstr = data[msgid][1]; 38 | return " " + JSON.stringify(msgid) + ": " + JSON.stringify(msgstr); 39 | }).join(",\n"); 40 | 41 | var output = "{\n" + bodyPart + "\n}"; 42 | 43 | fs.writeFileSync(opt.argv[1], output); 44 | -------------------------------------------------------------------------------- /apps/noVNC/tests/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "mocha": true 5 | }, 6 | "globals": { 7 | "chai": false, 8 | "sinon": false 9 | }, 10 | "rules": { 11 | "prefer-arrow-callback": 0 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/noVNC/tests/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/tests/fake.websocket.js: -------------------------------------------------------------------------------- 1 | // PhantomJS can't create Event objects directly, so we need to use this 2 | function make_event(name, props) { 3 | var evt = document.createEvent('Event'); 4 | evt.initEvent(name, true, true); 5 | if (props) { 6 | for (var prop in props) { 7 | evt[prop] = props[prop]; 8 | } 9 | } 10 | return evt; 11 | } 12 | 13 | export default function FakeWebSocket (uri, protocols) { 14 | this.url = uri; 15 | this.binaryType = "arraybuffer"; 16 | this.extensions = ""; 17 | 18 | if (!protocols || typeof protocols === 'string') { 19 | this.protocol = protocols; 20 | } else { 21 | this.protocol = protocols[0]; 22 | } 23 | 24 | this._send_queue = new Uint8Array(20000); 25 | 26 | this.readyState = FakeWebSocket.CONNECTING; 27 | this.bufferedAmount = 0; 28 | 29 | this.__is_fake = true; 30 | }; 31 | 32 | FakeWebSocket.prototype = { 33 | close: function (code, reason) { 34 | this.readyState = FakeWebSocket.CLOSED; 35 | if (this.onclose) { 36 | this.onclose(make_event("close", { 'code': code, 'reason': reason, 'wasClean': true })); 37 | } 38 | }, 39 | 40 | send: function (data) { 41 | if (this.protocol == 'base64') { 42 | data = Base64.decode(data); 43 | } else { 44 | data = new Uint8Array(data); 45 | } 46 | this._send_queue.set(data, this.bufferedAmount); 47 | this.bufferedAmount += data.length; 48 | }, 49 | 50 | _get_sent_data: function () { 51 | var res = new Uint8Array(this._send_queue.buffer, 0, this.bufferedAmount); 52 | this.bufferedAmount = 0; 53 | return res; 54 | }, 55 | 56 | _open: function (data) { 57 | this.readyState = FakeWebSocket.OPEN; 58 | if (this.onopen) { 59 | this.onopen(make_event('open')); 60 | } 61 | }, 62 | 63 | _receive_data: function (data) { 64 | this.onmessage(make_event("message", { 'data': data })); 65 | } 66 | }; 67 | 68 | FakeWebSocket.OPEN = WebSocket.OPEN; 69 | FakeWebSocket.CONNECTING = WebSocket.CONNECTING; 70 | FakeWebSocket.CLOSING = WebSocket.CLOSING; 71 | FakeWebSocket.CLOSED = WebSocket.CLOSED; 72 | 73 | FakeWebSocket.__is_fake = true; 74 | 75 | FakeWebSocket.replace = function () { 76 | if (!WebSocket.__is_fake) { 77 | var real_version = WebSocket; 78 | WebSocket = FakeWebSocket; 79 | FakeWebSocket.__real_version = real_version; 80 | } 81 | }; 82 | 83 | FakeWebSocket.restore = function () { 84 | if (WebSocket.__is_fake) { 85 | WebSocket = WebSocket.__real_version; 86 | } 87 | }; 88 | -------------------------------------------------------------------------------- /apps/noVNC/tests/karma-test-main.js: -------------------------------------------------------------------------------- 1 | var TEST_REGEXP = /test\..*\.js/; 2 | var allTestFiles = []; 3 | var extraFiles = ['/base/tests/assertions.js']; 4 | 5 | Object.keys(window.__karma__.files).forEach(function (file) { 6 | if (TEST_REGEXP.test(file)) { 7 | // TODO: normalize? 8 | allTestFiles.push(file); 9 | } 10 | }); 11 | 12 | require.config({ 13 | baseUrl: '/base', 14 | deps: allTestFiles.concat(extraFiles), 15 | callback: window.__karma__.start, 16 | }); 17 | -------------------------------------------------------------------------------- /apps/noVNC/tests/test.base64.js: -------------------------------------------------------------------------------- 1 | var assert = chai.assert; 2 | var expect = chai.expect; 3 | 4 | import Base64 from '../core/base64.js'; 5 | 6 | describe('Base64 Tools', function() { 7 | "use strict"; 8 | 9 | var BIN_ARR = new Array(256); 10 | for (var i = 0; i < 256; i++) { 11 | BIN_ARR[i] = i; 12 | } 13 | 14 | var B64_STR = "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=="; 15 | 16 | 17 | describe('encode', function() { 18 | it('should encode a binary string into Base64', function() { 19 | var encoded = Base64.encode(BIN_ARR); 20 | expect(encoded).to.equal(B64_STR); 21 | }); 22 | }); 23 | 24 | describe('decode', function() { 25 | it('should decode a Base64 string into a normal string', function() { 26 | var decoded = Base64.decode(B64_STR); 27 | expect(decoded).to.deep.equal(BIN_ARR); 28 | }); 29 | 30 | it('should throw an error if we have extra characters at the end of the string', function() { 31 | expect(function () { Base64.decode(B64_STR+'abcdef'); }).to.throw(Error); 32 | }); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /apps/noVNC/tests/test.localization.js: -------------------------------------------------------------------------------- 1 | var assert = chai.assert; 2 | var expect = chai.expect; 3 | 4 | import l10nGet, { l10n } from '../app/localization.js'; 5 | 6 | describe('Localization', function() { 7 | "use strict"; 8 | 9 | describe('language selection', function () { 10 | var origNavigator; 11 | beforeEach(function () { 12 | // window.navigator is a protected read-only property in many 13 | // environments, so we need to redefine it whilst running these 14 | // tests. 15 | origNavigator = Object.getOwnPropertyDescriptor(window, "navigator"); 16 | if (origNavigator === undefined) { 17 | // Object.getOwnPropertyDescriptor() doesn't work 18 | // properly in any version of IE 19 | this.skip(); 20 | } 21 | 22 | Object.defineProperty(window, "navigator", {value: {}}); 23 | if (window.navigator.languages !== undefined) { 24 | // Object.defineProperty() doesn't work properly in old 25 | // versions of Chrome 26 | this.skip(); 27 | } 28 | 29 | window.navigator.languages = []; 30 | }); 31 | afterEach(function () { 32 | Object.defineProperty(window, "navigator", origNavigator); 33 | }); 34 | 35 | it('should use English by default', function() { 36 | expect(l10n.language).to.equal('en'); 37 | }); 38 | it('should use English if no user language matches', function() { 39 | window.navigator.languages = ["nl", "de"]; 40 | l10n.setup(["es", "fr"]); 41 | expect(l10n.language).to.equal('en'); 42 | }); 43 | it('should use the most preferred user language', function() { 44 | window.navigator.languages = ["nl", "de", "fr"]; 45 | l10n.setup(["es", "fr", "de"]); 46 | expect(l10n.language).to.equal('de'); 47 | }); 48 | it('should prefer sub-languages languages', function() { 49 | window.navigator.languages = ["pt-BR"]; 50 | l10n.setup(["pt", "pt-BR"]); 51 | expect(l10n.language).to.equal('pt-BR'); 52 | }); 53 | it('should fall back to language "parents"', function() { 54 | window.navigator.languages = ["pt-BR"]; 55 | l10n.setup(["fr", "pt", "de"]); 56 | expect(l10n.language).to.equal('pt'); 57 | }); 58 | it('should not use specific language when user asks for a generic language', function() { 59 | window.navigator.languages = ["pt", "de"]; 60 | l10n.setup(["fr", "pt-BR", "de"]); 61 | expect(l10n.language).to.equal('de'); 62 | }); 63 | it('should handle underscore as a separator', function() { 64 | window.navigator.languages = ["pt-BR"]; 65 | l10n.setup(["pt_BR"]); 66 | expect(l10n.language).to.equal('pt_BR'); 67 | }); 68 | it('should handle difference in case', function() { 69 | window.navigator.languages = ["pt-br"]; 70 | l10n.setup(["pt-BR"]); 71 | expect(l10n.language).to.equal('pt-BR'); 72 | }); 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /apps/noVNC/tests/test.util.js: -------------------------------------------------------------------------------- 1 | var assert = chai.assert; 2 | var expect = chai.expect; 3 | 4 | import * as Log from '../core/util/logging.js'; 5 | 6 | import sinon from '../vendor/sinon.js'; 7 | 8 | describe('Utils', function() { 9 | "use strict"; 10 | 11 | describe('logging functions', function () { 12 | beforeEach(function () { 13 | sinon.spy(console, 'log'); 14 | sinon.spy(console, 'debug'); 15 | sinon.spy(console, 'warn'); 16 | sinon.spy(console, 'error'); 17 | sinon.spy(console, 'info'); 18 | }); 19 | 20 | afterEach(function () { 21 | console.log.restore(); 22 | console.debug.restore(); 23 | console.warn.restore(); 24 | console.error.restore(); 25 | console.info.restore(); 26 | Log.init_logging(); 27 | }); 28 | 29 | it('should use noop for levels lower than the min level', function () { 30 | Log.init_logging('warn'); 31 | Log.Debug('hi'); 32 | Log.Info('hello'); 33 | expect(console.log).to.not.have.been.called; 34 | }); 35 | 36 | it('should use console.debug for Debug', function () { 37 | Log.init_logging('debug'); 38 | Log.Debug('dbg'); 39 | expect(console.debug).to.have.been.calledWith('dbg'); 40 | }); 41 | 42 | it('should use console.info for Info', function () { 43 | Log.init_logging('debug'); 44 | Log.Info('inf'); 45 | expect(console.info).to.have.been.calledWith('inf'); 46 | }); 47 | 48 | it('should use console.warn for Warn', function () { 49 | Log.init_logging('warn'); 50 | Log.Warn('wrn'); 51 | expect(console.warn).to.have.been.called; 52 | expect(console.warn).to.have.been.calledWith('wrn'); 53 | }); 54 | 55 | it('should use console.error for Error', function () { 56 | Log.init_logging('error'); 57 | Log.Error('err'); 58 | expect(console.error).to.have.been.called; 59 | expect(console.error).to.have.been.calledWith('err'); 60 | }); 61 | }); 62 | 63 | // TODO(directxman12): test the conf_default and conf_defaults methods 64 | // TODO(directxman12): test decodeUTF8 65 | // TODO(directxman12): test the event methods (addEvent, removeEvent, stopEvent) 66 | // TODO(directxman12): figure out a good way to test getPosition and getEventPosition 67 | // TODO(directxman12): figure out how to test the browser detection functions properly 68 | // (we can't really test them against the browsers, except for Gecko 69 | // via PhantomJS, the default test driver) 70 | }); 71 | -------------------------------------------------------------------------------- /apps/noVNC/tests/vnc_playback.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | VNC Playback 5 | 6 | 7 | 8 | 9 | 10 | Iterations:   11 | Perftest:  12 | Realtime:   13 | 14 |   15 | 16 |

17 | 18 | Results:
19 | 20 | 21 |

22 | 23 |
24 |
25 | 26 | 27 |
Loading
28 |
29 |
30 | 31 | 32 | 33 | 37 | 38 | `; 13 | }, 14 | noCopyOverride: () => {}, 15 | }, 16 | 'commonjs': { 17 | optionsOverride: (opts) => { 18 | // CommonJS supports properly shifting the default export to work as normal 19 | opts.plugins.unshift("add-module-exports"); 20 | }, 21 | appWriter: (base_out_path, out_path) => { 22 | var browserify = require('browserify'); 23 | var b = browserify(path.join(base_out_path, 'app/ui.js'), {}); 24 | b.bundle().pipe(fs.createWriteStream(out_path)); 25 | return ``; 26 | }, 27 | noCopyOverride: () => {}, 28 | }, 29 | 'systemjs': { 30 | appWriter: (base_out_path, out_path) => { 31 | fs.writeFile(out_path, 'SystemJS.import("./app/ui.js");', (err) => { if (err) throw err; }); 32 | console.log(`Please place SystemJS in ${path.join(base_out_path, 'system-production.js')}`); 33 | return ` 34 | \n`; 35 | }, 36 | noCopyOverride: (paths, no_copy_files) => { 37 | no_copy_files.delete(path.join(paths.vendor, 'promise.js')); 38 | }, 39 | }, 40 | 'umd': { 41 | optionsOverride: (opts) => { 42 | // umd supports properly shifting the default export to work as normal 43 | opts.plugins.unshift("add-module-exports"); 44 | }, 45 | }, 46 | } 47 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.o 3 | *.so 4 | other/.lein-deps-sum 5 | other/classes 6 | other/lib 7 | other/js/node_modules 8 | .project 9 | .pydevproject 10 | target.cfg 11 | target.cfg.d 12 | .tox 13 | *.egg-info 14 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/.gitmodules -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - 2.6 4 | - 2.7 5 | - 3.3 6 | - 3.4 7 | 8 | install: pip install -r test-requirements.txt 9 | 10 | script: python setup.py nosetests --verbosity=3 11 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/CHANGES.txt: -------------------------------------------------------------------------------- 1 | Changes 2 | ======= 3 | 4 | 0.8.0 5 | ----- 6 | 7 | * Make websockify properly terminate children on SIGTERM (#226) 8 | * Remove logging in signal handlers (this can cause Python to hang under certain conditions) (#219) 9 | * Make it easier to log to a file (#205) 10 | * Add support for IPv6 addresses in tokens in the TokenFile token plugins (#197) 11 | * Improve auth plugin framework to enable better support for HTTP auth (#194, #201) 12 | * Fix bug in JSONTokenAPI token plugin (#192) 13 | * Fix a missing variable in the exception handler (#178) 14 | 15 | 0.7.0 16 | ----- 17 | 18 | * Python 3 support fixes (#140, #155, #159) 19 | * Generic token-parsing plugins support (#162) 20 | * Generic authentication plugins support (#172) 21 | * Fixed frame corruption on big-endian systems (#161) 22 | * Support heartbeats (via PING) and automatic responses to PONG (#169) 23 | * Automatically reject unmasked client frames by default (strict mode) (#174) 24 | * Automatically restart interrupted select calls (#175) 25 | * Make 'run' respect environment settings (including virtualenv) (#176) 26 | 27 | 0.6.1 - May 11, 2015 28 | -------------------- 29 | 30 | * **PATCH RELEASE**: Fixes a bug causing file_only to not be passed properly 31 | 32 | 0.6.0 - Feb 18, 2014 33 | -------------------- 34 | 35 | * **NOTE** : 0.6.0 will break existing code that sub-classes WebsocketProxy 36 | * Refactor to use standard SocketServer RequestHandler design 37 | * Fix zombie process bug on certain systems when using multiprocessing 38 | * Add better unit tests 39 | * Log information via python `logging` module 40 | 41 | 0.5.1 - Jun 27, 2013 42 | -------------------- 43 | 44 | * use upstream einaros/ws (>=0.4.27) with websockify.js 45 | * file_only and no_parent security options for WSRequestHandler 46 | * Update build of web-socket-js (c0855c6cae) 47 | * add include/web-socket-js-project submodule to gimite/web-socket-js 48 | for DSFG compliance. 49 | * drop Hixie protocol support 50 | 51 | 0.4.1 - Mar 12, 2013 52 | -------------------- 53 | 54 | * ***NOTE*** : 0.5.0 will drop Hixie protocol support 55 | * add include/ directory and remove some dev files from source 56 | distribution. 57 | 58 | 0.4.0 - Mar 12, 2013 59 | -------------------- 60 | 61 | * ***NOTE*** : 0.5.0 will drop Hixie protocol support 62 | * use Buffer base64 support in Node.js implementation 63 | 64 | 0.3.0 - Jan 15, 2013 65 | -------------------- 66 | 67 | * refactor into modules: websocket, websocketproxy 68 | * switch to web-socket-js that uses IETF 6455 69 | * change to MPL 2.0 license for include/*.js 70 | * fix session recording 71 | 72 | 0.2.1 - Oct 15, 2012 73 | -------------------- 74 | 75 | * re-released with updated version number 76 | 77 | 0.2.0 - Sep 17, 2012 78 | -------------------- 79 | 80 | * Binary data support in websock.js 81 | * Target config file/dir and multiple targets with token selector 82 | * IPv6 fixes 83 | * SSL target support 84 | * Proxy to/from unix socket 85 | 86 | 87 | 0.1.0 - May 11, 2012 88 | -------------------- 89 | 90 | * Initial versioned release. 91 | 92 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/LICENSE.txt: -------------------------------------------------------------------------------- 1 | websockify is licensed under the LGPL version 3 (see docs/LICENSE.GPL-3 and 2 | docs/LICENSE.LGPL-3) with the following exceptions: 3 | 4 | include/websock.js : MPL 2.0 5 | 6 | include/des.js : Various BSD style licenses 7 | 8 | include/web-socket-js/ : New BSD license (3-clause). Source code at 9 | https://github.com/gimite/web-socket-js 10 | 11 | other/kumina.c : Simplified BSD license (2 clause). 12 | Original source at 13 | https://github.com/kumina/wsproxy 14 | 15 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include CHANGES.txt README.md LICENSE.txt 2 | graft include 3 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Makefile: -------------------------------------------------------------------------------- 1 | TARGETS=rebind.so 2 | CFLAGS += -fPIC 3 | 4 | all: $(TARGETS) 5 | 6 | rebind.so: rebind.o 7 | $(CC) $(LDFLAGS) $^ -shared -fPIC -ldl -o $@ 8 | 9 | clean: 10 | rm -f rebind.o rebind.so 11 | 12 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/Windows Service Readme.txt: -------------------------------------------------------------------------------- 1 | ----------------------------------- 2 | Windows noVNC Websockify Service 3 | ----------------------------------- 4 | 5 | The "noVNC Websocket Service.exe" file is a windows service wrapper created with Visual Studio 2010 to create a windows service to start stop the noVNC Websocket Server. All files used to create the wrapper can be found in 'noVNC Websocket Service Project' folder. 6 | 7 | To download the precompiled executables please grab the zip in the downloads section of websockify project: 8 | https://github.com/kanaka/websockify 9 | 10 | --------------------------- 11 | Installation 12 | --------------------------- 13 | 14 | 1. This service requires websockify.exe be in the same directory. Instructions on how to compile websockify python script as a windows executable can be found here: 15 | https://github.com/kanaka/websockify/wiki/Compiling-Websockify-as-Windows-Executable 16 | 17 | 2.To add this service to a Windows PC you need to run the commandline as administrator and then run this line: 18 | 19 | sc create "noVNC Websocket Server" binPath= "PATH TO noVNC eg C:\noVNC\utils\Windows\Websocket Service.exe" DisplayName= "noVNC Websocket Server" 20 | 21 | 3 .Once this is run you will be able to access the service via Control Panel > Admin Tools > Services. In here you can specify whether you want the service to run automatically and start at stop the service. 22 | 23 | --------------------------- 24 | Configuration 25 | --------------------------- 26 | The file noVNCConfig.ini must be in the same directory as "noVNC Websocket Service.exe". 27 | 28 | This file contains a single line which is the websockify.exe statup arguements. An example is: 29 | 192.168.0.1:5901 192.168.0.1:5900 30 | 31 | All websockify supported arguements will work if added here. 32 | 33 | --------------------------- 34 | Deletion 35 | --------------------------- 36 | 37 | You can delete the service at any time by running the commandline as admin and using this command: 38 | sc delete "noVNC Websocket Server". 39 | 40 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.ServiceProcess; 5 | using System.Text; 6 | 7 | namespace MELT_Command_Websocket 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | static void Main() 15 | { 16 | ServiceBase[] ServicesToRun; 17 | ServicesToRun = new ServiceBase[] 18 | { 19 | new Service1() 20 | }; 21 | ServiceBase.Run(ServicesToRun); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace MELT_Command_Websocket 2 | { 3 | partial class ProjectInstaller 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); 32 | this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller(); 33 | // 34 | // serviceProcessInstaller1 35 | // 36 | this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.NetworkService; 37 | this.serviceProcessInstaller1.Installers.AddRange(new System.Configuration.Install.Installer[] { 38 | this.serviceInstaller1}); 39 | this.serviceProcessInstaller1.Password = null; 40 | this.serviceProcessInstaller1.Username = null; 41 | // 42 | // serviceInstaller1 43 | // 44 | this.serviceInstaller1.Description = "noVNC Websocket Service"; 45 | this.serviceInstaller1.DisplayName = "noVNC Websocket Service"; 46 | this.serviceInstaller1.ServiceName = "noVNC Websocket Service"; 47 | this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic; 48 | // 49 | // ProjectInstaller 50 | // 51 | this.Installers.AddRange(new System.Configuration.Install.Installer[] { 52 | this.serviceProcessInstaller1}); 53 | 54 | } 55 | 56 | #endregion 57 | 58 | private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; 59 | private System.ServiceProcess.ServiceInstaller serviceInstaller1; 60 | } 61 | } -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Configuration.Install; 6 | using System.Linq; 7 | 8 | 9 | namespace MELT_Command_Websocket 10 | { 11 | [RunInstaller(true)] 12 | public partial class ProjectInstaller : System.Configuration.Install.Installer 13 | { 14 | public ProjectInstaller() 15 | { 16 | InitializeComponent(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MELT Command Websocket")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Microsoft")] 12 | [assembly: AssemblyProduct("MELT Command Websocket")] 13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2011")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5ab831cb-6852-4ce1-849c-b26725b0e10b")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/Properties/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/Service1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace MELT_Command_Websocket 2 | { 3 | partial class Service1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | components = new System.ComponentModel.Container(); 32 | this.ServiceName = "Service1"; 33 | } 34 | 35 | #endregion 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/Service1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Diagnostics; 6 | using System.Linq; 7 | using System.ServiceProcess; 8 | using System.Text; 9 | using System.IO; 10 | 11 | namespace MELT_Command_Websocket 12 | { 13 | public partial class Service1 : ServiceBase 14 | { 15 | Process websockify; 16 | public Service1() 17 | { 18 | InitializeComponent(); 19 | } 20 | 21 | protected override void OnStart(string[] args) 22 | { 23 | 24 | string configpath = AppDomain.CurrentDomain.BaseDirectory + "\\noVNCConfig.ini"; 25 | string sockifypath = AppDomain.CurrentDomain.BaseDirectory + "\\websockify.exe"; 26 | //Load commandline arguements from config file. 27 | StreamReader streamReader = new StreamReader(configpath); 28 | string arguements = streamReader.ReadLine(); 29 | streamReader.Close(); 30 | 31 | //Start websockify. 32 | websockify = System.Diagnostics.Process.Start(sockifypath, arguements); 33 | } 34 | 35 | protected override void OnStop() 36 | { 37 | //Service stopped. Close websockify. 38 | websockify.Kill(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "noVNC Websocket", "noVNC Websocket.csproj", "{6B86AE7B-6BBD-4E74-8802-5995E8B6D27D}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|x86 = Debug|x86 9 | Release|x86 = Release|x86 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {6B86AE7B-6BBD-4E74-8802-5995E8B6D27D}.Debug|x86.ActiveCfg = Debug|x86 13 | {6B86AE7B-6BBD-4E74-8802-5995E8B6D27D}.Debug|x86.Build.0 = Debug|x86 14 | {6B86AE7B-6BBD-4E74-8802-5995E8B6D27D}.Release|x86.ActiveCfg = Release|x86 15 | {6B86AE7B-6BBD-4E74-8802-5995E8B6D27D}.Release|x86.Build.0 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/docs/TODO: -------------------------------------------------------------------------------- 1 | - Go implementation 2 | - Rust implementation 3 | - Add sub-protocol support to upstream einaros/ws module and use that 4 | instead of the patched module. 5 | - wstelnet: support CSI L and CSI M 6 | 7 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/docs/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/docs/flash_policy.txt: -------------------------------------------------------------------------------- 1 | Manual setup: 2 | 3 | DATA="echo \'\'" 4 | /usr/bin/socat -T 1 TCP-L:843,reuseaddr,fork,crlf SYSTEM:"$DATA" 5 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/docs/notes: -------------------------------------------------------------------------------- 1 | Building release tarball: 2 | - not really necessary since tagged revision can be downloaded 3 | from github as tarballs 4 | 5 | git archive --format=tar --prefix=websockify-${WVER}/ v${WVER} > websockify-${WVER}.tar 6 | gzip websockify-${WVER}.tar 7 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/docs/release.txt: -------------------------------------------------------------------------------- 1 | - Update setup.py, CHANGES.txt and other/package.json and commit 2 | - Create version tag and tarball from tag 3 | WVER=0.1.0 4 | git tag v${WVER} 5 | git push origin master 6 | git push origin v${WVER} 7 | - Register with pypi.python.org (once): 8 | python setup.py register 9 | - Upload the source distribution to pypi 10 | python setup.py sdist upload 11 | - Register with npmjs.org (once) 12 | - Upload websockify.js npmjs.org package 13 | npm publish other/js 14 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/include/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/Makefile: -------------------------------------------------------------------------------- 1 | TARGETS=websockify 2 | CFLAGS += -fPIC 3 | 4 | all: $(TARGETS) 5 | 6 | websockify: websockify.o websocket.o 7 | $(CC) $(LDFLAGS) $^ -lssl -lcrypto -o $@ 8 | 9 | websocket.o: websocket.c websocket.h 10 | websockify.o: websockify.c websocket.h 11 | 12 | clean: 13 | rm -f websockify *.o 14 | 15 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/README.md: -------------------------------------------------------------------------------- 1 | This directory contain alternate implementations of 2 | WebSockets-to-TCP-Socket proxies (for noVNC). 3 | 4 | ## websockify.c (C) 5 | 6 | ### Description 7 | 8 | This is a C version of the original websockify. It is more limited in 9 | functionality than the original. 10 | 11 | 12 | ## websockify.js 13 | 14 | ### Description 15 | 16 | This is a Node.JS (server-side event driven Javascript) implementation 17 | of websockify. 18 | 19 | 20 | ## kumina.c (C) 21 | 22 | ### Description 23 | 24 | The upstream source of the kumina proxy is [here](https://github.com/kumina/wsproxy). 25 | 26 | [This article](http://blog.kumina.nl/2011/06/proxying-and-multiplexing-novnc-using-wsproxy/) 27 | describes the kumina proxy. 28 | 29 | kumina is an application that is run from inetd, which allows noVNC 30 | to connect to an unmodified VNC server. Furthermore, it makes use of 31 | the recently added support in noVNC for file names. The file name is 32 | used to denote the port number. Say, you connect to: 33 | 34 | ws://host:41337/25900 35 | 36 | The kumina proxy opens a connection to: 37 | 38 | vnc://host:25900/ 39 | 40 | The address to which kumina connects, is the same as the address to 41 | which the client connected (using getsockname()). 42 | 43 | ### Configuration 44 | 45 | kumina can be enabled by adding the following line to inetd.conf: 46 | 47 | 41337 stream tcp nowait nobody /usr/sbin/kumina kumina 25900 25909 48 | 49 | The two parameters of kumina denote the minimum and the maximum allowed 50 | port numbers. This allows a single kumina instance to multiplex 51 | connections to multiple VNC servers. 52 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/js/README.md: -------------------------------------------------------------------------------- 1 | A JavaScript implementation of the websockify WebSocket-to-TCP bridge/proxy. 2 | 3 | Copyright (C) 2013 - Joel Martin (github.com/kanaka) 4 | 5 | Licensed under LGPL-3. 6 | 7 | See http://github.com/kanaka/websockify for more info. 8 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/js/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Joel Martin (http://github.com/kanaka)", 3 | "name": "websockify", 4 | "description": "websockify is a WebSocket-to-TCP proxy/bridge", 5 | "license": "LGPL-3.0", 6 | "version": "0.8.0", 7 | "repository": { 8 | "type": "git", 9 | "url": "git://github.com/kanaka/websockify.git" 10 | }, 11 | "files": ["../../docs/LICENSE.LGPL-3","websockify.js"], 12 | "bin": { 13 | "websockify": "./websockify.js" 14 | }, 15 | "engines": { 16 | "node": ">=0.8.9" 17 | }, 18 | "dependencies": { 19 | "ws": ">=0.4.27", 20 | "optimist": "latest", 21 | "mime-types" : "latest", 22 | "policyfile": "latest" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/project.clj: -------------------------------------------------------------------------------- 1 | (defproject websockify "1.0.0-SNAPSHOT" 2 | :description "Clojure implementation of Websockify" 3 | :url "https://github.com/kanaka/websockify" 4 | :dependencies [[org.clojure/clojure "1.2.1"] 5 | [org.clojure/tools.cli "0.2.1"] 6 | [ring/ring-jetty-adapter "1.0.0-beta2"] 7 | [org.eclipse.jetty/jetty-websocket "7.5.4.v20111024"] 8 | [org.eclipse.jetty/jetty-server "7.5.4.v20111024"] 9 | [org.eclipse.jetty/jetty-servlet "7.5.4.v20111024"] 10 | [org.jboss.netty/netty "3.2.5.Final"]] 11 | ;:dev-dependencies [[swank-clojure "1.3.0-SNAPSHOT"]] 12 | :main websockify 13 | ) 14 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/other/wswrap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | usage() { 4 | echo "Usage: $(basename $0) PORT CMDLINE" 5 | echo 6 | echo " PORT Port to wrap with WebSockets support" 7 | echo " CMDLINE Command line to wrap" 8 | exit 2 9 | } 10 | 11 | # Parameter defaults 12 | mydir=$(readlink -f $(dirname ${0})) 13 | 14 | # Process parameters 15 | #while [ "${1}" != "${1#-}" ]; do 16 | # param=$1; shift 17 | #done 18 | 19 | export WSWRAP_PORT="${1}"; shift 20 | 21 | LD_PRELOAD=${mydir}/wswrapper.so "${@}" 22 | 23 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/rebind: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | usage() { 4 | echo "Usage: $(basename $0) OLD_PORT NEW_PORT COMMAND_LINE" 5 | echo 6 | echo "Launch COMMAND_LINE, but intercept system calls to bind" 7 | echo "to OLD_PORT and instead bind them to localhost:NEW_PORT" 8 | exit 2 9 | } 10 | 11 | # Parameter defaults 12 | mydir=$(readlink -f $(dirname ${0})) 13 | 14 | export REBIND_PORT_OLD="${1}"; shift 15 | export REBIND_PORT_NEW="${1}"; shift 16 | 17 | LD_PRELOAD=${mydir}/rebind.so "${@}" 18 | 19 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import websockify 4 | 5 | websockify.websocketproxy.websockify_init() 6 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | version = '0.8.0' 4 | name = 'websockify' 5 | long_description = open("README.md").read() + "\n" + \ 6 | open("CHANGES.txt").read() + "\n" 7 | 8 | setup(name=name, 9 | version=version, 10 | description="Websockify.", 11 | long_description=long_description, 12 | classifiers=[ 13 | "Programming Language :: Python", 14 | "Programming Language :: Python :: 2", 15 | "Programming Language :: Python :: 2.6", 16 | "Programming Language :: Python :: 2.7", 17 | "Programming Language :: Python :: 3", 18 | "Programming Language :: Python :: 3.3", 19 | "Programming Language :: Python :: 3.4" 20 | ], 21 | data_files=[('share/websockify/include', 22 | ['include/util.js', 23 | 'include/websock.js'])], 24 | keywords='noVNC websockify', 25 | license='LGPLv3', 26 | url="https://github.com/kanaka/websockify", 27 | author="Joel Martin", 28 | author_email="github@martintribe.org", 29 | 30 | packages=['websockify'], 31 | include_package_data=True, 32 | install_requires=['numpy'], 33 | zip_safe=False, 34 | entry_points={ 35 | 'console_scripts': [ 36 | 'websockify = websockify.websocketproxy:websockify_init', 37 | ] 38 | }, 39 | ) 40 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/test-requirements.txt: -------------------------------------------------------------------------------- 1 | mox3 2 | nose 3 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/echo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | A WebSocket server that echos back whatever it receives from the client. 5 | Copyright 2010 Joel Martin 6 | Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3) 7 | 8 | You can make a cert/key with openssl using: 9 | openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem 10 | as taken from http://docs.python.org/dev/library/ssl.html#certificates 11 | ''' 12 | 13 | import os, sys, select, optparse, logging 14 | sys.path.insert(0,os.path.join(os.path.dirname(__file__), "..")) 15 | from websockify.websockifyserver import WebSockifyServer, WebSockifyRequestHandler 16 | 17 | class WebSocketEcho(WebSockifyRequestHandler): 18 | """ 19 | WebSockets server that echos back whatever is received from the 20 | client. """ 21 | buffer_size = 8096 22 | 23 | def new_websocket_client(self): 24 | """ 25 | Echo back whatever is received. 26 | """ 27 | 28 | cqueue = [] 29 | c_pend = 0 30 | cpartial = "" 31 | rlist = [self.request] 32 | 33 | while True: 34 | wlist = [] 35 | 36 | if cqueue or c_pend: wlist.append(self.request) 37 | ins, outs, excepts = select.select(rlist, wlist, [], 1) 38 | if excepts: raise Exception("Socket exception") 39 | 40 | if self.request in outs: 41 | # Send queued target data to the client 42 | c_pend = self.send_frames(cqueue) 43 | cqueue = [] 44 | 45 | if self.request in ins: 46 | # Receive client data, decode it, and send it back 47 | frames, closed = self.recv_frames() 48 | cqueue.extend(frames) 49 | 50 | if closed: 51 | break 52 | 53 | if __name__ == '__main__': 54 | parser = optparse.OptionParser(usage="%prog [options] listen_port") 55 | parser.add_option("--verbose", "-v", action="store_true", 56 | help="verbose messages and per frame traffic") 57 | parser.add_option("--cert", default="self.pem", 58 | help="SSL certificate file") 59 | parser.add_option("--key", default=None, 60 | help="SSL key file (if separate from cert)") 61 | parser.add_option("--ssl-only", action="store_true", 62 | help="disallow non-encrypted connections") 63 | (opts, args) = parser.parse_args() 64 | 65 | try: 66 | if len(args) != 1: raise ValueError 67 | opts.listen_port = int(args[0]) 68 | except ValueError: 69 | parser.error("Invalid arguments") 70 | 71 | logging.basicConfig(level=logging.INFO) 72 | 73 | opts.web = "." 74 | server = WebSockifyServer(WebSocketEcho, **opts.__dict__) 75 | server.start_server() 76 | 77 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/echo.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # A WebSocket server that echos back whatever it receives from the client. 4 | # Copyright 2011 Joel Martin 5 | # Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3) 6 | 7 | require 'socket' 8 | $: << "other" 9 | $: << "../other" 10 | require 'websocket' 11 | 12 | class WebSocketEcho < WebSocketServer 13 | 14 | # Echo back whatever is received 15 | def new_websocket_client(client) 16 | 17 | cqueue = [] 18 | c_pend = 0 19 | rlist = [client] 20 | 21 | loop do 22 | wlist = [] 23 | 24 | if cqueue.length > 0 or c_pend 25 | wlist << client 26 | end 27 | 28 | ins, outs, excepts = IO.select(rlist, wlist, nil, 1) 29 | if excepts.length > 0 30 | raise Exception, "Socket exception" 31 | end 32 | 33 | if outs.include?(client) 34 | # Send queued data to the client 35 | c_pend = send_frames(cqueue) 36 | cqueue = [] 37 | end 38 | 39 | if ins.include?(client) 40 | # Receive client data, decode it, and send it back 41 | frames, closed = recv_frames 42 | cqueue += frames 43 | 44 | if closed 45 | raise EClose, closed 46 | end 47 | end 48 | 49 | end # loop 50 | end 51 | end 52 | 53 | port = ARGV[0].to_i || 8080 54 | puts "Starting server on port #{port}" 55 | server_cert = nil 56 | server_key = nil 57 | if ARGV.length > 2 58 | server_cert = ARGV[1] 59 | server_key = ARGV[2] 60 | end 61 | 62 | server = WebSocketEcho.new('listen_port' => port, 'verbose' => true, 63 | 'server_cert' => server_cert, 'server_key' => server_key) 64 | server.start 65 | server.join 66 | 67 | puts "Server has been terminated" 68 | 69 | # vim: sw=2 70 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/echo_client.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | import sys 5 | import optparse 6 | import select 7 | 8 | sys.path.insert(0,os.path.join(os.path.dirname(__file__), "..")) 9 | from websockify.websocket import WebSocket, \ 10 | WebSocketWantReadError, WebSocketWantWriteError 11 | 12 | parser = optparse.OptionParser(usage="%prog URL") 13 | (opts, args) = parser.parse_args() 14 | 15 | if len(args) == 1: 16 | URL = args[0] 17 | else: 18 | parser.error("Invalid arguments") 19 | 20 | sock = WebSocket() 21 | print("Connecting to %s..." % URL) 22 | sock.connect(URL) 23 | print("Connected.") 24 | 25 | def send(msg): 26 | while True: 27 | try: 28 | sock.sendmsg(msg) 29 | break 30 | except WebSocketWantReadError: 31 | msg = '' 32 | ins, outs, excepts = select.select([sock], [], []) 33 | if excepts: raise Exception("Socket exception") 34 | except WebSocketWantWriteError: 35 | msg = '' 36 | ins, outs, excepts = select.select([], [sock], []) 37 | if excepts: raise Exception("Socket exception") 38 | 39 | def read(): 40 | while True: 41 | try: 42 | return sock.recvmsg() 43 | except WebSocketWantReadError: 44 | ins, outs, excepts = select.select([sock], [], []) 45 | if excepts: raise Exception("Socket exception") 46 | except WebSocketWantWriteError: 47 | ins, outs, excepts = select.select([], [sock], []) 48 | if excepts: raise Exception("Socket exception") 49 | 50 | counter = 1 51 | while True: 52 | msg = "Message #%d" % counter 53 | counter += 1 54 | send(msg) 55 | print("Sent message: %r" % msg) 56 | 57 | while True: 58 | ins, outs, excepts = select.select([sock], [], [], 1.0) 59 | if excepts: raise Exception("Socket exception") 60 | 61 | if ins == []: 62 | break 63 | 64 | while True: 65 | msg = read() 66 | print("Received message: %r" % msg) 67 | 68 | if not sock.pending(): 69 | break 70 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/include/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/latency.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | A WebSocket server that echos back whatever it receives from the client. 5 | Copyright 2010 Joel Martin 6 | Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3) 7 | 8 | You can make a cert/key with openssl using: 9 | openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem 10 | as taken from http://docs.python.org/dev/library/ssl.html#certificates 11 | ''' 12 | 13 | import os, sys, select, optparse, logging 14 | sys.path.insert(0,os.path.join(os.path.dirname(__file__), "..")) 15 | from websockify.websockifyserver import WebSockifyServer, WebSockifyRequestHandler 16 | 17 | class WebSocketEcho(WebSockifyRequestHandler): 18 | """ 19 | WebSockets server that echos back whatever is received from the 20 | client. """ 21 | buffer_size = 8096 22 | 23 | def new_websocket_client(self): 24 | """ 25 | Echo back whatever is received. 26 | """ 27 | 28 | cqueue = [] 29 | c_pend = 0 30 | cpartial = "" 31 | rlist = [self.request] 32 | 33 | while True: 34 | wlist = [] 35 | 36 | if cqueue or c_pend: wlist.append(self.request) 37 | ins, outs, excepts = select.select(rlist, wlist, [], 1) 38 | if excepts: raise Exception("Socket exception") 39 | 40 | if self.request in outs: 41 | # Send queued target data to the client 42 | c_pend = self.send_frames(cqueue) 43 | cqueue = [] 44 | 45 | if self.request in ins: 46 | # Receive client data, decode it, and send it back 47 | frames, closed = self.recv_frames() 48 | cqueue.extend(frames) 49 | 50 | if closed: 51 | break 52 | 53 | if __name__ == '__main__': 54 | parser = optparse.OptionParser(usage="%prog [options] listen_port") 55 | parser.add_option("--verbose", "-v", action="store_true", 56 | help="verbose messages and per frame traffic") 57 | parser.add_option("--cert", default="self.pem", 58 | help="SSL certificate file") 59 | parser.add_option("--key", default=None, 60 | help="SSL key file (if separate from cert)") 61 | parser.add_option("--ssl-only", action="store_true", 62 | help="disallow non-encrypted connections") 63 | (opts, args) = parser.parse_args() 64 | 65 | try: 66 | if len(args) != 1: raise ValueError 67 | opts.listen_port = int(args[0]) 68 | except ValueError: 69 | parser.error("Invalid arguments") 70 | 71 | logging.basicConfig(level=logging.INFO) 72 | 73 | opts.web = "." 74 | server = WebSockifyServer(WebSocketEcho, **opts.__dict__) 75 | server.start_server() 76 | 77 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/simple.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Websock Simple Client 5 | 6 | 7 | 8 | 9 | 10 | WebSocket/websockify URI:   11 | 13 |

14 |   15 |   17 |

18 | Log:
19 | 20 | 21 | 22 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tests/test_auth_plugins.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | """ Unit tests for Authentication plugins""" 4 | 5 | from websockify.auth_plugins import BasicHTTPAuth, AuthenticationError 6 | import unittest 7 | 8 | 9 | class BasicHTTPAuthTestCase(unittest.TestCase): 10 | 11 | def setUp(self): 12 | self.plugin = BasicHTTPAuth('Aladdin:open sesame') 13 | 14 | def test_no_auth(self): 15 | headers = {} 16 | self.assertRaises(AuthenticationError, self.plugin.authenticate, headers, 'localhost', '1234') 17 | 18 | def test_invalid_password(self): 19 | headers = {'Authorization': 'Basic QWxhZGRpbjpzZXNhbWUgc3RyZWV0'} 20 | self.assertRaises(AuthenticationError, self.plugin.authenticate, headers, 'localhost', '1234') 21 | 22 | def test_valid_password(self): 23 | headers = {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='} 24 | self.plugin.authenticate(headers, 'localhost', '1234') 25 | 26 | def test_garbage_auth(self): 27 | headers = {'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx'} 28 | self.assertRaises(AuthenticationError, self.plugin.authenticate, headers, 'localhost', '1234') 29 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/tox.ini: -------------------------------------------------------------------------------- 1 | # Tox (http://tox.testrun.org/) is a tool for running tests 2 | # in multiple virtualenvs. This configuration file will run the 3 | # test suite on all supported python versions. To use it, "pip install tox" 4 | # and then run "tox" from this directory. 5 | 6 | [tox] 7 | envlist = py24,py26,py27,py33,py34 8 | 9 | [testenv] 10 | commands = nosetests {posargs} 11 | deps = -r{toxinidir}/test-requirements.txt 12 | 13 | # At some point we should enable this since tox expects it to exist but 14 | # the code will need pep8ising first. 15 | #[testenv:pep8] 16 | #commands = flake8 17 | #dep = flake8 18 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import websockify 4 | 5 | websockify.websocketproxy.websockify_init() 6 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/__init__.py: -------------------------------------------------------------------------------- 1 | from websockify.websocket import * 2 | from websockify.websocketproxy import * 3 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/__init__.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/_notes/dwsync.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/auth_plugins.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/auth_plugins.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/token_plugins.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | class BasePlugin(object): 5 | def __init__(self, src): 6 | self.source = src 7 | 8 | def lookup(self, token): 9 | return None 10 | 11 | 12 | class ReadOnlyTokenFile(BasePlugin): 13 | # source is a token file with lines like 14 | # token: host:port 15 | # or a directory of such files 16 | def __init__(self, *args, **kwargs): 17 | super(ReadOnlyTokenFile, self).__init__(*args, **kwargs) 18 | self._targets = None 19 | 20 | def _load_targets(self): 21 | if os.path.isdir(self.source): 22 | cfg_files = [os.path.join(self.source, f) for 23 | f in os.listdir(self.source)] 24 | else: 25 | cfg_files = [self.source] 26 | 27 | self._targets = {} 28 | index = 1 29 | for f in cfg_files: 30 | for line in [l.strip() for l in open(f).readlines()]: 31 | if line and not line.startswith('#'): 32 | try: 33 | tok, target = line.split(': ') 34 | self._targets[tok] = target.strip().rsplit(':', 1) 35 | except ValueError: 36 | print >>sys.stderr, "Syntax error in %s on line %d" % (self.source, index) 37 | index += 1 38 | 39 | def lookup(self, token): 40 | if self._targets is None: 41 | self._load_targets() 42 | 43 | if token in self._targets: 44 | return self._targets[token] 45 | else: 46 | return None 47 | 48 | 49 | # the above one is probably more efficient, but this one is 50 | # more backwards compatible (although in most cases 51 | # ReadOnlyTokenFile should suffice) 52 | class TokenFile(ReadOnlyTokenFile): 53 | # source is a token file with lines like 54 | # token: host:port 55 | # or a directory of such files 56 | def lookup(self, token): 57 | self._load_targets() 58 | 59 | return super(TokenFile, self).lookup(token) 60 | 61 | 62 | class BaseTokenAPI(BasePlugin): 63 | # source is a url with a '%s' in it where the token 64 | # should go 65 | 66 | # we import things on demand so that other plugins 67 | # in this file can be used w/o unecessary dependencies 68 | 69 | def process_result(self, resp): 70 | return resp.text.split(':') 71 | 72 | def lookup(self, token): 73 | import requests 74 | 75 | resp = requests.get(self.source % token) 76 | 77 | if resp.ok: 78 | return self.process_result(resp) 79 | else: 80 | return None 81 | 82 | 83 | class JSONTokenApi(BaseTokenAPI): 84 | # source is a url with a '%s' in it where the token 85 | # should go 86 | 87 | def process_result(self, resp): 88 | resp_json = resp.json() 89 | return (resp_json['host'], resp_json['port']) 90 | -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/token_plugins.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/token_plugins.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/websocket.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/websocket.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/websocketproxy.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/websocketproxy.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/websocketserver.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/websocketserver.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/websockify/websockifyserver.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/utils/websockify/websockify/websockifyserver.pyc -------------------------------------------------------------------------------- /apps/noVNC/utils/websockify/wstelnet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Telnet client using WebSockets 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Host:   23 | Port:   24 | Encrypt:   25 |   27 | 28 |

29 | 30 |

31 | 
32 |         
70 | 
71 |     
72 | 
73 | 
74 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 






--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/.npmignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VMDashboard/vmdashboard/fdd43ab76fc8cf4380237be06c83b8fc4cbccfd3/apps/noVNC/vendor/browser-es-module-loader/.npmignore


--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/README.md:
--------------------------------------------------------------------------------
 1 | Custom Browser ES Module Loader
 2 | ===============================
 3 | 
 4 | This is a module loader using babel and the ES Module Loader polyfill.
 5 | It's based heavily on
 6 | https://github.com/ModuleLoader/browser-es-module-loader, but uses
 7 | WebWorkers to compile the modules in the background.
 8 | 
 9 | To generate, run `rollup -c` in this directory, and then run `browserify
10 | src/babel-worker.js > dist/babel-worker.js`.
11 | 
12 | LICENSE
13 | -------
14 | 
15 | MIT
16 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 







--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/dist/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 







--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/rollup.config.js:
--------------------------------------------------------------------------------
 1 | import nodeResolve from 'rollup-plugin-node-resolve';
 2 | 
 3 | export default {
 4 |   entry: 'src/browser-es-module-loader.js',
 5 |   dest: 'dist/browser-es-module-loader.js',
 6 |   format: 'umd',
 7 |   moduleName: 'BrowserESModuleLoader',
 8 |   sourceMap: true,
 9 | 
10 |   plugins: [
11 |     nodeResolve(),
12 |   ],
13 | 
14 |   // skip rollup warnings (specifically the eval warning)
15 |   onwarn: function() {}
16 | };
17 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/src/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 






--------------------------------------------------------------------------------
/apps/noVNC/vendor/browser-es-module-loader/src/babel-worker.js:
--------------------------------------------------------------------------------
 1 | /*import { transform as babelTransform } from 'babel-core';
 2 | import babelTransformDynamicImport from 'babel-plugin-syntax-dynamic-import';
 3 | import babelTransformES2015ModulesSystemJS from 'babel-plugin-transform-es2015-modules-systemjs';*/
 4 | 
 5 | // sadly, due to how rollup works, we can't use es6 imports here
 6 | var babelTransform = require('babel-core').transform;
 7 | var babelTransformDynamicImport = require('babel-plugin-syntax-dynamic-import');
 8 | var babelTransformES2015ModulesSystemJS = require('babel-plugin-transform-es2015-modules-systemjs');
 9 | 
10 | self.onmessage = function (evt) {
11 |     // transform source with Babel
12 |     var output = babelTransform(evt.data.source, {
13 |       compact: false,
14 |       filename: evt.data.key + '!transpiled',
15 |       sourceFileName: evt.data.key,
16 |       moduleIds: false,
17 |       sourceMaps: 'inline',
18 |       babelrc: false,
19 |       plugins: [babelTransformDynamicImport, babelTransformES2015ModulesSystemJS],
20 |     });
21 | 
22 |     self.postMessage({key: evt.data.key, code: output.code, source: evt.data.source});
23 | };
24 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/LICENSE:
--------------------------------------------------------------------------------
 1 | (The MIT License)
 2 | 
 3 | Copyright (C) 2014-2016 by Vitaly Puzrin
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy
 6 | of this software and associated documentation files (the "Software"), to deal
 7 | in the Software without restriction, including without limitation the rights
 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/README.md:
--------------------------------------------------------------------------------
1 | This is an ES6-modules-compatible version of
2 | https://github.com/nodeca/pako, based on pako version 1.0.3.
3 | 
4 | It's more-or-less a direct translation of the original, with unused parts
5 | removed, and the dynamic support for non-typed arrays removed (since ES6
6 | modules don't work well with dynamic exports).
7 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 






--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/utils/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 





--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/utils/common.js:
--------------------------------------------------------------------------------
 1 | // reduce buffer size, avoiding mem copy
 2 | export function shrinkBuf (buf, size) {
 3 |   if (buf.length === size) { return buf; }
 4 |   if (buf.subarray) { return buf.subarray(0, size); }
 5 |   buf.length = size;
 6 |   return buf;
 7 | };
 8 | 
 9 | 
10 | export function arraySet (dest, src, src_offs, len, dest_offs) {
11 |   if (src.subarray && dest.subarray) {
12 |     dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
13 |     return;
14 |   }
15 |   // Fallback to ordinary array
16 |   for (var i = 0; i < len; i++) {
17 |     dest[dest_offs + i] = src[src_offs + i];
18 |   }
19 | }
20 | 
21 | // Join array of chunks to single array.
22 | export function flattenChunks (chunks) {
23 |   var i, l, len, pos, chunk, result;
24 | 
25 |   // calculate data length
26 |   len = 0;
27 |   for (i = 0, l = chunks.length; i < l; i++) {
28 |     len += chunks[i].length;
29 |   }
30 | 
31 |   // join chunks
32 |   result = new Uint8Array(len);
33 |   pos = 0;
34 |   for (i = 0, l = chunks.length; i < l; i++) {
35 |     chunk = chunks[i];
36 |     result.set(chunk, pos);
37 |     pos += chunk.length;
38 |   }
39 | 
40 |   return result;
41 | }
42 | 
43 | export var Buf8  = Uint8Array;
44 | export var Buf16 = Uint16Array;
45 | export var Buf32 = Int32Array;
46 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/_notes/dwsync.xml:
--------------------------------------------------------------------------------
1 | 















--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/adler32.js:
--------------------------------------------------------------------------------
 1 | // Note: adler32 takes 12% for level 0 and 2% for level 6.
 2 | // It doesn't worth to make additional optimizationa as in original.
 3 | // Small size is preferable.
 4 | 
 5 | export default function adler32(adler, buf, len, pos) {
 6 |   var s1 = (adler & 0xffff) |0,
 7 |       s2 = ((adler >>> 16) & 0xffff) |0,
 8 |       n = 0;
 9 | 
10 |   while (len !== 0) {
11 |     // Set limit ~ twice less than 5552, to keep
12 |     // s2 in 31-bits, because we force signed ints.
13 |     // in other case %= will fail.
14 |     n = len > 2000 ? 2000 : len;
15 |     len -= n;
16 | 
17 |     do {
18 |       s1 = (s1 + buf[pos++]) |0;
19 |       s2 = (s2 + s1) |0;
20 |     } while (--n);
21 | 
22 |     s1 %= 65521;
23 |     s2 %= 65521;
24 |   }
25 | 
26 |   return (s1 | (s2 << 16)) |0;
27 | }
28 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/constants.js:
--------------------------------------------------------------------------------
 1 | export default {
 2 | 
 3 |   /* Allowed flush values; see deflate() and inflate() below for details */
 4 |   Z_NO_FLUSH:         0,
 5 |   Z_PARTIAL_FLUSH:    1,
 6 |   Z_SYNC_FLUSH:       2,
 7 |   Z_FULL_FLUSH:       3,
 8 |   Z_FINISH:           4,
 9 |   Z_BLOCK:            5,
10 |   Z_TREES:            6,
11 | 
12 |   /* Return codes for the compression/decompression functions. Negative values
13 |   * are errors, positive values are used for special but normal events.
14 |   */
15 |   Z_OK:               0,
16 |   Z_STREAM_END:       1,
17 |   Z_NEED_DICT:        2,
18 |   Z_ERRNO:           -1,
19 |   Z_STREAM_ERROR:    -2,
20 |   Z_DATA_ERROR:      -3,
21 |   //Z_MEM_ERROR:     -4,
22 |   Z_BUF_ERROR:       -5,
23 |   //Z_VERSION_ERROR: -6,
24 | 
25 |   /* compression levels */
26 |   Z_NO_COMPRESSION:         0,
27 |   Z_BEST_SPEED:             1,
28 |   Z_BEST_COMPRESSION:       9,
29 |   Z_DEFAULT_COMPRESSION:   -1,
30 | 
31 | 
32 |   Z_FILTERED:               1,
33 |   Z_HUFFMAN_ONLY:           2,
34 |   Z_RLE:                    3,
35 |   Z_FIXED:                  4,
36 |   Z_DEFAULT_STRATEGY:       0,
37 | 
38 |   /* Possible values of the data_type field (though see inflate()) */
39 |   Z_BINARY:                 0,
40 |   Z_TEXT:                   1,
41 |   //Z_ASCII:                1, // = Z_TEXT (deprecated)
42 |   Z_UNKNOWN:                2,
43 | 
44 |   /* The deflate compression method */
45 |   Z_DEFLATED:               8
46 |   //Z_NULL:                 null // Use -1 or null inline, depending on var type
47 | };
48 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/crc32.js:
--------------------------------------------------------------------------------
 1 | // Note: we can't get significant speed boost here.
 2 | // So write code to minimize size - no pregenerated tables
 3 | // and array tools dependencies.
 4 | 
 5 | 
 6 | // Use ordinary array, since untyped makes no boost here
 7 | export default function makeTable() {
 8 |   var c, table = [];
 9 | 
10 |   for (var n = 0; n < 256; n++) {
11 |     c = n;
12 |     for (var k = 0; k < 8; k++) {
13 |       c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
14 |     }
15 |     table[n] = c;
16 |   }
17 | 
18 |   return table;
19 | }
20 | 
21 | // Create table on load. Just 255 signed longs. Not a problem.
22 | var crcTable = makeTable();
23 | 
24 | 
25 | function crc32(crc, buf, len, pos) {
26 |   var t = crcTable,
27 |       end = pos + len;
28 | 
29 |   crc ^= -1;
30 | 
31 |   for (var i = pos; i < end; i++) {
32 |     crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
33 |   }
34 | 
35 |   return (crc ^ (-1)); // >>> 0;
36 | }
37 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/gzheader.js:
--------------------------------------------------------------------------------
 1 | export default function GZheader() {
 2 |   /* true if compressed data believed to be text */
 3 |   this.text       = 0;
 4 |   /* modification time */
 5 |   this.time       = 0;
 6 |   /* extra flags (not used when writing a gzip file) */
 7 |   this.xflags     = 0;
 8 |   /* operating system */
 9 |   this.os         = 0;
10 |   /* pointer to extra field or Z_NULL if none */
11 |   this.extra      = null;
12 |   /* extra field length (valid if extra != Z_NULL) */
13 |   this.extra_len  = 0; // Actually, we don't need it in JS,
14 |                        // but leave for few code modifications
15 | 
16 |   //
17 |   // Setup limits is not necessary because in js we should not preallocate memory
18 |   // for inflate use constant limit in 65536 bytes
19 |   //
20 | 
21 |   /* space at extra (only when reading header) */
22 |   // this.extra_max  = 0;
23 |   /* pointer to zero-terminated file name or Z_NULL */
24 |   this.name       = '';
25 |   /* space at name (only when reading header) */
26 |   // this.name_max   = 0;
27 |   /* pointer to zero-terminated comment or Z_NULL */
28 |   this.comment    = '';
29 |   /* space at comment (only when reading header) */
30 |   // this.comm_max   = 0;
31 |   /* true if there was or will be a header crc */
32 |   this.hcrc       = 0;
33 |   /* true when done reading gzip header (not used when writing a gzip file) */
34 |   this.done       = false;
35 | }
36 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/messages.js:
--------------------------------------------------------------------------------
 1 | export default {
 2 |   2:      'need dictionary',     /* Z_NEED_DICT       2  */
 3 |   1:      'stream end',          /* Z_STREAM_END      1  */
 4 |   0:      '',                    /* Z_OK              0  */
 5 |   '-1':   'file error',          /* Z_ERRNO         (-1) */
 6 |   '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
 7 |   '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
 8 |   '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
 9 |   '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
10 |   '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
11 | };
12 | 


--------------------------------------------------------------------------------
/apps/noVNC/vendor/pako/lib/zlib/zstream.js:
--------------------------------------------------------------------------------
 1 | export default function ZStream() {
 2 |   /* next input byte */
 3 |   this.input = null; // JS specific, because we have no pointers
 4 |   this.next_in = 0;
 5 |   /* number of bytes available at input */
 6 |   this.avail_in = 0;
 7 |   /* total number of input bytes read so far */
 8 |   this.total_in = 0;
 9 |   /* next output byte should be put there */
10 |   this.output = null; // JS specific, because we have no pointers
11 |   this.next_out = 0;
12 |   /* remaining free space at output */
13 |   this.avail_out = 0;
14 |   /* total number of bytes output so far */
15 |   this.total_out = 0;
16 |   /* last error message, NULL if no error */
17 |   this.msg = ''/*Z_NULL*/;
18 |   /* not visible by applications */
19 |   this.state = null;
20 |   /* best guess about the data type: binary or text */
21 |   this.data_type = 2/*Z_UNKNOWN*/;
22 |   /* adler32 value of the uncompressed data */
23 |   this.adler = 0;
24 | }
25 | 


--------------------------------------------------------------------------------
/apps/password_compat_vm/.travis.yml:
--------------------------------------------------------------------------------
 1 | language: php
 2 | 
 3 | php:
 4 |   - 5.3
 5 |   - 5.4
 6 |   - 5.5
 7 |   - 5.6
 8 |   - hhvm
 9 | 
10 | install:
11 |   - travis_retry composer install --no-interaction --prefer-source
12 | 
13 | script:
14 |   - vendor/bin/phpunit
15 | 
16 | matrix:
17 |   allow_failures:
18 |     - php: hhvm
19 |   fast_finish: true
20 | 


--------------------------------------------------------------------------------
/apps/password_compat_vm/CHANGELOG.md:
--------------------------------------------------------------------------------
 1 | CHANGELOG
 2 | =========
 3 | 
 4 | This changelog references the relevant changes (bug and security fixes) done in version 1.
 5 | 
 6 |  * 1.0.4 (2014-11-20)
 7 | 
 8 |      * bug #63 - Password of `null` returns `null` while raising an error
 9 |      * bug #64 - Support for process isolation via PHPUnit
10 |      * bug #56 - Minor formatting issues
11 |      * bug #48 - Integers aren't "strings" so exception is thrown
12 |      * PR #69 - Missing `PASSWORD_BCRYPT_DEFAULT_COST` constant definition
13 |      * PR #70 - Fix test suite with Travis
14 |      * PR #58 - Add `PasswordCompat\binary\check()` function to encapsulate tests
15 | 


--------------------------------------------------------------------------------
/apps/password_compat_vm/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012 Anthony Ferrara
2 | 
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 | 
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 | 
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


--------------------------------------------------------------------------------
/apps/password_compat_vm/composer.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "name": "ircmaxell/password-compat",
 3 |     "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
 4 |     "keywords": ["password", "hashing"],
 5 |     "homepage": "https://github.com/ircmaxell/password_compat",
 6 |     "license": "MIT",
 7 |     "authors": [
 8 |         {
 9 |             "name": "Anthony Ferrara",
10 |             "email": "ircmaxell@php.net",
11 |             "homepage": "http://blog.ircmaxell.com"
12 |         }
13 |     ],
14 |     "require-dev": {
15 |         "phpunit/phpunit": "4.*"
16 |     },
17 |     "autoload": {
18 |         "files": ["lib/password.php"]
19 |     }
20 | }
21 | 


--------------------------------------------------------------------------------
/apps/password_compat_vm/phpunit.xml.dist:
--------------------------------------------------------------------------------
 1 | 
 2 | 
16 |     
17 |         
18 |             test/Unit
19 |         
20 |     
21 |     
22 |         
23 |             ./test
24 |         
25 |     
26 |     
27 |         
28 |             ./lib
29 |         
30 |     
31 | 
32 | 


--------------------------------------------------------------------------------
/apps/password_compat_vm/test/Unit/PasswordGetInfoTest.php:
--------------------------------------------------------------------------------
 1 |  0, 'algoName' => 'unknown', 'options' => array())),
 8 |             array('$2y$', array('algo' => 0, 'algoName' => 'unknown', 'options' => array())),
 9 |             array('$2y$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi', array('algo' => PASSWORD_BCRYPT, 'algoName' => 'bcrypt', 'options' => array('cost' => 7))),
10 |             array('$2y$10$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi', array('algo' => PASSWORD_BCRYPT, 'algoName' => 'bcrypt', 'options' => array('cost' => 10))),
11 | 
12 |         );
13 |     }
14 | 
15 |     public function testFuncExists() {
16 |         $this->assertTrue(function_exists('password_get_info'));
17 |     }
18 | 
19 |     /**
20 |      * @dataProvider provideInfo
21 |      */
22 |     public function testInfo($hash, $info) {
23 |         $this->assertEquals($info, password_get_info($hash));
24 |     }
25 | 
26 | }


--------------------------------------------------------------------------------
/apps/password_compat_vm/test/Unit/PasswordNeedsRehashTest.php:
--------------------------------------------------------------------------------
 1 |  7), false),
11 |             array('$2y$07$usesomesillystringfore2udlvp1ii2e./u9c8sbjqp8i90dh6hi', PASSWORD_BCRYPT, array('cost' => 5), true),
12 |         );
13 |     }
14 | 
15 |     public function testFuncExists() {
16 |         $this->assertTrue(function_exists('password_needs_rehash'));
17 |     }
18 | 
19 |     /**
20 |      * @dataProvider provideCases
21 |      */
22 |     public function testCases($hash, $algo, $options, $valid) {
23 |         $this->assertEquals($valid, password_needs_rehash($hash, $algo, $options));
24 |     }
25 | 
26 | }


--------------------------------------------------------------------------------
/apps/password_compat_vm/test/Unit/PasswordVerifyTest.php:
--------------------------------------------------------------------------------
 1 | assertTrue(function_exists('password_verify'));
 7 |     }
 8 | 
 9 |     public function testFailedType() {
10 |         $this->assertFalse(password_verify(123, 123));
11 |     }
12 | 
13 |     public function testSaltOnly() {
14 |         $this->assertFalse(password_verify('foo', '$2a$07$usesomesillystringforsalt$'));
15 |     }
16 | 
17 |     public function testInvalidPassword() {
18 |         $this->assertFalse(password_verify('rasmusler', '$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi'));
19 |     }
20 | 
21 |     public function testValidPassword() {
22 |         $this->assertTrue(password_verify('rasmuslerdorf', '$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi'));
23 |     }
24 | 
25 |     public function testInValidHash() {
26 |         $this->assertFalse(password_verify('rasmuslerdorf', '$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hj'));
27 |     }
28 | 
29 | }


--------------------------------------------------------------------------------
/apps/password_compat_vm/version-test.php:
--------------------------------------------------------------------------------
1 |  input,
39 | .form-label-group > label {
40 |   padding: var(--input-padding-y) var(--input-padding-x);
41 | }
42 | 
43 | .form-label-group > label {
44 |   position: absolute;
45 |   top: 0;
46 |   left: 0;
47 |   display: block;
48 |   width: 100%;
49 |   margin-bottom: 0; /* Override default `