├── 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 |
You must first install GNS3 heavy client. Please go to the GNS3 download page and download the client.
5 | Once done, launch the install, selecting only GNS3 client (removing everything else).
6 |
7 |
8 | Once installed, start the GNS3 client. By default, GNS3 default installation is to run a local VM, but Vigrid will provide that service so it must be changed. For that:
9 | Go to the Edit
Menu of GNS3, and select Preferences
. A box will appear.
10 |
11 | Disable the local GNS3 VM and replace with HTTPS, Master IP Address, and Vigrid credentials:
12 |
13 | You will probably be prompted to accept the certificate (home made, still you can use real one from your organisation, LetsEncrypt...) and then you will see GNS3 GUI
14 |
15 | First step with GNS3
16 |
17 | Now you are able to use GNS3, let's create a simple virtual network:
18 | You entered into the New Project
page. Validate clicking on OK
to create the untitled
project
19 | From this blank page, click on the Appliance
icon to develop default ones
20 | Drag & drop the Cloud
icon (not NAT) and a VPCS
to the right side of the appliance list
21 | Once these appliances are placed, create a link between them, clicking on the Link
icon
22 |
23 | Click on the VPCS
and select the network interface
24 | Click on the Cloud
and select Nred_exposed0
interface
25 |
26 |
27 | Now your objects are linked, you may start the VPCS
appliance, right clicking on it
28 |
29 | Then select Console
to have its local display in a new window. You may then enter ip dhcp
to get an IP address
30 |
31 | This will be enough for our purpose. Please go to GNS3 Documentation to learn how to use GNS3.
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 |
17 | Suspended will permit to 'unplug' the link, as in the real world. Network interface will then change to DOWN
18 | Filter: corrupt will randomly corrupt a packet. Define the packet corruption percentage.
19 | Filter: delay_latency will adds latency and/or jitter. Define lattency & jitter in milliseconds.
20 | Filter: frequency_drop will drop a packet every X packets. Define X here.
21 | Filter: packet_loss will randomly drop a packet. Define the loss percentage.
22 | Filter: bpf stands for Berkeley Packet Filter . You can write an expression per line.
23 | There are many wikis explaing BPF syntax, here is one
24 |
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 |
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 |
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 |
--------------------------------------------------------------------------------