├── .dockerignore
├── .github
└── workflows
│ ├── codeql-analysis.yml
│ └── linter.yml
├── .gitignore
├── .gitpod.yml
├── .travis.yml
├── Dockerfile
├── README.md
├── Vagrantfile
├── _config.yml
├── accounts
├── __init__.py
├── apps.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_permissionset.py
│ ├── 0003_auto_20200604_0930.py
│ ├── 0004_auto_20200615_0637.py
│ ├── 0005_auto_20200616_1039.py
│ └── __init__.py
├── models.py
├── templates
│ ├── account.html
│ ├── accounts
│ │ ├── change_password_form.html
│ │ ├── email
│ │ │ └── otp.html
│ │ ├── email_otp_form.html
│ │ └── otp_login.html
│ ├── login.html
│ ├── logout.html
│ └── profile.html
├── templatetags
│ ├── __init__.py
│ └── tags_fingerprint.py
├── tests.py
├── urls.py
├── utils.py
└── views.py
├── admin
├── __init__.py
├── apps.py
├── decorators.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20200609_0830.py
│ ├── 0003_create_group_technicians.py
│ └── __init__.py
├── models.py
├── templates
│ └── admin
│ │ ├── group_list.html
│ │ ├── logs.html
│ │ ├── user_form.html
│ │ └── user_list.html
├── tests.py
├── urls.py
└── views.py
├── appsettings
├── __init__.py
├── apps.py
├── context_processors.py
├── middleware.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20200527_1603.py
│ ├── 0003_auto_20200615_0637.py
│ ├── 0004_auto_20200716_0637.py
│ ├── 0005_auto_20200911_1233.py
│ ├── 0006_auto_20220630_0717.py
│ ├── 0007_auto_20220905_0918.py
│ ├── 0008_auto_20220905_1459.py
│ ├── 0009_alter_appsettings_id.py
│ ├── 0010_auto_20231030_1305.py
│ ├── 0011_alter_appsettings_id.py
│ └── __init__.py
├── models.py
├── settings.py
├── templates
│ └── appsettings.html
├── tests.py
└── views.py
├── computes
├── __init__.py
├── api
│ ├── serializers.py
│ └── viewsets.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20200529_1320.py
│ ├── 0003_auto_20200615_0637.py
│ └── __init__.py
├── models.py
├── templates
│ ├── computes
│ │ ├── form.html
│ │ ├── instances.html
│ │ └── list.html
│ ├── create_comp_block.html
│ └── overview.html
├── tests.py
├── urls.py
├── utils.py
├── validators.py
└── views.py
├── conf
├── daemon
│ ├── consolecallback
│ └── gstfsd
├── nginx
│ ├── centos_nginx.conf
│ ├── debian_nginx.conf
│ ├── openEuler_nginx.conf
│ ├── ubuntu_nginx.conf
│ ├── uos_eagle_nginx.conf
│ ├── uos_nginx.conf
│ └── webvirtcloud.conf
├── requirements.txt
├── runit
│ ├── nginx
│ ├── nginx-log-forwarder
│ ├── novncd.sh
│ ├── secret_generator.py
│ └── webvirtcloud.sh
├── supervisor
│ ├── gstfsd.conf
│ └── webvirtcloud.conf
├── systemd
│ ├── README.md
│ ├── install.sh
│ ├── webvirt
│ ├── webvirt-cloud.service
│ ├── webvirt-gstfsd.service
│ ├── webvirt-novncd.service
│ └── webvirt-socketiod.service
└── test-vm.xml
├── console
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── novncd
├── socketiod
├── sshtunnels.py
├── templates
│ ├── console-base.html
│ ├── console-spice-full.html
│ ├── console-spice-lite.html
│ ├── console-vnc-full.html
│ ├── console-vnc-lite.html
│ └── console-xterm.html
├── tests.py
└── views.py
├── datasource
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ └── user_data
├── tests.py
├── urls.py
└── views.py
├── dev
├── libvirt-bootstrap.sh
├── requirements.txt
└── scss
│ ├── bootstrap-overrides.scss
│ ├── bootstrap
│ ├── _accordion.scss
│ ├── _alert.scss
│ ├── _badge.scss
│ ├── _breadcrumb.scss
│ ├── _button-group.scss
│ ├── _buttons.scss
│ ├── _card.scss
│ ├── _carousel.scss
│ ├── _close.scss
│ ├── _containers.scss
│ ├── _dropdown.scss
│ ├── _forms.scss
│ ├── _functions.scss
│ ├── _grid.scss
│ ├── _helpers.scss
│ ├── _images.scss
│ ├── _list-group.scss
│ ├── _maps.scss
│ ├── _mixins.scss
│ ├── _modal.scss
│ ├── _nav.scss
│ ├── _navbar.scss
│ ├── _offcanvas.scss
│ ├── _pagination.scss
│ ├── _placeholders.scss
│ ├── _popover.scss
│ ├── _progress.scss
│ ├── _reboot.scss
│ ├── _root.scss
│ ├── _spinners.scss
│ ├── _tables.scss
│ ├── _toasts.scss
│ ├── _tooltip.scss
│ ├── _transitions.scss
│ ├── _type.scss
│ ├── _utilities.scss
│ ├── _variables.scss
│ ├── bootstrap-grid.scss
│ ├── bootstrap-reboot.scss
│ ├── bootstrap-utilities.scss
│ ├── bootstrap.scss
│ ├── forms
│ │ ├── _floating-labels.scss
│ │ ├── _form-check.scss
│ │ ├── _form-control.scss
│ │ ├── _form-range.scss
│ │ ├── _form-select.scss
│ │ ├── _form-text.scss
│ │ ├── _input-group.scss
│ │ ├── _labels.scss
│ │ └── _validation.scss
│ ├── helpers
│ │ ├── _clearfix.scss
│ │ ├── _color-bg.scss
│ │ ├── _colored-links.scss
│ │ ├── _position.scss
│ │ ├── _ratio.scss
│ │ ├── _stacks.scss
│ │ ├── _stretched-link.scss
│ │ ├── _text-truncation.scss
│ │ ├── _visually-hidden.scss
│ │ └── _vr.scss
│ ├── mixins
│ │ ├── _alert.scss
│ │ ├── _backdrop.scss
│ │ ├── _banner.scss
│ │ ├── _border-radius.scss
│ │ ├── _box-shadow.scss
│ │ ├── _breakpoints.scss
│ │ ├── _buttons.scss
│ │ ├── _caret.scss
│ │ ├── _clearfix.scss
│ │ ├── _color-scheme.scss
│ │ ├── _container.scss
│ │ ├── _deprecate.scss
│ │ ├── _forms.scss
│ │ ├── _gradients.scss
│ │ ├── _grid.scss
│ │ ├── _image.scss
│ │ ├── _list-group.scss
│ │ ├── _lists.scss
│ │ ├── _pagination.scss
│ │ ├── _reset-text.scss
│ │ ├── _resize.scss
│ │ ├── _table-variants.scss
│ │ ├── _text-truncate.scss
│ │ ├── _transition.scss
│ │ ├── _utilities.scss
│ │ └── _visually-hidden.scss
│ ├── utilities
│ │ └── _api.scss
│ └── vendor
│ │ └── _rfs.scss
│ ├── bootswatch
│ ├── bootstrap-orj
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── cerulean
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── cosmo
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── cyborg
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── darkly
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── flatly
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── journal
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── litera
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── lumen
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── lux
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── materia
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── minty
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── morph
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── pulse
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── quartz
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── sandstone
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── simplex
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── sketchy
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── slate
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── solar
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── spacelab
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── superhero
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── united
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── vapor
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── yeti
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ └── zephyr
│ │ ├── _bootswatch.scss
│ │ └── _variables.scss
│ ├── wvc-main.scss
│ └── wvc-themes
│ ├── bootstrap-orj
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── cerulean
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── cosmo
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── cyborg
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── darkly
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── flatly
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── journal
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── litera
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── lumen
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── lux
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── materia
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── minty
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── morph
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── pulse
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── quartz
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── sandstone
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── simplex
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── sketchy
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── slate
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── solar
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── spacelab
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── superhero
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── united
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── vapor
│ ├── _bootswatch.scss
│ └── _variables.scss
│ ├── yeti
│ ├── _bootswatch.scss
│ └── _variables.scss
│ └── zephyr
│ ├── _bootswatch.scss
│ └── _variables.scss
├── doc
├── images
│ ├── grouped.PNG
│ ├── hosts.PNG
│ ├── instance.PNG
│ ├── log.PNG
│ ├── nongrouped.PNG
│ └── readme.md
└── readme.md
├── gunicorn.conf.py
├── install.sh
├── instances
├── __init__.py
├── api
│ ├── serializers.py
│ └── viewsets.py
├── apps.py
├── fixtures
│ └── initial_data.json
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_permissionset.py
│ ├── 0003_auto_20200615_0637.py
│ ├── 0004_auto_20200618_0817.py
│ ├── 0005_flavor.py
│ ├── 0006_addFlavors.py
│ ├── 0007_auto_20200624_0821.py
│ ├── 0008_auto_20200708_0950.py
│ ├── 0009_auto_20200717_0524.py
│ ├── 0010_auto_20220722_0812.py
│ ├── 0011_createinstance_migrateinstance.py
│ └── __init__.py
├── models.py
├── templates
│ ├── add_instance_network_block.html
│ ├── add_instance_owner_block.html
│ ├── add_instance_volume.html
│ ├── allinstances.html
│ ├── allinstances_index_grouped.html
│ ├── allinstances_index_nongrouped.html
│ ├── bottom_bar.html
│ ├── create_flav_block.html
│ ├── create_inst_block.html
│ ├── create_instance_w1.html
│ ├── create_instance_w2.html
│ ├── instance.html
│ ├── instance_actions.html
│ └── instances
│ │ ├── access_tab.html
│ │ ├── destroy_instance_form.html
│ │ ├── destroy_tab.html
│ │ ├── edit_instance_volume.html
│ │ ├── info_tab.html
│ │ ├── power_tab.html
│ │ ├── resize_tab.html
│ │ ├── settings_tab.html
│ │ ├── snapshots_tab.html
│ │ └── stats_tab.html
├── templatetags
│ └── tags_active.py
├── tests.py
├── urls.py
├── utils.py
└── views.py
├── interfaces
├── __init__.py
├── api
│ ├── serializers.py
│ └── viewsets.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
├── models.py
├── templates
│ ├── create_iface_block.html
│ ├── interface.html
│ └── interfaces.html
├── tests.py
└── views.py
├── locale
├── cz
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── de
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── en
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── es
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── fr
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── ru
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── tr
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
├── uk
│ └── LC_MESSAGES
│ │ ├── django.mo
│ │ └── django.po
└── zh
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── logs
├── __init__.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20200615_0637.py
│ ├── 0003_logs_host.py
│ └── __init__.py
├── models.py
├── tests.py
├── urls.py
└── views.py
├── manage.py
├── networks
├── __init__.py
├── api
│ ├── serializers.py
│ └── viewsets.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
├── models.py
├── templates
│ ├── add_network_qos.html
│ ├── create_net_block.html
│ ├── modify_ipv4_fixed_address.html
│ ├── modify_ipv6_fixed_address.html
│ ├── network.html
│ └── networks.html
├── tests.py
└── views.py
├── nwfilters
├── __init__.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ ├── add_nwf_rule.html
│ ├── create_nwfilter_block.html
│ ├── nwfilter.html
│ └── nwfilters.html
├── tests.py
└── views.py
├── static
├── bootstrap_icons
│ └── css
│ │ ├── bootstrap_icons.0e17d6a6e498.css
│ │ ├── bootstrap_icons.0e17d6a6e498.css.gz
│ │ ├── bootstrap_icons.css
│ │ └── bootstrap_icons.css.gz
├── css
│ ├── bootstrap-icons.min.css
│ ├── bootstrap-multiselect.css
│ ├── font-awesome.min.css
│ ├── signin.css
│ ├── sortable-theme-bootstrap.css
│ ├── webvirtcloud.css
│ ├── wvc-main.min.css
│ ├── wvc-main.min.css.map
│ └── xterm.css
├── drf-yasg
│ ├── README
│ ├── README.723ffa086d8b
│ ├── README.723ffa086d8b.gz
│ ├── README.gz
│ ├── immutable.37fd83058fde.js
│ ├── immutable.37fd83058fde.js.gz
│ ├── immutable.js
│ ├── immutable.js.gz
│ ├── immutable.min.d985bc61d85c.js
│ ├── immutable.min.d985bc61d85c.js.gz
│ ├── immutable.min.js
│ ├── immutable.min.js.gz
│ ├── insQ.d4a1933caf20.js
│ ├── insQ.d4a1933caf20.js.gz
│ ├── insQ.js
│ ├── insQ.js.gz
│ ├── insQ.min.90ab21607447.js
│ ├── insQ.min.90ab21607447.js.gz
│ ├── insQ.min.js
│ ├── insQ.min.js.gz
│ ├── redoc-init.41348b1afc50.js
│ ├── redoc-init.41348b1afc50.js.gz
│ ├── redoc-init.js
│ ├── redoc-init.js.gz
│ ├── redoc-old
│ │ ├── LICENSE
│ │ ├── LICENSE.e4e5f59c85dc
│ │ ├── LICENSE.e4e5f59c85dc.gz
│ │ ├── LICENSE.gz
│ │ ├── redoc.min.75500581cb08.js
│ │ ├── redoc.min.75500581cb08.js.gz
│ │ ├── redoc.min.js
│ │ ├── redoc.min.js.8b046eaab501.map
│ │ ├── redoc.min.js.8b046eaab501.map.gz
│ │ ├── redoc.min.js.gz
│ │ ├── redoc.min.js.map
│ │ └── redoc.min.js.map.gz
│ ├── redoc
│ │ ├── LICENSE
│ │ ├── LICENSE.cf2d48dc6713
│ │ ├── LICENSE.cf2d48dc6713.gz
│ │ ├── LICENSE.gz
│ │ ├── redoc-logo.c7dc7712ce68.png
│ │ ├── redoc-logo.png
│ │ ├── redoc.min.71d0b1197fcc.js
│ │ ├── redoc.min.71d0b1197fcc.js.gz
│ │ ├── redoc.min.js
│ │ ├── redoc.min.js.gz
│ │ ├── redoc.standalone.js.be0619dcd088.map
│ │ ├── redoc.standalone.js.be0619dcd088.map.gz
│ │ ├── redoc.standalone.js.map
│ │ └── redoc.standalone.js.map.gz
│ ├── style.680c08b2b7b4.css
│ ├── style.680c08b2b7b4.css.gz
│ ├── style.css
│ ├── style.css.gz
│ ├── swagger-ui-dist
│ │ ├── LICENSE
│ │ ├── LICENSE.3b83ef96387f
│ │ ├── LICENSE.3b83ef96387f.gz
│ │ ├── LICENSE.gz
│ │ ├── NOTICE
│ │ ├── NOTICE.342625133694
│ │ ├── absolute-path.7ca5ebff3b35.js
│ │ ├── absolute-path.7ca5ebff3b35.js.gz
│ │ ├── absolute-path.js
│ │ ├── absolute-path.js.gz
│ │ ├── favicon-32x32.40d4f2c38d1c.png
│ │ ├── favicon-32x32.png
│ │ ├── index.4843f77ccf9e.js
│ │ ├── index.4843f77ccf9e.js.gz
│ │ ├── index.54fdd628e489.css
│ │ ├── index.54fdd628e489.css.gz
│ │ ├── index.css
│ │ ├── index.css.gz
│ │ ├── index.js
│ │ ├── index.js.gz
│ │ ├── oauth2-redirect.3ab4f43d18d7.html
│ │ ├── oauth2-redirect.3ab4f43d18d7.html.gz
│ │ ├── oauth2-redirect.html
│ │ ├── oauth2-redirect.html.gz
│ │ ├── swagger-initializer.ff995915f51c.js
│ │ ├── swagger-initializer.ff995915f51c.js.gz
│ │ ├── swagger-initializer.js
│ │ ├── swagger-initializer.js.gz
│ │ ├── swagger-ui-bundle.357151587590.js
│ │ ├── swagger-ui-bundle.357151587590.js.gz
│ │ ├── swagger-ui-bundle.js
│ │ ├── swagger-ui-bundle.js.f5222861035c.map
│ │ ├── swagger-ui-bundle.js.f5222861035c.map.gz
│ │ ├── swagger-ui-bundle.js.gz
│ │ ├── swagger-ui-bundle.js.map
│ │ ├── swagger-ui-bundle.js.map.gz
│ │ ├── swagger-ui-es-bundle-core.002e814c385e.js
│ │ ├── swagger-ui-es-bundle-core.002e814c385e.js.gz
│ │ ├── swagger-ui-es-bundle-core.js
│ │ ├── swagger-ui-es-bundle-core.js.b1d6e307bf5a.map
│ │ ├── swagger-ui-es-bundle-core.js.b1d6e307bf5a.map.gz
│ │ ├── swagger-ui-es-bundle-core.js.gz
│ │ ├── swagger-ui-es-bundle-core.js.map
│ │ ├── swagger-ui-es-bundle-core.js.map.gz
│ │ ├── swagger-ui-es-bundle.9e91a94497b1.js
│ │ ├── swagger-ui-es-bundle.9e91a94497b1.js.gz
│ │ ├── swagger-ui-es-bundle.js
│ │ ├── swagger-ui-es-bundle.js.edde1f87cee4.map
│ │ ├── swagger-ui-es-bundle.js.edde1f87cee4.map.gz
│ │ ├── swagger-ui-es-bundle.js.gz
│ │ ├── swagger-ui-es-bundle.js.map
│ │ ├── swagger-ui-es-bundle.js.map.gz
│ │ ├── swagger-ui-standalone-preset.4d7f4447551a.js
│ │ ├── swagger-ui-standalone-preset.4d7f4447551a.js.gz
│ │ ├── swagger-ui-standalone-preset.js
│ │ ├── swagger-ui-standalone-preset.js.c470a4c82080.map
│ │ ├── swagger-ui-standalone-preset.js.c470a4c82080.map.gz
│ │ ├── swagger-ui-standalone-preset.js.gz
│ │ ├── swagger-ui-standalone-preset.js.map
│ │ ├── swagger-ui-standalone-preset.js.map.gz
│ │ ├── swagger-ui.776bdd918354.css
│ │ ├── swagger-ui.776bdd918354.css.gz
│ │ ├── swagger-ui.css
│ │ ├── swagger-ui.css.fea025523c25.map
│ │ ├── swagger-ui.css.fea025523c25.map.gz
│ │ ├── swagger-ui.css.gz
│ │ ├── swagger-ui.css.map
│ │ ├── swagger-ui.css.map.gz
│ │ ├── swagger-ui.js.804e9522fc74.map
│ │ ├── swagger-ui.js.804e9522fc74.map.gz
│ │ ├── swagger-ui.js.map
│ │ └── swagger-ui.js.map.gz
│ ├── swagger-ui-init.7d9c695107e5.js
│ ├── swagger-ui-init.7d9c695107e5.js.gz
│ ├── swagger-ui-init.js
│ └── swagger-ui-init.js.gz
├── favicon.ico
├── fonts
│ ├── bootstrap-icons.woff
│ ├── bootstrap-icons.woff2
│ └── inter-v12-latin-regular.woff2
├── icon_cache
│ ├── arrow-down_None_None_None.svg
│ ├── arrow-left_None_None_None.svg
│ ├── arrow-right_None_None_None.svg
│ ├── arrow-up_None_None_None.svg
│ ├── arrows-angle-expand_2em_None_None.svg
│ ├── bar-chart-line_2em_None_None.svg
│ ├── broadcast_1em_None_None.svg
│ ├── camera_2em_None_None.svg
│ ├── camera_None_None_None.svg
│ ├── card-list_None_None_None.svg
│ ├── caret-down_None_None_None.svg
│ ├── check-circle-fill_None_None_None.svg
│ ├── check2_None_None_None.svg
│ ├── check_None_None_None.svg
│ ├── chevron-down_None_None_None.svg
│ ├── chevron-up_None_None_None.svg
│ ├── dash-circle_None_None_None.svg
│ ├── device-hdd_None_None_None.svg
│ ├── download_None_None_None.svg
│ ├── eject_None_None_None.svg
│ ├── exclamation-triangle_None_None_None.svg
│ ├── eye-fill_None_None_None.svg
│ ├── eye_None_None_None.svg
│ ├── files_None_None_None.svg
│ ├── filter_None_None_None.svg
│ ├── gear-wide-connected_2em_None_None.svg
│ ├── gear-wide-connected_None_None_None.svg
│ ├── hdd-network_None_None_None.svg
│ ├── info-circle_None_None_None.svg
│ ├── info_None_None_None.svg
│ ├── key_None_None_None.svg
│ ├── laptop_None_None_None.svg
│ ├── lock_2em_None_None.svg
│ ├── lock_None_None_None.svg
│ ├── pause-fill_None_None_None.svg
│ ├── pc-display-horizontal_None_None_None.svg
│ ├── pc-display_None_None_None.svg
│ ├── pencil-fill_None_None_None.svg
│ ├── pencil-square_None_None_None.svg
│ ├── pencil_None_None_None.svg
│ ├── people-fill_None_None_None.svg
│ ├── person-plus_None_None_None.svg
│ ├── person-square_None_None_None.svg
│ ├── person-vcard_None_None_None.svg
│ ├── play-fill_None_None_None.svg
│ ├── plus-circle-fill_None_None_None.svg
│ ├── plus_None_None_None.svg
│ ├── power_2em_None_None.svg
│ ├── power_None_None_None.svg
│ ├── qr-code_None_None_None.svg
│ ├── repeat_None_None_None.svg
│ ├── server_None_None_None.svg
│ ├── stop-fill_None_None_None.svg
│ ├── trash-fill_None_None_None.svg
│ ├── trash_2em_None_None.svg
│ ├── trash_None_None_None.svg
│ ├── wifi_None_None_None.svg
│ ├── wrench-adjustable_None_None_None.svg
│ ├── x-circle-fill_None_None_None.svg
│ ├── x-square-fill_None_None_None.svg
│ └── x_None_None_None.svg
├── js
│ ├── Chart.bundle.min.js
│ ├── ace
│ │ ├── ace.js
│ │ ├── ext-textarea.js
│ │ ├── mode-xml.js
│ │ └── worker-xml.js
│ ├── bootstrap-multiselect.js
│ ├── bootstrap.bundle.min.js
│ ├── bootstrap.bundle.min.js.map
│ ├── filter-table.js
│ ├── jquery.js
│ ├── js.cookie.js
│ ├── novnc
│ │ ├── 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
│ │ │ │ ├── mouse_left.svg
│ │ │ │ ├── mouse_middle.svg
│ │ │ │ ├── mouse_none.svg
│ │ │ │ ├── mouse_right.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
│ │ │ │ └── lite.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
│ │ ├── package.json
│ │ └── 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
│ ├── socket.io.js
│ ├── sortable.min.js
│ ├── spice-html5
│ │ ├── atKeynames.js
│ │ ├── bitmap.js
│ │ ├── cursor.js
│ │ ├── display.js
│ │ ├── enums.js
│ │ ├── filexfer.js
│ │ ├── inputs.js
│ │ ├── lz.js
│ │ ├── main.js
│ │ ├── playback.js
│ │ ├── png.js
│ │ ├── port.js
│ │ ├── quic.js
│ │ ├── resize.js
│ │ ├── simulatecursor.js
│ │ ├── spice.css
│ │ ├── spicearraybuffer.js
│ │ ├── spiceconn.js
│ │ ├── spicedataview.js
│ │ ├── spicemsg.js
│ │ ├── spicetype.js
│ │ ├── thirdparty
│ │ │ ├── browser-es-module-loader
│ │ │ │ ├── .npmignore
│ │ │ │ ├── README.md
│ │ │ │ ├── dist
│ │ │ │ │ ├── babel-worker.js
│ │ │ │ │ ├── browser-es-module-loader.js
│ │ │ │ │ └── browser-es-module-loader.js.map
│ │ │ │ ├── rollup.config.js
│ │ │ │ └── src
│ │ │ │ │ ├── babel-worker.js
│ │ │ │ │ └── browser-es-module-loader.js
│ │ │ ├── jsbn.js
│ │ │ ├── prng4.js
│ │ │ ├── rng.js
│ │ │ ├── rsa.js
│ │ │ └── sha1.js
│ │ ├── ticket.js
│ │ ├── utils.js
│ │ ├── webm.js
│ │ └── wire.js
│ └── xterm@3.6.0
│ │ ├── addons
│ │ ├── fit
│ │ │ ├── fit.js
│ │ │ └── fit.js.map
│ │ └── fullscreen
│ │ │ ├── fullscreen.css
│ │ │ ├── fullscreen.js
│ │ │ └── fullscreen.js.map
│ │ ├── xterm.js
│ │ └── xterm.js.map
├── rest_framework
│ ├── css
│ │ ├── bootstrap-theme.min.1d4b05b397c3.css
│ │ ├── bootstrap-theme.min.1d4b05b397c3.css.gz
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap-theme.min.css.51806092cc05.map
│ │ ├── bootstrap-theme.min.css.51806092cc05.map.gz
│ │ ├── bootstrap-theme.min.css.gz
│ │ ├── bootstrap-theme.min.css.map
│ │ ├── bootstrap-theme.min.css.map.gz
│ │ ├── bootstrap-tweaks.46ed116b0edd.css
│ │ ├── bootstrap-tweaks.46ed116b0edd.css.gz
│ │ ├── bootstrap-tweaks.css
│ │ ├── bootstrap-tweaks.css.gz
│ │ ├── bootstrap.min.css
│ │ ├── bootstrap.min.css.cafbda9c0e9e.map
│ │ ├── bootstrap.min.css.cafbda9c0e9e.map.gz
│ │ ├── bootstrap.min.css.gz
│ │ ├── bootstrap.min.css.map
│ │ ├── bootstrap.min.css.map.gz
│ │ ├── bootstrap.min.f17d4516b026.css
│ │ ├── bootstrap.min.f17d4516b026.css.gz
│ │ ├── default.789dfb5732d7.css
│ │ ├── default.789dfb5732d7.css.gz
│ │ ├── default.css
│ │ ├── default.css.gz
│ │ ├── font-awesome-4.0.3.c1e1ea213abf.css
│ │ ├── font-awesome-4.0.3.c1e1ea213abf.css.gz
│ │ ├── font-awesome-4.0.3.css
│ │ ├── font-awesome-4.0.3.css.gz
│ │ ├── prettify.a987f72342ee.css
│ │ ├── prettify.a987f72342ee.css.gz
│ │ ├── prettify.css
│ │ └── prettify.css.gz
│ ├── docs
│ │ ├── css
│ │ │ ├── base.css
│ │ │ ├── base.css.gz
│ │ │ ├── base.e630f8f4990e.css
│ │ │ ├── base.e630f8f4990e.css.gz
│ │ │ ├── highlight.css
│ │ │ ├── highlight.css.gz
│ │ │ ├── highlight.e0e4d973c6d7.css
│ │ │ ├── highlight.e0e4d973c6d7.css.gz
│ │ │ ├── jquery.json-view.min.a2e6beeb6710.css
│ │ │ ├── jquery.json-view.min.a2e6beeb6710.css.gz
│ │ │ ├── jquery.json-view.min.css
│ │ │ └── jquery.json-view.min.css.gz
│ │ ├── img
│ │ │ ├── favicon.5195b4d0f3eb.ico
│ │ │ ├── favicon.5195b4d0f3eb.ico.gz
│ │ │ ├── favicon.ico
│ │ │ ├── favicon.ico.gz
│ │ │ ├── grid.a4b938cf382b.png
│ │ │ └── grid.png
│ │ └── js
│ │ │ ├── api.18a5ba8a1bd8.js
│ │ │ ├── api.18a5ba8a1bd8.js.gz
│ │ │ ├── api.js
│ │ │ ├── api.js.gz
│ │ │ ├── highlight.pack.479b5f21dcba.js
│ │ │ ├── highlight.pack.479b5f21dcba.js.gz
│ │ │ ├── highlight.pack.js
│ │ │ ├── highlight.pack.js.gz
│ │ │ ├── jquery.json-view.min.b7c2d6981377.js
│ │ │ ├── jquery.json-view.min.b7c2d6981377.js.gz
│ │ │ ├── jquery.json-view.min.js
│ │ │ └── jquery.json-view.min.js.gz
│ ├── fonts
│ │ ├── fontawesome-webfont.3293616ec0c6.woff
│ │ ├── fontawesome-webfont.83e37a11f9d7.svg
│ │ ├── fontawesome-webfont.83e37a11f9d7.svg.gz
│ │ ├── fontawesome-webfont.8b27bc96115c.eot
│ │ ├── fontawesome-webfont.dcb26c7239d8.ttf
│ │ ├── fontawesome-webfont.dcb26c7239d8.ttf.gz
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.svg.gz
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.ttf.gz
│ │ ├── fontawesome-webfont.woff
│ │ ├── glyphicons-halflings-regular.08eda92397ae.svg
│ │ ├── glyphicons-halflings-regular.08eda92397ae.svg.gz
│ │ ├── glyphicons-halflings-regular.448c34a56d69.woff2
│ │ ├── glyphicons-halflings-regular.e18bbf611f2a.ttf
│ │ ├── glyphicons-halflings-regular.e18bbf611f2a.ttf.gz
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.f4769f9bdb74.eot
│ │ ├── glyphicons-halflings-regular.fa2772327f55.woff
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.svg.gz
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.ttf.gz
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ ├── img
│ │ ├── glyphicons-halflings-white.9bbc6e960299.png
│ │ ├── glyphicons-halflings-white.png
│ │ ├── glyphicons-halflings.90233c9067e9.png
│ │ ├── glyphicons-halflings.png
│ │ ├── grid.a4b938cf382b.png
│ │ └── grid.png
│ └── js
│ │ ├── ajax-form.0ea6e6052ab5.js
│ │ ├── ajax-form.0ea6e6052ab5.js.gz
│ │ ├── ajax-form.js
│ │ ├── ajax-form.js.gz
│ │ ├── bootstrap.min.2f34b630ffe3.js
│ │ ├── bootstrap.min.2f34b630ffe3.js.gz
│ │ ├── bootstrap.min.js
│ │ ├── bootstrap.min.js.gz
│ │ ├── coreapi-0.1.1.e580e3854595.js
│ │ ├── coreapi-0.1.1.e580e3854595.js.gz
│ │ ├── coreapi-0.1.1.js
│ │ ├── coreapi-0.1.1.js.gz
│ │ ├── csrf.969930007329.js
│ │ ├── csrf.969930007329.js.gz
│ │ ├── csrf.js
│ │ ├── csrf.js.gz
│ │ ├── default.5b08897dbdc3.js
│ │ ├── default.5b08897dbdc3.js.gz
│ │ ├── default.js
│ │ ├── default.js.gz
│ │ ├── jquery-3.5.1.min.dc5e7f18c8d3.js
│ │ ├── jquery-3.5.1.min.dc5e7f18c8d3.js.gz
│ │ ├── jquery-3.5.1.min.js
│ │ ├── jquery-3.5.1.min.js.gz
│ │ ├── prettify-min.709bfcc456c6.js
│ │ ├── prettify-min.709bfcc456c6.js.gz
│ │ ├── prettify-min.js
│ │ └── prettify-min.js.gz
└── staticfiles.json
├── storages
├── __init__.py
├── api
│ ├── serializers.py
│ └── viewsets.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
├── models.py
├── templates
│ ├── create_stg_block.html
│ ├── create_stg_vol_block.html
│ ├── storage.html
│ └── storages.html
├── tests.py
└── views.py
├── templates
├── 403.html
├── 404.html
├── 500.html
├── base.html
├── common
│ ├── confirm_delete.html
│ └── form.html
├── navbar.html
├── pleasewaitdialog.html
└── search_block.html
├── virtsecrets
├── __init__.py
├── forms.py
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ ├── create_secret_block.html
│ └── secrets.html
├── tests.py
└── views.py
├── vrtManager
├── IPy.py
├── __init__.py
├── connection.py
├── create.py
├── hostdetails.py
├── instance.py
├── interface.py
├── network.py
├── nwfilters.py
├── rwlock.py
├── storage.py
├── util.py
└── virtsecrets.py
├── webvirtcloud.sh
└── webvirtcloud
├── __init__.py
├── asgi.py
├── common_tags.py
├── middleware.py
├── settings-dev.py
├── settings.py.template
├── urls-api.py
├── urls.py
├── wsgi.py
└── wsgi_custom.py
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/__pycache__
2 | **/.classpath
3 | **/.dockerignore
4 | **/.env
5 | **/.git
6 | **/.gitignore
7 | **/.project
8 | **/.settings
9 | **/.toolstarget
10 | **/.vs
11 | **/.vscode
12 | **/*.*proj.user
13 | **/*.dbmdl
14 | **/*.jfm
15 | **/azds.yaml
16 | **/bin
17 | **/charts
18 | **/docker-compose*
19 | **/Dockerfile*
20 | **/node_modules
21 | **/npm-debug.log
22 | **/obj
23 | **/secrets.dev.yaml
24 | **/values.dev.yaml
25 | README.md
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vagrant
2 | .venv
3 | venv
4 | venv2
5 | .vscode
6 | .idea
7 | .DS_*
8 | .webvirtcloud
9 | *.pyc
10 | db.sqlite3*
11 | console/cert.pem*
12 | tags
13 | dhcpd.*
14 | webvirtcloud/settings.py
15 | *migrations/*
16 | .coverage
17 | htmlcov
18 | *.log
19 | templates/webvirtcloud.code-workspace
20 |
--------------------------------------------------------------------------------
/.gitpod.yml:
--------------------------------------------------------------------------------
1 | image: gitpod/workspace-full
2 |
3 | tasks:
4 | - init: 'echo "TODO: Replace with init/build command"'
5 | command: 'echo "TODO: Replace with command to start project"'
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | ---
2 | language: python
3 | python:
4 | - "3.9"
5 | env:
6 | - DJANGO=4.2.4
7 | install:
8 | - pip install -r dev/requirements.txt
9 | script:
10 | - pep8 --exclude=IPy.py --ignore=E501 vrtManager accounts admin appsettings \
11 | computesconsole create datasource instances \
12 | interfaceslogs networks nwfilters storages \
13 | virtsecrets
14 | - pyflakes vrtManager accounts admin appsettings computes console create datasource \
15 | instances interfaces logs networks nwfilters storages virtsecrets
16 | - python manage.py migrate
17 | - python manage.py test --settings=webvirtcloud.settings-dev
18 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/accounts/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'accounts.apps.AccountsConfig'
2 |
--------------------------------------------------------------------------------
/accounts/migrations/0002_permissionset.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-05-27 12:29
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('accounts', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.CreateModel(
14 | name='PermissionSet',
15 | fields=[
16 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17 | ],
18 | options={
19 | 'permissions': (('change_password', 'Can change password'), ),
20 | 'managed': False,
21 | 'default_permissions': (),
22 | },
23 | ),
24 | ]
25 |
--------------------------------------------------------------------------------
/accounts/migrations/0005_auto_20200616_1039.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-06-16 10:39
2 |
3 | from django.conf import settings
4 | from django.db import migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('instances', '0003_auto_20200615_0637'),
11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12 | ('accounts', '0004_auto_20200615_0637'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterUniqueTogether(
17 | name='userinstance',
18 | unique_together={('user', 'instance')},
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/accounts/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/accounts/migrations/__init__.py
--------------------------------------------------------------------------------
/accounts/templates/accounts/email/otp.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% load qr_code %}
3 | {% blocktrans %}
4 | Scan this QR code to get OTP for account '{{ user }}'
5 | {% endblocktrans %}
6 |
7 | {% qr_from_text totp_url %}
8 |
{% trans 'Some e-mail clients does not render SVG, also generating PNG.' %}
9 | {% qr_from_text totp_url size="s" image_format="png" error_correction="M" %}
10 |
--------------------------------------------------------------------------------
/accounts/templates/logout.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load i18n %}
3 | {% block title %}
4 | {% trans "WebVirtCloud" %} - {% trans "Sign Out"%}
5 | {% endblock %}
6 | {% block content %}
7 |
8 |
11 |
12 |
13 |
{% trans "Successful log out" %}
14 |
15 |
16 |
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/accounts/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/accounts/templatetags/__init__.py
--------------------------------------------------------------------------------
/accounts/templatetags/tags_fingerprint.py:
--------------------------------------------------------------------------------
1 | import base64
2 | import hashlib
3 |
4 | from django import template
5 |
6 | register = template.Library()
7 |
8 |
9 | @register.simple_tag
10 | def ssh_to_fingerprint(line):
11 | try:
12 | key = base64.b64decode(line.strip().split()[1].encode('ascii'))
13 | fp_plain = hashlib.md5(key).hexdigest()
14 | return ':'.join(a + b for a, b in zip(fp_plain[::2], fp_plain[1::2]))
15 | except Exception:
16 | return 'Invalid key'
17 |
--------------------------------------------------------------------------------
/admin/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'admin.apps.AdminConfig'
2 |
--------------------------------------------------------------------------------
/admin/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class AdminConfig(AppConfig):
5 | name = "admin"
6 |
--------------------------------------------------------------------------------
/admin/decorators.py:
--------------------------------------------------------------------------------
1 | from django.core.exceptions import PermissionDenied
2 |
3 |
4 | def superuser_only(function):
5 | def _inner(request, *args, **kwargs):
6 | if not request.user.is_superuser:
7 | raise PermissionDenied
8 | return function(request, *args, **kwargs)
9 |
10 | return _inner
11 |
--------------------------------------------------------------------------------
/admin/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-05-27 07:01
2 |
3 | import django.contrib.auth.models
4 | from django.db import migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | initial = True
10 |
11 | dependencies = [
12 | ]
13 |
14 | operations = [
15 | migrations.CreateModel(
16 | name='Permission',
17 | fields=[
18 | ],
19 | options={
20 | 'proxy': True,
21 | 'indexes': [],
22 | 'constraints': [],
23 | },
24 | bases=('auth.permission',),
25 | managers=[
26 | ('objects', django.contrib.auth.models.PermissionManager()),
27 | ],
28 | ),
29 | ]
30 |
--------------------------------------------------------------------------------
/admin/migrations/0002_auto_20200609_0830.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-06-09 08:30
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('admin', '0001_initial'),
10 | ('auth', '0011_update_proxy_permissions'),
11 | ]
12 |
13 | operations = [
14 | ]
15 |
--------------------------------------------------------------------------------
/admin/migrations/0003_create_group_technicians.py:
--------------------------------------------------------------------------------
1 | from django.db import models, migrations
2 |
3 | def apply_migration(apps, schema_editor):
4 | Group = apps.get_model('auth', 'Group')
5 | Group.objects.create(name='Technicians')
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('admin', '0002_auto_20200609_0830'),
11 | ]
12 |
13 | operations = [
14 | migrations.RunPython(apply_migration)
15 | ]
16 |
--------------------------------------------------------------------------------
/admin/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/admin/migrations/__init__.py
--------------------------------------------------------------------------------
/admin/models.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.models import Permission as P
2 |
3 |
4 | class Permission(P):
5 | """
6 | Proxy model to Django Permissions model allows us to override __str__
7 | """
8 |
9 | def __str__(self):
10 | return f"{self.content_type.app_label}: {self.name}"
11 |
12 | class Meta:
13 | proxy = True
14 |
--------------------------------------------------------------------------------
/appsettings/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/appsettings/__init__.py
--------------------------------------------------------------------------------
/appsettings/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class AppsettingsConfig(AppConfig):
5 | name = "appsettings"
6 |
--------------------------------------------------------------------------------
/appsettings/context_processors.py:
--------------------------------------------------------------------------------
1 | from .settings import app_settings as settings
2 |
3 |
4 | def app_settings(request):
5 | """
6 | Simple context processor that puts the config into every\
7 | RequestContext. Just make sure you have a setting like this::
8 | TEMPLATE_CONTEXT_PROCESSORS = (
9 | # ...
10 | 'appsettings.context_processors.app_settings',
11 | )
12 | """
13 | return {"app_settings": settings}
14 |
--------------------------------------------------------------------------------
/appsettings/middleware.py:
--------------------------------------------------------------------------------
1 | from .settings import app_settings, get_settings
2 |
3 |
4 | class AppSettingsMiddleware(object):
5 | def __init__(self, get_response):
6 | self.get_response = get_response
7 |
8 | def __call__(self, request):
9 | get_settings()
10 | return self.get_response(request)
11 |
--------------------------------------------------------------------------------
/appsettings/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-05-27 16:03
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | initial = True
9 |
10 | dependencies = [
11 | ]
12 |
13 | operations = [
14 | migrations.CreateModel(
15 | name='AppSettings',
16 | fields=[
17 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18 | ('name', models.CharField(max_length=25)),
19 | ('key', models.CharField(db_index=True, max_length=50, unique=True)),
20 | ('value', models.CharField(max_length=25)),
21 | ('choices', models.CharField(max_length=70)),
22 | ('description', models.CharField(max_length=100, null=True)),
23 | ],
24 | ),
25 | ]
26 |
--------------------------------------------------------------------------------
/appsettings/migrations/0005_auto_20200911_1233.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.14 on 2020-09-11 12:33
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('appsettings', '0004_auto_20200716_0637'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='appsettings',
15 | name='choices',
16 | field=models.CharField(max_length=70, verbose_name='choices'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/appsettings/migrations/0007_auto_20220905_0918.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.13 on 2022-06-30 07:17
2 |
3 | from django.db import migrations
4 | from django.utils.translation import gettext_lazy as _
5 |
6 | def update_default_settings(apps, schema_editor):
7 | setting = apps.get_model("appsettings", "AppSettings")
8 | db_alias = schema_editor.connection.alias
9 | setting.objects.using(db_alias).filter(key="INSTANCE_MACHINE_DEFAULT_TYPE").update(choices="q35,x86_64,virt"),
10 | setting.objects.using(db_alias).filter(key="INSTANCE_ARCH_DEFAULT_TYPE").update(choices="x86_64,i686,aarch64"),
11 |
12 |
13 | class Migration(migrations.Migration):
14 |
15 | dependencies = [
16 | ('appsettings', '0006_auto_20220630_0717'),
17 | ]
18 |
19 | operations = [
20 | migrations.RunPython(update_default_settings, None)
21 | ]
22 |
--------------------------------------------------------------------------------
/appsettings/migrations/0009_alter_appsettings_id.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.5 on 2023-10-30 17:00
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('appsettings', '0008_auto_20220905_1459'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='appsettings',
15 | name='id',
16 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/appsettings/migrations/0011_alter_appsettings_id.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.10 on 2024-02-14 11:54
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ("appsettings", "0010_auto_20231030_1305"),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name="appsettings",
15 | name="id",
16 | field=models.AutoField(
17 | auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
18 | ),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/appsettings/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/appsettings/migrations/__init__.py
--------------------------------------------------------------------------------
/appsettings/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.utils.translation import gettext_lazy as _
3 |
4 |
5 | class AppSettings(models.Model):
6 | def choices_as_list(self):
7 | return self.choices.split(",")
8 |
9 | name = models.CharField(_("name"), max_length=25, null=False)
10 | key = models.CharField(_("key"), db_index=True, max_length=50, unique=True)
11 | value = models.CharField(_("value"), max_length=25)
12 | choices = models.CharField(_("choices"), max_length=70)
13 | description = models.CharField(_("description"), max_length=100, null=True)
14 |
--------------------------------------------------------------------------------
/appsettings/settings.py:
--------------------------------------------------------------------------------
1 | from .models import AppSettings
2 |
3 |
4 | class Settings:
5 | pass
6 |
7 |
8 | app_settings = Settings()
9 |
10 |
11 | def get_settings():
12 | try:
13 | entries = AppSettings.objects.all()
14 | except:
15 | pass
16 |
17 | for entry in entries:
18 | setattr(app_settings, entry.key, entry.value)
19 |
--------------------------------------------------------------------------------
/appsettings/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/computes/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/computes/__init__.py
--------------------------------------------------------------------------------
/computes/api/serializers.py:
--------------------------------------------------------------------------------
1 | from computes.models import Compute
2 | from rest_framework import serializers
3 | from vrtManager.connection import CONN_SOCKET, CONN_SSH, CONN_TCP, CONN_TLS
4 |
5 |
6 | class ComputeSerializer(serializers.ModelSerializer):
7 | # Use for the input.
8 | password = serializers.CharField(style={"input_type": "password"})
9 | # Use a radio input instead of a select input.
10 | conn_types = (
11 | (CONN_SSH, "SSH"),
12 | (CONN_TCP, "TCP"),
13 | (CONN_TLS, "TLS"),
14 | (CONN_SOCKET, "SOCK"),
15 | )
16 | type = serializers.ChoiceField(choices=conn_types)
17 |
18 | class Meta:
19 | model = Compute
20 | fields = ["id", "name", "hostname", "login", "password", "type", "details"]
21 |
--------------------------------------------------------------------------------
/computes/migrations/0002_auto_20200529_1320.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-05-29 13:20
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('computes', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='compute',
15 | name='name',
16 | field=models.CharField(max_length=64, unique=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/computes/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/computes/migrations/__init__.py
--------------------------------------------------------------------------------
/computes/templates/create_comp_block.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% load django_bootstrap5 %}
3 | {% load bootstrap_icons %}
4 |
5 |
12 |
--------------------------------------------------------------------------------
/computes/utils.py:
--------------------------------------------------------------------------------
1 | from instances.models import Instance
2 |
3 |
4 | def refresh_instance_database(compute):
5 | domains = compute.proxy.wvm.listAllDomains()
6 | domain_names = [d.name() for d in domains]
7 | domain_uuids = [d.UUIDString() for d in domains]
8 | # Delete instances that're not on host from DB
9 | Instance.objects.filter(compute=compute).exclude(name__in=domain_names).delete()
10 | Instance.objects.filter(compute=compute).exclude(uuid__in=domain_uuids).delete()
11 | # Create instances that're on host but not in DB
12 | names = Instance.objects.filter(compute=compute).values_list("name", flat=True)
13 | for domain in domains:
14 | if domain.name() not in names:
15 | Instance(
16 | compute=compute, name=domain.name(), uuid=domain.UUIDString()
17 | ).save()
18 |
--------------------------------------------------------------------------------
/computes/validators.py:
--------------------------------------------------------------------------------
1 | import re
2 |
3 | from django.core.exceptions import ValidationError
4 | from django.utils.translation import gettext_lazy as _
5 |
6 | have_symbol = re.compile("[^a-zA-Z0-9._-]+")
7 | wrong_ip = re.compile("^0.|^255.")
8 | wrong_name = re.compile("[^a-zA-Z0-9._-]+")
9 |
10 |
11 | def validate_hostname(value):
12 | sym = have_symbol.match(value)
13 | wip = wrong_ip.match(value)
14 |
15 | if sym:
16 | raise ValidationError(
17 | _('Hostname must contain only numbers, or the domain name separated by "."')
18 | )
19 | elif wip:
20 | raise ValidationError(_("Wrong IP address"))
21 |
22 |
23 | def validate_name(value):
24 | have_symbol = wrong_name.match("[^a-zA-Z0-9._-]+")
25 | if have_symbol:
26 | raise ValidationError(_("The hostname must not contain any special characters"))
27 |
--------------------------------------------------------------------------------
/conf/requirements.txt:
--------------------------------------------------------------------------------
1 | Django==4.2.20
2 | django_bootstrap5==25.1
3 | django-bootstrap-icons==0.9.0
4 | django-login-required-middleware==0.9.0
5 | django-otp==1.6.0
6 | django-qr-code==4.1.0
7 | django-auth-ldap==5.1.0
8 | djangorestframework==3.16.0
9 | drf-nested-routers==0.94.1
10 | drf-yasg==1.21.10
11 | eventlet==0.39.1
12 | gunicorn==23.0.0
13 | libsass==0.23.0
14 | libvirt-python==11.2.0
15 | lxml==5.4.0
16 | ldap3==2.9.1
17 | markdown==3.6
18 | #psycopg2-binary
19 | python-engineio==4.12.0
20 | python-socketio==5.13.0
21 | qrcode==8.2
22 | rwlock==0.0.7
23 | tzdata
24 | websockify==0.12.0
25 | whitenoise==6.9.0
26 | zipp==3.21.0
27 | crypt-r==3.13.1
28 |
--------------------------------------------------------------------------------
/conf/runit/nginx:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | if [[ ! -e /var/log/nginx/error.log ]]; then
4 | # The Nginx log forwarder might be sleeping and waiting
5 | # until the error log becomes available. We restart it in
6 | # 1 second so that it picks up the new log file quickly.
7 | (sleep 1 && sv restart /etc/service/nginx-log-forwarder)
8 | fi
9 | exec /usr/sbin/nginx
10 |
--------------------------------------------------------------------------------
/conf/runit/nginx-log-forwarder:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Forwards the Nginx error.log to the Docker logs.
3 | set -e
4 | if [[ -e /var/log/nginx/error.log ]]; then
5 | exec tail -F /var/log/nginx/error.log
6 | else
7 | exec sleep 10
8 | fi
9 |
--------------------------------------------------------------------------------
/conf/runit/novncd.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # `/sbin/setuser www-data` runs the given command as the user `www-data`.
4 | RUNAS=$(which setuser)
5 | [ -z "$RUNAS" ] && RUNAS="$(which sudo) -u"
6 | USER=www-data
7 |
8 | DJANGO_PROJECT=/srv/webvirtcloud
9 | PYTHON=$DJANGO_PROJECT/venv/bin/python3
10 | NOVNCD=$DJANGO_PROJECT/console/novncd
11 |
12 | # make novncd debug, verbose
13 | #PARAMS="-d -v"
14 |
15 | LOG=/var/log/novncd.log
16 |
17 | cd $DJANGO_PROJECT || exit
18 | exec "$RUNAS" "$USER" "$PYTHON" "$NOVNCD" "$PARAMS" >> $LOG 2>&1
19 |
--------------------------------------------------------------------------------
/conf/runit/secret_generator.py:
--------------------------------------------------------------------------------
1 | import secrets
2 |
3 | generated_key = secrets.token_urlsafe(50)
4 |
5 | print(''.join(generated_key))
6 |
7 |
8 | ### Use for old python versions < 3.6
9 | ##import random
10 | ##import string
11 | #
12 | ##haystack = string.ascii_letters + string.digits + string.punctuation
13 | ##print(''.join([random.SystemRandom().choice(haystack.replace('/', '').replace('\'', '').replace('\"', '')) for _ in range(50)]))
14 |
--------------------------------------------------------------------------------
/conf/runit/webvirtcloud.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # `/sbin/setuser www-data` runs the given command as the user `www-data`.
3 | cd /srv/webvirtcloud || exit
4 | exec /sbin/setuser www-data /srv/webvirtcloud/venv/bin/gunicorn webvirtcloud.wsgi:application -c /srv/webvirtcloud/gunicorn.conf.py >> /var/log/webvirtcloud.log 2>&1
5 |
--------------------------------------------------------------------------------
/conf/supervisor/gstfsd.conf:
--------------------------------------------------------------------------------
1 | [program:gstfsd]
2 | command=/usr/bin/python3 /usr/local/bin/gstfsd
3 | directory=/usr/local/bin
4 | user=root
5 | autostart=true
6 | autorestart=true
7 | redirect_stderr=true
--------------------------------------------------------------------------------
/conf/supervisor/webvirtcloud.conf:
--------------------------------------------------------------------------------
1 | [program:webvirtcloud]
2 | command=/srv/webvirtcloud/venv/bin/gunicorn webvirtcloud.wsgi:application -c /srv/webvirtcloud/gunicorn.conf.py
3 | directory=/srv/webvirtcloud
4 | user=www-data
5 | autostart=true
6 | autorestart=true
7 | redirect_stderr=true
8 |
9 | [program:novncd]
10 | command=/srv/webvirtcloud/venv/bin/python3 /srv/webvirtcloud/console/novncd
11 | directory=/srv/webvirtcloud
12 | user=www-data
13 | autostart=true
14 | autorestart=true
15 | redirect_stderr=true
16 |
17 | [program:socketiod]
18 | command=/srv/webvirtcloud/venv/bin/python3 /srv/webvirtcloud/console/socketiod -d
19 | directory=/srv/webvirtcloud
20 | user=www-data
21 | autostart=true
22 | autorestart=true
23 | redirect_stderr=true
24 |
--------------------------------------------------------------------------------
/conf/systemd/README.md:
--------------------------------------------------------------------------------
1 | # Ubuntu Service Files
2 |
3 | I choose to install this service on Ubuntu 22.04
4 |
5 | The process is not fully documented but I wanted to contribute the service files
6 |
7 | The file webvirt is beeing installed into /etc/default/webvirt and allows you to easily change the location of the webvirtcloud installation path
8 |
9 | The PATH variable being set for these services includes /usr/bin which contains the ssh executable. That is being used by webvirt-cloud and webvirt-novncd
10 |
11 | Should the executable be located in another location please adjust the path
12 |
13 | The error you should be seeing is "ssh executable not found"
14 |
15 |
16 |
--------------------------------------------------------------------------------
/conf/systemd/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | FILEPATH=$(readlink -f "$0");
3 | SCRIPTPATH=$(dirname "$FILEPATH");
4 | cd "$SCRIPTPATH"
5 | cp webvirt-* /lib/systemd/system/
6 | cp webvirt /etc/default/
7 | echo Run to start services \"systemctl daemon-reload\; systemctl enable --now $(ls webvirt-* | tr "\n" " ")\"
8 |
--------------------------------------------------------------------------------
/conf/systemd/webvirt:
--------------------------------------------------------------------------------
1 | WEBVIRT_PATH="/srv/webvirtcloud"
2 | PATH="$WEBVIRT_PATH/venv/bin:/usr/bin"
3 |
--------------------------------------------------------------------------------
/conf/systemd/webvirt-cloud.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Webvirt Cloud Webinterface
3 | Wants=network-online.target
4 | After=network-online.target
5 |
6 | [Service]
7 | Type=simple
8 | Restart=on-failure
9 | RestartSec=10
10 | User=www-data
11 | Group=www-data
12 | LimitNOFILE=64000
13 | AmbientCapabilities=CAP_NET_BIND_SERVICE
14 | EnvironmentFile=/etc/default/webvirt
15 |
16 | ExecStart=/bin/bash -c "cd ${WEBVIRT_PATH};${WEBVIRT_PATH}/venv/bin/gunicorn webvirtcloud.wsgi:application -c ${WEBVIRT_PATH}/gunicorn.conf.py"
17 |
18 | # Make sure stderr/stdout is captured in the systemd journal.
19 | StandardOutput=journal
20 | StandardError=journal
21 |
22 | [Install]
23 | WantedBy=multi-user.target
24 |
--------------------------------------------------------------------------------
/conf/systemd/webvirt-gstfsd.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Webvirt Cloud GSTFSD
3 | Wants=network-online.target
4 | After=network-online.target
5 |
6 | [Service]
7 | Type=simple
8 | Restart=on-failure
9 | RestartSec=10
10 | LimitNOFILE=64000
11 |
12 | ExecStart=/usr/bin/python3 /usr/local/bin/gstfsd
13 |
14 | # Make sure stderr/stdout is captured in the systemd journal.
15 | StandardOutput=journal
16 | StandardError=journal
17 |
18 | [Install]
19 | WantedBy=multi-user.target
20 |
--------------------------------------------------------------------------------
/conf/systemd/webvirt-novncd.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Webvirt Cloud NOVNCD
3 | Wants=network-online.target
4 | After=network-online.target
5 |
6 | [Service]
7 | Type=simple
8 | Restart=on-failure
9 | RestartSec=10
10 | User=www-data
11 | Group=www-data
12 | LimitNOFILE=64000
13 | AmbientCapabilities=CAP_NET_BIND_SERVICE
14 | EnvironmentFile=/etc/default/webvirt
15 |
16 | ExecStart=/bin/bash -c "cd ${WEBVIRT_PATH};${WEBVIRT_PATH}/venv/bin/python3 ${WEBVIRT_PATH}/console/novncd"
17 |
18 | # Make sure stderr/stdout is captured in the systemd journal.
19 | StandardOutput=journal
20 | StandardError=journal
21 |
22 | [Install]
23 | WantedBy=multi-user.target
24 |
--------------------------------------------------------------------------------
/conf/systemd/webvirt-socketiod.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Webvirt Cloud NOVNCD
3 | Wants=network-online.target
4 | After=network-online.target
5 |
6 | [Service]
7 | Type=simple
8 | Restart=on-failure
9 | RestartSec=10
10 | User=www-data
11 | Group=www-data
12 | LimitNOFILE=64000
13 | AmbientCapabilities=CAP_NET_BIND_SERVICE
14 | EnvironmentFile=/etc/default/webvirt
15 |
16 | ExecStart=/bin/bash -c "cd ${WEBVIRT_PATH};${WEBVIRT_PATH}/venv/bin/python3 ${WEBVIRT_PATH}/console/socketiod -d"
17 |
18 | # Make sure stderr/stdout is captured in the systemd journal.
19 | StandardOutput=journal
20 | StandardError=journal
21 |
22 | [Install]
23 | WantedBy=multi-user.target
24 |
--------------------------------------------------------------------------------
/console/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/console/__init__.py
--------------------------------------------------------------------------------
/console/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/console/migrations/__init__.py
--------------------------------------------------------------------------------
/console/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/console/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/datasource/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/datasource/__init__.py
--------------------------------------------------------------------------------
/datasource/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/datasource/migrations/__init__.py
--------------------------------------------------------------------------------
/datasource/models.py:
--------------------------------------------------------------------------------
1 | # Create your models here.
2 |
--------------------------------------------------------------------------------
/datasource/templates/user_data:
--------------------------------------------------------------------------------
1 | #cloud-config
2 | {% if instance_keys %}
3 | ssh_authorized_keys:
4 | {% for key in instance_keys %} - {{ key }}
5 | {% endfor %}
6 | {% endif %}
7 |
--------------------------------------------------------------------------------
/datasource/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/datasource/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from . import views
4 |
5 | urlpatterns = [
6 | path("openstack/", views.os_index, name="ds_openstack_index"),
7 | path(
8 | "openstack//meta_data.json",
9 | views.os_metadata_json,
10 | name="ds_openstack_metadata",
11 | ),
12 | path(
13 | "openstack//user_data", views.os_userdata, name="ds_openstack_userdata"
14 | ),
15 | path("vdi///", views.get_vdi_url, name="vdi_url"),
16 | ]
17 |
--------------------------------------------------------------------------------
/dev/requirements.txt:
--------------------------------------------------------------------------------
1 | -r ../conf/requirements.txt
2 | coverage==7.8.0
3 | django-debug-toolbar==5.2.0
4 | django-debug-toolbar-template-profiler
5 | pycodestyle==2.13.0
6 | pyflakes==3.3.2
7 | pylint==3.3.6
8 | yapf==0.43.0
9 | black==25.1.0
10 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/_forms.scss:
--------------------------------------------------------------------------------
1 | @import "forms/labels";
2 | @import "forms/form-text";
3 | @import "forms/form-control";
4 | @import "forms/form-select";
5 | @import "forms/form-check";
6 | @import "forms/form-range";
7 | @import "forms/floating-labels";
8 | @import "forms/input-group";
9 | @import "forms/validation";
10 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/_grid.scss:
--------------------------------------------------------------------------------
1 | // Row
2 | //
3 | // Rows contain your columns.
4 |
5 | @if $enable-grid-classes {
6 | .row {
7 | @include make-row();
8 |
9 | > * {
10 | @include make-col-ready();
11 | }
12 | }
13 | }
14 |
15 | @if $enable-cssgrid {
16 | .grid {
17 | display: grid;
18 | grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);
19 | grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);
20 | gap: var(--#{$prefix}gap, #{$grid-gutter-width});
21 |
22 | @include make-cssgrid();
23 | }
24 | }
25 |
26 |
27 | // Columns
28 | //
29 | // Common styles for small and large grid columns
30 |
31 | @if $enable-grid-classes {
32 | @include make-grid-columns();
33 | }
34 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/_helpers.scss:
--------------------------------------------------------------------------------
1 | @import "helpers/clearfix";
2 | @import "helpers/color-bg";
3 | @import "helpers/colored-links";
4 | @import "helpers/ratio";
5 | @import "helpers/position";
6 | @import "helpers/stacks";
7 | @import "helpers/visually-hidden";
8 | @import "helpers/stretched-link";
9 | @import "helpers/text-truncation";
10 | @import "helpers/vr";
11 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/_transitions.scss:
--------------------------------------------------------------------------------
1 | .fade {
2 | @include transition($transition-fade);
3 |
4 | &:not(.show) {
5 | opacity: 0;
6 | }
7 | }
8 |
9 | // scss-docs-start collapse-classes
10 | .collapse {
11 | &:not(.show) {
12 | display: none;
13 | }
14 | }
15 |
16 | .collapsing {
17 | height: 0;
18 | overflow: hidden;
19 | @include transition($transition-collapse);
20 |
21 | &.collapse-horizontal {
22 | width: 0;
23 | height: auto;
24 | @include transition($transition-collapse-width);
25 | }
26 | }
27 | // scss-docs-end collapse-classes
28 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/bootstrap-reboot.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/banner";
2 | @include bsBanner(Reboot);
3 |
4 | @import "functions";
5 | @import "variables";
6 | @import "maps";
7 | @import "mixins";
8 | @import "root";
9 | @import "reboot";
10 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/bootstrap-utilities.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/banner";
2 | @include bsBanner(Utilities);
3 |
4 | // Configuration
5 | @import "functions";
6 | @import "variables";
7 | @import "maps";
8 | @import "mixins";
9 | @import "utilities";
10 |
11 | // Helpers
12 | @import "helpers";
13 |
14 | // Utilities
15 | @import "utilities/api";
16 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/forms/_form-text.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Form text
3 | //
4 |
5 | .form-text {
6 | margin-top: $form-text-margin-top;
7 | @include font-size($form-text-font-size);
8 | font-style: $form-text-font-style;
9 | font-weight: $form-text-font-weight;
10 | color: $form-text-color;
11 | }
12 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/forms/_validation.scss:
--------------------------------------------------------------------------------
1 | // Form validation
2 | //
3 | // Provide feedback to users when form field values are valid or invalid. Works
4 | // primarily for client-side validation via scoped `:invalid` and `:valid`
5 | // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
6 | // server-side validation.
7 |
8 | // scss-docs-start form-validation-states-loop
9 | @each $state, $data in $form-validation-states {
10 | @include form-validation-state($state, $data...);
11 | }
12 | // scss-docs-end form-validation-states-loop
13 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_clearfix.scss:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | @include clearfix();
3 | }
4 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_color-bg.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable function-name-case
2 |
3 | // All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251
4 | @each $color, $value in $theme-colors {
5 | $color-rgb: to-rgb($value);
6 | .text-bg-#{$color} {
7 | color: color-contrast($value) if($enable-important-utilities, !important, null);
8 | background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_colored-links.scss:
--------------------------------------------------------------------------------
1 | @each $color, $value in $theme-colors {
2 | .link-#{$color} {
3 | color: $value !important; // stylelint-disable-line declaration-no-important
4 |
5 | @if $link-shade-percentage != 0 {
6 | &:hover,
7 | &:focus {
8 | color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important
9 | }
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_position.scss:
--------------------------------------------------------------------------------
1 | // Shorthand
2 |
3 | .fixed-top {
4 | position: fixed;
5 | top: 0;
6 | right: 0;
7 | left: 0;
8 | z-index: $zindex-fixed;
9 | }
10 |
11 | .fixed-bottom {
12 | position: fixed;
13 | right: 0;
14 | bottom: 0;
15 | left: 0;
16 | z-index: $zindex-fixed;
17 | }
18 |
19 | // Responsive sticky top and bottom
20 | @each $breakpoint in map-keys($grid-breakpoints) {
21 | @include media-breakpoint-up($breakpoint) {
22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
23 |
24 | .sticky#{$infix}-top {
25 | position: sticky;
26 | top: 0;
27 | z-index: $zindex-sticky;
28 | }
29 |
30 | .sticky#{$infix}-bottom {
31 | position: sticky;
32 | bottom: 0;
33 | z-index: $zindex-sticky;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_ratio.scss:
--------------------------------------------------------------------------------
1 | // Credit: Nicolas Gallagher and SUIT CSS.
2 |
3 | .ratio {
4 | position: relative;
5 | width: 100%;
6 |
7 | &::before {
8 | display: block;
9 | padding-top: var(--#{$prefix}aspect-ratio);
10 | content: "";
11 | }
12 |
13 | > * {
14 | position: absolute;
15 | top: 0;
16 | left: 0;
17 | width: 100%;
18 | height: 100%;
19 | }
20 | }
21 |
22 | @each $key, $ratio in $aspect-ratios {
23 | .ratio-#{$key} {
24 | --#{$prefix}aspect-ratio: #{$ratio};
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_stacks.scss:
--------------------------------------------------------------------------------
1 | // scss-docs-start stacks
2 | .hstack {
3 | display: flex;
4 | flex-direction: row;
5 | align-items: center;
6 | align-self: stretch;
7 | }
8 |
9 | .vstack {
10 | display: flex;
11 | flex: 1 1 auto;
12 | flex-direction: column;
13 | align-self: stretch;
14 | }
15 | // scss-docs-end stacks
16 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_stretched-link.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Stretched link
3 | //
4 |
5 | .stretched-link {
6 | &::#{$stretched-link-pseudo-element} {
7 | position: absolute;
8 | top: 0;
9 | right: 0;
10 | bottom: 0;
11 | left: 0;
12 | z-index: $stretched-link-z-index;
13 | content: "";
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_text-truncation.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Text truncation
3 | //
4 |
5 | .text-truncate {
6 | @include text-truncate();
7 | }
8 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_visually-hidden.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Visually hidden
3 | //
4 |
5 | .visually-hidden,
6 | .visually-hidden-focusable:not(:focus):not(:focus-within) {
7 | @include visually-hidden();
8 | }
9 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/helpers/_vr.scss:
--------------------------------------------------------------------------------
1 | .vr {
2 | display: inline-block;
3 | align-self: stretch;
4 | width: 1px;
5 | min-height: 1em;
6 | background-color: currentcolor;
7 | opacity: $hr-opacity;
8 | }
9 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_alert.scss:
--------------------------------------------------------------------------------
1 | // scss-docs-start alert-variant-mixin
2 | @mixin alert-variant($background, $border, $color) {
3 | --#{$prefix}alert-color: #{$color};
4 | --#{$prefix}alert-bg: #{$background};
5 | --#{$prefix}alert-border-color: #{$border};
6 |
7 | @if $enable-gradients {
8 | background-image: var(--#{$prefix}gradient);
9 | }
10 |
11 | .alert-link {
12 | color: shade-color($color, 20%);
13 | }
14 | }
15 | // scss-docs-end alert-variant-mixin
16 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_backdrop.scss:
--------------------------------------------------------------------------------
1 | // Shared between modals and offcanvases
2 | @mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {
3 | position: fixed;
4 | top: 0;
5 | left: 0;
6 | z-index: $zindex;
7 | width: 100vw;
8 | height: 100vh;
9 | background-color: $backdrop-bg;
10 |
11 | // Fade for backdrop
12 | &.fade { opacity: 0; }
13 | &.show { opacity: $backdrop-opacity; }
14 | }
15 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_banner.scss:
--------------------------------------------------------------------------------
1 | @mixin bsBanner($file) {
2 | /*!
3 | * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)
4 | * Copyright 2011-2022 The Bootstrap Authors
5 | * Copyright 2011-2022 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7 | */
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_box-shadow.scss:
--------------------------------------------------------------------------------
1 | @mixin box-shadow($shadow...) {
2 | @if $enable-shadows {
3 | $result: ();
4 |
5 | @each $value in $shadow {
6 | @if $value != null {
7 | $result: append($result, $value, "comma");
8 | }
9 | @if $value == none and length($shadow) > 1 {
10 | @warn "The keyword 'none' must be used as a single argument.";
11 | }
12 | }
13 |
14 | @if (length($result) > 0) {
15 | box-shadow: $result;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_clearfix.scss:
--------------------------------------------------------------------------------
1 | // scss-docs-start clearfix
2 | @mixin clearfix() {
3 | &::after {
4 | display: block;
5 | clear: both;
6 | content: "";
7 | }
8 | }
9 | // scss-docs-end clearfix
10 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_color-scheme.scss:
--------------------------------------------------------------------------------
1 | // scss-docs-start mixin-color-scheme
2 | @mixin color-scheme($name) {
3 | @media (prefers-color-scheme: #{$name}) {
4 | @content;
5 | }
6 | }
7 | // scss-docs-end mixin-color-scheme
8 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_container.scss:
--------------------------------------------------------------------------------
1 | // Container mixins
2 |
3 | @mixin make-container($gutter: $container-padding-x) {
4 | --#{$prefix}gutter-x: #{$gutter};
5 | --#{$prefix}gutter-y: 0;
6 | width: 100%;
7 | padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
8 | padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list
9 | margin-right: auto;
10 | margin-left: auto;
11 | }
12 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_deprecate.scss:
--------------------------------------------------------------------------------
1 | // Deprecate mixin
2 | //
3 | // This mixin can be used to deprecate mixins or functions.
4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {
7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) {
8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_image.scss:
--------------------------------------------------------------------------------
1 | // Image Mixins
2 | // - Responsive image
3 | // - Retina image
4 |
5 |
6 | // Responsive image
7 | //
8 | // Keep images from scaling beyond the width of their parents.
9 |
10 | @mixin img-fluid {
11 | // Part 1: Set a maximum relative to the parent
12 | max-width: 100%;
13 | // Part 2: Override the height to auto, otherwise images will be stretched
14 | // when setting a width and height attribute on the img element.
15 | height: auto;
16 | }
17 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_list-group.scss:
--------------------------------------------------------------------------------
1 | // List Groups
2 |
3 | // scss-docs-start list-group-mixin
4 | @mixin list-group-item-variant($state, $background, $color) {
5 | .list-group-item-#{$state} {
6 | color: $color;
7 | background-color: $background;
8 |
9 | &.list-group-item-action {
10 | &:hover,
11 | &:focus {
12 | color: $color;
13 | background-color: shade-color($background, 10%);
14 | }
15 |
16 | &.active {
17 | color: $white;
18 | background-color: $color;
19 | border-color: $color;
20 | }
21 | }
22 | }
23 | }
24 | // scss-docs-end list-group-mixin
25 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_lists.scss:
--------------------------------------------------------------------------------
1 | // Lists
2 |
3 | // Unstyled keeps list items block level, just removes default browser padding and list-style
4 | @mixin list-unstyled {
5 | padding-left: 0;
6 | list-style: none;
7 | }
8 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_pagination.scss:
--------------------------------------------------------------------------------
1 | // Pagination
2 |
3 | // scss-docs-start pagination-mixin
4 | @mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {
5 | --#{$prefix}pagination-padding-x: #{$padding-x};
6 | --#{$prefix}pagination-padding-y: #{$padding-y};
7 | @include rfs($font-size, --#{$prefix}pagination-font-size);
8 | --#{$prefix}pagination-border-radius: #{$border-radius};
9 | }
10 | // scss-docs-end pagination-mixin
11 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_reset-text.scss:
--------------------------------------------------------------------------------
1 | @mixin reset-text {
2 | font-family: $font-family-base;
3 | // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.
4 | font-style: normal;
5 | font-weight: $font-weight-normal;
6 | line-height: $line-height-base;
7 | text-align: left; // Fallback for where `start` is not supported
8 | text-align: start;
9 | text-decoration: none;
10 | text-shadow: none;
11 | text-transform: none;
12 | letter-spacing: normal;
13 | word-break: normal;
14 | white-space: normal;
15 | word-spacing: normal;
16 | line-break: auto;
17 | }
18 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_resize.scss:
--------------------------------------------------------------------------------
1 | // Resize anything
2 |
3 | @mixin resizable($direction) {
4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
5 | resize: $direction; // Options: horizontal, vertical, both
6 | }
7 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_text-truncate.scss:
--------------------------------------------------------------------------------
1 | // Text truncate
2 | // Requires inline-block or block for proper styling
3 |
4 | @mixin text-truncate() {
5 | overflow: hidden;
6 | text-overflow: ellipsis;
7 | white-space: nowrap;
8 | }
9 |
--------------------------------------------------------------------------------
/dev/scss/bootstrap/mixins/_transition.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable property-disallowed-list
2 | @mixin transition($transition...) {
3 | @if length($transition) == 0 {
4 | $transition: $transition-base;
5 | }
6 |
7 | @if length($transition) > 1 {
8 | @each $value in $transition {
9 | @if $value == null or $value == none {
10 | @warn "The keyword 'none' or 'null' must be used as a single argument.";
11 | }
12 | }
13 | }
14 |
15 | @if $enable-transitions {
16 | @if nth($transition, 1) != null {
17 | transition: $transition;
18 | }
19 |
20 | @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {
21 | @media (prefers-reduced-motion: reduce) {
22 | transition: none;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/dev/scss/bootswatch/bootstrap-orj/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap original
2 |
3 |
4 |
5 | // Navbar ======================================================================
6 |
7 |
8 | // Buttons =====================================================================
9 |
10 | // Typography ==================================================================
11 |
12 | // Tables ======================================================================
13 |
14 | // Forms =======================================================================
15 |
16 | // Navs ========================================================================
17 |
18 | // Indicators ==================================================================
19 |
20 | // Progress bars ===============================================================
21 |
22 | // Containers ==================================================================
--------------------------------------------------------------------------------
/dev/scss/bootswatch/bootstrap-orj/_variables.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap original
2 |
--------------------------------------------------------------------------------
/dev/scss/bootswatch/cosmo/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | // Cosmo 5.2.2
2 | // Bootswatch
3 |
4 |
5 | // Variables
6 |
7 | $web-font-path: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap" !default;
8 | @if $web-font-path {
9 | @import url($web-font-path);
10 | }
11 |
12 | :root {
13 | color-scheme: light;
14 | }
15 |
16 | // Typography
17 |
18 | body {
19 | -webkit-font-smoothing: antialiased;
20 | }
21 |
22 | // Indicators
23 |
24 | .badge {
25 | &.bg-light {
26 | color: $dark;
27 | }
28 | }
29 |
30 | // Progress bars
31 |
32 | .progress {
33 | @include box-shadow(none);
34 |
35 | .progress-bar {
36 | font-size: 8px;
37 | line-height: 8px;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/dev/scss/bootswatch/united/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | // United 5.2.2
2 | // Bootswatch
3 |
4 |
5 | // Variables
6 |
7 | $web-font-path: "https://fonts.googleapis.com/css2?family=Ubuntu:wght@400;700&display=swap" !default;
8 | @if $web-font-path {
9 | @import url($web-font-path);
10 | }
11 |
12 | :root {
13 | color-scheme: light;
14 | }
15 |
16 | // Indicators
17 |
18 | .badge {
19 | &.bg-light {
20 | color: $body-color;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/dev/scss/wvc-main.scss:
--------------------------------------------------------------------------------
1 | @import 'dev/scss//wvc-themes/zephyr/variables';
2 | @import 'dev/scss//bootstrap-overrides.scss';
3 | @import 'dev/scss//wvc-themes/zephyr/bootswatch';
4 |
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/bootstrap-orj/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap original
2 |
3 |
4 |
5 | // Navbar ======================================================================
6 |
7 |
8 | // Buttons =====================================================================
9 |
10 | // Typography ==================================================================
11 |
12 | // Tables ======================================================================
13 |
14 | // Forms =======================================================================
15 |
16 | // Navs ========================================================================
17 |
18 | // Indicators ==================================================================
19 |
20 | // Progress bars ===============================================================
21 |
22 | // Containers ==================================================================
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/bootstrap-orj/_variables.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap original
2 |
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cerulean/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cerulean/bootswatch";
2 |
3 |
4 | .breadcrumb {
5 | a {
6 | text-decoration: none;
7 | }
8 | }
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cerulean/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cerulean/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-secondary: $gray-300;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cosmo/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cosmo/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cosmo/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cosmo/variables";
2 |
3 | $link-decoration: none !default;
4 |
5 | // Breadcrumbs
6 |
7 | $breadcrumb-padding-y: .375rem !default;
8 | $breadcrumb-padding-x: .75rem !default;
9 |
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cyborg/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cyborg/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/cyborg/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/cyborg/variables";
2 |
3 | $link-decoration: none !default;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/darkly/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/darkly/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/darkly/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/darkly/variables";
2 |
3 | $link-decoration: none !default;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/flatly/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/flatly/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/flatly/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/flatly/variables";
2 |
3 | $link-decoration: none !default;
4 |
5 | $nav-link-padding-x: 1.5rem;
6 |
7 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/journal/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/journal/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/journal/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/journal/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | $nav-link-padding-x: 1.5rem;
11 |
12 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/litera/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/litera/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/litera/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/litera/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | $nav-link-padding-x: 1.5rem;
11 |
12 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/lumen/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/lumen/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/lumen/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/lumen/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | $nav-link-padding-x: 1.5rem;
11 |
12 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/lux/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/lux/bootswatch";
2 |
3 | .nav-item {
4 | margin-right: 1.5rem;
5 | }
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/lux/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/lux/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Buttons
11 |
12 | $btn-line-height: 1rem;
13 | $btn-padding-y: .7rem;
14 | $input-btn-padding-y: .5rem;
15 | $input-btn-padding-x: 1rem ;
16 | $input-btn-padding-y-sm: .25rem;
17 | $input-btn-padding-x-sm: .75rem ;
18 | $input-btn-padding-y-lg: 1rem;
19 | $input-btn-padding-x-lg: 1rem;
20 |
21 |
22 | // Forms
23 |
24 | $input-line-height: 1;
25 |
26 | // Navbar
27 |
28 | $nav-link-padding-x: .5rem;
29 | $navbar-padding-y: .75rem;
30 |
31 | // Color
32 | $secondary: $gray-400;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/materia/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/materia/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/materia/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/materia/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | $nav-link-padding-x: 1.5rem;
11 |
12 | $navbar-padding-y: .5rem;
13 |
14 | // Buttons
15 |
16 | $input-btn-padding-y: .5rem;
17 |
18 | // Forms
19 |
20 | $input-padding-y: .5rem;
21 |
22 |
23 | $secondary: $gray-400;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/minty/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/minty/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/minty/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/minty/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/morph/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/morph/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/morph/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/morph/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
14 |
15 |
16 | // Buttons + Forms
17 |
18 | $input-btn-padding-y: .5rem;
19 | $input-btn-padding-x: 1rem;
20 |
21 |
22 | $secondary: $gray-700;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/pulse/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/pulse/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/pulse/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/pulse/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/quartz/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/quartz/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/quartz/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/quartz/variables";
2 |
3 |
4 | // Breadcrumbs
5 |
6 | $breadcrumb-padding-y: .375rem !default;
7 | $breadcrumb-padding-x: .75rem !default;
8 |
9 | $link-decoration: none !default;
10 |
11 | // Navbar
12 | $nav-link-padding-x: 1.5rem;
13 |
14 | $navbar-padding-y: .7rem;
15 |
16 |
17 | // Buttons + Forms
18 |
19 | $input-btn-padding-y: .5rem;
20 | $input-btn-padding-x: 1rem;
21 |
22 |
23 | $popover-body-padding-y: $spacer / 2;
24 |
25 | $nav-pills-border-radius: 1rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/sandstone/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/sandstone/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/sandstone/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/sandstone/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/simplex/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/simplex/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/simplex/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/simplex/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
14 |
15 | $secondary: $gray-400;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/sketchy/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/sketchy/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/sketchy/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/sketchy/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/slate/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/slate/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/slate/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/slate/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
14 |
15 |
16 | // Buttons
17 |
18 | $input-btn-padding-y: .5rem;
19 |
20 |
21 | $primary: $gray-700;
22 | $min-contrast-ratio: 2;
23 |
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/solar/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/solar/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/solar/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/solar/variables";
2 |
3 |
4 | // Breadcrumbs
5 |
6 | $breadcrumb-padding-y: .375rem !default;
7 | $breadcrumb-padding-x: .75rem !default;
8 |
9 | $link-decoration: none !default;
10 |
11 | // Navbar
12 | $nav-link-padding-x: 1.5rem;
13 |
14 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/spacelab/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/spacelab/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/spacelab/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/spacelab/variables";
2 |
3 |
4 | // Breadcrumbs
5 |
6 | $breadcrumb-padding-y: .375rem !default;
7 | $breadcrumb-padding-x: .75rem !default;
8 |
9 | $link-decoration: none !default;
10 |
11 | // Navbar
12 | $nav-link-padding-x: 1.5rem;
13 |
14 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/superhero/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/superhero/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/superhero/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/superhero/variables";
2 |
3 |
4 | // Breadcrumbs
5 |
6 | $breadcrumb-padding-y: .375rem !default;
7 | $breadcrumb-padding-x: .75rem !default;
8 |
9 | $link-decoration: none !default;
10 |
11 | // Navbar
12 | $nav-link-padding-x: 1.5rem;
13 |
14 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/united/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/united/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/united/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/united/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/vapor/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/vapor/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/vapor/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/vapor/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/yeti/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/yeti/bootswatch";
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/yeti/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/yeti/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/zephyr/_bootswatch.scss:
--------------------------------------------------------------------------------
1 | // Override importing Google APIs for inter font
2 | $web-font-path: '' !default;
3 |
4 | /* inter-regular - latin */
5 | @font-face {
6 | font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
7 | font-family: 'Inter';
8 | font-style: normal;
9 | font-weight: 400;
10 | src: url('/static/fonts/inter-v12-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
11 | }
12 |
13 | @import "dev/scss/bootswatch/zephyr/bootswatch";
14 |
15 |
--------------------------------------------------------------------------------
/dev/scss/wvc-themes/zephyr/_variables.scss:
--------------------------------------------------------------------------------
1 | @import "dev/scss/bootswatch/zephyr/variables";
2 |
3 | // Breadcrumbs
4 |
5 | $breadcrumb-padding-y: .375rem !default;
6 | $breadcrumb-padding-x: .75rem !default;
7 |
8 | $link-decoration: none !default;
9 |
10 | // Navbar
11 | $nav-link-padding-x: 1.5rem;
12 |
13 | $navbar-padding-y: .7rem;
14 |
15 | // Breadcrumbs
16 |
17 | $breadcrumb-divider: quote("|");
18 |
19 |
20 | // List group
21 |
22 | $list-group-item-padding-y: .75rem;
23 | $list-group-item-padding-x: 1rem;
24 |
25 |
26 | // Cards
27 | $card-spacer-x: 1rem;
28 | $card-cap-padding-y: .75rem;
29 | $card-cap-padding-x: 1rem;
30 |
31 |
32 | $secondary: $gray-400;
--------------------------------------------------------------------------------
/doc/images/grouped.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/doc/images/grouped.PNG
--------------------------------------------------------------------------------
/doc/images/hosts.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/doc/images/hosts.PNG
--------------------------------------------------------------------------------
/doc/images/instance.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/doc/images/instance.PNG
--------------------------------------------------------------------------------
/doc/images/log.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/doc/images/log.PNG
--------------------------------------------------------------------------------
/doc/images/nongrouped.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/doc/images/nongrouped.PNG
--------------------------------------------------------------------------------
/doc/images/readme.md:
--------------------------------------------------------------------------------
1 | IMAGES
2 |
--------------------------------------------------------------------------------
/doc/readme.md:
--------------------------------------------------------------------------------
1 | README
2 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # ensure running as root
4 | if [ "$(id -u)" != "0" ]; then
5 | #Debian doesnt have sudo if root has a password.
6 | if ! hash sudo 2>/dev/null; then
7 | exec su -c "$0" "$@"
8 | else
9 | exec sudo "$0" "$@"
10 | fi
11 | fi
12 |
13 | wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/webvirtcloud.sh
14 | chmod 744 webvirtcloud.sh
15 | ./webvirtcloud.sh 2>&1 | tee -a /var/log/webvirtcloud-install.log
--------------------------------------------------------------------------------
/instances/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'instances.apps.InstancesConfig'
2 |
--------------------------------------------------------------------------------
/instances/migrations/0002_permissionset.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.12 on 2020-05-27 07:01
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.CreateModel(
14 | name='PermissionSet',
15 | fields=[
16 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17 | ],
18 | options={
19 | 'permissions': (('clone_instances', 'Can clone instances'),),
20 | 'managed': False,
21 | 'default_permissions': (),
22 | },
23 | ),
24 | ]
25 |
--------------------------------------------------------------------------------
/instances/migrations/0004_auto_20200618_0817.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-06-18 08:17
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0003_auto_20200615_0637'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='instance',
15 | name='name',
16 | field=models.CharField(db_index=True, max_length=120, verbose_name='name'),
17 | ),
18 | migrations.AlterField(
19 | model_name='instance',
20 | name='uuid',
21 | field=models.CharField(db_index=True, max_length=36, verbose_name='uuid'),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/instances/migrations/0005_flavor.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-06-23 12:12
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0004_auto_20200618_0817'),
10 | ]
11 |
12 | operations = [
13 | migrations.CreateModel(
14 | name='Flavor',
15 | fields=[
16 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17 | ('label', models.CharField(max_length=12, verbose_name='label')),
18 | ('memory', models.IntegerField(verbose_name='memory')),
19 | ('vcpu', models.IntegerField(verbose_name='vcpu')),
20 | ('disk', models.IntegerField(verbose_name='disk')),
21 | ],
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/instances/migrations/0007_auto_20200624_0821.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-06-24 08:21
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0006_addFlavors'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='flavor',
15 | name='label',
16 | field=models.CharField(max_length=12, unique=True, verbose_name='label'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/instances/migrations/0008_auto_20200708_0950.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-07-08 09:50
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0007_auto_20200624_0821'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='instance',
15 | name='created',
16 | field=models.DateTimeField(auto_now_add=True, verbose_name='created'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/instances/migrations/0009_auto_20200717_0524.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.13 on 2020-07-17 05:24
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0008_auto_20200708_0950'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name='permissionset',
15 | options={'default_permissions': (), 'managed': False, 'permissions': [('clone_instances', 'Can clone instances'), ('passwordless_console', 'Can access console without password')]},
16 | ),
17 | ]
18 |
--------------------------------------------------------------------------------
/instances/migrations/0010_auto_20220722_0812.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.14 on 2022-07-22 08:12
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('instances', '0009_auto_20200717_0524'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name='permissionset',
15 | options={'default_permissions': (), 'managed': False, 'permissions': [('clone_instances', 'Can clone instances'), ('passwordless_console', 'Can access console without password'), ('view_instances', 'Can view instances'), ('snapshot_instances', 'Can snapshot instances')]},
16 | ),
17 | migrations.AddField(
18 | model_name='instance',
19 | name='drbd',
20 | field=models.CharField(default='None', max_length=24, verbose_name='drbd'),
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/instances/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/instances/migrations/__init__.py
--------------------------------------------------------------------------------
/instances/templatetags/tags_active.py:
--------------------------------------------------------------------------------
1 | import re
2 |
3 | from django import template
4 |
5 | register = template.Library()
6 |
7 |
8 | @register.simple_tag
9 | def class_active(request, pattern):
10 | if re.search(pattern, request.path):
11 | return "active"
12 | return ''
13 |
--------------------------------------------------------------------------------
/interfaces/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/interfaces/__init__.py
--------------------------------------------------------------------------------
/interfaces/api/serializers.py:
--------------------------------------------------------------------------------
1 |
2 | from rest_framework import serializers
3 | from interfaces.models import Interfaces
4 |
5 |
6 | class InterfacesSerializer(serializers.ModelSerializer):
7 |
8 | class Meta:
9 | model = Interfaces
10 | fields = ['name', 'type', 'state', 'mac']
11 |
12 |
--------------------------------------------------------------------------------
/interfaces/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/interfaces/migrations/__init__.py
--------------------------------------------------------------------------------
/interfaces/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.utils.translation import gettext_lazy as _
3 |
4 |
5 | # Create your models here.
6 | class Interfaces(models.Model):
7 | name = models.CharField(
8 | _("name"),
9 | max_length=20,
10 | error_messages={"required": _("No interface name has been entered")},
11 | )
12 | type = models.CharField(_("status"), max_length=12)
13 | state = models.CharField(_("device"), max_length=100)
14 | mac = models.CharField(_("forward"), max_length=24)
15 |
16 | class Meta:
17 | managed = False
18 |
--------------------------------------------------------------------------------
/interfaces/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/locale/cz/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/cz/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/de/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/de/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/en/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/en/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/es/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/es/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/fr/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/fr/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/ru/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/ru/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/tr/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/tr/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/uk/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/uk/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/locale/zh/LC_MESSAGES/django.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/locale/zh/LC_MESSAGES/django.mo
--------------------------------------------------------------------------------
/logs/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/logs/__init__.py
--------------------------------------------------------------------------------
/logs/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.10 on 2020-01-28 07:01
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | initial = True
9 |
10 | dependencies = [
11 | ]
12 |
13 | operations = [
14 | migrations.CreateModel(
15 | name='Logs',
16 | fields=[
17 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18 | ('user', models.CharField(max_length=50)),
19 | ('instance', models.CharField(max_length=50)),
20 | ('message', models.CharField(max_length=255)),
21 | ('date', models.DateTimeField(auto_now=True)),
22 | ],
23 | ),
24 | ]
25 |
--------------------------------------------------------------------------------
/logs/migrations/0003_logs_host.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.20 on 2021-05-31 08:16
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('logs', '0002_auto_20200615_0637'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='logs',
15 | name='host',
16 | field=models.CharField(default='-', max_length=50, verbose_name='host'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/logs/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/logs/migrations/__init__.py
--------------------------------------------------------------------------------
/logs/models.py:
--------------------------------------------------------------------------------
1 | from django.db.models import CharField, DateTimeField, Model
2 | from django.utils.translation import gettext_lazy as _
3 |
4 | class Logs(Model):
5 | user = CharField(_("user"), max_length=50)
6 | host = CharField(_("host"), max_length=50, default="-")
7 | instance = CharField(_("instance"), max_length=50)
8 | message = CharField(_("message"), max_length=255)
9 | date = DateTimeField(_("date"), auto_now=True)
10 |
11 | def __str__(self):
12 | return self.instance
13 |
--------------------------------------------------------------------------------
/logs/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/logs/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from . import views
4 |
5 | urlpatterns = [
6 | path("vm_logs//", views.vm_logs, name="vm_logs"),
7 | ]
8 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | """Django's command-line utility for administrative tasks."""
3 | import os
4 | import sys
5 |
6 |
7 | def main():
8 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webvirtcloud.settings')
9 | try:
10 | from django.core.management import execute_from_command_line
11 | except ImportError as exc:
12 | raise ImportError(
13 | "Couldn't import Django. Are you sure it's installed and "
14 | "available on your PYTHONPATH environment variable? Did you "
15 | "forget to activate a virtual environment?"
16 | ) from exc
17 | execute_from_command_line(sys.argv)
18 |
19 |
20 | if __name__ == '__main__':
21 | main()
--------------------------------------------------------------------------------
/networks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/networks/__init__.py
--------------------------------------------------------------------------------
/networks/api/serializers.py:
--------------------------------------------------------------------------------
1 | from networks.models import Networks
2 | from rest_framework import serializers
3 |
4 |
5 | class NetworksSerializer(serializers.ModelSerializer):
6 | class Meta:
7 | model = Networks
8 | fields = ["name", "status", "device", "forward"]
9 |
--------------------------------------------------------------------------------
/networks/api/viewsets.py:
--------------------------------------------------------------------------------
1 | from computes.models import Compute
2 | from django.shortcuts import get_object_or_404
3 | from rest_framework import viewsets
4 | from rest_framework.response import Response
5 | from vrtManager.network import wvmNetworks
6 |
7 | from .serializers import NetworksSerializer
8 |
9 |
10 | class NetworkViewSet(viewsets.ViewSet):
11 | """
12 | A viewset for listing retrieving networks.
13 | """
14 |
15 | def list(self, request, compute_pk=None):
16 |
17 | compute = get_object_or_404(Compute, pk=compute_pk)
18 |
19 | conn = wvmNetworks(
20 | compute.hostname, compute.login, compute.password, compute.type
21 | )
22 | queryset = conn.get_networks_info()
23 |
24 | serializer = NetworksSerializer(
25 | queryset, many=True, context={"request": request}
26 | )
27 |
28 | return Response(serializer.data)
29 |
--------------------------------------------------------------------------------
/networks/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/networks/migrations/__init__.py
--------------------------------------------------------------------------------
/networks/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.utils.translation import gettext_lazy as _
3 |
4 |
5 | # Create your models here.
6 | class Networks(models.Model):
7 | name = models.CharField(
8 | _("name"),
9 | max_length=20,
10 | error_messages={"required": _("No network name has been entered")},
11 | )
12 | status = models.CharField(_("status"), max_length=12)
13 | device = models.CharField(_("device"), max_length=100)
14 | forward = models.CharField(_("forward"), max_length=24)
15 |
16 | class Meta:
17 | managed = False
18 |
--------------------------------------------------------------------------------
/networks/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/nwfilters/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/nwfilters/__init__.py
--------------------------------------------------------------------------------
/nwfilters/apps.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class NwfiltersConfig(AppConfig):
8 | name = "nwfilters"
9 |
--------------------------------------------------------------------------------
/nwfilters/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/nwfilters/migrations/__init__.py
--------------------------------------------------------------------------------
/nwfilters/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/nwfilters/tests.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.test import TestCase
5 |
6 | # Create your tests here.
7 |
--------------------------------------------------------------------------------
/static/bootstrap_icons/css/bootstrap_icons.0e17d6a6e498.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/bootstrap_icons/css/bootstrap_icons.0e17d6a6e498.css.gz
--------------------------------------------------------------------------------
/static/bootstrap_icons/css/bootstrap_icons.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/bootstrap_icons/css/bootstrap_icons.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/README:
--------------------------------------------------------------------------------
1 | Information about external resources
2 |
3 | The following files are taken from external resources or trees.
4 |
5 | Files: insQ.js
6 | insQ.min.js
7 | License: MIT
8 | Copyright: Zbyszek Tenerowicz
9 | Eryk Napierała
10 | Askar Yusupov
11 | Dan Dascalescu
12 | Source: https://github.com/naugtur/insertionQuery v1.0.3
13 |
14 | Files: immutable.js
15 | immutable.min.js
16 | License: MIT
17 | Copyright: 2014-present, Facebook, Inc
18 | Source: https://github.com/immutable-js/immutable-js/releases/tag/v3.8.2
19 |
--------------------------------------------------------------------------------
/static/drf-yasg/README.723ffa086d8b:
--------------------------------------------------------------------------------
1 | Information about external resources
2 |
3 | The following files are taken from external resources or trees.
4 |
5 | Files: insQ.js
6 | insQ.min.js
7 | License: MIT
8 | Copyright: Zbyszek Tenerowicz
9 | Eryk Napierała
10 | Askar Yusupov
11 | Dan Dascalescu
12 | Source: https://github.com/naugtur/insertionQuery v1.0.3
13 |
14 | Files: immutable.js
15 | immutable.min.js
16 | License: MIT
17 | Copyright: 2014-present, Facebook, Inc
18 | Source: https://github.com/immutable-js/immutable-js/releases/tag/v3.8.2
19 |
--------------------------------------------------------------------------------
/static/drf-yasg/README.723ffa086d8b.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/README.723ffa086d8b.gz
--------------------------------------------------------------------------------
/static/drf-yasg/README.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/README.gz
--------------------------------------------------------------------------------
/static/drf-yasg/immutable.37fd83058fde.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/immutable.37fd83058fde.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/immutable.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/immutable.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/immutable.min.d985bc61d85c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/immutable.min.d985bc61d85c.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/immutable.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/immutable.min.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/insQ.d4a1933caf20.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/insQ.d4a1933caf20.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/insQ.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/insQ.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/insQ.min.90ab21607447.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/insQ.min.90ab21607447.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/insQ.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/insQ.min.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-init.41348b1afc50.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-init.41348b1afc50.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-init.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-init.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/LICENSE.e4e5f59c85dc.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/LICENSE.e4e5f59c85dc.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/LICENSE.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/LICENSE.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.75500581cb08.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/redoc.min.75500581cb08.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.js.8b046eaab501.map:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.js.8b046eaab501.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/redoc.min.js.8b046eaab501.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/redoc.min.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.js.map:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/static/drf-yasg/redoc-old/redoc.min.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc-old/redoc.min.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/LICENSE.cf2d48dc6713.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/LICENSE.cf2d48dc6713.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/LICENSE.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/LICENSE.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc-logo.c7dc7712ce68.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc-logo.c7dc7712ce68.png
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc-logo.png
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc.min.71d0b1197fcc.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc.min.71d0b1197fcc.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc.min.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc.standalone.js.be0619dcd088.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc.standalone.js.be0619dcd088.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/redoc/redoc.standalone.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/redoc/redoc.standalone.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/style.680c08b2b7b4.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/style.680c08b2b7b4.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/style.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/style.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/LICENSE.3b83ef96387f.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/LICENSE.3b83ef96387f.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/LICENSE.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/LICENSE.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/NOTICE:
--------------------------------------------------------------------------------
1 | swagger-ui
2 | Copyright 2020-2021 SmartBear Software Inc.
3 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/NOTICE.342625133694:
--------------------------------------------------------------------------------
1 | swagger-ui
2 | Copyright 2020-2021 SmartBear Software Inc.
3 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/absolute-path.7ca5ebff3b35.js:
--------------------------------------------------------------------------------
1 | /*
2 | * getAbsoluteFSPath
3 | * @return {string} When run in NodeJS env, returns the absolute path to the current directory
4 | * When run outside of NodeJS, will return an error message
5 | */
6 | const getAbsoluteFSPath = function () {
7 | // detect whether we are running in a browser or nodejs
8 | if (typeof module !== "undefined" && module.exports) {
9 | return require("path").resolve(__dirname)
10 | }
11 | throw new Error('getAbsoluteFSPath can only be called within a Nodejs environment');
12 | }
13 |
14 | module.exports = getAbsoluteFSPath
15 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/absolute-path.7ca5ebff3b35.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/absolute-path.7ca5ebff3b35.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/absolute-path.js:
--------------------------------------------------------------------------------
1 | /*
2 | * getAbsoluteFSPath
3 | * @return {string} When run in NodeJS env, returns the absolute path to the current directory
4 | * When run outside of NodeJS, will return an error message
5 | */
6 | const getAbsoluteFSPath = function () {
7 | // detect whether we are running in a browser or nodejs
8 | if (typeof module !== "undefined" && module.exports) {
9 | return require("path").resolve(__dirname)
10 | }
11 | throw new Error('getAbsoluteFSPath can only be called within a Nodejs environment');
12 | }
13 |
14 | module.exports = getAbsoluteFSPath
15 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/absolute-path.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/absolute-path.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/favicon-32x32.40d4f2c38d1c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/favicon-32x32.40d4f2c38d1c.png
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/favicon-32x32.png
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.4843f77ccf9e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/index.4843f77ccf9e.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.54fdd628e489.css:
--------------------------------------------------------------------------------
1 | html {
2 | box-sizing: border-box;
3 | overflow: -moz-scrollbars-vertical;
4 | overflow-y: scroll;
5 | }
6 |
7 | *,
8 | *:before,
9 | *:after {
10 | box-sizing: inherit;
11 | }
12 |
13 | body {
14 | margin: 0;
15 | background: #fafafa;
16 | }
17 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.54fdd628e489.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/index.54fdd628e489.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | box-sizing: border-box;
3 | overflow: -moz-scrollbars-vertical;
4 | overflow-y: scroll;
5 | }
6 |
7 | *,
8 | *:before,
9 | *:after {
10 | box-sizing: inherit;
11 | }
12 |
13 | body {
14 | margin: 0;
15 | background: #fafafa;
16 | }
17 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/index.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.js:
--------------------------------------------------------------------------------
1 | try {
2 | module.exports.SwaggerUIBundle = require("./swagger-ui-bundle.js")
3 | module.exports.SwaggerUIStandalonePreset = require("./swagger-ui-standalone-preset.js")
4 | } catch(e) {
5 | // swallow the error if there's a problem loading the assets.
6 | // allows this module to support providing the assets for browserish contexts,
7 | // without exploding in a Node context.
8 | //
9 | // see https://github.com/swagger-api/swagger-ui/issues/3291#issuecomment-311195388
10 | // for more information.
11 | }
12 |
13 | // `absolutePath` and `getAbsoluteFSPath` are both here because at one point,
14 | // we documented having one and actually implemented the other.
15 | // They were both retained so we don't break anyone's code.
16 | module.exports.absolutePath = require("./absolute-path.js")
17 | module.exports.getAbsoluteFSPath = require("./absolute-path.js")
18 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/index.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/index.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/oauth2-redirect.3ab4f43d18d7.html.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/oauth2-redirect.3ab4f43d18d7.html.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/oauth2-redirect.html.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/oauth2-redirect.html.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-initializer.ff995915f51c.js:
--------------------------------------------------------------------------------
1 | window.onload = function() {
2 | //
3 |
4 | // the following lines will be replaced by docker/configurator, when it runs in a docker-container
5 | window.ui = SwaggerUIBundle({
6 | url: "https://petstore.swagger.io/v2/swagger.json",
7 | dom_id: '#swagger-ui',
8 | deepLinking: true,
9 | presets: [
10 | SwaggerUIBundle.presets.apis,
11 | SwaggerUIStandalonePreset
12 | ],
13 | plugins: [
14 | SwaggerUIBundle.plugins.DownloadUrl
15 | ],
16 | layout: "StandaloneLayout"
17 | });
18 |
19 | //
20 | };
21 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-initializer.ff995915f51c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-initializer.ff995915f51c.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-initializer.js:
--------------------------------------------------------------------------------
1 | window.onload = function() {
2 | //
3 |
4 | // the following lines will be replaced by docker/configurator, when it runs in a docker-container
5 | window.ui = SwaggerUIBundle({
6 | url: "https://petstore.swagger.io/v2/swagger.json",
7 | dom_id: '#swagger-ui',
8 | deepLinking: true,
9 | presets: [
10 | SwaggerUIBundle.presets.apis,
11 | SwaggerUIStandalonePreset
12 | ],
13 | plugins: [
14 | SwaggerUIBundle.plugins.DownloadUrl
15 | ],
16 | layout: "StandaloneLayout"
17 | });
18 |
19 | //
20 | };
21 |
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-initializer.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-initializer.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.357151587590.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.357151587590.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.f5222861035c.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.f5222861035c.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.002e814c385e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.002e814c385e.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.b1d6e307bf5a.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.b1d6e307bf5a.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.9e91a94497b1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.9e91a94497b1.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.edde1f87cee4.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.edde1f87cee4.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.4d7f4447551a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.4d7f4447551a.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.c470a4c82080.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.c470a4c82080.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.776bdd918354.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.776bdd918354.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.css.fea025523c25.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.css.fea025523c25.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.css.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.css.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.css.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.js.804e9522fc74.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.js.804e9522fc74.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-dist/swagger-ui.js.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-dist/swagger-ui.js.map.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-init.7d9c695107e5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-init.7d9c695107e5.js.gz
--------------------------------------------------------------------------------
/static/drf-yasg/swagger-ui-init.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/drf-yasg/swagger-ui-init.js.gz
--------------------------------------------------------------------------------
/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/favicon.ico
--------------------------------------------------------------------------------
/static/fonts/bootstrap-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/fonts/bootstrap-icons.woff
--------------------------------------------------------------------------------
/static/fonts/bootstrap-icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/fonts/bootstrap-icons.woff2
--------------------------------------------------------------------------------
/static/fonts/inter-v12-latin-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/fonts/inter-v12-latin-regular.woff2
--------------------------------------------------------------------------------
/static/icon_cache/arrow-down_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/arrow-left_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/arrow-right_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/arrow-up_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/arrows-angle-expand_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/bar-chart-line_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/broadcast_1em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/camera_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/camera_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/card-list_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/caret-down_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/check-circle-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/check2_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/check_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/chevron-down_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/chevron-up_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/dash-circle_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/device-hdd_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/static/icon_cache/download_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/eject_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/exclamation-triangle_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/eye-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/eye_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/files_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/filter_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/hdd-network_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/info-circle_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/info_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/key_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/laptop_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/lock_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/lock_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/pause-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/pc-display-horizontal_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/pc-display_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/pencil-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/pencil-square_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/pencil_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/people-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/person-plus_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/person-square_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/person-vcard_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/play-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/plus-circle-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/plus_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/power_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/power_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/qr-code_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
21 |
--------------------------------------------------------------------------------
/static/icon_cache/repeat_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/server_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/static/icon_cache/stop-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/trash-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/trash_2em_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/trash_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/wrench-adjustable_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/static/icon_cache/x-circle-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/x-square-fill_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/icon_cache/x_None_None_None.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/static/js/filter-table.js:
--------------------------------------------------------------------------------
1 | function filter_table() {
2 | var rex = new RegExp($(this).val(), 'i');
3 | $('.searchable tr').hide();
4 | $('.searchable tr').filter(function () {
5 | return rex.test($(this).text());
6 | }).show();
7 | Cookies.set(document.title + "_filter", $(this).val(), { expires: 1 });
8 | }
9 | $(document).ready(function () {
10 | filter_cookie = Cookies.get(document.title + "_filter");
11 | if (filter_cookie) {
12 | $('#filter').val(filter_cookie);
13 | $('#filter').each(filter_table);
14 | }
15 | (function ($) {
16 | $('#filter').keyup(filter_table)
17 | }(jQuery));
18 | });
19 |
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-120x120.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-144x144.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-152x152.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-16x16.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-192x192.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-24x24.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-32x32.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-48x48.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-60x60.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-64x64.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-72x72.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-76x76.png
--------------------------------------------------------------------------------
/static/js/novnc/app/images/icons/novnc-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/images/icons/novnc-96x96.png
--------------------------------------------------------------------------------
/static/js/novnc/app/locale/README:
--------------------------------------------------------------------------------
1 | DO NOT MODIFY THE FILES IN THIS FOLDER, THEY ARE AUTOMATICALLY GENERATED FROM THE PO-FILES.
2 |
--------------------------------------------------------------------------------
/static/js/novnc/app/sounds/CREDITS:
--------------------------------------------------------------------------------
1 | bell
2 | Copyright: Dr. Richard Boulanger et al
3 | URL: http://www.archive.org/details/Berklee44v12
4 | License: CC-BY Attribution 3.0 Unported
5 |
--------------------------------------------------------------------------------
/static/js/novnc/app/sounds/bell.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/sounds/bell.mp3
--------------------------------------------------------------------------------
/static/js/novnc/app/sounds/bell.oga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/sounds/bell.oga
--------------------------------------------------------------------------------
/static/js/novnc/app/styles/Orbitron700.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/styles/Orbitron700.ttf
--------------------------------------------------------------------------------
/static/js/novnc/app/styles/Orbitron700.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/novnc/app/styles/Orbitron700.woff
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/vendor/browser-es-module-loader/README.md:
--------------------------------------------------------------------------------
1 | Custom Browser ES Module Loader
2 | ===============================
3 |
4 | This is a module loader using babel and the ES Module Loader polyfill.
5 | It's based heavily on
6 | https://github.com/ModuleLoader/browser-es-module-loader, but uses
7 | WebWorkers to compile the modules in the background.
8 |
9 | To generate, run `npx rollup -c` in this directory, and then run
10 | `./genworker.js`.
11 |
12 | LICENSE
13 | -------
14 |
15 | MIT
16 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/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 |
--------------------------------------------------------------------------------
/static/js/novnc/vendor/pako/README.md:
--------------------------------------------------------------------------------
1 | This is an ES6-modules-compatible version of
2 | https://github.com/nodeca/pako, based on pako version 1.0.3.
3 |
4 | It's more-or-less a direct translation of the original, with unused parts
5 | removed, and the dynamic support for non-typed arrays removed (since ES6
6 | modules don't work well with dynamic exports).
7 |
--------------------------------------------------------------------------------
/static/js/novnc/vendor/pako/lib/zlib/adler32.js:
--------------------------------------------------------------------------------
1 | // Note: adler32 takes 12% for level 0 and 2% for level 6.
2 | // It doesn't worth to make additional optimizationa as in original.
3 | // Small size is preferable.
4 |
5 | export default function adler32(adler, buf, len, pos) {
6 | var s1 = (adler & 0xffff) |0,
7 | s2 = ((adler >>> 16) & 0xffff) |0,
8 | n = 0;
9 |
10 | while (len !== 0) {
11 | // Set limit ~ twice less than 5552, to keep
12 | // s2 in 31-bits, because we force signed ints.
13 | // in other case %= will fail.
14 | n = len > 2000 ? 2000 : len;
15 | len -= n;
16 |
17 | do {
18 | s1 = (s1 + buf[pos++]) |0;
19 | s2 = (s2 + s1) |0;
20 | } while (--n);
21 |
22 | s1 %= 65521;
23 | s2 %= 65521;
24 | }
25 |
26 | return (s1 | (s2 << 16)) |0;
27 | }
28 |
--------------------------------------------------------------------------------
/static/js/novnc/vendor/pako/lib/zlib/messages.js:
--------------------------------------------------------------------------------
1 | export default {
2 | 2: 'need dictionary', /* Z_NEED_DICT 2 */
3 | 1: 'stream end', /* Z_STREAM_END 1 */
4 | 0: '', /* Z_OK 0 */
5 | '-1': 'file error', /* Z_ERRNO (-1) */
6 | '-2': 'stream error', /* Z_STREAM_ERROR (-2) */
7 | '-3': 'data error', /* Z_DATA_ERROR (-3) */
8 | '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
9 | '-5': 'buffer error', /* Z_BUF_ERROR (-5) */
10 | '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
11 | };
12 |
--------------------------------------------------------------------------------
/static/js/spice-html5/thirdparty/browser-es-module-loader/.npmignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/js/spice-html5/thirdparty/browser-es-module-loader/.npmignore
--------------------------------------------------------------------------------
/static/js/spice-html5/thirdparty/browser-es-module-loader/README.md:
--------------------------------------------------------------------------------
1 | Custom Browser ES Module Loader
2 | ===============================
3 |
4 | This is a module loader using babel and the ES Module Loader polyfill.
5 | It's based heavily on
6 | https://github.com/ModuleLoader/browser-es-module-loader, but uses
7 | WebWorkers to compile the modules in the background.
8 |
9 | To generate, run `rollup -c` in this directory, and then run `browserify
10 | src/babel-worker.js > dist/babel-worker.js`.
11 |
12 | LICENSE
13 | -------
14 |
15 | MIT
16 |
--------------------------------------------------------------------------------
/static/js/spice-html5/thirdparty/browser-es-module-loader/rollup.config.js:
--------------------------------------------------------------------------------
1 | import nodeResolve from 'rollup-plugin-node-resolve';
2 |
3 | export default {
4 | entry: 'src/browser-es-module-loader.js',
5 | dest: 'dist/browser-es-module-loader.js',
6 | format: 'umd',
7 | moduleName: 'BrowserESModuleLoader',
8 | sourceMap: true,
9 |
10 | plugins: [
11 | nodeResolve(),
12 | ],
13 |
14 | // skip rollup warnings (specifically the eval warning)
15 | onwarn: function() {}
16 | };
17 |
--------------------------------------------------------------------------------
/static/js/xterm@3.6.0/addons/fullscreen/fullscreen.css:
--------------------------------------------------------------------------------
1 | .xterm.fullscreen {
2 | position: fixed;
3 | top: 0;
4 | bottom: 0;
5 | left: 0;
6 | right: 0;
7 | width: auto;
8 | height: auto;
9 | z-index: 255;
10 | }
11 |
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-theme.min.css.51806092cc05.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-theme.min.css.51806092cc05.map.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-theme.min.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-theme.min.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-theme.min.css.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-theme.min.css.map.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-tweaks.46ed116b0edd.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-tweaks.46ed116b0edd.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap-tweaks.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap-tweaks.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap.min.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap.min.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap.min.css.map.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap.min.css.map.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/bootstrap.min.f17d4516b026.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/bootstrap.min.f17d4516b026.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/default.789dfb5732d7.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/default.789dfb5732d7.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/default.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/default.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/font-awesome-4.0.3.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/font-awesome-4.0.3.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/prettify.a987f72342ee.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/prettify.a987f72342ee.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/css/prettify.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/css/prettify.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/base.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/base.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/base.e630f8f4990e.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/base.e630f8f4990e.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/highlight.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/highlight.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/highlight.e0e4d973c6d7.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/highlight.e0e4d973c6d7.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/css/jquery.json-view.min.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/css/jquery.json-view.min.css.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/favicon.5195b4d0f3eb.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/favicon.5195b4d0f3eb.ico
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/favicon.5195b4d0f3eb.ico.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/favicon.5195b4d0f3eb.ico.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/favicon.ico
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/favicon.ico.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/favicon.ico.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/grid.a4b938cf382b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/grid.a4b938cf382b.png
--------------------------------------------------------------------------------
/static/rest_framework/docs/img/grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/img/grid.png
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/api.18a5ba8a1bd8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/api.18a5ba8a1bd8.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/api.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/api.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/highlight.pack.479b5f21dcba.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/highlight.pack.479b5f21dcba.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/highlight.pack.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/highlight.pack.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/docs/js/jquery.json-view.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/docs/js/jquery.json-view.min.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.svg.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.svg.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.ttf.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.ttf.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.svg.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.svg.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.ttf.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.ttf.gz
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/static/rest_framework/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/static/rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png
--------------------------------------------------------------------------------
/static/rest_framework/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/static/rest_framework/img/glyphicons-halflings.90233c9067e9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/glyphicons-halflings.90233c9067e9.png
--------------------------------------------------------------------------------
/static/rest_framework/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/static/rest_framework/img/grid.a4b938cf382b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/grid.a4b938cf382b.png
--------------------------------------------------------------------------------
/static/rest_framework/img/grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/img/grid.png
--------------------------------------------------------------------------------
/static/rest_framework/js/ajax-form.0ea6e6052ab5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/ajax-form.0ea6e6052ab5.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/ajax-form.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/ajax-form.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/bootstrap.min.2f34b630ffe3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/bootstrap.min.2f34b630ffe3.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/bootstrap.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/bootstrap.min.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/coreapi-0.1.1.e580e3854595.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/coreapi-0.1.1.e580e3854595.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/coreapi-0.1.1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/coreapi-0.1.1.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/csrf.969930007329.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/csrf.969930007329.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/csrf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/csrf.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/default.5b08897dbdc3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/default.5b08897dbdc3.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/default.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/default.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/jquery-3.5.1.min.dc5e7f18c8d3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/jquery-3.5.1.min.dc5e7f18c8d3.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/jquery-3.5.1.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/jquery-3.5.1.min.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/prettify-min.709bfcc456c6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/prettify-min.709bfcc456c6.js.gz
--------------------------------------------------------------------------------
/static/rest_framework/js/prettify-min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/static/rest_framework/js/prettify-min.js.gz
--------------------------------------------------------------------------------
/storages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/storages/__init__.py
--------------------------------------------------------------------------------
/storages/api/serializers.py:
--------------------------------------------------------------------------------
1 |
2 | from rest_framework import serializers
3 | from storages.models import Storages, Storage, Volume
4 |
5 |
6 | class StoragesSerializer(serializers.ModelSerializer):
7 |
8 | class Meta:
9 | model = Storages
10 | fields = ['name', 'status', 'type', 'size', 'volumes']
11 |
12 |
13 | class StorageSerializer(serializers.ModelSerializer):
14 | volumes = serializers.ReadOnlyField()
15 | class Meta:
16 | model = Storage
17 | fields = ['state', 'size', 'free', 'status', 'path', 'type', 'autostart', 'volumes']
18 |
19 |
20 | class VolumeSerializer(serializers.ModelSerializer):
21 | allocation = serializers.ReadOnlyField()
22 | meta_prealloc = serializers.BooleanField(write_only=True)
23 | class Meta:
24 | model = Volume
25 | fields = ['name', 'type', 'allocation', 'size', 'meta_prealloc']
26 |
--------------------------------------------------------------------------------
/storages/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/storages/migrations/__init__.py
--------------------------------------------------------------------------------
/storages/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 |
4 | class StoragesTestCase(TestCase):
5 | def setUp(self):
6 | pass
7 |
--------------------------------------------------------------------------------
/templates/403.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load i18n %}
3 | {% block title %}{% trans "403" %}{% endblock %}
4 | {% block content %}
5 |
6 |
7 |
{% trans 'Oops!'%}
8 |
9 |
{% trans "403 Forbidden" %}
10 |
11 |
{% trans "You do not have permission to access this page." %}
12 |
← {% trans 'Back'%}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load i18n %}
3 | {% block title %}{% trans "404" %}{% endblock %}
4 | {% block content %}
5 |
6 |
7 |
{% trans 'Oops!'%}
8 |
9 |
{% trans "404 Not Found" %}
10 |
11 |
{% trans "The requested page was not found on this server." %}
12 |
← {% trans 'Back'%}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/500.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load i18n %}
3 | {% block title %}{% trans "500" %}{% endblock %}
4 | {% block content %}
5 |
6 |
7 |
{% trans 'Oops!' %}
8 |
9 |
{% trans "500 Internal Server Error" %}
10 |
11 |
{% trans "The server encountered an internal error or misconfiguration and was unable to complete you request." %}
12 |
← {% trans 'Back'%}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/search_block.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/virtsecrets/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/virtsecrets/__init__.py
--------------------------------------------------------------------------------
/virtsecrets/forms.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 |
3 |
4 | class AddSecret(forms.Form):
5 | ephemeral = forms.ChoiceField(required=True, choices=(("no", "no"), ("yes", "yes")))
6 | private = forms.ChoiceField(required=True, choices=(("no", "no"), ("yes", "yes")))
7 | usage_type = forms.ChoiceField(
8 | required=True,
9 | choices=(("ceph", "ceph"), ("volume", "volume"), ("iscsi", "iscsi")),
10 | )
11 | data = forms.CharField(max_length=100, required=True)
12 |
--------------------------------------------------------------------------------
/virtsecrets/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/virtsecrets/migrations/__init__.py
--------------------------------------------------------------------------------
/virtsecrets/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/virtsecrets/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/vrtManager/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/vrtManager/__init__.py
--------------------------------------------------------------------------------
/webvirtcloud/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retspen/webvirtcloud/79450eac6a2ef693a4a0a14305fa46d13db6481e/webvirtcloud/__init__.py
--------------------------------------------------------------------------------
/webvirtcloud/asgi.py:
--------------------------------------------------------------------------------
1 | """
2 | ASGI config for webvirtcloud project.
3 |
4 | It exposes the ASGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.asgi import get_asgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webvirtcloud.settings')
15 |
16 | application = get_asgi_application()
17 |
--------------------------------------------------------------------------------
/webvirtcloud/common_tags.py:
--------------------------------------------------------------------------------
1 | import re
2 |
3 | from django import template
4 |
5 | register = template.Library()
6 |
7 |
8 | @register.simple_tag
9 | def app_active(request, app_name):
10 | return "active" if request.resolver_match.app_name == app_name else ""
11 |
12 |
13 | @register.simple_tag
14 | def view_active(request, view_name):
15 | return "active" if request.resolver_match.view_name == view_name else ""
16 |
17 |
18 | @register.simple_tag
19 | def class_active(request, pattern):
20 | # Not sure why 'class="active"' returns class=""active""
21 | return "active" if re.search(pattern, request.path) else ""
22 |
23 |
24 | @register.simple_tag
25 | def has_perm(user, permission_codename):
26 | return bool(user.has_perm(permission_codename))
27 |
--------------------------------------------------------------------------------
/webvirtcloud/middleware.py:
--------------------------------------------------------------------------------
1 | from django.contrib import messages
2 | from django.shortcuts import render
3 | from django.utils.translation import gettext_lazy as _
4 | from libvirt import libvirtError
5 |
6 |
7 | class ExceptionMiddleware:
8 | def __init__(self, get_response):
9 | self.get_response = get_response
10 |
11 | def __call__(self, request):
12 | return self.get_response(request)
13 |
14 | def process_exception(self, request, exception):
15 | if isinstance(exception, libvirtError):
16 | messages.error(
17 | request,
18 | _("libvirt Error - %(exception)s") % {"exception": exception},
19 | )
20 | return render(request, "500.html", status=500)
21 | # TODO: check connecting to host via VPN
22 |
--------------------------------------------------------------------------------
/webvirtcloud/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for webvirtcloud project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/
8 | """
9 |
10 | import signal
11 | signal.signal(signal.SIGCHLD, signal.SIG_IGN)
12 |
13 | import os
14 |
15 | from django.core.wsgi import get_wsgi_application
16 |
17 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webvirtcloud.settings")
18 |
19 | application = get_wsgi_application()
20 |
--------------------------------------------------------------------------------
/webvirtcloud/wsgi_custom.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for webvirtcloud project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
8 | """
9 | import os
10 | import sys
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | # execfile('/srv/webvirtcloud/venv/bin/activate_this.py', dict(__file__='/srv/webvirtcloud/venv/bin/activate_this.py'))
15 | exec(
16 | compile(
17 | open("/srv/webvirtcloud/venv/bin/activate", "rb").read(),
18 | "/srv/webvirtcloud/venv/bin/activate",
19 | "exec",
20 | )
21 | )
22 |
23 | sys.path.append("/srv/webvirtcloud")
24 |
25 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webvirtcloud.settings")
26 |
27 | application = get_wsgi_application()
28 |
--------------------------------------------------------------------------------