├── LICENSE ├── README.md ├── _ZONEdev └── bin │ ├── BTRFS-recursive │ ├── project-lowlevel-clone-BTRFS │ ├── project2BTRFS │ ├── project2BTRFS-all │ └── projectBTRFSsnapshot ├── _ZONEtrash ├── bin-nas │ ├── nas-project-lowlevel-clone-industrial-20210629 │ └── nas-project-lowlevel-destroy-20210629 └── bin │ ├── ZFS-clone │ ├── nas-stats │ ├── project-lowlevel-clone │ ├── project-lowlevel-clone-overlayfs │ ├── project-lowlevel-duplicate │ ├── project-ro │ ├── project2ZFS │ └── vigrid-config.neverfinished ├── bin-nas ├── nas-load ├── nas-load_functions.php ├── nas-project-lowlevel-clone-industrial ├── nas-project-lowlevel-destroy ├── rsync-Vstorage ├── rsync-master ├── scrutiny-install ├── snapshot-Vstorage ├── snapshot-rotate ├── vigrid-daemon-ZFSexportsUPD ├── vigrid-daemon-deployer ├── vigrid-deploy-host └── vigrid-deploy-os ├── bin ├── dhcp-list-leases ├── gns3-appliances-check ├── gns3-optimize ├── gns3-safe-restart ├── host-stats ├── nas-stats ├── node-grep-telnet ├── openvpn-auth ├── project-control ├── project-deps ├── project-duplicate ├── project-lowlevel-clone-ZFS ├── project-lowlevel-clone-industrial ├── project-lowlevel-merge ├── project-lowlevel-reset ├── project-node ├── projectBTRFSsnapshot ├── projectZFSsnapshot ├── qemu-update ├── vigrid-addslave ├── vigrid-daemon-cloning ├── vigrid-daemon-noconsoles ├── vigrid-hybrid-spread ├── vigrid-launch ├── vigrid-load ├── vigrid-power ├── vigrid-run ├── vigrid-solo ├── vigrid-spread ├── vigrid-spread-creds ├── vigrid-sshcheck ├── vigrid-teleport └── vigrid-vnctouch ├── confs ├── nginx │ ├── nginx.conf │ ├── vigrid-CyberRange-443-api.conf │ ├── vigrid-CyberRange-443-nas-api.conf │ ├── vigrid-auth.lua │ ├── vigrid-cors.conf │ ├── vigrid-www-auth.conf │ ├── vigrid-www-https-for_nas.conf │ ├── vigrid-www-https-for_slave.conf │ ├── vigrid-www-https-master-v3.conf │ └── vigrid-www-https-master.conf └── php │ └── php-pfm-pool.d-vigrid-www.conf ├── docs ├── README.md ├── gns3-firststeps.md ├── images │ ├── Vigrid-CR-policy.png │ ├── gns3-appliances.png │ ├── gns3-cloud.png │ ├── gns3-install.png │ ├── gns3-links.png │ ├── gns3-preferences1.png │ ├── gns3-preferences2.png │ ├── gns3-untitled-start.png │ ├── gns3-untitled.png │ ├── vigrid-clones_term.png │ ├── vigrid-control_tower-short.png │ ├── vigrid-control_tower.png │ ├── vigrid-control_tower_Nrunning.png │ ├── vigrid-control_tower_Pstarted.png │ ├── vigrid-control_tower_active.png │ ├── vigrid-control_tower_clone.png │ ├── vigrid-control_tower_clone_massive.png │ ├── vigrid-control_tower_clone_massive_page.png │ ├── vigrid-control_tower_clone_page.png │ ├── vigrid-control_tower_gns3.png │ ├── vigrid-control_tower_links.png │ ├── vigrid-control_tower_linksON.png │ ├── vigrid-control_tower_links_control.png │ ├── vigrid-control_tower_mon.png │ ├── vigrid-control_tower_mon_page.png │ ├── vigrid-control_tower_onoff.png │ ├── vigrid-control_tower_opened.png │ ├── vigrid-control_tower_refresh.png │ ├── vigrid-control_tower_snapshot.png │ ├── vigrid-control_tower_snapshot_convert.png │ ├── vigrid-control_tower_snapshot_page.png │ ├── vigrid-control_tower_snapshot_ready.png │ ├── vigrid-control_tower_startstop.png │ └── vigrid-control_tower_uuid.png ├── vigrid-cli.md ├── vigrid-control_tower-clone.md ├── vigrid-control_tower-clone_massive.md ├── vigrid-control_tower-links.md ├── vigrid-control_tower-mon.md ├── vigrid-control_tower-projects.md ├── vigrid-control_tower-snapshot.md ├── vigrid-control_tower.md ├── vigrid-openvpn-l2l.md ├── vigrid-openvpn-u2l.md ├── vigrid-usage.md ├── vigrid1-nas-install.md └── vigrid2-gns-install.md ├── etc ├── VIGRIDsolo.tga ├── VIGRIDteleport-rc ├── VIGRIDteleport.tga ├── VIGRIDteleport.tmpl ├── auto.vigrid.sample ├── init.d │ ├── vigrid │ └── vigrid-load ├── iptables │ └── rules.vigrid.sample ├── logrotate.d │ └── vigrid-load ├── rc.d │ ├── vigrid-load │ └── vigridZFSexportUPD ├── sudoers ├── users-htpasswd ├── vigrid.conf.sample └── vigrid_config.json ├── install ├── vigrid1-deployer-install.sh ├── vigrid1-nas-add-ha.sh ├── vigrid1-nas-install-fbsd.sh ├── vigrid1-nas-install.sh ├── vigrid2-add-api-to-slave.sh ├── vigrid2-ansible-install.sh ├── vigrid2-gns-install.sh └── vigrid2-gns3v3-extension.sh ├── lib └── systemd │ └── system │ ├── gns3.service │ ├── gns3v3.service │ ├── vigrid-ZFSexportUPD.service │ ├── vigrid-cloning.service │ ├── vigrid-deployer.service │ └── vigrid-noconsoles.service ├── tftp └── grub.cfg-vigrid-gns └── www ├── auth └── vigrid-auth.php ├── noVNC-1.2.0 ├── .eslintignore ├── .eslintrc ├── .github │ ├── ISSUE_TEMPLATE │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows │ │ ├── deploy.yml │ │ ├── lint.yml │ │ └── test.yml ├── .gitignore ├── .gitmodules ├── AUTHORS ├── LICENSE.txt ├── README.md ├── app │ ├── error-handler.js │ ├── images │ │ ├── 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 │ │ │ ├── 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 │ │ ├── power.svg │ │ ├── settings.svg │ │ ├── tab.svg │ │ ├── toggleextrakeys.svg │ │ ├── warning.svg │ │ └── windows.svg │ ├── locale │ │ ├── README │ │ ├── cs.json │ │ ├── de.json │ │ ├── el.json │ │ ├── es.json │ │ ├── ja.json │ │ ├── ko.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── ru.json │ │ ├── sv.json │ │ ├── tr.json │ │ ├── zh_CN.json │ │ └── zh_TW.json │ ├── localization.js │ ├── sounds │ │ ├── CREDITS │ │ ├── bell.mp3 │ │ └── bell.oga │ ├── styles │ │ ├── Orbitron700.ttf │ │ ├── Orbitron700.woff │ │ └── base.css │ ├── ui.js │ └── webutil.js ├── core │ ├── base64.js │ ├── decoders │ │ ├── copyrect.js │ │ ├── hextile.js │ │ ├── raw.js │ │ ├── rre.js │ │ ├── tight.js │ │ └── tightpng.js │ ├── deflator.js │ ├── des.js │ ├── display.js │ ├── encodings.js │ ├── inflator.js │ ├── input │ │ ├── domkeytable.js │ │ ├── fixedkeys.js │ │ ├── gesturehandler.js │ │ ├── keyboard.js │ │ ├── keysym.js │ │ ├── keysymdef.js │ │ ├── util.js │ │ ├── vkeys.js │ │ └── xtscancodes.js │ ├── rfb.js │ ├── util │ │ ├── browser.js │ │ ├── cursor.js │ │ ├── element.js │ │ ├── events.js │ │ ├── eventtarget.js │ │ ├── int.js │ │ ├── logging.js │ │ ├── polyfill.js │ │ └── strings.js │ └── websock.js ├── docs │ ├── API-internal.md │ ├── API.md │ ├── EMBEDDING.md │ ├── LIBRARY.md │ ├── LICENSE.BSD-2-Clause │ ├── LICENSE.BSD-3-Clause │ ├── LICENSE.MPL-2.0 │ ├── LICENSE.OFL-1.1 │ ├── flash_policy.txt │ ├── links │ ├── notes │ ├── rfb_notes │ ├── rfbproto-3.3.pdf │ ├── rfbproto-3.7.pdf │ └── rfbproto-3.8.pdf ├── karma.conf.js ├── package.json ├── po │ ├── .eslintrc │ ├── Makefile │ ├── cs.po │ ├── de.po │ ├── el.po │ ├── es.po │ ├── ja.po │ ├── ko.po │ ├── nl.po │ ├── noVNC.pot │ ├── pl.po │ ├── po2js │ ├── ru.po │ ├── sv.po │ ├── tr.po │ ├── xgettext-html │ ├── zh_CN.po │ └── zh_TW.po ├── snap │ ├── hooks │ │ └── configure │ ├── local │ │ └── svc_wrapper.sh │ └── snapcraft.yaml ├── tests │ ├── .eslintrc │ ├── assertions.js │ ├── fake.websocket.js │ ├── karma-test-main.js │ ├── playback-ui.js │ ├── playback.js │ ├── test.base64.js │ ├── test.deflator.js │ ├── test.display.js │ ├── test.gesturehandler.js │ ├── test.helper.js │ ├── test.int.js │ ├── test.keyboard.js │ ├── test.localization.js │ ├── test.rfb.js │ ├── test.util.js │ ├── test.websock.js │ ├── test.webutil.js │ └── vnc_playback.html ├── utils │ ├── .eslintrc │ ├── README.md │ ├── b64-to-binary.pl │ ├── genkeysymdef.js │ ├── launch.sh │ ├── u2x11 │ ├── use_require.js │ ├── use_require_helpers.js │ └── validate ├── vendor │ ├── browser-es-module-loader │ │ ├── README.md │ │ ├── dist │ │ │ ├── babel-worker.js │ │ │ ├── browser-es-module-loader.js │ │ │ └── browser-es-module-loader.js.map │ │ ├── genworker.js │ │ ├── rollup.config.js │ │ └── src │ │ │ ├── babel-worker.js │ │ │ └── browser-es-module-loader.js │ ├── pako │ │ ├── LICENSE │ │ ├── README.md │ │ └── lib │ │ │ ├── utils │ │ │ └── common.js │ │ │ └── zlib │ │ │ ├── adler32.js │ │ │ ├── constants.js │ │ │ ├── crc32.js │ │ │ ├── deflate.js │ │ │ ├── gzheader.js │ │ │ ├── inffast.js │ │ │ ├── inflate.js │ │ │ ├── inftrees.js │ │ │ ├── messages.js │ │ │ ├── trees.js │ │ │ └── zstream.js │ └── promise.js ├── vnc.html └── vnc_lite.html ├── notelnet ├── LICENSE ├── README.md ├── hterm_all.js ├── index.html └── notelnet.html ├── novnc └── site ├── images ├── Pclose.png ├── Popen.png ├── Vigrid-badauth.jpg ├── Vigrid-badauth.png ├── Vigrid.png ├── check_off.png ├── check_on.png ├── core100x100.png ├── gns-reload.png ├── gnshost_off.png ├── gnshost_on.png ├── hostmon_off.png ├── hostmon_on.png ├── light_off.png ├── light_on.png ├── links_off.png ├── links_on.png ├── nonono.jpg ├── object_off.png ├── object_on.png ├── open_off.png ├── open_on.png ├── photo.png ├── reload.png ├── risky.png ├── start.png ├── stop.png ├── switch_off.png ├── switch_on.png ├── switch_onoff.png ├── uuid_off.png ├── uuid_on.png ├── vigrid-clone.png ├── vigrid-clones.png ├── vigrid_type1.png ├── vigrid_type2.png ├── vigrid_type3.png └── webui.png ├── index.html ├── manager ├── vigrid-clone_short.html ├── vigrid-clones_industrial.html ├── vigrid-config.html ├── vigrid-control_tower-mon.html ├── vigrid-control_tower.html ├── vigrid-control_tower_clone.html ├── vigrid-dhcp.html ├── vigrid-emqx_functions.php ├── vigrid-gns3_functions.php ├── vigrid-host-api_functions.php ├── vigrid-link_control.html ├── vigrid-mac_list.html ├── vigrid-puppetmaster.html ├── vigrid-rocket_launch.html ├── vigrid-snapshot.html ├── vigrid-snapshot_industrial.html ├── vigrid-snapshot_rollback.html └── vigrid-terminator.html ├── vigrid-api ├── vigrid-api.html └── vigrid-nas-api.html ├── vigrid-host-api.html └── websockify-js ├── .travis.yml ├── CHANGES.txt ├── LICENSE.txt ├── README.md ├── docs ├── LICENSE.GPL-3 ├── LICENSE.LGPL-3 ├── LICENSE.MPL-2.0 ├── TODO ├── notes └── release.txt ├── include ├── VT100.js ├── keysym.js ├── util.js ├── websock.js ├── webutil.js ├── wsirc.js └── wstelnet.js ├── websockify ├── package.json └── websockify.js ├── wsirc-org.html └── wstelnet.html /_ZONEdev/bin/project2BTRFS-all: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | cd /home/gns3/GNS3/projects 14 | if [ $? -ne 0 ] 15 | then 16 | echo "Cant CD to project directory, exiting." 17 | exit 1 18 | fi 19 | 20 | for i in * 21 | do 22 | echo "Detected project UUID: $i" 23 | CHK=`btrfs sub list /Bstorage | grep $i|wc -l` 24 | 25 | if [ $CHK -eq 0 ] 26 | then 27 | echo -n "Project is not on a BTRfs volume, migrating ? [y/N] " 28 | read ANS 29 | case $ANS in 30 | "Yy") 31 | /home/gns3/vigrid/bin/project2btrfs $i 32 | ;; 33 | esac 34 | fi 35 | done 36 | -------------------------------------------------------------------------------- /_ZONEtrash/bin-nas/nas-project-lowlevel-clone-industrial-20210629: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PROJECT_NAME=$1 4 | PROJECT_UUID=$2 5 | 6 | PROJECT_START=$3 7 | PROJECT_QUANTITY=$4 8 | 9 | PROJECT_TARGET=$5 10 | 11 | CONSOLE_RANGE_START=5000 12 | CONSOLE_RANGE_END=10000 13 | 14 | if [ "x$PROJECT_NAME" = "x" -o "x$PROJECT_UUID" = "x" -o "x$PROJECT_START" = "x" -o "x$PROJECT_QUANTITY" = "x" -o "x$PROJECT_TARGET" = "x" ] 15 | then 16 | echo "$0 Source_ProjectName Source_ProjectUUID Target_Starting_project_number Target_Number_of_projects Target_Project_Name" 17 | exit 1 18 | fi 19 | 20 | echo "Console range will be $CONSOLE_RANGE_START-$CONSOLE_RANGE_END" 21 | 22 | echo -n "Sanity check: project directory & name..." 23 | CHK="/Vstorage/GNS3/GNS3farm/GNS3/projects/$PROJECT_UUID/$PROJECT_NAME.gns3" 24 | if [ ! -f "$CHK" ] 25 | then 26 | echo "FAIL to find $CHK, exiting" 27 | exit 1 28 | fi 29 | echo "OK" 30 | 31 | QUANTITY_LEN=${#PROJECT_QUANTITY} 32 | 33 | COUNT=0 34 | until false 35 | do 36 | COUNT_CUR=$((PROJECT_START+COUNT)) 37 | 38 | printf -v TARGET_PROJECT_NAME "%s%0$QUANTITY_LEN""d" "$PROJECT_TARGET" "$COUNT_CUR" 39 | 40 | echo "Cloning $PROJECT_NAME ($PROJECT_UUID) as $TARGET_PROJECT_NAME..." 41 | echo -n " " 42 | 43 | /Vstorage/GNS3/bin/nas-project-lowlevel-clone-zfs \ 44 | -G /Vstorage/GNS3/GNS3farm/GNS3 -P /Vstorage/GNS3/GNS3farm/GNS3/projects \ 45 | -c $CONSOLE_RANGE_START -e $CONSOLE_RANGE_END \ 46 | -Z clone -s $PROJECT_UUID -S $PROJECT_NAME -T $TARGET_PROJECT_NAME 47 | 48 | COUNT=$((COUNT+1)) 49 | 50 | [ $COUNT -ge $PROJECT_QUANTITY ] && break 51 | done 52 | 53 | echo "Deployment done, dont forget:" 54 | echo "1- To make gns3:gns3 owner of the project directory on target hosts" 55 | echo "2- To SIGHUP all GNS3 servers..." 56 | -------------------------------------------------------------------------------- /_ZONEtrash/bin-nas/nas-project-lowlevel-destroy-20210629: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | PROJECT_NAME=$1 4 | 5 | if [ "x$PROJECT_NAME" = "x" ] 6 | then 7 | echo "Usage: $0 ProjectName" 8 | exit 1 9 | fi 10 | 11 | LIST=`ls -1 /Vstorage/GNS3/GNS3farm/GNS3/projects/*/$PROJECT_NAME*.gns3` 12 | 13 | echo "Detected the following projects:" 14 | echo "$LIST" 15 | 16 | echo -n "Associated datasets will be destroyed, are you sure [y/N] ? " 17 | 18 | read ANS 19 | 20 | if [ "x$ANS" != "xY" -a "x$ANS" != "xy" ] 21 | then 22 | echo "Ok, exiting" 23 | exit 24 | fi 25 | 26 | echo -n "Associated datasets will be destroyed, are you *REALLY* sure [y/N] ? " 27 | 28 | read ANS 29 | 30 | if [ "x$ANS" != "xY" -a "x$ANS" != "xy" ] 31 | then 32 | echo "Ok, exiting" 33 | exit 34 | fi 35 | 36 | echo "Ok, lets do it then..." 37 | 38 | for i in $LIST 39 | do 40 | echo -n "Directory $i: " 41 | 42 | DATASET=`zfs list -o name $i|tail -n+2` 43 | CHK=`echo $DATASET|grep "\/projects\/"|wc -l` 44 | 45 | if [ "x$DATASET" = "x" -o $CHK -lt 1 ] 46 | then 47 | echo "Cant find an associated dataset, skipping" 48 | else 49 | echo "destroying $DATASET..." 50 | zfs destroy -r $DATASET 51 | fi 52 | done 53 | 54 | -------------------------------------------------------------------------------- /_ZONEtrash/bin/ZFS-clone: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | echo "ZFS volume cloning script" 14 | 15 | SOURCE_ZFS=$1 16 | 17 | TARGET_HOST=`echo $2 | awk 'BEGIN { FS=":"; } { print $1;}'` 18 | TARGET_PORT=`echo $2 | awk 'BEGIN { FS=":"; } { print $2;}'` 19 | TARGET_ZFS=$3 20 | 21 | if [ "x$SOURCE_ZFS" = "x" -o "x$TARGET_HOST" = "x" -o "x$TARGET_ZFS" = "x" ] 22 | then 23 | echo "Usage: $0 ZFS_poolname Target_Host_SSH[:port] Target_ZFSpool" 24 | exit 1 25 | fi 26 | 27 | echo "ZFS pool $SOURCE_ZFS cloning in progress..." 28 | CHK=`zfs list -o name $SOURCE_ZFS | tail -1` 29 | 30 | if [ "x$CHK" != "x$SOURCE_ZFS" ] 31 | then 32 | echo "I am sorry, I cant find any ZFS pool named $SOURCE_ZFS, exiting." 33 | exit 1 34 | fi 35 | 36 | SSH="ssh $TARGET_HOST" 37 | [ "x$TARGET_PORT" != "x" ] && SSH="$SSH -p $TARGET_PORT" 38 | 39 | # Each snapshot name must be unique, timestamp is a good choice. 40 | snapshot_string=DO_NOT_DELETE_remote_replication_ 41 | timestamp=$(/bin/date '+%Y%m%d%H%M%S') 42 | replication_snap_name="$snapshot_string""$timestamp" 43 | replication_snap="$SOURCE_ZFS"@"$replication_snap_name" 44 | 45 | # Initial send: 46 | # Create first recursive snapshot of the whole pool. 47 | echo "Snapping shot source (as $replication_snap)..." 48 | zfs snapshot -r "$replication_snap" 49 | 50 | # Initial replication via SSH. 51 | echo "Initial sending of $replication_snap to $TARGET_HOST" 52 | zfs send -R "$replication_snap" | $SSH zfs recv -Fdu "$TARGET_ZFS" 53 | 54 | # Incremental sends: 55 | 56 | # Get old snapshot name. 57 | old_snap=$(zfs list -H -o name -t snapshot -r "$SOURCE_ZFS" | grep "$SOURCE_ZFS"@"$snapshot_string" | tail --lines=1) 58 | # Create new recursive snapshot of the whole pool. 59 | zfs snapshot -r "$replication_snap" 60 | # Incremental replication via SSH. 61 | zfs send -R -I "$old_snap" "$replication_snap" | $SSH zfs recv -Fdu "$TARGET_ZFS" 62 | 63 | echo "Deleting replication snapshots on target..." 64 | # for i in `zfs list -t snapshot -o name |grep "DO_NOT"`; do zfs destroy $i; done 65 | $SSH 'for i in `zfs list -t snapshot -o name |grep "@$replication_snap_name"; do echo "zfs destroy $i"; done' 66 | exit 67 | 68 | # Delete older snaps on the local source (grep -v inverts the selection) 69 | delete_from=$(zfs list -H -o name -t snapshot -r "$SOURCE_ZFS" | grep "$snapshot_string" | grep -v "$timestamp") 70 | 71 | for snap in $delete_from; do 72 | zfs destroy "$snap" 73 | done 74 | -------------------------------------------------------------------------------- /_ZONEtrash/bin/nas-stats: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="$0 [ -H Host ] [ -D 'directories' ]" 14 | 15 | while getopts 'D:H:' OPTIONS 16 | do 17 | case "$OPTIONS" in 18 | H) HOST="$OPTARG";; 19 | D) DIRS="$OPTARG";; 20 | [?]) 21 | print >&2 $USAGE 22 | exit 1 23 | ;; 24 | esac 25 | done 26 | 27 | if [ "x$HOST" = "x" ] 28 | then 29 | L=`cat /proc/loadavg | awk '{ print $1;}'` 30 | echo "$L * 100 / $(nproc)" | bc 31 | L=`cat /proc/loadavg | awk '{ print $2;}'` 32 | echo "$L * 100 / $(nproc)" | bc 33 | L=`cat /proc/loadavg | awk '{ print $3;}'` 34 | echo "$L * 100 / $(nproc)" | bc 35 | 36 | echo `iostat -c |grep -v "^$"|tail -1|awk '{print $NF;}'` 37 | 38 | echo `free | grep "^Mem:" | awk '{print $NF;}'` 39 | echo `free | grep "^Mem:" | awk '{print $2;}'` 40 | echo `free | grep "^Swap:" | awk '{print $4;}'` 41 | echo `free | grep "^Swap:" | awk '{print $2;}'` 42 | 43 | echo $(nproc) 44 | 45 | # $load_array=VigridLOADextract('/var/log/vigrid-load.log'); 46 | # IO bandwidth current 47 | # IO bandwidth max 48 | # IOps current 49 | # IOps max 50 | 51 | for i in $DIRS 52 | do 53 | echo -n "$i:" 54 | df -k $i|tail -1 | awk '{print $4"/"$2;}' 55 | done 56 | 57 | exit 58 | fi 59 | 60 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 61 | 62 | if [ ! -r $VIGRID_CONF ] 63 | then 64 | echo "$VIGRID_CONF file is missing, exiting" 65 | exit 1 66 | fi 67 | 68 | . $VIGRID_CONF 69 | if [ $? -ne 0 ] 70 | then 71 | echo "$VIGRID_CONF load failed, exiting" 72 | exit 1 73 | fi 74 | 75 | [ "x$DIRS" != "x" ] && DIR_FLAG="-D \"$DIRS\"" 76 | 77 | ssh -i $VIGRID_SSHKEY_NAS $VIGRID_SSHKEY_OPTIONS root@$HOST /usr/local/bin/nas-stats $DIR_FLAG 2>/dev/null 78 | RC=$? 79 | 80 | if [ $RC -eq 127 ] # target file is not present, possibly, installing it on remote host 81 | then 82 | cat /home/gns3/vigrid/bin/nas-stats | ssh -i $VIGRID_SSHKEY_NAS $VIGRID_SSHKEY_OPTIONS root@$HOST 'mkdir -p /usr/local/bin;cat >/usr/local/bin/nas-stats' 83 | ssh -i $VIGRID_SSHKEY_NAS $VIGRID_SSHKEY_OPTIONS root@$HOST 'chmod 755 /usr/local/bin/nas-stats' 84 | 85 | ssh -i $VIGRID_SSHKEY_NAS $VIGRID_SSHKEY_OPTIONS root@$HOST /usr/local/bin/nas-stats $DIR_FLAG 2>/dev/null 86 | fi 87 | 88 | exit 89 | -------------------------------------------------------------------------------- /_ZONEtrash/bin/project-ro: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | echo "$0: protect/unprotect RO a GNS3 project" 14 | 15 | PROJECT_UUID=$1 16 | PROJECT_PROTECTION=$2 17 | 18 | if [ "x$PROJECT_UUID" = "x" ] 19 | then 20 | echo "Usage: $0 Project_UUID" 21 | exit 1 22 | fi 23 | 24 | GNS3_HOME="/home/gns3/GNS3" 25 | 26 | if [ ! -d "$GNS3_HOME/projects/$PROJECT_UUID" ] 27 | then 28 | echo "I am sorry, I cant find that project UUID: $PROJECT_UUID" 29 | exit 1 30 | fi 31 | 32 | case "$2" in 33 | "RO") 34 | PROJECT_PROTECTION="RO" 35 | ;; 36 | "RW") 37 | PROJECT_PROTECTION="RW" 38 | ;; 39 | *) 40 | echo "I am sorry, I dont know what is '$2' protection. Please use 'RO' or 'RW' instead" 41 | exit 1 42 | ;; 43 | esac 44 | 45 | echo "Identifying ZFS directories used by this project..." 46 | ZFS_LIST=`zfs list|awk '{print $NF;}'|egrep "$GNS3_HOME/projects/$PROJECT_UUID(/|$)"` 47 | 48 | for i in $ZFS_LIST 49 | do 50 | # Get ZFS volumes associated with directory 51 | ZFS_VOLUME=`zfs list | grep " $i$" | awk '{print $1;}'` 52 | 53 | case "$PROJECT_PROTECTION" in 54 | "RO") 55 | echo "$i: readonly=ON" 56 | zfs set readonly=on $ZFS_VOLUME 57 | ;; 58 | "RW") 59 | echo "$i: readonly=OFF" 60 | zfs set readonly=off $ZFS_VOLUME 61 | ;; 62 | esac 63 | done 64 | -------------------------------------------------------------------------------- /bin-nas/nas-project-lowlevel-clone-industrial: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | PROJECT_NAME=$1 14 | PROJECT_UUID=$2 15 | 16 | PROJECT_START=$3 17 | PROJECT_QUANTITY=$4 18 | 19 | PROJECT_TARGET=$5 20 | 21 | CONSOLE_RANGE_START=5000 22 | CONSOLE_RANGE_END=10000 23 | 24 | if [ "x$PROJECT_NAME" = "x" -o "x$PROJECT_UUID" = "x" -o "x$PROJECT_START" = "x" -o "x$PROJECT_QUANTITY" = "x" -o "x$PROJECT_TARGET" = "x" ] 25 | then 26 | echo "$0 Source_ProjectName Source_ProjectUUID Target_Starting_project_number Target_Number_of_projects Target_Project_Name" 27 | exit 1 28 | fi 29 | 30 | echo "Console range will be $CONSOLE_RANGE_START-$CONSOLE_RANGE_END" 31 | 32 | echo -n "Sanity check: project directory & name..." 33 | CHK="/Vstorage/GNS3/GNS3farm/GNS3/projects/$PROJECT_UUID/$PROJECT_NAME.gns3" 34 | if [ ! -f "$CHK" ] 35 | then 36 | echo "FAIL to find $CHK, exiting" 37 | exit 1 38 | fi 39 | echo "OK" 40 | 41 | T_QUANTITY_LEN=$((PROJECT_START+PROJECT_QUANTITY)) 42 | QUANTITY_LEN=${#T_QUANTITY_LEN} 43 | 44 | COUNT=0 45 | until false 46 | do 47 | COUNT_CUR=$((PROJECT_START+COUNT)) 48 | 49 | printf -v TARGET_PROJECT_NAME "%s%0$QUANTITY_LEN""d" "$PROJECT_TARGET" "$COUNT_CUR" 50 | 51 | echo "Cloning $PROJECT_NAME ($PROJECT_UUID) as $TARGET_PROJECT_NAME..." 52 | echo -n " " 53 | 54 | /Vstorage/GNS3/bin/nas-project-lowlevel-clone-ZFS \ 55 | -G /Vstorage/GNS3/GNS3farm/GNS3 -P /Vstorage/GNS3/GNS3farm/GNS3/projects \ 56 | -c $CONSOLE_RANGE_START -e $CONSOLE_RANGE_END \ 57 | -Z clone -s $PROJECT_UUID -S $PROJECT_NAME -T $TARGET_PROJECT_NAME 58 | 59 | COUNT=$((COUNT+1)) 60 | 61 | [ $COUNT -ge $PROJECT_QUANTITY ] && break 62 | done 63 | 64 | echo "Deployment done, dont forget:" 65 | echo "1- To make gns3:gns3 owner of the project directory on target hosts" 66 | echo "2- To SIGHUP all GNS3 servers..." 67 | -------------------------------------------------------------------------------- /bin-nas/nas-project-lowlevel-destroy: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | PROJECT_NAME=$1 14 | 15 | if [ "x$PROJECT_NAME" = "x" ] 16 | then 17 | echo "Usage: $0 ProjectName" 18 | exit 1 19 | fi 20 | 21 | LIST=`ls -1 /Vstorage/GNS3/GNS3farm/GNS3/projects/*/$PROJECT_NAME*.gns3` 22 | 23 | echo "Detected the following projects:" 24 | echo "$LIST" 25 | 26 | echo -n "Associated datasets will be destroyed, are you sure [y/N] ? " 27 | 28 | read ANS 29 | 30 | if [ "x$ANS" != "xY" -a "x$ANS" != "xy" ] 31 | then 32 | echo "Ok, exiting" 33 | exit 34 | fi 35 | 36 | echo -n "Associated datasets will be destroyed, are you *REALLY* sure [y/N] ? " 37 | 38 | read ANS 39 | 40 | if [ "x$ANS" != "xY" -a "x$ANS" != "xy" ] 41 | then 42 | echo "Ok, exiting" 43 | exit 44 | fi 45 | 46 | echo "Ok, lets do it then..." 47 | 48 | for i in $LIST 49 | do 50 | echo -n "Directory $i: " 51 | 52 | DATASET=`zfs list -o name $i|tail -n+2` 53 | CHK=`echo $DATASET|grep "\/projects\/"|wc -l` 54 | 55 | if [ "x$DATASET" = "x" -o $CHK -lt 1 ] 56 | then 57 | echo "Cant find an associated dataset, skipping" 58 | else 59 | echo "destroying $DATASET..." 60 | zfs destroy -r $DATASET 61 | fi 62 | done 63 | 64 | -------------------------------------------------------------------------------- /bin-nas/snapshot-Vstorage: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | 14 | export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin 15 | 16 | PROGRESS="" 17 | #PROGRESS="--progress" 18 | 19 | DATE=`date +%Y%m%d` 20 | DATE_TIMET=`date +%s` 21 | 22 | ZFS_LIST=`/sbin/zfs list -r -o name Vstorage |tail -n+2` 23 | 24 | for i in $ZFS_LIST 25 | do 26 | TARGET=`echo $i | sed 's/Vstorage/Vstorage_BKP/'` 27 | 28 | [ "x$PROGRESS" != "x" ] && echo "Identified dataset: $i" 29 | 30 | [ "x$PROGRESS" != "x" ] && echo " Snaping shot: $i@$DATE-$DATE_TIMET" 31 | 32 | echo "Snapshot: $i@$DATE-$DATE_TIMET" 33 | zfs snapshot $i@$DATE-$DATE_TIMET 34 | done 35 | 36 | -------------------------------------------------------------------------------- /bin-nas/vigrid-deploy-host: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="$0 -a MAC_Address | -d MAC_Address " 14 | 15 | ACTION="" 16 | while getopts 'a:d:' OPTIONS 17 | do 18 | case "$OPTIONS" in 19 | a) ACTION="a";MAC_ADDRESS="$OPTARG";; 20 | d) ACTION="d";MAC_ADDRESS="$OPTARG";; 21 | [?]) 22 | print >&2 $USAGE 23 | exit 1 24 | ;; 25 | esac 26 | done 27 | 28 | if [ "x$ACTION" = "x" ] 29 | then 30 | echo "$USAGE" 31 | exit 1 32 | fi 33 | 34 | DIR_UEFI="/Vstorage/tftp/grub2-cfg" 35 | DIR__BIOS="/Vstorage/tftp/pxegrub-cfg" 36 | 37 | # Checking MAC looks like a real one 38 | CHK=`echo "$MAC_ADDRESS"|egrep '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$'` 39 | 40 | if [ "x$CHK" = "x" ] 41 | then 42 | echo "$MAC_ADDRESS is not a valid MAC address" 43 | exit 1 44 | fi 45 | 46 | if [ "x$ACTION" = "xa" ] 47 | then 48 | echo "Adding Grub files for $MAC_ADDRESS" 49 | echo " -> $DIR_UEFI/grub.cfg-$MAC_ADDRESS" 50 | cat $DIR_UEFI/grub.cfg-vigrid-gns | grep -v "net_default_mac" >$DIR_UEFI/grub.cfg-$MAC_ADDRESS 51 | chown gns3:gns3 $DIR_UEFI/grub.cfg-$MAC_ADDRESS 2>/dev/null 52 | [ $? -ne 0 ] && echo "ERROR creating file" 53 | 54 | echo " -> $DIR__BIOS/grub.cfg-$MAC_ADDRESS" 55 | cat $DIR_UEFI/grub.cfg-vigrid-gns | grep -v "net_default_mac" >$DIR__BIOS/grub.cfg-$MAC_ADDRESS 56 | [ $? -ne 0 ] && echo "ERROR creating file" 57 | chown gns3:gns3 $DIR__BIOS/grub.cfg-$MAC_ADDRESS 2>/dev/null 58 | 59 | elif [ "x$ACTION" = "xd" ] 60 | then 61 | echo "Deleting Grub files for $MAC_ADDRESS" 62 | echo " -> $DIR_UEFI/grub.cfg-$MAC_ADDRESS" 63 | rm $DIR_UEFI/grub.cfg-$MAC_ADDRESS 64 | [ $? -ne 0 ] && echo "ERROR deleting file" 65 | 66 | echo " -> $DIR__BIOS/grub.cfg-$MAC_ADDRESS" 67 | rm $DIR__BIOS/grub.cfg-$MAC_ADDRESS 68 | [ $? -ne 0 ] && echo "ERROR deleting file" 69 | fi 70 | -------------------------------------------------------------------------------- /bin/dhcp-list-leases: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="$0 [ -H Host ]" 14 | 15 | while getopts 'H:' OPTIONS 16 | do 17 | case "$OPTIONS" in 18 | H) HOST="$OPTARG";; 19 | [?]) 20 | print >&2 $USAGE 21 | exit 1 22 | ;; 23 | esac 24 | done 25 | 26 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 27 | 28 | if [ ! -r $VIGRID_CONF ] 29 | then 30 | echo "$VIGRID_CONF file is missing, exiting" 31 | exit 1 32 | fi 33 | 34 | . $VIGRID_CONF 35 | if [ $? -ne 0 ] 36 | then 37 | echo "$VIGRID_CONF load failed, exiting" 38 | exit 1 39 | fi 40 | 41 | if [ "x$HOST" = "x" ] 42 | then 43 | SSHDO="" 44 | else 45 | SSHDO="ssh -i $VIGRID_SSHKEY_DHCP $VIGRID_SSHKEY_OPTIONS gns3@$HOST" 46 | fi 47 | 48 | LIST=`$SSHDO ls -1 /var/log/syslog* 2>/dev/null | sort -r` 49 | 50 | for i in $LIST 51 | do 52 | echo "$i..." 53 | $SSHDO /bin/gzip -dfc $i 2>/dev/null 54 | done | /bin/grep "dhcpd.*DHCPACK" 55 | 56 | exit 57 | -------------------------------------------------------------------------------- /bin/gns3-appliances-check: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | echo "Checking GNS3 appliances dependancies..." 14 | 15 | LIST=`grep -H filename *.gns3a|sed 's/:.*: \"/:/'|sed 's/\".*$//'|sort -u` 16 | 17 | for i in $LIST 18 | do 19 | GNS=`echo $i | awk 'BEGIN { FS=":";} { print $1;}'` 20 | FILE=`echo $i | awk 'BEGIN { FS=":";} { print $2;}'` 21 | 22 | echo "$GNS requires file: $FILE" 23 | FILES=`find /opt/BKPunetlab -type f -name "$FILE"` 24 | 25 | if [ "x$FILES" != "x" ] 26 | then 27 | echo "Found $FILES" 28 | IFS_BAK=$IFS 29 | IFS=" 30 | " 31 | for j in $FILES 32 | do 33 | echo "Copying $j to ~/downloads/" 34 | cp "$j" ~/downloads/ 35 | done 36 | IFS=$IFS_BAK 37 | fi 38 | 39 | done 40 | -------------------------------------------------------------------------------- /bin/gns3-safe-restart: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | echo "GNS3 safe (no running VM) restart" 14 | echo 15 | 16 | PS_GNS=`ps axo pid,command | grep -v grep | grep "\/usr\/share\/gns3\/gns3-server\/bin\/python" | awk '{print $1;}'` 17 | 18 | if [ "x$PS_GNS" = "x" ] 19 | then 20 | echo "Cant get gns3 server pid, exiting" 21 | exit 1 22 | fi 23 | 24 | echo "GNS3 server PID=$PS_GNS" 25 | 26 | PS=`ps o command --ppid $PS_GNS|egrep -v "(ubridge|dynamips)"` 27 | PS_NUM=`echo "$PS" | wc -l` 28 | 29 | ((PS_NUM-=1)) 30 | PS=`echo "$PS" | tail -$PS_NUM` 31 | 32 | if [ $PS_NUM -eq 0 ] 33 | then 34 | echo "No running VM, restarting GNS3..." 35 | service gns3 stop 36 | service gns3 start 37 | else 38 | echo "No restart, $PS_NUM VMs are running:" 39 | echo "$PS" | colrm 80 40 | exit 1 41 | fi 42 | -------------------------------------------------------------------------------- /bin/host-stats: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="$0 [ -H Host ]" 14 | 15 | while getopts 'H:' OPTIONS 16 | do 17 | case "$OPTIONS" in 18 | H) HOST="$OPTARG";; 19 | [?]) 20 | print >&2 $USAGE 21 | exit 1 22 | ;; 23 | esac 24 | done 25 | 26 | if [ "x$HOST" = "x" ] 27 | then 28 | L=`cat /proc/loadavg | awk '{ print $1;}'` 29 | echo "$L * 100 / $(nproc)" | bc 30 | L=`cat /proc/loadavg | awk '{ print $2;}'` 31 | echo "$L * 100 / $(nproc)" | bc 32 | L=`cat /proc/loadavg | awk '{ print $3;}'` 33 | echo "$L * 100 / $(nproc)" | bc 34 | 35 | echo `iostat -c |grep -v "^$"|tail -1|awk '{print $NF;}'` 36 | 37 | echo `free | grep "^Mem:" | awk '{print $NF;}'` 38 | echo `free | grep "^Mem:" | awk '{print $2;}'` 39 | echo `free | grep "^Swap:" | awk '{print $4;}'` 40 | echo `free | grep "^Swap:" | awk '{print $2;}'` 41 | 42 | echo $(nproc) 43 | 44 | df -k /home/gns3/GNS3|tail -1 | awk '{print $4"/"$2;}' 45 | 46 | exit 47 | fi 48 | 49 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 50 | 51 | if [ ! -r $VIGRID_CONF ] 52 | then 53 | echo "$VIGRID_CONF file is missing, exiting" 54 | exit 1 55 | fi 56 | 57 | . $VIGRID_CONF 58 | if [ $? -ne 0 ] 59 | then 60 | echo "$VIGRID_CONF load failed, exiting" 61 | exit 1 62 | fi 63 | 64 | ssh -i $VIGRID_SSHKEY_GNS $VIGRID_SSHKEY_OPTIONS gns3@$HOST /home/gns3/vigrid/bin/host-stats 2>/dev/null 65 | RC=$? 66 | 67 | if [ $RC -eq 127 ] # target is not present, possibly, installing it on remote host 68 | then 69 | 70 | cat /home/gns3/vigrid/bin/host-stats | ssh -i $VIGRID_SSHKEY_GNS $VIGRID_SSHKEY_OPTIONS gns3@$HOST 'mkdir -p /home/gns3/vigrid/bin;cat >/home/gns3/vigrid/bin/host-stats' 71 | ssh -i $VIGRID_SSHKEY_GNS $VIGRID_SSHKEY_OPTIONS gns3@$HOST 'chmod 755 /home/gns3/vigrid/bin/host-stats' 72 | 73 | ssh -i $VIGRID_SSHKEY_GNS $VIGRID_SSHKEY_OPTIONS gns3@$HOST /home/gns3/vigrid/bin/host-stats 2>/dev/null 74 | RC=$? 75 | fi 76 | 77 | exit $RC 78 | -------------------------------------------------------------------------------- /bin/openvpn-auth: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Vigrid OpenVPN authentication validation 4 | # 5 | ################################################################################################################################# 6 | # 7 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 8 | # 9 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 10 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 11 | # 12 | # Each dependancies (c) to their respective owners 13 | # 14 | ################################################################################################################################# 15 | 16 | export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin 17 | 18 | DATE=`date +'+%Y-%m-%d %H:%M:%S'` 19 | 20 | FILE=$1 21 | 22 | [ "x$FILE" = "x" ] && exit 2 23 | [ -f $FILE ] || exit 2 24 | 25 | VIGRID_PASSWD="/home/gns3/etc/VIGRIDteleport-passwd" 26 | VIGRID_LOGS="/var/log/gns3/vigrid.log" 27 | 28 | OVPN_USER=`cat $FILE|head -1` 29 | OVPN_PASS=`cat $FILE|tail -1` 30 | 31 | echo -n "$DATE: Vigrid OpenVPN authentication attempt: $OVPN_USER ($OVPN_PASS) -> " >>$VIGRID_LOGS 32 | 33 | 34 | CHK=`cat $VIGRID_PASSWD| grep "^$OVPN_USER:{PLAIN}$OVPN_PASS$"|wc -l` 35 | 36 | [ $CHK -ge 1 ] && echo "VALID" >>$VIGRID_LOGS && exit 0 37 | 38 | echo "DENIED" >>$VIGRID_LOGS 39 | exit 1 40 | 41 | -------------------------------------------------------------------------------- /bin/project-duplicate: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="Usage: $0 -h Host -s Source_ProjectName -t Target_ProjectName" 14 | 15 | while getopts 'h:s:t:' OPTIONS 16 | do 17 | case "$OPTIONS" in 18 | h) HOST="$OPTARG";; 19 | s) SOURCE="$OPTARG";; 20 | t) TARGET="$OPTARG";; 21 | [?]) 22 | echo >&2 $USAGE 23 | exit 1 24 | ;; 25 | esac 26 | done 27 | 28 | if [ "x$HOST" = "x" -o "x$SOURCE" = "x" -o "x$TARGET" = "x" ] 29 | then 30 | echo $USAGE 31 | exit 1 32 | fi 33 | 34 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 35 | 36 | if [ ! -r $VIGRID_CONF ] 37 | then 38 | echo "$VIGRID_CONF file is missing, exiting" 39 | exit 1 40 | fi 41 | 42 | . $VIGRID_CONF 43 | if [ $? -ne 0 ] 44 | then 45 | echo "$VIGRID_CONF load failed, exiting" 46 | exit 1 47 | fi 48 | 49 | [ "x$VIGRID_GNS_VERSION" != "x2" -a "x$VIGRID_GNS_VERSION" != "x3" ] && VIGRID_GNS_VERSION=2 50 | 51 | CURL="curl --user $VIGRID_GNS_USER:$VIGRID_GNS_PASS" 52 | 53 | CHK=`$CURL "http://$HOST:3080/v$VIGRID_GNS_VERSION/projects" 2>/dev/null|egrep "\"name\":"|grep "\"$SOURCE\","|wc -l` 54 | 55 | if [ $CHK -eq 0 ] 56 | then 57 | echo "I am sorry, but project \"$SOURCE\" does not exist on $HOST, cowardly exiting..." 58 | exit 1 59 | fi 60 | 61 | POS=`$CURL "http://$HOST:3080/v$VIGRID_GNS_VERSION/projects" 2>/dev/null|egrep "\"(project_id|name)\":"|grep -n "\"$SOURCE\"," | awk '{print $1;}' | sed 's/:.*$//'` 62 | HEAD=`echo "$POS + 1" | bc` 63 | PROJECT_ID=`$CURL "http://$HOST:3080/v$VIGRID_GNS_VERSION/projects" 2>/dev/null|egrep "\"(project_id|name)\":"|head -$HEAD|tail -1| sed 's/^.* \"//' | sed 's/\".*$//'` 64 | 65 | echo "Project \"$SOURCE\" ID is $PROJECT_ID" 66 | echo 67 | echo "Duplicating \"$SOURCE\" to \"$TARGET\" on $HOST..." 68 | echo 69 | date 70 | 71 | RES=`$CURL -X POST "http://$HOST:3080/v$VIGRID_GNS_VERSION/projects/$PROJECT_ID/duplicate" -d "{\"name\":\"$TARGET\"}" 2>/dev/null` 72 | echo "$RES" 73 | 74 | PROJECT_ID_NEW=`echo "$RES" | grep "project_id"| sed 's/^.*: //' | sed 's/[\",]//g'` 75 | 76 | echo 77 | echo "Duplication done" 78 | date 79 | echo 80 | echo "Project $TARGET has UUID=$PROJECT_ID_NEW" 81 | 82 | -------------------------------------------------------------------------------- /bin/vigrid-spread-creds: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################################################################# 3 | ## 4 | ## This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | ## 6 | ## (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | ## LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | ## 9 | ## Each dependancies (c) to their respective owners 10 | ## 11 | ################################################################################################################################## 12 | 13 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 14 | 15 | if [ ! -r $VIGRID_CONF ] 16 | then 17 | echo "$VIGRID_CONF file is missing, exiting" 18 | exit 1 19 | fi 20 | 21 | . $VIGRID_CONF 22 | if [ $? -ne 0 ] 23 | then 24 | echo "$VIGRID_CONF load failed, exiting" 25 | exit 1 26 | fi 27 | 28 | CHK=`which rsync` 29 | if [ "x$CHK" = "x" ] 30 | then 31 | echo "I cant find rsync, installing it..." 32 | sudo apt install -y rsync 33 | [ $? -ne 0 ] && echo "Install failed, exiting..." && exit 1 34 | fi 35 | 36 | VIGRID_SSHKEY=$VIGRID_SSHKEY_GNS 37 | TARGET=$VIGRID_GNS_SLAVE_HOSTS 38 | 39 | HOSTNAME=`hostname` 40 | 41 | for i in $VIGRID_GNS_SLAVE_HOSTS 42 | do 43 | NAME=`echo $i | awk 'BEGIN { FS=":"; } { print $1; }'` 44 | HOST=`echo $i | awk 'BEGIN { FS=":"; } { print $2; }'` 45 | PORT=`echo $i | awk 'BEGIN { FS=":"; } { print $3; }'` 46 | 47 | CHK=`echo $HOSTNAME|grep -i "^$NAME"|wc -l` 48 | if [ $CHK -eq 0 ] 49 | then 50 | LIST="$LIST $HOST:$NAME" 51 | else 52 | echo "Skipping myself..." 53 | fi 54 | done 55 | 56 | [ "x$LIST" = "x" ] && echo "Cant determine Vigrid Slaves, exiting" && exit 1 57 | 58 | for i in $LIST 59 | do 60 | NAME=`echo $i | awk 'BEGIN { FS=":"; } { print $1; }'` 61 | HOST=`echo $i | awk 'BEGIN { FS=":"; } { print $2; }'` 62 | PORT=`echo $i | awk 'BEGIN { FS=":"; } { print $3; }'` 63 | 64 | echo 65 | 66 | echo "### Spreading Vigrid credentials on $NAME ($HOST):" 67 | echo 68 | 69 | rsync -avz --progress --inplace --delete-before --delete -e "ssh -i $VIGRID_SSHKEY $VIGRID_SSHKEY_OPTIONS" /home/gns3/etc/vigrid-passwd gns3@$HOST:/home/gns3/etc/vigrid-passwd 70 | if [ $? -ne 0 ] 71 | then 72 | echo "WARNING: rsync exited with an error !!" 73 | fi 74 | done 75 | 76 | echo "### OK ALL DONE" 77 | 78 | -------------------------------------------------------------------------------- /bin/vigrid-sshcheck: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################################################################# 3 | # 4 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 5 | # 6 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 7 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 8 | # 9 | # Each dependancies (c) to their respective owners 10 | # 11 | ################################################################################################################################# 12 | 13 | USAGE="$0 -h Host [ -a ] -s SSHkey -u user" 14 | 15 | ADD=0 16 | 17 | while getopts 'ah:s:u:' OPTIONS 18 | do 19 | case "$OPTIONS" in 20 | a) ADD=1;; 21 | h) HOST="$OPTARG";; 22 | s) SSHKEY="$OPTARG";; 23 | u) USER="$OPTARG";; 24 | [?]) 25 | echo $USAGE 26 | exit 1 27 | ;; 28 | esac 29 | done 30 | 31 | if [ "x$HOST" = "x" -o "x$SSHKEY" = "x" -o "x$USER" = "x" ] 32 | then 33 | echo "$USAGE" 34 | exit 1 35 | fi 36 | 37 | VIGRID_CONF="/home/gns3/etc/vigrid.conf" 38 | 39 | if [ ! -r $VIGRID_CONF ] 40 | then 41 | echo "$VIGRID_CONF file is missing, exiting" 42 | exit 1 43 | fi 44 | 45 | . $VIGRID_CONF 46 | if [ $? -ne 0 ] 47 | then 48 | echo "$VIGRID_CONF load failed, exiting" 49 | exit 1 50 | fi 51 | 52 | if [ $ADD -eq 1 ] 53 | then 54 | echo "Adding SSH key requested..." 55 | 56 | PASS=`cat /home/gns3/.config/GNS3/gns3_server.conf 2>/dev/null|grep "^password" | awk '{print $NF;}'` 57 | if [ "x$PASS" != "x" -a "x$USER" = "xgns3" ] 58 | then 59 | echo "Hint: 'gns3' password on the Slave server should be : '$PASS' (without quotes)" 60 | else 61 | echo "I am sorry, I cant find the password of gns3 user, you will have to find it yourself." 62 | fi 63 | 64 | cat $SSHKEY.pub | ssh $USER@$HOST 'mkdir -p ~/.ssh;chmod 755 ~/.ssh;cat >>~/.ssh/authorized_keys;chmod 600 ~/.ssh/authorized_keys;' 65 | fi 66 | 67 | ssh -i $SSHKEY $VIGRID_SSHKEY_OPTIONS $USER@$HOST true 68 | RC=$? 69 | 70 | exit $RC 71 | -------------------------------------------------------------------------------- /confs/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes auto; 2 | pid logs/nginx.pid; 3 | 4 | user www-data; 5 | 6 | events { 7 | worker_connections 2048; 8 | # multi_accept on; 9 | } 10 | 11 | http { 12 | 13 | ## 14 | # Basic Settings 15 | ## 16 | 17 | sendfile on; 18 | tcp_nopush on; 19 | tcp_nodelay on; 20 | keepalive_timeout 65; 21 | types_hash_max_size 2048; 22 | # server_tokens off; 23 | 24 | # server_names_hash_bucket_size 64; 25 | # server_name_in_redirect off; 26 | 27 | include /etc/nginx/mime.types; 28 | default_type application/octet-stream; 29 | 30 | ## 31 | # SSL Settings 32 | ## 33 | 34 | ssl_protocols TLSv1.2 TLSv1.3; 35 | ssl_ciphers HIGH:!aNULL:!MD5; 36 | ssl_prefer_server_ciphers on; 37 | 38 | ## 39 | # Logging Settings 40 | ## 41 | 42 | access_log /var/log/nginx/access.log; 43 | error_log /var/log/nginx/error.log; 44 | 45 | ## 46 | # Gzip Settings 47 | ## 48 | 49 | gzip on; 50 | 51 | # Appliance or whatever upload, applies to all 52 | client_max_body_size 8192M; # 8GB 53 | 54 | ## LUA 55 | # enable capturing error logs 56 | lua_capture_error_log 32m; 57 | 58 | init_by_lua_block { 59 | local errlog = require 'ngx.errlog' 60 | local status, err = errlog.set_filter_level(ngx.WARN) 61 | if not status then 62 | ngx.log(ngx.ERR, err) 63 | return 64 | end 65 | } 66 | 67 | ## 68 | # Virtual Host Configs 69 | ## 70 | include /etc/nginx/sites/*.conf; 71 | } 72 | 73 | -------------------------------------------------------------------------------- /confs/nginx/vigrid-cors.conf: -------------------------------------------------------------------------------- 1 | # 2 | # CORS 3 | # 4 | 5 | # Any origin (risky) 6 | add_header 'Access-Control-Allow-Origin' '*' always; 7 | 8 | # Allowed methods & headers 9 | add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; 10 | 11 | # Allowed to be authenticated 12 | add_header 'Access-Control-Allow-Credentials' true always; 13 | 14 | # add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization' always; 15 | add_header 'Access-Control-Allow-Headers' 16 | 'Origin, Content-Type, Accept, Authorization, DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type'; 17 | 18 | # pre-flight 19 | if ($request_method = 'OPTIONS') { 20 | add_header 'Access-Control-Allow-Origin' '*'; 21 | 22 | add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; 23 | 24 | add_header 'Access-Control-Allow-Credentials' true always; 25 | 26 | # add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization'; 27 | add_header 'Access-Control-Allow-Headers' 28 | 'Origin, Content-Type, Accept, Authorization, DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type'; 29 | 30 | # Maximum 1 day 31 | add_header 'Access-Control-Max-Age' 86400; 32 | 33 | add_header 'Content-Length' 0; 34 | add_header 'Content-Type' 'text/plain charset=UTF-8'; 35 | 36 | return 204; 37 | } 38 | -------------------------------------------------------------------------------- /confs/nginx/vigrid-www-auth.conf: -------------------------------------------------------------------------------- 1 | ############################################################################################################# 2 | # Authentication/authorization via PHP script (Prod) 3 | 4 | ################################################################################################################################ 5 | # 6 | # This material is part of VIGRID extensions to GNS3 for Trainings & CyberRange designs 7 | # 8 | # (c) Laurent LEVIER for script, designs and technical actions, https://github.com/llevier/ 9 | # LICENCE: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA) 10 | # 11 | # Each dependancies (c) to their respective owners 12 | # 13 | ################################################################################################################################# 14 | server { 15 | listen 127.0.0.1:8001; 16 | server_name localhost; 17 | 18 | access_log /var/log/nginx/gw-access.log; 19 | error_log /var/log/nginx/gw-error.log; 20 | 21 | root /home/gns3/vigrid/www/auth; 22 | index vigrid-auth.php; 23 | 24 | # hide version 25 | server_tokens off; 26 | 27 | # sanity 28 | location = /favicon.ico { access_log off; log_not_found off; } 29 | location = /robots.txt { log_not_found off; } 30 | 31 | location ~ /\.ht { 32 | deny all; 33 | } 34 | 35 | location / 36 | { 37 | # sanity 38 | location = /favicon.ico { access_log off; log_not_found off; } 39 | location = /robots.txt { log_not_found off; } 40 | 41 | location ~ \.css { add_header Content-Type text/css; } 42 | location ~ \.js { add_header Content-Type application/x-javascript; } 43 | location ~ \.eot { add_header Content-Type application/vnd.ms-fontobject; } 44 | location ~ \.woff { add_header Content-Type font/woff; } 45 | 46 | location ~* \.(htm|html|php)$ 47 | { 48 | try_files $uri =404; 49 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 50 | fastcgi_index vigrid-auth.php; 51 | fastcgi_pass unix:/run/php/php%%PHP_VER%%-fpm.sock; 52 | include /etc/nginx/fastcgi_params; 53 | fastcgi_param PATH_INFO $fastcgi_path_info; 54 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 55 | } 56 | 57 | location ~ ^/(images|javascript|js|css|flash|media|static|font)/ { 58 | expires 7d; 59 | } 60 | 61 | location ~ /\.ht { 62 | deny all; 63 | } 64 | 65 | try_files $uri $uri/ /vigrid-auth.php?$args; 66 | } 67 | } 68 | 69 | -------------------------------------------------------------------------------- /confs/nginx/vigrid-www-https-for_nas.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Vigrid HTTPS access for NAS %%NAS_HOST%% (%%NAS_IP%%) 3 | # 4 | 5 | server { 6 | listen 127.0.0.1:443 ssl; 7 | server_name %%NAS_HOST%%; 8 | 9 | # Take fullchain here, not cert.pem 10 | ssl_certificate /etc/nginx/ssl/localhost.crt; 11 | ssl_certificate_key /etc/nginx/ssl/localhost.key; 12 | 13 | ssl_session_cache builtin:1000 shared:SSL:1m; 14 | ssl_session_timeout 5m; 15 | 16 | ssl_protocols TLSv1.3; 17 | ssl_ciphers HIGH:!aNULL:!MD5; 18 | ssl_prefer_server_ciphers on; 19 | 20 | # hide version 21 | server_tokens off; 22 | 23 | access_log /var/log/nginx/access-%%NAS_HOST%%.log; 24 | error_log /var/log/nginx/error-%%NAS_HOST%%.log; 25 | 26 | # Vigrid home page (blocked at Vigrid-Master) 27 | location / 28 | { 29 | # sanity 30 | location = /favicon.ico { access_log off; log_not_found off; } 31 | location = /robots.txt { log_not_found off; } 32 | 33 | location ~ \.css { add_header Content-Type text/css; } 34 | location ~ \.js { add_header Content-Type application/x-javascript; } 35 | location ~ \.eot { add_header Content-Type application/vnd.ms-fontobject; } 36 | location ~ \.woff { add_header Content-Type font/woff; } 37 | 38 | location ~* \.(htm|html|php)$ 39 | { 40 | try_files $uri =404; 41 | fastcgi_split_path_info ^(.+\.html)(/.+)$; 42 | fastcgi_index index.html; 43 | fastcgi_pass unix:/run/php/php%%PHP_VER%%-fpm.sock; 44 | # Minimum output buffering 45 | fastcgi_buffers 2 4k; 46 | fastcgi_busy_buffers_size 4k; 47 | fastcgi_buffering off; 48 | # fastcgi_buffer_size 8k; 49 | include /etc/nginx/fastcgi_params; 50 | fastcgi_read_timeout 300; 51 | fastcgi_param PATH_INFO $fastcgi_path_info; 52 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 53 | } 54 | } 55 | 56 | # Vigrid API 57 | location ^~ /vigrid-nas-api 58 | { 59 | # CORS 60 | include /etc/nginx/vigrid-cors.conf; 61 | 62 | # Basic authentication 63 | access_by_lua_file /etc/nginx/vigrid-auth.lua; 64 | 65 | proxy_pass https://%%NAS_IP%%; 66 | 67 | proxy_pass_request_body on; 68 | 69 | proxy_set_header Host $host; 70 | 71 | proxy_http_version 1.1; 72 | proxy_set_header Upgrade $http_upgrade; 73 | proxy_set_header Connection 'Upgrade'; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /docs/gns3-firststeps.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | Making GNS3 ready
4 |
32 | -------------------------------------------------------------------------------- /docs/images/Vigrid-CR-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/Vigrid-CR-policy.png -------------------------------------------------------------------------------- /docs/images/gns3-appliances.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-appliances.png -------------------------------------------------------------------------------- /docs/images/gns3-cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-cloud.png -------------------------------------------------------------------------------- /docs/images/gns3-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-install.png -------------------------------------------------------------------------------- /docs/images/gns3-links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-links.png -------------------------------------------------------------------------------- /docs/images/gns3-preferences1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-preferences1.png -------------------------------------------------------------------------------- /docs/images/gns3-preferences2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-preferences2.png -------------------------------------------------------------------------------- /docs/images/gns3-untitled-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-untitled-start.png -------------------------------------------------------------------------------- /docs/images/gns3-untitled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/gns3-untitled.png -------------------------------------------------------------------------------- /docs/images/vigrid-clones_term.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-clones_term.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower-short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower-short.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_Nrunning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_Nrunning.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_Pstarted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_Pstarted.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_active.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_clone.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_clone_massive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_clone_massive.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_clone_massive_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_clone_massive_page.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_clone_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_clone_page.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_gns3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_gns3.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_links.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_linksON.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_linksON.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_links_control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_links_control.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_mon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_mon.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_mon_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_mon_page.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_onoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_onoff.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_opened.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_opened.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_refresh.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_snapshot.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_snapshot_convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_snapshot_convert.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_snapshot_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_snapshot_page.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_snapshot_ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_snapshot_ready.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_startstop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_startstop.png -------------------------------------------------------------------------------- /docs/images/vigrid-control_tower_uuid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/docs/images/vigrid-control_tower_uuid.png -------------------------------------------------------------------------------- /docs/vigrid-control_tower-clone.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | Cloning projects on demand
4 | 5 | Vigrid can also be used as a training center for individuals. In such uses, virtual networks & devices are oftenly created and made available for students. Here we will consider training as any exercice where each student must have its own virtual playground, whatever the use (training, capture the flag etc).
6 | The principe of the Vigrid Clone is precisely to solve such needs. Once the virtual network is ready, anyone can request to have his/her clone. Clone is personal, user can do anything with it, and will be terminated once it reaches its lifetime.
7 |
8 | Steps to create ondemand clones
9 |
10 | Quickly summarized: 11 |
  • Create a virtual network for the training
  • 12 |
  • Once tested, power it off properly
  • 13 |
  • Mark it for cloning, see Snaping shot projects
  • 14 |
  • Publish the availability of the project ondemand to users
  • 15 |
    16 | How ondemand cloning works ?
    17 |
    18 | Arriving on the cloning page, available projects are listed:
    19 |
    20 | User must just provide some information:
    21 |
  • Clone max. life will be the number of minutes the clone will live.
  • 22 |
  • email since user should be advised about how to access it the clone once it is ready.
  • 23 |
  • Password to ensure access will remain private. The access control is performed at the 'clone control tower' web page level, not at GNS3 level. So any user accessing the normal control tower will be able to access the clone.
  • 24 |
    25 | Once filled, simply clicking on REQUEST CLONING will put the request in the queue and as soon as possible (oftenly that is immediate), the cloning request will start and an email will be sent to the user.
    26 |
    27 | Into the mail are the clone details and a link to the clone Control Tower (auth'd access) to reach all clones related to that user/mail.
    28 | 5 minutes before the clone end of life, the user will receive another email to warn about the clone death to come.
    29 | At the given time, clone is terminated, automatically closing & killing accesses.
    30 |
    31 | This is managed by a daemon and a SQL database. So it is easy to create a page to provide more life or other features.
    32 |
    -------------------------------------------------------------------------------- /docs/vigrid-control_tower-links.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | Playing with links
    4 | 5 | On Vigrid Control Tower, if you clicked on the Links button, you may have noticed the nodes display, when node is running, is slightly different.
    6 |
    7 | 8 | Left of the IP address light in the DHCP/ARP column, a value appeared. It represents the network link of the node with another device.
    9 | Clicking on it will bring you to another page to control the link, as when you right on a GNS3 link and select Packet filters:
    10 |
    11 | 12 | In the first lines, this is only useful information:
    13 |
  • Project, Link ID & Link type are probably not interesting.
  • 14 |
  • Bound to is much better, indicating where this link is attached. That is always between 2 nodes
  • 15 |
  • From Specifications, node can be modified while it runs: 16 | 25 |
  • CHANGE FILTERS once you defined all fields you wish to.
  • 26 | 27 | -------------------------------------------------------------------------------- /docs/vigrid-control_tower-projects.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | Controlling projects
    4 | 5 | By default, Vigrid prefers closed projects because it consumes less GNS3 resources and it starts much faster.

    6 |
    7 | Clicking on the Host name will restrict the display to only that host
    8 | Clicking on the Project name will restrict the display to only that project
    9 |
    10 | To be able to play with a project, it must first be opened, then started. So your first action is to open the project pushing the appropriate button presented in the Control Tower page. This will change the Project display to the below, revealing the nodes:
    11 |
    12 | New information are provided: 13 |
  • Node name (UUID column is possible clicking on the UUID button)
  • 14 |
  • Console (physical screen of the virtual node) IP address, protocol (either none, telnet or VNC) and port without a required heavy client.
  • 15 |
  • Status (either started or stopped). Clicking on the status will generate a start/stop request to turn to the opposite status.
  • 16 |
  • DHCP/ARP: Vigrid being autonomous, it includes its own DHCP server per LAN. Upon a given IP address, it will be shown here
  • 17 |
  • If you click on the Links button, another coloum will appear. We will see that here.

  • 18 | From here, you can either start the whole project, clicking on the Start button on the left, or click to start a specific node on the stopped link in the Status column.
    19 |
    20 | Once your started a node, display changes again to reveal new infos: 21 |
    22 |
  • Node name changed to display the number of cores & sockets of the Qemu node.
  • 23 |
  • Console is now clickable. Clicking on it will open a new WWW page to the node physical console (either telnet or VNC).
    24 | Nota: there should be no key mapping issue with Vigrid, as far as your VM keymap matches your keyboard of course
  • 25 |
  • DHCP/ARP: if the VM is attached to a *real* network (Nsuperadmin0, Nblue_admin0, Nred_admin0, Nblue_exposed0 or Nred_exposed0), there should be a green light with an IP address at its right. That is the IP address of the node
  • 26 | -------------------------------------------------------------------------------- /docs/vigrid-openvpn-l2l.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | LAN to LAN seamless VPN access
    4 | -------------------------------------------------------------------------------- /docs/vigrid-openvpn-u2l.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | User to LAN seamless VPN access
    4 | -------------------------------------------------------------------------------- /docs/vigrid-usage.md: -------------------------------------------------------------------------------- 1 | ### Using Vigrid ### 2 | 3 | Once your Vigrid infrastructure (NAS, server(s), switches...) is ready, you can start playing with it. 4 | 5 | First of all, please notice HTTPS port (443/TCP) and the overall entry point to Vigrid.
    6 | It offers SSH to Master server, VPN access to the infrastructure, GNS3 access as well as Vigrid web user interface.
    7 |
    8 | In any case, default credentials are vigrid as username, and vigrid as password.
    9 | Credentials are stored on Vigrid Master Server into the file /home/gns3/etc/vigrid-passwd in PLAIN format:
    10 | vigrid:{PLAIN}vigrid 11 |
    12 | Credentials for gns3 user, generated during installation, are also stored in this file. You may of course add your own accounts. 13 |
    14 | 15 | As a start, let's connect to the Vigrid Master Server over HTTPS, Vigrid will display a simple page to introduce itself, proposing to move to the Control Tower page. This will confirm Vigrid looks ready.
    16 |
    17 | However, what's the use of a Control Tower if there is nothing to control so, as a second step, you must start playing with GNS3 so there is at least a simple project to play with.
    18 | 19 | Here is the summary of 'must read' to be autonomous with Vigrid:
    20 |
  • Making GNS3 ready
  • 21 |
  • Discovering Vigrid Control Tower
  • 22 |
  • The hosts monitoring page
  • 23 |
  • Controlling projects
  • 24 |
  • Playing with links
  • 25 |
  • Snaping shot projects
  • 26 |
  • Cloning a project on demand
  • 27 |
  • Massively cloning a project
  • 28 |
  • Vigrid CLI commands
  • 29 | 30 |
    31 | Vigrid infrastructure services:
    32 |
  • Seamless USERtoLAN VPN access to Vigrid
  • 33 |
  • Seamless LANtoLAN VPN access to Vigrid
  • 34 | 35 | 36 | -------------------------------------------------------------------------------- /etc/VIGRIDsolo.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/etc/VIGRIDsolo.tga -------------------------------------------------------------------------------- /etc/VIGRIDteleport.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/etc/VIGRIDteleport.tga -------------------------------------------------------------------------------- /etc/VIGRIDteleport.tmpl: -------------------------------------------------------------------------------- 1 | dev tun 2 | persist-tun 3 | persist-key 4 | cipher AES-128-CBC 5 | ncp-disable 6 | auth SHA256 7 | tls-client 8 | client 9 | duplicate-cn 10 | resolv-retry 60 11 | remote %%VIGRID_GATEWAY_NAME%% 443 tcp-client 12 | remote %%VIGRID_GATEWAY_IP%% 443 tcp-client 13 | auth-user-pass /etc/openvpn/VIGRIDteleport.login 14 | remote-cert-tls server 15 | status /var/log/openvpn.log 16 | verb 3 17 | keepalive 10 120 18 | comp-lzo adaptive 19 | 20 | key-direction 1 21 | 22 | # 23 | %%VIGRID_TLS_CA%% 24 | 25 | # 26 | %%VIGRID_TLS_CERT%% 27 | 28 | # 29 | %%VIGRID_TLS_KEY%% 30 | 31 | # 32 | %%VIGRID_TLS_AUTH%% 33 | -------------------------------------------------------------------------------- /etc/auto.vigrid.sample: -------------------------------------------------------------------------------- 1 | # 2 | # Vigrid autoFS configuration 3 | # 4 | # NFSv3+nolock to solve forgotten locks in nfs-kernel-server 5 | * -vers=3,nolock,rw,hard,relatime,rsize=1048576,wsize=1048576,timeo=600,retrans=3,lookupcache=pos Vigrid-NAS:/Vstorage/GNS3/GNS3farm/& 6 | # Vigrid-NAS2:/Vstorage/GNS3/GNS3farm/& 7 | 8 | -------------------------------------------------------------------------------- /etc/logrotate.d/vigrid-load: -------------------------------------------------------------------------------- 1 | /var/log/vigrid-load.log { 2 | rotate 1 3 | missingok 4 | create 644 gns3 gns3 5 | copytruncate 6 | hourly 7 | size 10M 8 | } 9 | -------------------------------------------------------------------------------- /etc/rc.d/vigrid-load: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # $FreeBSD$ 4 | # 5 | 6 | # PROVIDE: vigrid-load 7 | # BEFORE: DAEMON 8 | # KEYWORD: nojail shutdown 9 | 10 | . /etc/rc.subr 11 | 12 | name="vigrid-load" 13 | desc="Vigrid monitoring " 14 | rcvar="vigrid-load_enable" 15 | 16 | command_path="/Vstorage/GNS3/vigrid/bin" 17 | command="vigrid-load" 18 | command_flags="-R /Vstorage -l /var/log/vigrid-load.log" 19 | 20 | start_cmd="vigrid-load_start" 21 | stop_cmd="vigrid-load_stop" 22 | 23 | vigrid-load_start() 24 | { 25 | chk=`ps waxo command | egrep "$command_path/$command $command_flags" | grep -v grep` 26 | if [ "x$chk" != "x" ] 27 | then 28 | echo -n "(already running)" 29 | else 30 | $command_path/$command $command_flags || echo -n "($command_path/$command $command_flags) start failed" 31 | fi 32 | } 33 | 34 | vigrid-load_stop() 35 | { 36 | list=`ps waxo pid,command | egrep "$command $command_flags" | grep -v grep | awk '{print $1;}'` 37 | 38 | for i in $list 39 | do 40 | echo "killing $i..." 41 | kill $i 42 | done 43 | } 44 | 45 | load_rc_config $name 46 | run_rc_command "$1" -------------------------------------------------------------------------------- /etc/rc.d/vigridZFSexportUPD: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # $FreeBSD$ 4 | # 5 | 6 | # PROVIDE: vigrid-ZFSexportUPD 7 | # REQUIRE: nfsd vigrid-ZFSexportUPDd 8 | # BEFORE: DAEMON 9 | # KEYWORD: nojail shutdown 10 | 11 | . /etc/rc.subr 12 | 13 | name="vigridZFSexportUPD" 14 | desc="Vigrid NFS exports update daemon for ZFS" 15 | rcvar="vigridZFSexportUPD_enable" 16 | 17 | command_path="/Vstorage/GNS3/vigrid/bin-nas" 18 | command="vigrid-daemon-ZFSexportsUPD" 19 | command_flags="-F -R /Vstorage -d -l /var/log/gns3/vigrid.log" 20 | 21 | start_cmd="vigridZFSexportUPD_start" 22 | stop_cmd="vigridZFSexportUPD_stop" 23 | 24 | vigridZFSexportUPD_start() 25 | { 26 | chk=`ps waxo command | egrep "$command_path/$command $command_flags" | grep -v grep` 27 | if [ "x$chk" != "x" ] 28 | then 29 | echo -n "(already running)" 30 | else 31 | $command_path/$command $command_flags || echo -n "($command_path/$command $command_flags) start failed" 32 | fi 33 | } 34 | 35 | vigridZFSexportUPD_stop() 36 | { 37 | list=`ps waxo pid,command | egrep "$command_path/$command $command_flags" | grep -v grep | awk '{print $1;}'` 38 | 39 | for i in $list 40 | do 41 | echo "killing $i..." 42 | kill $i 43 | done 44 | } 45 | 46 | load_rc_config $name 47 | run_rc_command "$1" -------------------------------------------------------------------------------- /etc/users-htpasswd: -------------------------------------------------------------------------------- 1 | user1:{PLAIN}password1 2 | user2:{PLAIN}password2 3 | user3:{PLAIN}password3 4 | -------------------------------------------------------------------------------- /etc/vigrid.conf.sample: -------------------------------------------------------------------------------- 1 | # 2 | # Vigrid configuration file sample file 3 | # 4 | 5 | # Vigrid Type: 1=Standalone, 2=Standalone+NAS, 3=GNS3farmMaster+NAS, 4=GNS3farmSlave+NAS, 5=GNS3scalableSlave+NAS 6 | #VIGRID_TYPE=3 7 | 8 | # Vigrid Network design: 2=Tiny CyberRange (4 NICs), 5=Normal Cyber Range (6 NICs) 9 | #VIGRID_NETWORK=2 10 | 11 | # NAS hostname:IPaddress for NAS dependant servers" 12 | #VIGRID_NAS_SERVER="host1:IPaddress1 host2:IPaddress2" 13 | #VIGRID_NAS_SERVER="host1:IPaddress1" 14 | # 15 | # zfs or btrfs 16 | #VIGRID_STORAGE_MODE="zfs" 17 | # 18 | # root directory for Storage. Either NAS or local. 19 | # Vigrid default=Vstorage (ZFS) or Bstorage (BTRfs). Could be /volume1 (Synology BTRfs) 20 | # Without value, / will be storage root 21 | #VIGRID_STORAGE_ROOT="/Vstorage" 22 | 23 | # Hostname:IP adress of MX hub to send emails (cloning center) 24 | #VIGRID_SMTP_RELAY="MXhostname:MX_IPaddress:SMTPport" 25 | #VIGRID_SMTP_MAILFROM="from_user@from.host" 26 | 27 | # GNS3 Credentials 28 | #VIGRID_GNS_USER=gns3 29 | #VIGRID_GNS_PASS="gns3" 30 | 31 | # GNS3 hosts (slaves or scalable servers). Format: hostname:IP hostname:IP... 32 | #VIGRID_GNS_SLAVE_HOSTS="GNShost1:GNS_IPaddress1 GNShost2:GNS_IPaddress2 GNShost3:GNS_IPaddress3 GNShost4:GNS_IPaddress4" 33 | 34 | # MySQL credentials for Vigrid Cloning Daemon 35 | #VIGRID_MYSQL_HOST="127.0.0.1" 36 | #VIGRID_MYSQL_USER=vigrid 37 | #VIGRID_MYSQL_PASS="vigrid" 38 | 39 | # SSH options for all ssh actions 40 | #VIGRID_SSHKEY_OPTIONS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=error" 41 | 42 | # DHCP Server (if not local), will use VIGRID_SSHKEY_GNS for log extraction 43 | #VIGRID_DHCP_SERVER="DHCPhostname:DHCP_IPaddress" 44 | 45 | # Websockify options 46 | #VIGRID_WEBSOCKIFY_OPTIONS="--timeout=300" 47 | 48 | # NAS SSH key for DHCP server 49 | #VIGRID_SSHKEY_DHCP=/home/gns3/.ssh/id_dhcp_server 50 | 51 | # NAS SSH key for automated authentication 52 | #VIGRID_SSHKEY_NAS=/home/gns3/.ssh/id_NAS 53 | 54 | # GNS3 servers (upon Master of a farm, either slaves or scalable) 55 | #VIGRID_SSHKEY_GNS=/home/gns3/.ssh/id_gns3-GNS_HOSTS 56 | 57 | # Remote console (iDRAC, iLo, IMM etc) credentials for remote power on enslaved servers 58 | #VIGRID_POWER_USER=ipmi 59 | #VIGRID_POWER_PASS="password" 60 | # VIGRID_POWER_ACCESS=(IPMI|SSH) 61 | #VIGRID_POWER_ACCESS=SSH 62 | 63 | -------------------------------------------------------------------------------- /lib/systemd/system/gns3.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=GNS3 server 3 | Wants=network-online.target 4 | After=network.target network-online.target remote-fs.target 5 | 6 | [Service] 7 | Type=forking 8 | User=gns3 9 | Group=gns3 10 | PermissionsStartOnly=true 11 | #Environment=\"TMPDIR=/home/gns3/GNS3/tmp\" 12 | 13 | RuntimeDirectoryPreserve=yes 14 | PIDFile=/run/gns3/gns3.pid 15 | 16 | ExecStartPre=sudo /home/gns3/vigrid/etc/init.d/vigrid start 17 | ExecStart=/usr/bin/gns3server --config /home/gns3/.config/GNS3/gns3_server.conf --log /var/log/gns3/gns3.log --pid /run/gns3/gns3.pid --daemon 18 | Restart=on-abort 19 | 20 | ExecReload=/home/gns3/vigrid/etc/init.d/vigrid start 21 | ExecReload=/bin/kill -HUP $MAINPID 22 | 23 | ExecStop=/bin/kill -TERM $MAINPID 24 | TimeoutStopSec=300 25 | 26 | UMask=022 27 | 28 | [Install] 29 | WantedBy=multi-user.target 30 | -------------------------------------------------------------------------------- /lib/systemd/system/gns3v3.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=GNS3v3 server 3 | Wants=network-online.target 4 | After=network.target network-online.target remote-fs.target 5 | 6 | [Service] 7 | Type=forking 8 | User=gns3 9 | Group=gns3 10 | PermissionsStartOnly=true 11 | #Environment=\"TMPDIR=/home/gns3/GNS3/tmp\" 12 | 13 | RuntimeDirectoryPreserve=yes 14 | PIDFile=/run/gns3/gns3v3.pid 15 | 16 | ExecStartPre=sudo /home/gns3/vigrid/etc/init.d/vigrid start 17 | ExecStart=/usr/local/bin/gns3server --config /home/gns3v3/.config/GNS3/3.0/gns3_server.conf --log /var/log/gns3/gns3v3.log --pid /run/gns3/gns3v3.pid --daemon 18 | Restart=on-abort 19 | 20 | ExecReload=/home/gns3/vigrid/etc/init.d/vigrid start 21 | ExecReload=/bin/kill -HUP $MAINPID 22 | 23 | ExecStop=/bin/kill -TERM $MAINPID 24 | TimeoutStopSec=300 25 | 26 | UMask=022 27 | 28 | [Install] 29 | WantedBy=multi-user.target 30 | -------------------------------------------------------------------------------- /lib/systemd/system/vigrid-ZFSexportUPD.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Vigrid ZFS exports Updater Daemon 3 | Wants=network-online.target 4 | After=network.target network-online.target 5 | 6 | [Service] 7 | Type=forking 8 | User=root 9 | PermissionsStartOnly=true 10 | ExecStart=/Vstorage/GNS3/vigrid/bin-nas/vigrid-daemon-ZFSexportsUPD -R /Vstorage -d -l /var/log/gns3/vigrid.log 11 | ExecStop=/bin/kill -TERM $MAINPID 12 | Restart=on-failure 13 | RestartSec=30s 14 | 15 | [Install] 16 | WantedBy=multi-user.target 17 | -------------------------------------------------------------------------------- /lib/systemd/system/vigrid-cloning.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Vigrid Cloning Daemon 3 | Wants=network-online.target 4 | After=network.target network-online.target gns3.service 5 | 6 | [Service] 7 | Type=forking 8 | User=root 9 | Group=gns3 10 | PermissionsStartOnly=true 11 | 12 | ExecStart=/home/gns3/vigrid/bin/vigrid-daemon-cloning -d -l /var/log/gns3/vigrid.log 13 | ExecStop=/bin/kill -TERM $MAINPID 14 | 15 | UMask=022 16 | 17 | Restart=on-failure 18 | RestartSec=30s 19 | 20 | [Install] 21 | WantedBy=multi-user.target 22 | -------------------------------------------------------------------------------- /lib/systemd/system/vigrid-deployer.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Vigrid Deployer Daemon 3 | Wants=network-online.target 4 | After=network.target network-online.target 5 | 6 | [Service] 7 | Type=forking 8 | User=root 9 | PermissionsStartOnly=true 10 | ExecStart=/Vstorage/GNS3/vigrid/bin-nas/vigrid-daemon-deployer -R /Vstorage -d -l /var/log/gns3/vigrid.log 11 | ExecStop=/bin/kill -TERM $MAINPID 12 | Restart=on-failure 13 | RestartSec=30s 14 | 15 | [Install] 16 | WantedBy=multi-user.target 17 | -------------------------------------------------------------------------------- /lib/systemd/system/vigrid-noconsoles.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Vigrid NOconsoles Daemon 3 | Wants=network-online.target 4 | After=network.target network-online.target gns3.service 5 | 6 | [Service] 7 | Type=forking 8 | #User=gns3 9 | User=root 10 | Group=gns3 11 | PermissionsStartOnly=true 12 | ExecStart=/home/gns3/vigrid/bin/vigrid-daemon-noconsoles -d -l /var/log/gns3/vigrid.log 13 | ExecStop=/bin/kill -TERM $MAINPID 14 | Restart=on-failure 15 | RestartSec=30s 16 | 17 | [Install] 18 | WantedBy=multi-user.target 19 | -------------------------------------------------------------------------------- /tftp/grub.cfg-vigrid-gns: -------------------------------------------------------------------------------- 1 | default=autoinstall 2 | timeout=30 3 | timeout_style=menu 4 | 5 | echo \"Trying /grub2-cfg/grub.cfg-\$net_default_mac\" 6 | configfile \"/grub2-cfg/grub.cfg-\$net_default_mac\" 7 | 8 | echo \"Trying grub.cfg-\$net_default_mac\" 9 | configfile \"grub.cfg-\$net_default_mac\" 10 | 11 | insmod part_gpt 12 | insmod fat 13 | insmod chain 14 | 15 | %%DISTROS%%% 16 | 17 | menuentry 'Continue normal boot process' --id normal { 18 | exit 19 | } 20 | 21 | menuentry 'Chainload into BIOS bootloader on first disk' --id local_chain_legacy_hd0 { 22 | set root=(hd0,0) 23 | chainloader +1 24 | boot 25 | } 26 | 27 | menuentry 'Chainload into BIOS bootloader on second disk' --id local_chain_legacy_hd1 { 28 | set root=(hd1,0) 29 | chainloader +1 30 | boot 31 | } 32 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.eslintignore: -------------------------------------------------------------------------------- 1 | **/xtscancodes.js 2 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "parserOptions": { 7 | "sourceType": "module" 8 | }, 9 | "extends": "eslint:recommended", 10 | "rules": { 11 | // Unsafe or confusing stuff that we forbid 12 | 13 | "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }], 14 | "no-constant-condition": ["error", { "checkLoops": false }], 15 | "no-var": "error", 16 | "no-useless-constructor": "error", 17 | "object-shorthand": ["error", "methods", { "avoidQuotes": true }], 18 | "prefer-arrow-callback": "error", 19 | "arrow-body-style": ["error", "as-needed", { "requireReturnForObjectLiteral": false } ], 20 | "arrow-parens": ["error", "as-needed", { "requireForBlockBody": true }], 21 | "arrow-spacing": ["error"], 22 | "no-confusing-arrow": ["error", { "allowParens": true }], 23 | 24 | // Enforced coding style 25 | 26 | "brace-style": ["error", "1tbs", { "allowSingleLine": true }], 27 | "indent": ["error", 4, { "SwitchCase": 1, 28 | "FunctionDeclaration": { "parameters": "first" }, 29 | "CallExpression": { "arguments": "first" }, 30 | "ArrayExpression": "first", 31 | "ObjectExpression": "first", 32 | "ignoreComments": true }], 33 | "comma-spacing": ["error"], 34 | "comma-style": ["error"], 35 | "curly": ["error", "multi-line"], 36 | "func-call-spacing": ["error"], 37 | "func-names": ["error"], 38 | "func-style": ["error", "declaration", { "allowArrowFunctions": true }], 39 | "key-spacing": ["error"], 40 | "keyword-spacing": ["error"], 41 | "no-trailing-spaces": ["error"], 42 | "semi": ["error"], 43 | "space-before-blocks": ["error"], 44 | "space-before-function-paren": ["error", { "anonymous": "always", 45 | "named": "never", 46 | "asyncArrow": "always" }], 47 | "switch-colon-spacing": ["error"], 48 | "camelcase": ["error", { allow: ["^XK_", "^XF86XK_"] }], 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Screenshots** 21 | If applicable, add screenshots to help explain your problem. 22 | 23 | **Client (please complete the following information):** 24 | - OS: [e.g. iOS] 25 | - Browser: [e.g. chrome, safari] 26 | - Browser version: [e.g. 22] 27 | 28 | **Server (please complete the following information):** 29 | - noVNC version: [e.g. 1.0.0 or git commit id] 30 | - VNC server: [e.g. QEMU, TigerVNC] 31 | - WebSocket proxy: [e.g. websockify] 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | npm: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - uses: actions/setup-node@v1 13 | with: 14 | # Needs to be explicitly specified for auth to work 15 | registry-url: 'https://registry.npmjs.org' 16 | - run: npm install 17 | - run: npm publish --access public 18 | env: 19 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 20 | if: ${{ !github.event.release.prerelease }} 21 | - run: npm publish --access public --tag beta 22 | env: 23 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 24 | if: ${{ github.event.release.prerelease }} 25 | snap: 26 | runs-on: ubuntu-latest 27 | container: snapcore/snapcraft 28 | steps: 29 | - uses: actions/checkout@v2 30 | - uses: actions/setup-node@v1 31 | - run: npm install 32 | - run: ./utils/use_require.js --clean --as commonjs --with-app 33 | - run: | 34 | cp utils/launch.sh build/launch.sh 35 | cp snap/local/svc_wrapper.sh build/svc_wrapper.sh 36 | - run: | 37 | VERSION=$(grep '"version"' package.json | cut -d '"' -f 4) 38 | echo $VERSION 39 | sed -i "s/@VERSION@/$VERSION/g" snap/snapcraft.yaml 40 | - run: snapcraft 41 | - run: | 42 | mkdir .snapcraft 43 | echo ${SNAPCRAFT_LOGIN} | base64 --decode --ignore-garbage > .snapcraft/snapcraft.cfg 44 | env: 45 | SNAPCRAFT_LOGIN: ${{secrets.SNAPCRAFT_LOGIN}} 46 | - run: snapcraft push --release=stable *.snap 47 | if: ${{ !github.event.release.prerelease }} 48 | - run: snapcraft push --release=beta *.snap 49 | if: ${{ github.event.release.prerelease }} 50 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | eslint: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - uses: actions/setup-node@v1 11 | - run: npm install 12 | - run: npm run lint 13 | html: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v2 17 | - uses: actions/setup-node@v1 18 | - run: npm install 19 | - run: git ls-tree --name-only -r HEAD | grep -E "[.](html|css)$" | xargs ./utils/validate 20 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | test: 7 | strategy: 8 | matrix: 9 | os: 10 | - ubuntu-latest 11 | - windows-latest 12 | browser: 13 | - ChromeHeadless 14 | - FirefoxHeadless 15 | include: 16 | - os: macos-latest 17 | browser: Safari 18 | - os: windows-latest 19 | browser: EdgeHeadless 20 | - os: windows-latest 21 | browser: IE 22 | fail-fast: false 23 | runs-on: ${{ matrix.os }} 24 | steps: 25 | - uses: actions/checkout@v2 26 | - uses: actions/setup-node@v1 27 | - run: npm install 28 | - run: npm run test 29 | env: 30 | TEST_BROWSER_NAME: ${{ matrix.browser }} 31 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.o 3 | tests/data_*.js 4 | utils/rebind.so 5 | utils/websockify 6 | /node_modules 7 | /build 8 | /lib 9 | recordings 10 | *.swp 11 | *~ 12 | noVNC-*.tgz 13 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/.gitmodules -------------------------------------------------------------------------------- /www/noVNC-1.2.0/AUTHORS: -------------------------------------------------------------------------------- 1 | maintainers: 2 | - Joel Martin (@kanaka) 3 | - Solly Ross (@directxman12) 4 | - Samuel Mannehed for Cendio AB (@samhed) 5 | - Pierre Ossman for Cendio AB (@CendioOssman) 6 | maintainersEmeritus: 7 | - @astrand 8 | contributors: 9 | # There are a bunch of people that should be here. 10 | # If you want to be on this list, feel free send a PR 11 | # to add yourself. 12 | - jalf 13 | - NTT corp. 14 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/LICENSE.txt: -------------------------------------------------------------------------------- 1 | noVNC is Copyright (C) 2019 The noVNC Authors 2 | (./AUTHORS) 3 | 4 | The noVNC core library files are licensed under the MPL 2.0 (Mozilla 5 | Public License 2.0). The noVNC core library is composed of the 6 | Javascript code necessary for full noVNC operation. This includes (but 7 | is not limited to): 8 | 9 | core/**/*.js 10 | app/*.js 11 | test/playback.js 12 | 13 | The HTML, CSS, font and images files that included with the noVNC 14 | source distibution (or repository) are not considered part of the 15 | noVNC core library and are licensed under more permissive licenses. 16 | The intent is to allow easy integration of noVNC into existing web 17 | sites and web applications. 18 | 19 | The HTML, CSS, font and image files are licensed as follows: 20 | 21 | *.html : 2-Clause BSD license 22 | 23 | app/styles/*.css : 2-Clause BSD license 24 | 25 | app/styles/Orbitron* : SIL Open Font License 1.1 26 | (Copyright 2009 Matt McInerney) 27 | 28 | app/images/ : Creative Commons Attribution-ShareAlike 29 | http://creativecommons.org/licenses/by-sa/3.0/ 30 | 31 | Some portions of noVNC are copyright to their individual authors. 32 | Please refer to the individual source files and/or to the noVNC commit 33 | history: https://github.com/novnc/noVNC/commits/master 34 | 35 | The are several files and projects that have been incorporated into 36 | the noVNC core library. Here is a list of those files and the original 37 | licenses (all MPL 2.0 compatible): 38 | 39 | core/base64.js : MPL 2.0 40 | 41 | core/des.js : Various BSD style licenses 42 | 43 | vendor/pako/ : MIT 44 | 45 | vendor/browser-es-module-loader/src/ : MIT 46 | 47 | vendor/browser-es-module-loader/dist/ : Various BSD style licenses 48 | 49 | vendor/promise.js : MIT 50 | 51 | Any other files not mentioned above are typically marked with 52 | a copyright/license header at the top of the file. The default noVNC 53 | license is MPL-2.0. 54 | 55 | The following license texts are included: 56 | 57 | docs/LICENSE.MPL-2.0 58 | docs/LICENSE.OFL-1.1 59 | docs/LICENSE.BSD-3-Clause (New BSD) 60 | docs/LICENSE.BSD-2-Clause (Simplified BSD / FreeBSD) 61 | vendor/pako/LICENSE (MIT) 62 | 63 | Or alternatively the license texts may be found here: 64 | 65 | http://www.mozilla.org/MPL/2.0/ 66 | http://scripts.sil.org/OFL 67 | http://en.wikipedia.org/wiki/BSD_licenses 68 | https://opensource.org/licenses/MIT 69 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/error-handler.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | // NB: this should *not* be included as a module until we have 10 | // native support in the browsers, so that our error handler 11 | // can catch script-loading errors. 12 | 13 | // No ES6 can be used in this file since it's used for the translation 14 | /* eslint-disable prefer-arrow-callback */ 15 | 16 | (function _scope() { 17 | "use strict"; 18 | 19 | // Fallback for all uncought errors 20 | function handleError(event, err) { 21 | try { 22 | const msg = document.getElementById('noVNC_fallback_errormsg'); 23 | 24 | // Only show the initial error 25 | if (msg.hasChildNodes()) { 26 | return false; 27 | } 28 | 29 | let div = document.createElement("div"); 30 | div.classList.add('noVNC_message'); 31 | div.appendChild(document.createTextNode(event.message)); 32 | msg.appendChild(div); 33 | 34 | if (event.filename) { 35 | div = document.createElement("div"); 36 | div.className = 'noVNC_location'; 37 | let text = event.filename; 38 | if (event.lineno !== undefined) { 39 | text += ":" + event.lineno; 40 | if (event.colno !== undefined) { 41 | text += ":" + event.colno; 42 | } 43 | } 44 | div.appendChild(document.createTextNode(text)); 45 | msg.appendChild(div); 46 | } 47 | 48 | if (err && err.stack) { 49 | div = document.createElement("div"); 50 | div.className = 'noVNC_stack'; 51 | div.appendChild(document.createTextNode(err.stack)); 52 | msg.appendChild(div); 53 | } 54 | 55 | document.getElementById('noVNC_fallback_error') 56 | .classList.add("noVNC_open"); 57 | } catch (exc) { 58 | document.write("noVNC encountered an error."); 59 | } 60 | // Don't return true since this would prevent the error 61 | // from being printed to the browser console. 62 | return false; 63 | } 64 | window.addEventListener('error', function onerror(evt) { handleError(evt, evt.error); }); 65 | window.addEventListener('unhandledrejection', function onreject(evt) { handleError(evt.reason, evt.reason); }); 66 | })(); 67 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-120x120.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-144x144.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-152x152.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-16x16.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-192x192.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-24x24.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-32x32.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-48x48.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-60x60.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-64x64.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-72x72.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-76x76.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/icons/novnc-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/images/icons/novnc-96x96.png -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/images/windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml 51 | 56 | 57 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/locale/README: -------------------------------------------------------------------------------- 1 | DO NOT MODIFY THE FILES IN THIS FOLDER, THEY ARE AUTOMATICALLY GENERATED FROM THE PO-FILES. 2 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/locale/ja.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 | "Toggle Windows": "Windows キーを切り替え", 33 | "Windows": "Windows", 34 | "Send Tab": "Tab キーを送信", 35 | "Tab": "Tab", 36 | "Esc": "Esc", 37 | "Send Escape": "Escape キーを送信", 38 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 39 | "Send Ctrl-Alt-Del": "Ctrl-Alt-Del を送信", 40 | "Shutdown/Reboot": "シャットダウン/再起動", 41 | "Shutdown/Reboot...": "シャットダウン/再起動...", 42 | "Power": "電源", 43 | "Shutdown": "シャットダウン", 44 | "Reboot": "再起動", 45 | "Reset": "リセット", 46 | "Clipboard": "クリップボード", 47 | "Clear": "クリア", 48 | "Fullscreen": "全画面表示", 49 | "Settings": "設定", 50 | "Shared Mode": "共有モード", 51 | "View Only": "表示のみ", 52 | "Clip to Window": "ウィンドウにクリップ", 53 | "Scaling Mode:": "スケーリングモード:", 54 | "None": "なし", 55 | "Local Scaling": "ローカルスケーリング", 56 | "Remote Resizing": "リモートでリサイズ", 57 | "Advanced": "高度", 58 | "Repeater ID:": "リピーター ID:", 59 | "WebSocket": "WebSocket", 60 | "Encrypt": "暗号化", 61 | "Host:": "ホスト:", 62 | "Port:": "ポート:", 63 | "Path:": "パス:", 64 | "Automatic Reconnect": "自動再接続", 65 | "Reconnect Delay (ms):": "再接続する遅延 (ミリ秒):", 66 | "Show Dot when No Cursor": "カーソルがないときにドットを表示", 67 | "Logging:": "ロギング:", 68 | "Disconnect": "切断", 69 | "Connect": "接続", 70 | "Password:": "パスワード:", 71 | "Send Password": "パスワードを送信", 72 | "Cancel": "キャンセル" 73 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/locale/ko.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": "Esc 보내기", 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": "웹소켓", 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 | "Send Password": "비밀번호 전송", 69 | "Cancel": "취소" 70 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/locale/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "Connecting...": "Ansluter...", 3 | "Disconnecting...": "Kopplar ner...", 4 | "Reconnecting...": "Återansluter...", 5 | "Internal error": "Internt fel", 6 | "Must set host": "Du måste specifiera en värd", 7 | "Connected (encrypted) to ": "Ansluten (krypterat) till ", 8 | "Connected (unencrypted) to ": "Ansluten (okrypterat) till ", 9 | "Something went wrong, connection is closed": "Något gick fel, anslutningen avslutades", 10 | "Failed to connect to server": "Misslyckades att ansluta till servern", 11 | "Disconnected": "Frånkopplad", 12 | "New connection has been rejected with reason: ": "Ny anslutning har blivit nekad med följande skäl: ", 13 | "New connection has been rejected": "Ny anslutning har blivit nekad", 14 | "Credentials are required": "Användaruppgifter krävs", 15 | "noVNC encountered an error:": "noVNC stötte på ett problem:", 16 | "Hide/Show the control bar": "Göm/Visa kontrollbaren", 17 | "Drag": "Dra", 18 | "Move/Drag Viewport": "Flytta/Dra Vyn", 19 | "Keyboard": "Tangentbord", 20 | "Show Keyboard": "Visa Tangentbord", 21 | "Extra keys": "Extraknappar", 22 | "Show Extra Keys": "Visa Extraknappar", 23 | "Ctrl": "Ctrl", 24 | "Toggle Ctrl": "Växla Ctrl", 25 | "Alt": "Alt", 26 | "Toggle Alt": "Växla Alt", 27 | "Toggle Windows": "Växla Windows", 28 | "Windows": "Windows", 29 | "Send Tab": "Skicka Tab", 30 | "Tab": "Tab", 31 | "Esc": "Esc", 32 | "Send Escape": "Skicka Escape", 33 | "Ctrl+Alt+Del": "Ctrl+Alt+Del", 34 | "Send Ctrl-Alt-Del": "Skicka Ctrl-Alt-Del", 35 | "Shutdown/Reboot": "Stäng av/Boota om", 36 | "Shutdown/Reboot...": "Stäng av/Boota om...", 37 | "Power": "Ström", 38 | "Shutdown": "Stäng av", 39 | "Reboot": "Boota om", 40 | "Reset": "Återställ", 41 | "Clipboard": "Urklipp", 42 | "Clear": "Rensa", 43 | "Fullscreen": "Fullskärm", 44 | "Settings": "Inställningar", 45 | "Shared Mode": "Delat Läge", 46 | "View Only": "Endast Visning", 47 | "Clip to Window": "Begränsa till Fönster", 48 | "Scaling Mode:": "Skalningsläge:", 49 | "None": "Ingen", 50 | "Local Scaling": "Lokal Skalning", 51 | "Remote Resizing": "Ändra Storlek", 52 | "Advanced": "Avancerat", 53 | "Quality:": "Kvalitet:", 54 | "Compression level:": "Kompressionsnivå:", 55 | "Repeater ID:": "Repeater-ID:", 56 | "WebSocket": "WebSocket", 57 | "Encrypt": "Kryptera", 58 | "Host:": "Värd:", 59 | "Port:": "Port:", 60 | "Path:": "Sökväg:", 61 | "Automatic Reconnect": "Automatisk Återanslutning", 62 | "Reconnect Delay (ms):": "Fördröjning (ms):", 63 | "Show Dot when No Cursor": "Visa prick när ingen muspekare finns", 64 | "Logging:": "Loggning:", 65 | "Version:": "Version:", 66 | "Disconnect": "Koppla från", 67 | "Connect": "Anslut", 68 | "Username:": "Användarnamn:", 69 | "Password:": "Lösenord:", 70 | "Send Credentials": "Skicka Användaruppgifter", 71 | "Cancel": "Avbryt" 72 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/sounds/bell.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/sounds/bell.mp3 -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/sounds/bell.oga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/sounds/bell.oga -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/styles/Orbitron700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/styles/Orbitron700.ttf -------------------------------------------------------------------------------- /www/noVNC-1.2.0/app/styles/Orbitron700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/app/styles/Orbitron700.woff -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/decoders/copyrect.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | export default class CopyRectDecoder { 11 | decodeRect(x, y, width, height, sock, display, depth) { 12 | if (sock.rQwait("COPYRECT", 4)) { 13 | return false; 14 | } 15 | 16 | let deltaX = sock.rQshift16(); 17 | let deltaY = sock.rQshift16(); 18 | display.copyImage(deltaX, deltaY, x, y, width, height); 19 | 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/decoders/raw.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | export default class RawDecoder { 11 | constructor() { 12 | this._lines = 0; 13 | } 14 | 15 | decodeRect(x, y, width, height, sock, display, depth) { 16 | if (this._lines === 0) { 17 | this._lines = height; 18 | } 19 | 20 | const pixelSize = depth == 8 ? 1 : 4; 21 | const bytesPerLine = width * pixelSize; 22 | 23 | if (sock.rQwait("RAW", bytesPerLine)) { 24 | return false; 25 | } 26 | 27 | const curY = y + (height - this._lines); 28 | const currHeight = Math.min(this._lines, 29 | Math.floor(sock.rQlen / bytesPerLine)); 30 | let data = sock.rQ; 31 | let index = sock.rQi; 32 | 33 | // Convert data if needed 34 | if (depth == 8) { 35 | const pixels = width * currHeight; 36 | const newdata = new Uint8Array(pixels * 4); 37 | for (let i = 0; i < pixels; i++) { 38 | newdata[i * 4 + 0] = ((data[index + i] >> 0) & 0x3) * 255 / 3; 39 | newdata[i * 4 + 1] = ((data[index + i] >> 2) & 0x3) * 255 / 3; 40 | newdata[i * 4 + 2] = ((data[index + i] >> 4) & 0x3) * 255 / 3; 41 | newdata[i * 4 + 4] = 0; 42 | } 43 | data = newdata; 44 | index = 0; 45 | } 46 | 47 | display.blitImage(x, curY, width, currHeight, data, index); 48 | sock.rQskipBytes(currHeight * bytesPerLine); 49 | this._lines -= currHeight; 50 | if (this._lines > 0) { 51 | return false; 52 | } 53 | 54 | return true; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/decoders/rre.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | export default class RREDecoder { 11 | constructor() { 12 | this._subrects = 0; 13 | } 14 | 15 | decodeRect(x, y, width, height, sock, display, depth) { 16 | if (this._subrects === 0) { 17 | if (sock.rQwait("RRE", 4 + 4)) { 18 | return false; 19 | } 20 | 21 | this._subrects = sock.rQshift32(); 22 | 23 | let color = sock.rQshiftBytes(4); // Background 24 | display.fillRect(x, y, width, height, color); 25 | } 26 | 27 | while (this._subrects > 0) { 28 | if (sock.rQwait("RRE", 4 + 8)) { 29 | return false; 30 | } 31 | 32 | let color = sock.rQshiftBytes(4); 33 | let sx = sock.rQshift16(); 34 | let sy = sock.rQshift16(); 35 | let swidth = sock.rQshift16(); 36 | let sheight = sock.rQshift16(); 37 | display.fillRect(x + sx, y + sy, swidth, sheight, color); 38 | 39 | this._subrects--; 40 | } 41 | 42 | return true; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/decoders/tightpng.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | * 8 | */ 9 | 10 | import TightDecoder from './tight.js'; 11 | 12 | export default class TightPNGDecoder extends TightDecoder { 13 | _pngRect(x, y, width, height, sock, display, depth) { 14 | let data = this._readData(sock); 15 | if (data === null) { 16 | return false; 17 | } 18 | 19 | display.imageRect(x, y, width, height, "image/png", data); 20 | 21 | return true; 22 | } 23 | 24 | _basicRect(ctl, x, y, width, height, sock, display, depth) { 25 | throw new Error("BasicCompression received in TightPNG rect"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/deflator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | import { deflateInit, deflate } from "../vendor/pako/lib/zlib/deflate.js"; 10 | import { Z_FULL_FLUSH } from "../vendor/pako/lib/zlib/deflate.js"; 11 | import ZStream from "../vendor/pako/lib/zlib/zstream.js"; 12 | 13 | export default class Deflator { 14 | constructor() { 15 | this.strm = new ZStream(); 16 | this.chunkSize = 1024 * 10 * 10; 17 | this.outputBuffer = new Uint8Array(this.chunkSize); 18 | this.windowBits = 5; 19 | 20 | deflateInit(this.strm, this.windowBits); 21 | } 22 | 23 | deflate(inData) { 24 | /* eslint-disable camelcase */ 25 | this.strm.input = inData; 26 | this.strm.avail_in = this.strm.input.length; 27 | this.strm.next_in = 0; 28 | this.strm.output = this.outputBuffer; 29 | this.strm.avail_out = this.chunkSize; 30 | this.strm.next_out = 0; 31 | /* eslint-enable camelcase */ 32 | 33 | let lastRet = deflate(this.strm, Z_FULL_FLUSH); 34 | let outData = new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out); 35 | 36 | if (lastRet < 0) { 37 | throw new Error("zlib deflate failed"); 38 | } 39 | 40 | if (this.strm.avail_in > 0) { 41 | // Read chunks until done 42 | 43 | let chunks = [outData]; 44 | let totalLen = outData.length; 45 | do { 46 | /* eslint-disable camelcase */ 47 | this.strm.output = new Uint8Array(this.chunkSize); 48 | this.strm.next_out = 0; 49 | this.strm.avail_out = this.chunkSize; 50 | /* eslint-enable camelcase */ 51 | 52 | lastRet = deflate(this.strm, Z_FULL_FLUSH); 53 | 54 | if (lastRet < 0) { 55 | throw new Error("zlib deflate failed"); 56 | } 57 | 58 | let chunk = new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out); 59 | totalLen += chunk.length; 60 | chunks.push(chunk); 61 | } while (this.strm.avail_in > 0); 62 | 63 | // Combine chunks into a single data 64 | 65 | let newData = new Uint8Array(totalLen); 66 | let offset = 0; 67 | 68 | for (let i = 0; i < chunks.length; i++) { 69 | newData.set(chunks[i], offset); 70 | offset += chunks[i].length; 71 | } 72 | 73 | outData = newData; 74 | } 75 | 76 | /* eslint-disable camelcase */ 77 | this.strm.input = null; 78 | this.strm.avail_in = 0; 79 | this.strm.next_in = 0; 80 | /* eslint-enable camelcase */ 81 | 82 | return outData; 83 | } 84 | 85 | } 86 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/encodings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | export const encodings = { 10 | encodingRaw: 0, 11 | encodingCopyRect: 1, 12 | encodingRRE: 2, 13 | encodingHextile: 5, 14 | encodingTight: 7, 15 | encodingTightPNG: -260, 16 | 17 | pseudoEncodingQualityLevel9: -23, 18 | pseudoEncodingQualityLevel0: -32, 19 | pseudoEncodingDesktopSize: -223, 20 | pseudoEncodingLastRect: -224, 21 | pseudoEncodingCursor: -239, 22 | pseudoEncodingQEMUExtendedKeyEvent: -258, 23 | pseudoEncodingDesktopName: -307, 24 | pseudoEncodingExtendedDesktopSize: -308, 25 | pseudoEncodingXvp: -309, 26 | pseudoEncodingFence: -312, 27 | pseudoEncodingContinuousUpdates: -313, 28 | pseudoEncodingCompressLevel9: -247, 29 | pseudoEncodingCompressLevel0: -256, 30 | pseudoEncodingVMwareCursor: 0x574d5664, 31 | pseudoEncodingExtendedClipboard: 0xc0a1e5ce 32 | }; 33 | 34 | export function encodingName(num) { 35 | switch (num) { 36 | case encodings.encodingRaw: return "Raw"; 37 | case encodings.encodingCopyRect: return "CopyRect"; 38 | case encodings.encodingRRE: return "RRE"; 39 | case encodings.encodingHextile: return "Hextile"; 40 | case encodings.encodingTight: return "Tight"; 41 | case encodings.encodingTightPNG: return "TightPNG"; 42 | default: return "[unknown encoding " + num + "]"; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/inflator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | import { inflateInit, inflate, inflateReset } from "../vendor/pako/lib/zlib/inflate.js"; 10 | import ZStream from "../vendor/pako/lib/zlib/zstream.js"; 11 | 12 | export default class Inflate { 13 | constructor() { 14 | this.strm = new ZStream(); 15 | this.chunkSize = 1024 * 10 * 10; 16 | this.strm.output = new Uint8Array(this.chunkSize); 17 | this.windowBits = 5; 18 | 19 | inflateInit(this.strm, this.windowBits); 20 | } 21 | 22 | setInput(data) { 23 | if (!data) { 24 | //FIXME: flush remaining data. 25 | /* eslint-disable camelcase */ 26 | this.strm.input = null; 27 | this.strm.avail_in = 0; 28 | this.strm.next_in = 0; 29 | } else { 30 | this.strm.input = data; 31 | this.strm.avail_in = this.strm.input.length; 32 | this.strm.next_in = 0; 33 | /* eslint-enable camelcase */ 34 | } 35 | } 36 | 37 | inflate(expected) { 38 | // resize our output buffer if it's too small 39 | // (we could just use multiple chunks, but that would cause an extra 40 | // allocation each time to flatten the chunks) 41 | if (expected > this.chunkSize) { 42 | this.chunkSize = expected; 43 | this.strm.output = new Uint8Array(this.chunkSize); 44 | } 45 | 46 | /* eslint-disable camelcase */ 47 | this.strm.next_out = 0; 48 | this.strm.avail_out = expected; 49 | /* eslint-enable camelcase */ 50 | 51 | let ret = inflate(this.strm, 0); // Flush argument not used. 52 | if (ret < 0) { 53 | throw new Error("zlib inflate failed"); 54 | } 55 | 56 | if (this.strm.next_out != expected) { 57 | throw new Error("Incomplete zlib block"); 58 | } 59 | 60 | return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out); 61 | } 62 | 63 | reset() { 64 | inflateReset(this.strm); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/element.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | /* 10 | * HTML element utility functions 11 | */ 12 | 13 | export function clientToElement(x, y, elem) { 14 | const bounds = elem.getBoundingClientRect(); 15 | let pos = { x: 0, y: 0 }; 16 | // Clip to target bounds 17 | if (x < bounds.left) { 18 | pos.x = 0; 19 | } else if (x >= bounds.right) { 20 | pos.x = bounds.width - 1; 21 | } else { 22 | pos.x = x - bounds.left; 23 | } 24 | if (y < bounds.top) { 25 | pos.y = 0; 26 | } else if (y >= bounds.bottom) { 27 | pos.y = bounds.height - 1; 28 | } else { 29 | pos.y = y - bounds.top; 30 | } 31 | return pos; 32 | } 33 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/eventtarget.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | export default class EventTargetMixin { 10 | constructor() { 11 | this._listeners = new Map(); 12 | } 13 | 14 | addEventListener(type, callback) { 15 | if (!this._listeners.has(type)) { 16 | this._listeners.set(type, new Set()); 17 | } 18 | this._listeners.get(type).add(callback); 19 | } 20 | 21 | removeEventListener(type, callback) { 22 | if (this._listeners.has(type)) { 23 | this._listeners.get(type).delete(callback); 24 | } 25 | } 26 | 27 | dispatchEvent(event) { 28 | if (!this._listeners.has(event.type)) { 29 | return true; 30 | } 31 | this._listeners.get(event.type) 32 | .forEach(callback => callback.call(this, event)); 33 | return !event.defaultPrevented; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/int.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | export function toUnsigned32bit(toConvert) { 10 | return toConvert >>> 0; 11 | } 12 | 13 | export function toSigned32bit(toConvert) { 14 | return toConvert | 0; 15 | } 16 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/logging.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 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 | let _logLevel = 'warn'; 14 | 15 | let Debug = () => {}; 16 | let Info = () => {}; 17 | let Warn = () => {}; 18 | let Error = () => {}; 19 | 20 | export function initLogging(level) { 21 | if (typeof level === 'undefined') { 22 | level = _logLevel; 23 | } else { 24 | _logLevel = level; 25 | } 26 | 27 | Debug = Info = Warn = Error = () => {}; 28 | 29 | if (typeof window.console !== "undefined") { 30 | /* eslint-disable no-console, no-fallthrough */ 31 | switch (level) { 32 | case 'debug': 33 | Debug = console.debug.bind(window.console); 34 | case 'info': 35 | Info = console.info.bind(window.console); 36 | case 'warn': 37 | Warn = console.warn.bind(window.console); 38 | case 'error': 39 | Error = console.error.bind(window.console); 40 | case 'none': 41 | break; 42 | default: 43 | throw new window.Error("invalid logging type '" + level + "'"); 44 | } 45 | /* eslint-enable no-console, no-fallthrough */ 46 | } 47 | } 48 | 49 | export function getLogging() { 50 | return _logLevel; 51 | } 52 | 53 | export { Debug, Info, Warn, Error }; 54 | 55 | // Initialize logging level 56 | initLogging(); 57 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/polyfill.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2020 The noVNC Authors 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 | const to = Object(target); 20 | 21 | for (let index = 1; index < arguments.length; index++) { 22 | const nextSource = arguments[index]; 23 | 24 | if (nextSource != null) { // Skip over if undefined or null 25 | for (let 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 | (() => { 42 | function CustomEvent(event, params) { 43 | params = params || { bubbles: false, cancelable: false, detail: undefined }; 44 | const 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 | 56 | /* Number.isInteger() (taken from MDN) */ 57 | Number.isInteger = Number.isInteger || function isInteger(value) { 58 | return typeof value === 'number' && 59 | isFinite(value) && 60 | Math.floor(value) === value; 61 | }; 62 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/core/util/strings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2019 The noVNC Authors 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | * 6 | * See README.md for usage and integration instructions. 7 | */ 8 | 9 | // Decode from UTF-8 10 | export function decodeUTF8(utf8string, allowLatin1=false) { 11 | try { 12 | return decodeURIComponent(escape(utf8string)); 13 | } catch (e) { 14 | if (e instanceof URIError) { 15 | if (allowLatin1) { 16 | // If we allow Latin1 we can ignore any decoding fails 17 | // and in these cases return the original string 18 | return utf8string; 19 | } 20 | } 21 | throw e; 22 | } 23 | } 24 | 25 | // Encode to UTF-8 26 | export function encodeUTF8(DOMString) { 27 | return unescape(encodeURIComponent(DOMString)); 28 | } 29 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/LIBRARY.md: -------------------------------------------------------------------------------- 1 | # Using the noVNC JavaScript library 2 | 3 | This document describes how to make use of the noVNC JavaScript library for 4 | integration in your own VNC client application. If you wish to embed the more 5 | complete noVNC application with its included user interface then please see 6 | our [embedding documentation](EMBEDDING.md). 7 | 8 | ## API 9 | 10 | The API of noVNC consists of a single object called `RFB`. The formal 11 | documentation for that object can be found in our [API documentation](API.md). 12 | 13 | ## Example 14 | 15 | noVNC includes a small example application called `vnc_lite.html`. This does 16 | not make use of all the features of noVNC, but is a good start to see how to 17 | do things. 18 | 19 | ## Conversion of Modules 20 | 21 | noVNC is written using ECMAScript 6 modules. Many of the major browsers support 22 | these modules natively, but not all. They are also not supported by Node.js. To 23 | use noVNC in these places the library must first be converted. 24 | 25 | Fortunately noVNC includes a script to handle this conversion. Please follow 26 | the following steps: 27 | 28 | 1. Install Node.js 29 | 2. Run `npm install` in the noVNC directory 30 | 3. Run `./utils/use_require.js --as ` 31 | 32 | Several module formats are available. Please run 33 | `./utils/use_require.js --help` to see them all. 34 | 35 | The result of the conversion is available in the `lib/` directory. 36 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/LICENSE.BSD-2-Clause: -------------------------------------------------------------------------------- 1 | Copyright (c) , 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | * Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 14 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 17 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/LICENSE.BSD-3-Clause: -------------------------------------------------------------------------------- 1 | Copyright (c) , 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/links: -------------------------------------------------------------------------------- 1 | New tight PNG protocol: 2 | http://wiki.qemu.org/VNC_Tight_PNG 3 | http://xf.iksaif.net/blog/index.php?post/2010/06/14/QEMU:-Tight-PNG-and-some-profiling 4 | 5 | RFB protocol and extensions: 6 | http://tigervnc.org/cgi-bin/rfbproto 7 | 8 | Canvas Browser Compatibility: 9 | http://philip.html5.org/tests/canvas/suite/tests/results.html 10 | 11 | WebSockets API standard: 12 | http://www.whatwg.org/specs/web-apps/current-work/complete.html#websocket 13 | http://dev.w3.org/html5/websockets/ 14 | http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-00.txt 15 | 16 | Browser Keyboard Events detailed: 17 | http://unixpapa.com/js/key.html 18 | 19 | ActionScript (Flash) WebSocket implementation: 20 | http://github.com/gimite/web-socket-js 21 | 22 | ActionScript (Flash) crypto/TLS library: 23 | http://code.google.com/p/as3crypto 24 | http://github.com/lyokato/as3crypto_patched 25 | 26 | TLS Protocol: 27 | http://en.wikipedia.org/wiki/Transport_Layer_Security 28 | 29 | Generate self-signed certificate: 30 | http://docs.python.org/dev/library/ssl.html#certificates 31 | 32 | Cursor appearance/style (for Cursor pseudo-encoding): 33 | http://en.wikipedia.org/wiki/ICO_(file_format) 34 | http://www.daubnet.com/en/file-format-cur 35 | https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property 36 | http://www.fileformat.info/format/bmp/egff.htm 37 | 38 | Icon/Cursor file format: 39 | http://msdn.microsoft.com/en-us/library/ms997538 40 | http://msdn.microsoft.com/en-us/library/aa921550.aspx 41 | http://msdn.microsoft.com/en-us/library/aa930622.aspx 42 | 43 | 44 | RDP Protocol specification: 45 | http://msdn.microsoft.com/en-us/library/cc240445(v=PROT.10).aspx 46 | 47 | 48 | Related projects: 49 | 50 | guacamole: http://guacamole.sourceforge.net/ 51 | 52 | - Web client, but Java servlet does pre-processing 53 | 54 | jsvnc: http://code.google.com/p/jsvnc/ 55 | 56 | - No releases 57 | 58 | webvnc: http://code.google.com/p/webvnc/ 59 | 60 | - Jetty web server gateway, no updates since April 2008. 61 | 62 | RealVNC Java applet: http://www.realvnc.com/support/javavncviewer.html 63 | 64 | - Java applet 65 | 66 | Flashlight-VNC: http://www.wizhelp.com/flashlight-vnc/ 67 | 68 | - Adobe Flash implementation 69 | 70 | FVNC: http://osflash.org/fvnc 71 | 72 | - Adbove Flash implementation 73 | 74 | CanVNC: http://canvnc.sourceforge.net/ 75 | 76 | - HTML client with REST to VNC python proxy. Mostly vapor. 77 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/notes: -------------------------------------------------------------------------------- 1 | Rebuilding inflator.js 2 | 3 | - Download pako from npm 4 | - Install browserify using npm 5 | - browserify core/inflator.mod.js -o core/inflator.js -s Inflator 6 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/rfbproto-3.3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/docs/rfbproto-3.3.pdf -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/rfbproto-3.7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/docs/rfbproto-3.7.pdf -------------------------------------------------------------------------------- /www/noVNC-1.2.0/docs/rfbproto-3.8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/noVNC-1.2.0/docs/rfbproto-3.8.pdf -------------------------------------------------------------------------------- /www/noVNC-1.2.0/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | 3 | // The Safari launcher is broken, so construct our own 4 | function SafariBrowser(id, baseBrowserDecorator, args) { 5 | baseBrowserDecorator(this); 6 | 7 | this._start = function(url) { 8 | this._execCommand('/usr/bin/open', ['-W', '-n', '-a', 'Safari', url]); 9 | } 10 | } 11 | 12 | SafariBrowser.prototype = { 13 | name: 'Safari' 14 | } 15 | 16 | module.exports = (config) => { 17 | let browsers = []; 18 | 19 | if (process.env.TEST_BROWSER_NAME) { 20 | browsers = process.env.TEST_BROWSER_NAME.split(','); 21 | } 22 | 23 | const my_conf = { 24 | 25 | // base path that will be used to resolve all patterns (eg. files, exclude) 26 | basePath: '', 27 | 28 | // frameworks to use 29 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 30 | frameworks: ['mocha', 'sinon-chai'], 31 | 32 | // list of files / patterns to load in the browser (loaded in order) 33 | files: [ 34 | { pattern: 'app/localization.js', included: false }, 35 | { pattern: 'app/webutil.js', included: false }, 36 | { pattern: 'core/**/*.js', included: false }, 37 | { pattern: 'vendor/pako/**/*.js', included: false }, 38 | { pattern: 'vendor/browser-es-module-loader/dist/*.js*', included: false }, 39 | { pattern: 'tests/test.*.js', included: false }, 40 | { pattern: 'tests/fake.*.js', included: false }, 41 | { pattern: 'tests/assertions.js', included: false }, 42 | 'vendor/promise.js', 43 | 'tests/karma-test-main.js', 44 | ], 45 | 46 | client: { 47 | mocha: { 48 | // replace Karma debug page with mocha display 49 | 'reporter': 'html', 50 | 'ui': 'bdd' 51 | } 52 | }, 53 | 54 | // list of files to exclude 55 | exclude: [ 56 | ], 57 | 58 | plugins: [ 59 | 'karma-*', 60 | '@chiragrupani/karma-chromium-edge-launcher', 61 | { 'launcher:Safari': [ 'type', SafariBrowser ] }, 62 | ], 63 | 64 | // start these browsers 65 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 66 | browsers: browsers, 67 | 68 | // test results reporter to use 69 | // possible values: 'dots', 'progress' 70 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 71 | reporters: ['mocha'], 72 | 73 | 74 | // level of logging 75 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 76 | logLevel: config.LOG_INFO, 77 | 78 | 79 | // enable / disable watching file and executing tests whenever any file changes 80 | autoWatch: false, 81 | 82 | // Continuous Integration mode 83 | // if true, Karma captures browsers, runs the tests and exits 84 | singleRun: true, 85 | }; 86 | 87 | config.set(my_conf); 88 | }; 89 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@novnc/novnc", 3 | "version": "1.2.0", 4 | "description": "An HTML5 VNC client", 5 | "browser": "lib/rfb", 6 | "directories": { 7 | "lib": "lib", 8 | "doc": "docs", 9 | "test": "tests" 10 | }, 11 | "files": [ 12 | "lib", 13 | "AUTHORS", 14 | "VERSION", 15 | "docs/API.md", 16 | "docs/LIBRARY.md", 17 | "docs/LICENSE*", 18 | "core", 19 | "vendor/pako" 20 | ], 21 | "scripts": { 22 | "lint": "eslint app core po/po2js po/xgettext-html tests utils", 23 | "test": "karma start karma.conf.js", 24 | "prepublish": "node ./utils/use_require.js --as commonjs --clean" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "git+https://github.com/novnc/noVNC.git" 29 | }, 30 | "author": "Joel Martin (https://github.com/kanaka)", 31 | "contributors": [ 32 | "Solly Ross (https://github.com/directxman12)", 33 | "Peter Åstrand (https://github.com/astrand)", 34 | "Samuel Mannehed (https://github.com/samhed)", 35 | "Pierre Ossman (https://github.com/CendioOssman)" 36 | ], 37 | "license": "MPL-2.0", 38 | "bugs": { 39 | "url": "https://github.com/novnc/noVNC/issues" 40 | }, 41 | "homepage": "https://github.com/novnc/noVNC", 42 | "devDependencies": { 43 | "@babel/core": "*", 44 | "@babel/plugin-syntax-dynamic-import": "*", 45 | "@babel/plugin-transform-modules-amd": "*", 46 | "@babel/plugin-transform-modules-commonjs": "*", 47 | "@babel/plugin-transform-modules-systemjs": "*", 48 | "@babel/plugin-transform-modules-umd": "*", 49 | "@babel/preset-env": "*", 50 | "@babel/cli": "*", 51 | "babel-plugin-import-redirect": "*", 52 | "browserify": "*", 53 | "babelify": "*", 54 | "core-js": "*", 55 | "chai": "*", 56 | "commander": "*", 57 | "es-module-loader": "*", 58 | "eslint": "*", 59 | "fs-extra": "*", 60 | "jsdom": "*", 61 | "karma": "*", 62 | "karma-mocha": "*", 63 | "karma-chrome-launcher": "*", 64 | "@chiragrupani/karma-chromium-edge-launcher": "*", 65 | "karma-firefox-launcher": "*", 66 | "karma-ie-launcher": "*", 67 | "karma-mocha-reporter": "*", 68 | "karma-safari-launcher": "*", 69 | "karma-script-launcher": "*", 70 | "karma-sinon-chai": "*", 71 | "mocha": "*", 72 | "node-getopt": "*", 73 | "po2json": "*", 74 | "requirejs": "*", 75 | "rollup": "*", 76 | "rollup-plugin-node-resolve": "*", 77 | "sinon": "*", 78 | "sinon-chai": "*" 79 | }, 80 | "dependencies": {}, 81 | "keywords": [ 82 | "vnc", 83 | "rfb", 84 | "novnc", 85 | "websockify" 86 | ] 87 | } 88 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/po/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/po/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | .PHONY: update-po update-js update-pot 3 | 4 | LINGUAS := cs de el es ja ko nl pl ru sv tr zh_CN zh_TW 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="The noVNC 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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/po/po2js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* 3 | * ps2js: gettext .po to noVNC .js converter 4 | * Copyright (C) 2018 The noVNC Authors 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 | const getopt = require('node-getopt'); 21 | const fs = require('fs'); 22 | const po2json = require("po2json"); 23 | 24 | const 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 | const data = po2json.parseFileSync(opt.argv[0]); 34 | 35 | const bodyPart = Object.keys(data).filter(msgid => msgid !== "").map((msgid) => { 36 | if (msgid === "") return; 37 | const msgstr = data[msgid][1]; 38 | return " " + JSON.stringify(msgid) + ": " + JSON.stringify(msgstr); 39 | }).join(",\n"); 40 | 41 | const output = "{\n" + bodyPart + "\n}"; 42 | 43 | fs.writeFileSync(opt.argv[1], output); 44 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/snap/hooks/configure: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | 3 | snapctl restart novnc.novncsvc 4 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/snap/local/svc_wrapper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # `snapctl get services` returns a JSON array, example: 4 | #{ 5 | #"n6801": { 6 | # "listen": 6801, 7 | # "vnc": "localhost:5901" 8 | #}, 9 | #"n6802": { 10 | # "listen": 6802, 11 | # "vnc": "localhost:5902" 12 | #} 13 | #} 14 | snapctl get services | jq -c '.[]' | while read service; do # for each service the user sepcified.. 15 | # get the important data for the service (listen port, VNC host:port) 16 | listen_port="$(echo $service | jq --raw-output '.listen')" 17 | vnc_host_port="$(echo $service | jq --raw-output '.vnc')" # --raw-output removes any quotation marks from the output 18 | 19 | # check whether those values are valid 20 | expr "$listen_port" : '^[0-9]\+$' > /dev/null 21 | listen_port_valid=$? 22 | if [ ! $listen_port_valid ] || [ -z "$vnc_host_port" ]; then 23 | # invalid values mean the service is disabled, do nothing except for printing a message (logged in /var/log/system or systemd journal) 24 | echo "novnc: not starting service ${service} with listen_port ${listen_port} and vnc_host_port ${vnc_host_port}" 25 | else 26 | # start (and fork with '&') the service using the specified listen port and VNC host:port 27 | $SNAP/launch.sh --listen $listen_port --vnc $vnc_host_port & 28 | fi 29 | done 30 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/snap/snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: novnc 2 | base: core18 # the base snap is the execution environment for this snap 3 | version: '@VERSION@' 4 | summary: Open Source VNC client using HTML5 (WebSockets, Canvas) 5 | description: | 6 | Open Source VNC client using HTML5 (WebSockets, Canvas). 7 | noVNC is both a VNC client JavaScript library as well as an 8 | application built on top of that library. noVNC runs well in any 9 | modern browser including mobile browsers (iOS and Android). 10 | 11 | grade: stable 12 | confinement: strict 13 | 14 | parts: 15 | novnc: 16 | source: build/ 17 | plugin: dump 18 | stage-packages: 19 | - websockify 20 | - bash 21 | - jq 22 | - python-numpy 23 | - python3-numpy 24 | 25 | hooks: 26 | configure: 27 | plugs: [network, network-bind] 28 | 29 | apps: 30 | novnc: 31 | command: ./launch.sh 32 | plugs: [network, network-bind] 33 | novncsvc: 34 | command: ./svc_wrapper.sh 35 | daemon: forking 36 | plugs: [network, network-bind] 37 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | // Too many anonymous callbacks 13 | "func-names": "off", 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/fake.websocket.js: -------------------------------------------------------------------------------- 1 | import Base64 from '../core/base64.js'; 2 | 3 | // PhantomJS can't create Event objects directly, so we need to use this 4 | function makeEvent(name, props) { 5 | const evt = document.createEvent('Event'); 6 | evt.initEvent(name, true, true); 7 | if (props) { 8 | for (let prop in props) { 9 | evt[prop] = props[prop]; 10 | } 11 | } 12 | return evt; 13 | } 14 | 15 | export default class FakeWebSocket { 16 | constructor(uri, protocols) { 17 | this.url = uri; 18 | this.binaryType = "arraybuffer"; 19 | this.extensions = ""; 20 | 21 | if (!protocols || typeof protocols === 'string') { 22 | this.protocol = protocols; 23 | } else { 24 | this.protocol = protocols[0]; 25 | } 26 | 27 | this._sendQueue = new Uint8Array(20000); 28 | 29 | this.readyState = FakeWebSocket.CONNECTING; 30 | this.bufferedAmount = 0; 31 | 32 | this._isFake = true; 33 | } 34 | 35 | close(code, reason) { 36 | this.readyState = FakeWebSocket.CLOSED; 37 | if (this.onclose) { 38 | this.onclose(makeEvent("close", { 'code': code, 'reason': reason, 'wasClean': true })); 39 | } 40 | } 41 | 42 | send(data) { 43 | if (this.protocol == 'base64') { 44 | data = Base64.decode(data); 45 | } else { 46 | data = new Uint8Array(data); 47 | } 48 | this._sendQueue.set(data, this.bufferedAmount); 49 | this.bufferedAmount += data.length; 50 | } 51 | 52 | _getSentData() { 53 | const res = new Uint8Array(this._sendQueue.buffer, 0, this.bufferedAmount); 54 | this.bufferedAmount = 0; 55 | return res; 56 | } 57 | 58 | _open() { 59 | this.readyState = FakeWebSocket.OPEN; 60 | if (this.onopen) { 61 | this.onopen(makeEvent('open')); 62 | } 63 | } 64 | 65 | _receiveData(data) { 66 | // Break apart the data to expose bugs where we assume data is 67 | // neatly packaged 68 | for (let i = 0;i < data.length;i++) { 69 | let buf = data.subarray(i, i+1); 70 | this.onmessage(makeEvent("message", { 'data': buf })); 71 | } 72 | } 73 | } 74 | 75 | FakeWebSocket.OPEN = WebSocket.OPEN; 76 | FakeWebSocket.CONNECTING = WebSocket.CONNECTING; 77 | FakeWebSocket.CLOSING = WebSocket.CLOSING; 78 | FakeWebSocket.CLOSED = WebSocket.CLOSED; 79 | 80 | FakeWebSocket._isFake = true; 81 | 82 | FakeWebSocket.replace = () => { 83 | if (!WebSocket._isFake) { 84 | const realVersion = WebSocket; 85 | // eslint-disable-next-line no-global-assign 86 | WebSocket = FakeWebSocket; 87 | FakeWebSocket._realVersion = realVersion; 88 | } 89 | }; 90 | 91 | FakeWebSocket.restore = () => { 92 | if (WebSocket._isFake) { 93 | // eslint-disable-next-line no-global-assign 94 | WebSocket = WebSocket._realVersion; 95 | } 96 | }; 97 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/karma-test-main.js: -------------------------------------------------------------------------------- 1 | const TEST_REGEXP = /test\..*\.js/; 2 | const allTestFiles = []; 3 | const 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 | // Stub out mocha's start function so we can run it once we're done loading 13 | mocha.origRun = mocha.run; 14 | mocha.run = function () {}; 15 | 16 | let script; 17 | 18 | // Script to import all our tests 19 | script = document.createElement("script"); 20 | script.type = "module"; 21 | script.text = ""; 22 | let allModules = allTestFiles.concat(extraFiles); 23 | allModules.forEach(function (file) { 24 | script.text += "import \"" + file + "\";\n"; 25 | }); 26 | script.text += "\nmocha.origRun();\n"; 27 | document.body.appendChild(script); 28 | 29 | // Fallback code for browsers that don't support modules (IE) 30 | script = document.createElement("script"); 31 | script.type = "module"; 32 | script.text = "window._noVNC_has_module_support = true;\n"; 33 | document.body.appendChild(script); 34 | 35 | function fallback() { 36 | if (!window._noVNC_has_module_support) { 37 | /* eslint-disable no-console */ 38 | if (console) { 39 | console.log("No module support detected. Loading fallback..."); 40 | } 41 | /* eslint-enable no-console */ 42 | let loader = document.createElement("script"); 43 | loader.src = "base/vendor/browser-es-module-loader/dist/browser-es-module-loader.js"; 44 | document.body.appendChild(loader); 45 | } 46 | } 47 | 48 | setTimeout(fallback, 500); 49 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/test.base64.js: -------------------------------------------------------------------------------- 1 | const expect = chai.expect; 2 | 3 | import Base64 from '../core/base64.js'; 4 | 5 | describe('Base64 Tools', function () { 6 | "use strict"; 7 | 8 | const BIN_ARR = new Array(256); 9 | for (let i = 0; i < 256; i++) { 10 | BIN_ARR[i] = i; 11 | } 12 | 13 | const B64_STR = "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=="; 14 | 15 | 16 | describe('encode', function () { 17 | it('should encode a binary string into Base64', function () { 18 | const encoded = Base64.encode(BIN_ARR); 19 | expect(encoded).to.equal(B64_STR); 20 | }); 21 | }); 22 | 23 | describe('decode', function () { 24 | it('should decode a Base64 string into a normal string', function () { 25 | const decoded = Base64.decode(B64_STR); 26 | expect(decoded).to.deep.equal(BIN_ARR); 27 | }); 28 | 29 | it('should throw an error if we have extra characters at the end of the string', function () { 30 | expect(() => Base64.decode(B64_STR+'abcdef')).to.throw(Error); 31 | }); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/test.deflator.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | const expect = chai.expect; 3 | 4 | import { inflateInit, inflate } from "../vendor/pako/lib/zlib/inflate.js"; 5 | import ZStream from "../vendor/pako/lib/zlib/zstream.js"; 6 | import Deflator from "../core/deflator.js"; 7 | 8 | function _inflator(compText, expected) { 9 | let strm = new ZStream(); 10 | let chunkSize = 1024 * 10 * 10; 11 | strm.output = new Uint8Array(chunkSize); 12 | 13 | inflateInit(strm, 5); 14 | 15 | if (expected > chunkSize) { 16 | chunkSize = expected; 17 | strm.output = new Uint8Array(chunkSize); 18 | } 19 | 20 | /* eslint-disable camelcase */ 21 | strm.input = compText; 22 | strm.avail_in = strm.input.length; 23 | strm.next_in = 0; 24 | 25 | strm.next_out = 0; 26 | strm.avail_out = expected.length; 27 | /* eslint-enable camelcase */ 28 | 29 | let ret = inflate(strm, 0); 30 | 31 | // Check that return code is not an error 32 | expect(ret).to.be.greaterThan(-1); 33 | 34 | return new Uint8Array(strm.output.buffer, 0, strm.next_out); 35 | } 36 | 37 | describe('Deflate data', function () { 38 | 39 | it('should be able to deflate messages', function () { 40 | let deflator = new Deflator(); 41 | 42 | let text = "123asdf"; 43 | let preText = new Uint8Array(text.length); 44 | for (let i = 0; i < preText.length; i++) { 45 | preText[i] = text.charCodeAt(i); 46 | } 47 | 48 | let compText = deflator.deflate(preText); 49 | 50 | let inflatedText = _inflator(compText, text.length); 51 | expect(inflatedText).to.array.equal(preText); 52 | 53 | }); 54 | 55 | it('should be able to deflate large messages', function () { 56 | let deflator = new Deflator(); 57 | 58 | /* Generate a big string with random characters. Used because 59 | repetition of letters might be deflated more effectively than 60 | random ones. */ 61 | let text = ""; 62 | let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 63 | for (let i = 0; i < 300000; i++) { 64 | text += characters.charAt(Math.floor(Math.random() * characters.length)); 65 | } 66 | 67 | let preText = new Uint8Array(text.length); 68 | for (let i = 0; i < preText.length; i++) { 69 | preText[i] = text.charCodeAt(i); 70 | } 71 | 72 | let compText = deflator.deflate(preText); 73 | 74 | //Check that the compressed size is expected size 75 | expect(compText.length).to.be.greaterThan((1024 * 10 * 10) * 2); 76 | 77 | let inflatedText = _inflator(compText, text.length); 78 | 79 | expect(inflatedText).to.array.equal(preText); 80 | 81 | }); 82 | }); 83 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/test.int.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | const expect = chai.expect; 3 | 4 | import { toUnsigned32bit, toSigned32bit } from '../core/util/int.js'; 5 | 6 | describe('Integer casting', function () { 7 | it('should cast unsigned to signed', function () { 8 | let expected = 4294967286; 9 | expect(toUnsigned32bit(-10)).to.equal(expected); 10 | }); 11 | 12 | it('should cast signed to unsigned', function () { 13 | let expected = -10; 14 | expect(toSigned32bit(4294967286)).to.equal(expected); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/tests/vnc_playback.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | VNC Playback 5 | 6 | 7 | 8 | 11 | 19 | 20 | 21 | 22 | 23 | 24 | Iterations:   25 | Perftest:  26 | Realtime:   27 | 28 |   29 | 30 |

    31 | 32 | Results:
    33 | 34 | 35 |

    36 | 37 |
    38 |
    Loading
    39 |
    40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true 4 | }, 5 | "rules": { 6 | "no-console": 0 7 | } 8 | } -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/README.md: -------------------------------------------------------------------------------- 1 | ## WebSockets Proxy/Bridge 2 | 3 | Websockify has been forked out into its own project. `launch.sh` wil 4 | automatically download it here if it is not already present and not 5 | installed as system-wide. 6 | 7 | For more detailed description and usage information please refer to 8 | the [websockify README](https://github.com/novnc/websockify/blob/master/README.md). 9 | 10 | The other versions of websockify (C, Node.js) and the associated test 11 | programs have been moved to 12 | [websockify](https://github.com/novnc/websockify). Websockify was 13 | formerly named wsproxy. 14 | 15 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/b64-to-binary.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | use MIME::Base64; 3 | 4 | for (<>) { 5 | unless (/^'([{}])(\d+)\1(.+?)',$/) { 6 | print; 7 | next; 8 | } 9 | 10 | my ($dir, $amt, $b64) = ($1, $2, $3); 11 | 12 | my $decoded = MIME::Base64::decode($b64) or die "Could not base64-decode line `$_`"; 13 | 14 | my $decoded_escaped = join "", map { "\\x$_" } unpack("(H2)*", $decoded); 15 | 16 | print "'${dir}${amt}${dir}${decoded_escaped}',\n"; 17 | } 18 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/u2x11: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Convert "U+..." commented entries in /usr/include/X11/keysymdef.h 4 | # into JavaScript for use by noVNC. Note this is likely to produce 5 | # a few duplicate properties with clashing values, that will need 6 | # resolving manually. 7 | # 8 | # Colin Dean 9 | # 10 | 11 | regex="^#define[ \t]+XK_[A-Za-z0-9_]+[ \t]+0x([0-9a-fA-F]+)[ \t]+\/\*[ \t]+U\+([0-9a-fA-F]+)[ \t]+[^*]+.[ \t]+\*\/[ \t]*$" 12 | echo "unicodeTable = {" 13 | while read line; do 14 | if echo "${line}" | egrep -qs "${regex}"; then 15 | 16 | x11=$(echo "${line}" | sed -r "s/${regex}/\1/") 17 | vnc=$(echo "${line}" | sed -r "s/${regex}/\2/") 18 | 19 | if echo "${vnc}" | egrep -qs "^00[2-9A-F][0-9A-F]$"; then 20 | : # skip ISO Latin-1 (U+0020 to U+00FF) as 1-to-1 mapping 21 | else 22 | # note 1-to-1 is possible (e.g. for Euro symbol, U+20AC) 23 | echo " 0x${vnc} : 0x${x11}," 24 | fi 25 | fi 26 | done < /usr/include/X11/keysymdef.h | uniq 27 | echo "};" 28 | 29 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/use_require_helpers.js: -------------------------------------------------------------------------------- 1 | // writes helpers require for vnc.html (they should output app.js) 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | 5 | // util.promisify requires Node.js 8.x, so we have our own 6 | function promisify(original) { 7 | return function promiseWrap() { 8 | const args = Array.prototype.slice.call(arguments); 9 | return new Promise((resolve, reject) => { 10 | original.apply(this, args.concat((err, value) => { 11 | if (err) return reject(err); 12 | resolve(value); 13 | })); 14 | }); 15 | }; 16 | } 17 | 18 | const writeFile = promisify(fs.writeFile); 19 | 20 | module.exports = { 21 | 'amd': { 22 | appWriter: (baseOutPath, scriptBasePath, outPath) => { 23 | // setup for requirejs 24 | const uiPath = path.relative(baseOutPath, 25 | path.join(scriptBasePath, 'app', 'ui')); 26 | return writeFile(outPath, `requirejs(["${uiPath}"], function (ui) {});`) 27 | .then(() => { 28 | console.log(`Please place RequireJS in ${path.join(scriptBasePath, 'require.js')}`); 29 | const requirePath = path.relative(baseOutPath, 30 | path.join(scriptBasePath, 'require.js')); 31 | return [ requirePath ]; 32 | }); 33 | }, 34 | }, 35 | 'commonjs': { 36 | appWriter: (baseOutPath, scriptBasePath, outPath) => { 37 | const browserify = require('browserify'); 38 | const b = browserify(path.join(scriptBasePath, 'app/ui.js'), {}); 39 | return promisify(b.bundle).call(b) 40 | .then(buf => writeFile(outPath, buf)) 41 | .then(() => []); 42 | }, 43 | removeModules: true, 44 | }, 45 | 'systemjs': { 46 | appWriter: (baseOutPath, scriptBasePath, outPath) => { 47 | const uiPath = path.relative(baseOutPath, 48 | path.join(scriptBasePath, 'app', 'ui.js')); 49 | return writeFile(outPath, `SystemJS.import("${uiPath}");`) 50 | .then(() => { 51 | console.log(`Please place SystemJS in ${path.join(scriptBasePath, 'system-production.js')}`); 52 | const systemjsPath = path.relative(baseOutPath, 53 | path.join(scriptBasePath, 'system-production.js')); 54 | return [ systemjsPath ]; 55 | }); 56 | }, 57 | }, 58 | 'umd': { 59 | }, 60 | }; 61 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/utils/validate: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | RET=0 6 | 7 | OUT=`mktemp` 8 | 9 | for fn in "$@"; do 10 | echo "Validating $fn..." 11 | echo 12 | 13 | case $fn in 14 | *.html) 15 | type="text/html" 16 | ;; 17 | *.css) 18 | type="text/css" 19 | ;; 20 | *) 21 | echo "Unknown format!" 22 | echo 23 | RET=1 24 | continue 25 | ;; 26 | esac 27 | 28 | curl --silent \ 29 | --header "Content-Type: ${type}; charset=utf-8" \ 30 | --data-binary @${fn} \ 31 | https://validator.w3.org/nu/?out=text > $OUT 32 | cat $OUT 33 | echo 34 | 35 | # We don't fail the check for warnings as some warnings are 36 | # not relevant for us, and we don't currently have a way to 37 | # ignore just those 38 | if grep -q -s -E "^Error:" $OUT; then 39 | RET=1 40 | fi 41 | done 42 | 43 | rm $OUT 44 | 45 | exit $RET 46 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 `npx rollup -c` in this directory, and then run 10 | `./genworker.js`. 11 | 12 | LICENSE 13 | ------- 14 | 15 | MIT 16 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/vendor/browser-es-module-loader/genworker.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require("fs"); 4 | var browserify = require("browserify"); 5 | 6 | browserify("src/babel-worker.js") 7 | .transform("babelify", { 8 | presets: [ [ "@babel/preset-env", { targets: "ie >= 11" } ] ], 9 | global: true, 10 | ignore: [ "../../node_modules/core-js" ] 11 | }) 12 | .bundle() 13 | .pipe(fs.createWriteStream("dist/babel-worker.js")); 14 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/vendor/browser-es-module-loader/rollup.config.js: -------------------------------------------------------------------------------- 1 | import nodeResolve from 'rollup-plugin-node-resolve'; 2 | 3 | export default { 4 | input: 'src/browser-es-module-loader.js', 5 | output: { 6 | file: 'dist/browser-es-module-loader.js', 7 | format: 'umd', 8 | name: 'BrowserESModuleLoader', 9 | sourcemap: true, 10 | }, 11 | 12 | plugins: [ 13 | nodeResolve(), 14 | ], 15 | }; 16 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/vendor/browser-es-module-loader/src/babel-worker.js: -------------------------------------------------------------------------------- 1 | // Polyfills needed for Babel to function 2 | require("core-js"); 3 | 4 | var babelTransform = require('@babel/core').transform; 5 | var babelTransformDynamicImport = require('@babel/plugin-syntax-dynamic-import'); 6 | var babelTransformModulesSystemJS = require('@babel/plugin-transform-modules-systemjs'); 7 | var babelPresetEnv = require('@babel/preset-env'); 8 | 9 | self.onmessage = function (evt) { 10 | // transform source with Babel 11 | var output = babelTransform(evt.data.source, { 12 | compact: false, 13 | filename: evt.data.key + '!transpiled', 14 | sourceFileName: evt.data.key, 15 | moduleIds: false, 16 | sourceMaps: 'inline', 17 | babelrc: false, 18 | plugins: [babelTransformDynamicImport, babelTransformModulesSystemJS], 19 | presets: [ [ babelPresetEnv, { targets: 'ie >= 11' } ] ], 20 | }); 21 | 22 | self.postMessage({key: evt.data.key, code: output.code, source: evt.data.source}); 23 | }; 24 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/noVNC-1.2.0/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 | -------------------------------------------------------------------------------- /www/notelnet/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Parth Shastri 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /www/notelnet/README.md: -------------------------------------------------------------------------------- 1 | # web-telnet 2 | 3 | Simple telnet client that runs in a web browser. Requires hterm for the terminal emulator, and websockify as a backend to connect. 4 | 5 | ## Usage 6 | 7 | `hterm_all.js` needs to be in the same folder as `index.html`. 8 | Run `libapps/libdot/bin/concat.sh -i libapps/hterm/concat/hterm_all.concat -o hterm_all.js` to generate `hterm_all.js`. 9 | To start the server, use `websockify/run --web=. 80 :23`. 10 | The telnet daemon must be running at port 23. 11 | -------------------------------------------------------------------------------- /www/notelnet/notelnet.html: -------------------------------------------------------------------------------- 1 | index.html -------------------------------------------------------------------------------- /www/novnc: -------------------------------------------------------------------------------- 1 | noVNC-1.2.0 -------------------------------------------------------------------------------- /www/site/images/Pclose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/Pclose.png -------------------------------------------------------------------------------- /www/site/images/Popen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/Popen.png -------------------------------------------------------------------------------- /www/site/images/Vigrid-badauth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/Vigrid-badauth.jpg -------------------------------------------------------------------------------- /www/site/images/Vigrid-badauth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/Vigrid-badauth.png -------------------------------------------------------------------------------- /www/site/images/Vigrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/Vigrid.png -------------------------------------------------------------------------------- /www/site/images/check_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/check_off.png -------------------------------------------------------------------------------- /www/site/images/check_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/check_on.png -------------------------------------------------------------------------------- /www/site/images/core100x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/core100x100.png -------------------------------------------------------------------------------- /www/site/images/gns-reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/gns-reload.png -------------------------------------------------------------------------------- /www/site/images/gnshost_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/gnshost_off.png -------------------------------------------------------------------------------- /www/site/images/gnshost_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/gnshost_on.png -------------------------------------------------------------------------------- /www/site/images/hostmon_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/hostmon_off.png -------------------------------------------------------------------------------- /www/site/images/hostmon_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/hostmon_on.png -------------------------------------------------------------------------------- /www/site/images/light_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/light_off.png -------------------------------------------------------------------------------- /www/site/images/light_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/light_on.png -------------------------------------------------------------------------------- /www/site/images/links_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/links_off.png -------------------------------------------------------------------------------- /www/site/images/links_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/links_on.png -------------------------------------------------------------------------------- /www/site/images/nonono.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/nonono.jpg -------------------------------------------------------------------------------- /www/site/images/object_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/object_off.png -------------------------------------------------------------------------------- /www/site/images/object_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/object_on.png -------------------------------------------------------------------------------- /www/site/images/open_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/open_off.png -------------------------------------------------------------------------------- /www/site/images/open_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/open_on.png -------------------------------------------------------------------------------- /www/site/images/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/photo.png -------------------------------------------------------------------------------- /www/site/images/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/reload.png -------------------------------------------------------------------------------- /www/site/images/risky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/risky.png -------------------------------------------------------------------------------- /www/site/images/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/start.png -------------------------------------------------------------------------------- /www/site/images/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/stop.png -------------------------------------------------------------------------------- /www/site/images/switch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/switch_off.png -------------------------------------------------------------------------------- /www/site/images/switch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/switch_on.png -------------------------------------------------------------------------------- /www/site/images/switch_onoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/switch_onoff.png -------------------------------------------------------------------------------- /www/site/images/uuid_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/uuid_off.png -------------------------------------------------------------------------------- /www/site/images/uuid_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/uuid_on.png -------------------------------------------------------------------------------- /www/site/images/vigrid-clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/vigrid-clone.png -------------------------------------------------------------------------------- /www/site/images/vigrid-clones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/vigrid-clones.png -------------------------------------------------------------------------------- /www/site/images/vigrid_type1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/vigrid_type1.png -------------------------------------------------------------------------------- /www/site/images/vigrid_type2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/vigrid_type2.png -------------------------------------------------------------------------------- /www/site/images/vigrid_type3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/vigrid_type3.png -------------------------------------------------------------------------------- /www/site/images/webui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/llevier/vigrid/df5e88b0f5db9750e2e2f9de3106d9f7b3cf061c/www/site/images/webui.png -------------------------------------------------------------------------------- /www/site/manager/vigrid-rocket_launch.html: -------------------------------------------------------------------------------- 1 | 24 | 25 | This page is to guide you to massive clone a project and launch the clones.

    26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
    StepDescription
    1Properly shutdown the project you wish to deploy
    2Once all nodes are off, snapshot the project as a 'Clone Source'
    3You can now 'industrial clone' the project to fit your needs
    IMPORTANT: check your source project is permitted to run when leaving gns3, else it will auto_close.
    4Now the clones are created, ensure Vigrid infrastructure reflects this (each server lists all clones)
    5To be able to rollback at its start any clone, snapshot each of them
    6Get the MAC address and define IP address to update the DHCP server
    7Everything should be ready here. Define your launch matrix and start all clones
    37 | -------------------------------------------------------------------------------- /www/site/manager/vigrid-terminator.html: -------------------------------------------------------------------------------- 1 | "); } 27 | // Standalone server + NAS 28 | else if ($vigrid_type==2) { print(""); } 29 | // MASTER server (scale/farm) + NAS 30 | else if ($vigrid_type==3) { print(""); } 31 | 32 | // GNS3 home directory 33 | $vigrid_storage_root=VIGRIDconfig("VIGRID_STORAGE_ROOT"); 34 | $gns_home="$vigrid_storage_root/home/gns3"; 35 | 36 | // get controller configuration to extract GNS3 hosts... 37 | $gns_controller=gns_getcontrollers(); 38 | $data_vigrid=VIGRIDgetgnsdata($gns_controller); 39 | ?> -------------------------------------------------------------------------------- /www/site/vigrid-host-api.html: -------------------------------------------------------------------------------- 1 | 73 | -------------------------------------------------------------------------------- /www/site/websockify-js/.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - 2.6 4 | - 2.7 5 | - 3.3 6 | - 3.4 7 | # We need trusty for Python 2.6. We can raise this when we no longer 8 | # care about 2.6. 9 | dist: trusty 10 | 11 | install: 12 | - pip install 'setuptools>=18.5,<=39.0.0' 13 | - pip install -r test-requirements.txt 14 | 15 | script: python setup.py nosetests --verbosity=3 16 | -------------------------------------------------------------------------------- /www/site/websockify-js/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 | -------------------------------------------------------------------------------- /www/site/websockify-js/docs/TODO: -------------------------------------------------------------------------------- 1 | - wstelnet: support CSI L and CSI M 2 | 3 | -------------------------------------------------------------------------------- /www/site/websockify-js/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 | -------------------------------------------------------------------------------- /www/site/websockify-js/docs/release.txt: -------------------------------------------------------------------------------- 1 | - Update CHANGES.txt and websockify/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 npmjs.org (once) 8 | - Upload websockify.js npmjs.org package 9 | npm publish websockify 10 | -------------------------------------------------------------------------------- /www/site/websockify-js/websockify/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/novnc/websockify-js.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 | } 23 | } 24 | -------------------------------------------------------------------------------- /www/site/websockify-js/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 | 
    
    
    --------------------------------------------------------------------------------