├── .dockerignore ├── .gitignore ├── .htaccess ├── CHANGELOG.txt ├── Dockerfile ├── GPLv3.txt ├── LICENSE.txt ├── README.md ├── config.php-example ├── css ├── jquery-ui.css ├── jquery.projectPlugins.css ├── layout.css └── tipped.css ├── docker-compose.yml ├── endpoints ├── api.php ├── config.js ├── index.html ├── jqueryFileTree.php ├── language.php ├── lib │ ├── auth │ │ ├── ActiveDirectory.php │ │ ├── Builtin.php │ │ ├── LDAP.php │ │ ├── MySQL.php │ │ ├── OpenMediaVault.php │ │ ├── WebAuth.php │ │ └── index.html │ ├── authinterface.php │ ├── config.php │ ├── index.html │ ├── language.php │ ├── utils.php │ ├── vboxServiceWrappers.php │ ├── vboxconnector.php │ ├── vboxweb-5.2.wsdl │ ├── vboxweb-6.0.wsdl │ ├── vboxweb-6.1.wsdl │ ├── vboxwebService-5.2.wsdl │ ├── vboxwebService-6.0.wsdl │ └── vboxwebService-6.1.wsdl ├── rdp.php └── screen.php ├── images ├── 30white.png ├── 50px-Question_icon.svg.png ├── 50px-Warning_icon.svg.png ├── arrow_grad_dn.png ├── arrow_grad_left.png ├── arrow_grad_right.png ├── arrow_grad_up.png ├── arrow_white_dn.png ├── arrow_white_left.png ├── arrow_white_right.png ├── arrow_white_up.png ├── donate.gif ├── downArrow.png ├── header_grad.png ├── jquery-ui │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ ├── ui-bg_flat_75_ffffff_40x100.png │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ ├── ui-bg_glass_65_ffffff_1x400.png │ ├── ui-bg_glass_75_dadada_1x400.png │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ ├── ui-bg_glass_95_fef1ec_1x400.png │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ ├── ui-icons_222222_256x240.png │ ├── ui-icons_2e83ff_256x240.png │ ├── ui-icons_454545_256x240.png │ ├── ui-icons_888888_256x240.png │ └── ui-icons_cd0a0a_256x240.png ├── jqueryFileTree │ ├── directory.png │ ├── file.png │ ├── folder_open.png │ └── spinner.gif ├── monitor_bl.png ├── monitor_bottom.png ├── monitor_br.png ├── monitor_glossy.png ├── monitor_left.png ├── monitor_right.png ├── monitor_tl.png ├── monitor_top.png ├── monitor_tr.png ├── rightArrow.png ├── spinner.gif ├── treeview-default-line.gif ├── treeview-default.gif ├── upArrow.png ├── vbox │ ├── OSE │ │ ├── VirtualBox.icns │ │ ├── VirtualBox_16px.png │ │ ├── VirtualBox_20px.png │ │ ├── VirtualBox_32px.png │ │ ├── VirtualBox_40px.png │ │ ├── VirtualBox_48px.png │ │ ├── VirtualBox_64px.png │ │ ├── VirtualBox_cube_42px.png │ │ ├── VirtualBox_win.ico │ │ ├── about.png │ │ └── about_16px.png │ ├── acpi_16px.png │ ├── acpi_disabled_16px.png │ ├── add_host_iface_16px.png │ ├── add_host_iface_disabled_16px.png │ ├── arrow_down_10px.png │ ├── arrow_left_10px.png │ ├── arrow_right_10px.png │ ├── arrow_up_10px.png │ ├── attachment_16px.png │ ├── attachment_add_16px.png │ ├── attachment_add_disabled_16px.png │ ├── attachment_disabled_16px.png │ ├── attachment_remove_16px.png │ ├── attachment_remove_disabled_16px.png │ ├── bgnd_sel_2.jpg │ ├── blank.gif │ ├── cd_16px.png │ ├── cd_32px.png │ ├── cd_add_16px.png │ ├── cd_add_disabled_16px.png │ ├── cd_disabled_16px.png │ ├── cd_disabled_32px.png │ ├── cd_unmount_16px.png │ ├── cd_unmount_dis_16px.png │ ├── cd_unmount_disabled_16px.png │ ├── chipset_16px.png │ ├── chipset_disabled_16px.png │ ├── close_16px.png │ ├── controller_add_16px.png │ ├── controller_add_disabled_16px.png │ ├── controller_remove_16px.png │ ├── controller_remove_disabled_16px.png │ ├── cpu_16px.png │ ├── description_16px.png │ ├── description_disabled_16px.png │ ├── description_edit_16px.png │ ├── description_edit_disabled_16px.png │ ├── discard_cur_state_16px.png │ ├── discard_cur_state_22px.png │ ├── discard_cur_state_dis_16px.png │ ├── discard_cur_state_dis_22px.png │ ├── discard_cur_state_snapshot_16px.png │ ├── discard_cur_state_snapshot_22px.png │ ├── discard_cur_state_snapshot_dis_16px.png │ ├── discard_cur_state_snapshot_dis_22px.png │ ├── diskimage_16px.png │ ├── exit_16px.png │ ├── expanding_collapsing_16px.png │ ├── export_16px.png │ ├── fd_16px.png │ ├── fd_32px.png │ ├── fd_add_16px.png │ ├── fd_add_disabled_16px.png │ ├── fd_disabled_16px.png │ ├── fd_disabled_32px.png │ ├── fd_unmount_16px.png │ ├── fd_unmount_dis_16px.png │ ├── floppy_16px.png │ ├── floppy_add_16px.png │ ├── floppy_add_disabled_16px.png │ ├── floppy_collapse_16px.png │ ├── floppy_expand_16px.png │ ├── fullscreen_16px.png │ ├── global_settings_16px.png │ ├── global_settings_disabled_16px.png │ ├── group_abstract_16px.png │ ├── guesttools_16px.png │ ├── guesttools_disabled_16px.png │ ├── hd_16px.png │ ├── hd_32px.png │ ├── hd_add_16px.png │ ├── hd_add_22px.png │ ├── hd_add_disabled_16px.png │ ├── hd_add_disabled_22px.png │ ├── hd_disabled_16px.png │ ├── hd_disabled_32px.png │ ├── hd_new_16px.png │ ├── hd_new_22px.png │ ├── hd_new_disabled_16px.png │ ├── hd_new_disabled_22px.png │ ├── hd_release_16px.png │ ├── hd_release_22px.png │ ├── hd_release_disabled_16px.png │ ├── hd_release_disabled_22px.png │ ├── hd_remove_16px.png │ ├── hd_remove_22px.png │ ├── hd_remove_disabled_16px.png │ ├── hd_remove_disabled_22px.png │ ├── help_16px.png │ ├── ide_16px.png │ ├── ide_add_16px.png │ ├── ide_add_disabled_16px.png │ ├── ide_collapse_16px.png │ ├── ide_expand_16px.png │ ├── import_16px.png │ ├── list_movedown_16px.png │ ├── list_movedown_disabled_16px.png │ ├── list_moveup_16px.png │ ├── list_moveup_disabled_16px.png │ ├── machine_16px.png │ ├── machine_32px.png │ ├── machine_abstract_16px.png │ ├── machine_disabled_16px.png │ ├── machine_disabled_32px.png │ ├── menuArrow.gif │ ├── menuArrow_w.gif │ ├── name_16px.png │ ├── node.gif │ ├── nw_16px.png │ ├── nw_32px.png │ ├── nw_disabled_16px.png │ ├── nw_disabled_32px.png │ ├── os_archlinux.png │ ├── os_archlinux_64.png │ ├── os_debian.png │ ├── os_debian_64.png │ ├── os_dos.png │ ├── os_fedora.png │ ├── os_fedora_64.png │ ├── os_freebsd.png │ ├── os_freebsd_64.png │ ├── os_gentoo.png │ ├── os_gentoo_64.png │ ├── os_jrockitve.png │ ├── os_l4.png │ ├── os_linux.png │ ├── os_linux22.png │ ├── os_linux24.png │ ├── os_linux24_64.png │ ├── os_linux26.png │ ├── os_linux26_64.png │ ├── os_linux_64.png │ ├── os_linux_other.png │ ├── os_macosx.png │ ├── os_macosx_64.png │ ├── os_mandriva.png │ ├── os_mandriva_64.png │ ├── os_netbsd.png │ ├── os_netbsd_64.png │ ├── os_netware.png │ ├── os_openbsd.png │ ├── os_openbsd_64.png │ ├── os_opensuse.png │ ├── os_opensuse_64.png │ ├── os_oracle.png │ ├── os_oracle_64.png │ ├── os_oraclesolaris.png │ ├── os_oraclesolaris_64.png │ ├── os_os2_other.png │ ├── os_os2ecs.png │ ├── os_os2warp3.png │ ├── os_os2warp4.png │ ├── os_os2warp45.png │ ├── os_other.png │ ├── os_other_64.png │ ├── os_qnx.png │ ├── os_redhat.png │ ├── os_redhat_64.png │ ├── os_solaris.png │ ├── os_solaris_64.png │ ├── os_turbolinux.png │ ├── os_turbolinux_64.png │ ├── os_type_16px.png │ ├── os_ubuntu.png │ ├── os_ubuntu_64.png │ ├── os_virtualbox.png │ ├── os_win10.png │ ├── os_win10_64.png │ ├── os_win2k.png │ ├── os_win2k12_64.png │ ├── os_win2k16_64.png │ ├── os_win2k19_64.png │ ├── os_win2k3.png │ ├── os_win2k3_64.png │ ├── os_win2k8.png │ ├── os_win2k8_64.png │ ├── os_win31.png │ ├── os_win7.png │ ├── os_win7_64.png │ ├── os_win8.png │ ├── os_win81.png │ ├── os_win81_64.png │ ├── os_win8_64.png │ ├── os_win95.png │ ├── os_win98.png │ ├── os_win_other.png │ ├── os_win_other_64.png │ ├── os_winme.png │ ├── os_winnt4.png │ ├── os_winvista.png │ ├── os_winvista_64.png │ ├── os_winxp.png │ ├── os_winxp_64.png │ ├── os_xandros.png │ ├── os_xandros_64.png │ ├── parallel_port_16px.png │ ├── preview_empty_228x168px.png │ ├── preview_full_228x168px.png │ ├── progress_clone_90px.png │ ├── progress_delete_90px.png │ ├── progress_export_90px.png │ ├── progress_import_90px.png │ ├── progress_install_guest_additions_90px.png │ ├── progress_media_create_90px.png │ ├── progress_media_delete_90px.png │ ├── progress_poweroff_90px.png │ ├── progress_snapshot_create_90px.png │ ├── progress_snapshot_discard_90px.png │ ├── progress_snapshot_restore_90px.png │ ├── progress_start_90px.png │ ├── progress_state_restore_90px.png │ ├── progress_state_save_90px.png │ ├── ram_16px.png │ ├── refresh_16px.png │ ├── refresh_22px.png │ ├── refresh_32px.png │ ├── refresh_disabled_16px.png │ ├── refresh_disabled_22px.png │ ├── refresh_disabled_32px.png │ ├── register_16px.png │ ├── remove_host_iface_16px.png │ ├── remove_host_iface_disabled_16px.png │ ├── sata_16px.png │ ├── sata_add_16px.png │ ├── sata_add_disabled_16px.png │ ├── sata_collapse_16px.png │ ├── sata_expand_16px.png │ ├── scsi_16px.png │ ├── scsi_add_16px.png │ ├── scsi_add_disabled_16px.png │ ├── scsi_collapse_16px.png │ ├── scsi_expand_16px.png │ ├── select_file_16px.png │ ├── select_file_disabled_16px.png │ ├── serial_port_16px.png │ ├── serial_port_disabled_16px.png │ ├── sf_16px.png │ ├── sf_add_16px.png │ ├── sf_add_disabled_16px.png │ ├── sf_disabled_16px.png │ ├── sf_edit_16px.png │ ├── sf_edit_disabled_16px.png │ ├── sf_remove_16px.png │ ├── sf_remove_disabled_16px.png │ ├── sf_settings_16px.png │ ├── sf_settings_disabled_16px.png │ ├── site_16px.png │ ├── site_32px.png │ ├── snapshot_delete_16px.png │ ├── snapshot_delete_22px.png │ ├── snapshot_delete_disabled_16px.png │ ├── snapshot_delete_disabled_22px.png │ ├── snapshot_offline_16px.png │ ├── snapshot_online_16px.png │ ├── snapshot_restore_16px.png │ ├── snapshot_restore_22px.png │ ├── snapshot_restore_disabled_16px.png │ ├── snapshot_restore_disabled_22px.png │ ├── snapshot_show_details_16px.png │ ├── snapshot_show_details_22px.png │ ├── snapshot_show_details_disabled_16px.png │ ├── snapshot_show_details_disabled_22px.png │ ├── snapshot_take_16px.png │ ├── snapshot_take_22px.png │ ├── snapshot_take_disabled_16px.png │ ├── snapshot_take_disabled_22px.png │ ├── sort_16px.png │ ├── sort_disabled_16px.png │ ├── sound_16px.png │ ├── sound_disabled_16px.png │ ├── state_aborted_16px.png │ ├── state_discarding_16px.png │ ├── state_paused_16px.png │ ├── state_powered_off_16px.png │ ├── state_restoring_16px.png │ ├── state_running_16px.png │ ├── state_saved_16px.png │ ├── state_saving_16px.png │ ├── state_stuck_16px.png │ ├── status_check_16px.png │ ├── status_error_16px.png │ ├── usb_16px.png │ ├── usb_add_16px.png │ ├── usb_add_disabled_16px.png │ ├── usb_collapse_16px.png │ ├── usb_disabled_16px.png │ ├── usb_expand_16px.png │ ├── usb_filter_edit_16px.png │ ├── usb_filter_edit_disabled_16px.png │ ├── usb_movedown_16px.png │ ├── usb_movedown_disabled_16px.png │ ├── usb_moveup_16px.png │ ├── usb_moveup_disabled_16px.png │ ├── usb_new_16px.png │ ├── usb_new_disabled_16px.png │ ├── usb_remove_16px.png │ ├── usb_remove_disabled_16px.png │ ├── usb_unavailable_16px.png │ ├── usb_unavailable_disabled_16px.png │ ├── vdm_add_16px.png │ ├── vdm_add_22px.png │ ├── vdm_add_disabled_16px.png │ ├── vdm_add_disabled_22px.png │ ├── vdm_new_16px.png │ ├── vdm_new_22px.png │ ├── vdm_new_disabled_16px.png │ ├── vdm_new_disabled_22px.png │ ├── vdm_release_16px.png │ ├── vdm_release_22px.png │ ├── vdm_release_disabled_16px.png │ ├── vdm_release_disabled_22px.png │ ├── vdm_remove_16px.png │ ├── vdm_remove_22px.png │ ├── vdm_remove_disabled_16px.png │ ├── vdm_remove_disabled_22px.png │ ├── video_capture_16px.png │ ├── video_capture_disabled_16px.png │ ├── video_capture_on_16px.png │ ├── video_capture_on_disabled_16px.png │ ├── video_capture_settings_16px.png │ ├── virtio_scsi_add_16px.png │ ├── virtio_scsi_add_disabled_16px.png │ ├── virtio_scsi_collapse_16px.png │ ├── virtio_scsi_expand_16px.png │ ├── virtualbox-hdd.png │ ├── virtualbox-ova.png │ ├── virtualbox-ovf.png │ ├── virtualbox-vbox.png │ ├── virtualbox-vdi.png │ ├── virtualbox-vhd.png │ ├── virtualbox-vmdk.png │ ├── vm_add_16px.png │ ├── vm_clone_16px.png │ ├── vm_clone_22px.png │ ├── vm_clone_disabled_16px.png │ ├── vm_clone_disabled_22px.png │ ├── vm_delete_16px.png │ ├── vm_delete_disabled_16px.png │ ├── vm_discard_16px.png │ ├── vm_discard_32px.png │ ├── vm_discard_disabled_16px.png │ ├── vm_discard_disabled_32px.png │ ├── vm_group_create_16px.png │ ├── vm_group_create_disabled_16px.png │ ├── vm_group_name_16px.png │ ├── vm_group_name_disabled_16px.png │ ├── vm_group_remove_16px.png │ ├── vm_group_remove_disabled_16px.png │ ├── vm_new_16px.png │ ├── vm_new_32px.png │ ├── vm_new_disabled_32px.png │ ├── vm_open_filemanager_16px.png │ ├── vm_open_filemanager_disabled_16px.png │ ├── vm_pause_16px.png │ ├── vm_pause_disabled_16px.png │ ├── vm_pause_on_16px.png │ ├── vm_pause_on_disabled_16px.png │ ├── vm_poweroff_16px.png │ ├── vm_poweroff_32px.png │ ├── vm_poweroff_disabled_16px.png │ ├── vm_poweroff_disabled_32px.png │ ├── vm_reset_16px.png │ ├── vm_reset_disabled_16px.png │ ├── vm_save_state_16px.png │ ├── vm_save_state_disabled_16px.png │ ├── vm_settings_16px.png │ ├── vm_settings_32px.png │ ├── vm_settings_disabled_16px.png │ ├── vm_settings_disabled_32px.png │ ├── vm_show_logs_16px.png │ ├── vm_show_logs_disabled_16px.png │ ├── vm_shutdown_16px.png │ ├── vm_shutdown_disabled_16px.png │ ├── vm_start_16px.png │ ├── vm_start_32px.png │ ├── vm_start_disabled_16px.png │ ├── vm_start_disabled_32px.png │ ├── vmw_clone_bg.png │ ├── vmw_first_run_bg.png │ ├── vmw_new_harddisk_bg.png │ ├── vmw_new_welcome_bg.png │ ├── vmw_ovf_export_bg.png │ ├── vmw_ovf_import_bg.png │ ├── vrdp_16px.png │ ├── vrdp_32px.png │ ├── vrdp_disabled_16px.png │ ├── vrdp_disabled_32px.png │ ├── vrdp_on_16px.png │ ├── vrdp_on_disabled_16px.png │ ├── vtx_amdv_16px.png │ ├── vtx_amdv_disabled_16px.png │ └── welcome.png └── wizard_bg.png ├── index.html ├── js ├── canvasimages.js ├── chooser.js ├── datamediator.js ├── dialogs.js ├── eventlistener.js ├── jquery-1.11.2.min.js ├── jquery-ui-1.11.4.min.js ├── jquery.jec-1.3.1.js ├── jquery.projectPlugins.js ├── jquery.scrollTo-min.js ├── jquery.tipped-2.1b.min.js ├── phpvirtualbox.js └── utils.js ├── languages ├── cs.xml ├── da.xml ├── de.xml ├── en.xml ├── es.xml ├── fr.xml ├── it.xml ├── ja.xml ├── languages.txt ├── nl.xml ├── pl.xml ├── pt_br.xml ├── ro.xml ├── ru.xml ├── source │ ├── cs.dat │ ├── de.dat │ ├── en.dat │ ├── es.dat │ ├── fr.dat │ ├── it.dat │ ├── ja.dat │ ├── nl.dat │ ├── parse_vbox_lang.php │ ├── pl.dat │ ├── pt_br.dat │ ├── ro.dat │ ├── ru.dat │ ├── zh_cn.dat │ └── zh_tw.dat ├── zh_cn.xml └── zh_tw.xml ├── packaging └── install-scripts │ ├── install.bash │ └── uninstall.bash ├── panes ├── about.html ├── chooser.html ├── guestNetAdapters.html ├── login.html ├── mediumEncryptionPasswords.html ├── settingsAudio.html ├── settingsDisplay.html ├── settingsGeneral.html ├── settingsGlobalGeneral.html ├── settingsGlobalLanguage.html ├── settingsGlobalNetwork.html ├── settingsGlobalNetworkNATPortForwarding.html ├── settingsGlobalUsers.html ├── settingsNetwork.html ├── settingsParallelPorts.html ├── settingsPortForwarding.html ├── settingsSerialPorts.html ├── settingsSharedFolders.html ├── settingsStorage.html ├── settingsSystem.html ├── settingsUSB.html ├── tabVMConsole.html ├── tabVMConsoleRDP.html ├── tabVMConsoleVNC.html ├── tabVMDetails.html ├── tabVMSnapshots.html ├── tabs.html ├── toolbar.html ├── topmenu.html ├── userEdit.html ├── vmlogs.html ├── vmm.html ├── vmmISCSI.html ├── vmmModify.html ├── wizardCloneVM.html ├── wizardCloneVMAdvanced.html ├── wizardCopyHD.html ├── wizardCopyHDAdvanced.html ├── wizardExportAppliance.html ├── wizardExportApplianceAdvanced.html ├── wizardFirstRun.html ├── wizardImportAppliance.html ├── wizardImportApplianceAdvanced.html ├── wizardNewHD.html ├── wizardNewHDAdvanced.html ├── wizardNewVM.html └── wizardNewVMAdvanced.html ├── phpvirtualbox.conf ├── rdpweb ├── RDPClientUI.swf ├── license_3rd.txt ├── swfobject.js ├── webclient.js └── webclient3.html ├── recovery.php-disabled ├── tightvnc └── VncViewer.jar └── vboxinit /.dockerignore: -------------------------------------------------------------------------------- 1 | .buildpath 2 | .gitignore 3 | .git 4 | .project 5 | 6 | .DS_Store 7 | .SD_Store? 8 | .swp 9 | 10 | config.php -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.settings/ 2 | /.buildpath 3 | /.project 4 | /config.php 5 | /phpinfo.php 6 | /.vscode 7 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | RedirectMatch 404 /\.git 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:5.6-apache 2 | RUN apt-get update && \ 3 | apt-get install -y \ 4 | libxml2 \ 5 | libxml2-dev && \ 6 | docker-php-ext-install soap 7 | COPY . /var/www/html -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | phpVirtualBox - A web-based front-end to VirtualBox. 2 | Copyright (C) 2011 Ian Moore 3 | 4 | This program is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License 6 | version 3 as published by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License 14 | (GPLv3.txt in this folder) along with this program; if not, write 15 | to the Free Software Foundation, Inc., 51 Franklin Street, Fifth 16 | Floor, Boston, MA 02110-1301, USA. 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | phpVirtualBox is from 2017 maintained by Smart Guide Pty Ltd (tudor at smartguide dot com dot au) 4 | 5 | with support from various contributors (see https://github.com/phpvirtualbox/phpvirtualbox/graphs/contributors) 6 | 7 | Originally Copyright (C) 2015 Ian Moore (imoore76 at yahoo dot com) 8 | 9 | FREE, WITHOUT WARRANTY: 10 | 11 | All files of this program (phpVirtualBox) are distributed under the 12 | terms contained in the LICENSE.txt file in this folder unless otherwise 13 | specified in an individual source file. By using this software, you are 14 | agreeing to the terms contained therein. If you have not received and read 15 | the license file, or do not agree with its conditions, please cease using 16 | this software immediately and remove any copies you may have in your 17 | possession. 18 | 19 | # Installation from Zip file 20 | 21 | 1) Download zip file from GitHub project site: https://github.com/phpvirtualbox/phpvirtualbox/archive/master.zip 22 | 23 | 2) Unzip the zipfile into a folder accessible by your web server 24 | 25 | 3) Rename config.php-example to config.php and edit as needed. 26 | 27 | Read the wiki for more information : https://github.com/phpvirtualbox/phpvirtualbox/wiki 28 | 29 | # Post installation 30 | 31 | Default login is username: admin password: admin 32 | 33 | Please report bugs / feature requests to GitHub 34 | https://github.com/phpvirtualbox/phpvirtualbox/issues 35 | 36 | # Password Recovery 37 | 38 | Rename the file recovery.php-disabled to recovery.php, navigate to it in 39 | your web browser, and follow the instructions presented. 40 | -------------------------------------------------------------------------------- /css/tipped.css: -------------------------------------------------------------------------------- 1 | #tipped { 2 | /* position & display are necessary */ 3 | position:absolute; 4 | display:none; 5 | 6 | /* The rest are just to make it look good & can be changed as you want */ 7 | border: 1px solid #404040; 8 | color: #404040; 9 | 10 | border-radius:5px; 11 | padding:3px; 12 | z-index: 99999; 13 | font-size: 0.9em; 14 | max-width: 50%; 15 | 16 | background: #f0f0f0; 17 | background: -moz-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); /* FF3.6+ */ 18 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#e0e0e0)); /* Chrome,Safari4+ */ 19 | background: -webkit-linear-gradient(top, #ffffff 0%,#e0e0e0 100%); /* Chrome10+,Safari5.1+ */ 20 | background: -o-linear-gradient(top, #ffffff 0%,#e0e0e0 100%); /* Opera 11.10+ */ 21 | background: -ms-linear-gradient(top, #ffffff 0%,#e0e0e0 100%); /* IE10+ */ 22 | background: linear-gradient(to bottom, #ffffff 0%,#e0e0e0 100%); /* W3C */ 23 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e0e0e0',GradientType=0 ); /* IE6-9 */ 24 | 25 | overflow: hidden; 26 | } 27 | 28 | /* The tip content gets inserted into this element */ 29 | #tipped-content p, #tipped p { padding: 2px; margin: 0px; padding-bottom:0px; } 30 | 31 | /* This is the
that holds the close button/link. No styling is required, but you'll likely want some. */ 32 | #tipped-closer-wrapper { 33 | display:none; 34 | text-align:center; 35 | margin: 0px; 36 | } 37 | 38 | /* The that is the close button/link. No styling is required, but you'll likely want some. */ 39 | #tipped-closer { 40 | display:none; 41 | border:2px outset #999; 42 | background-color:#CCC; 43 | } 44 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Develop phpvirtualbox in docker 2 | # 3 | # 1) Get virtualbox host-only interface IP used by docker machine: 4 | # docker-machine inspect default -f '{{.Driver.HostOnlyCIDR}}' | sed -e 's#/.*##' 5 | # 2) Start vboxwebsrv on the IP returned from the above command: 6 | # vboxwebsrv -H 192.168.99.1 # or edit vboxwebsrv startup config 7 | # 3) Edit config.php to use the IP 8 | # 4) docker-compose up 9 | # 5) Get docker machine ip: 10 | # docker-machine ip default 11 | # 6) phpVirtualBox should be available at http:// 12 | # 13 | phpvirtualbox: 14 | build: . 15 | ports: 16 | - "80:80" 17 | volumes: 18 | - .:/var/www/html -------------------------------------------------------------------------------- /endpoints/config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Endpoint configuration for phpVirtualBox 3 | */ 4 | var vboxEndpointConfig = { 5 | api: 'endpoints/api.php', 6 | screen: 'endpoints/screen.php', 7 | rdpGen: 'endpoints/rdp.php', 8 | filebrowser: 'endpoints/jqueryFileTree.php', 9 | require: ['endpoints/language.php'] 10 | } -------------------------------------------------------------------------------- /endpoints/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trasherdk/phpvirtualbox/294145c3c21ad07fbd275688b774fbc9fcfcb53e/endpoints/index.html -------------------------------------------------------------------------------- /endpoints/language.php: -------------------------------------------------------------------------------- 1 | 38 | 39 | 40 | // Failsafe wrapper 41 | function trans(s,c,n,h) { 42 | 43 | if(s && c && c.constructor === Array) { 44 | o = c.shift(); 45 | n = c.shift(); 46 | h = c.shift(); 47 | c = o; 48 | } 49 | if(!c) c = 'VBoxGlobal'; 50 | 51 | var r = transreal(s,c,n,h); 52 | 53 | if(typeof r != 'string') { 54 | // console.log('Could not translate ' + s + ' with ' + c); 55 | return s; 56 | } 57 | 58 | return r; 59 | } 60 | 61 | function transreal(w,context,number,comment) { 62 | 63 | try { 64 | 65 | if(__vboxLangData['contexts'][context]['messages'][w]['translation']) { 66 | 67 | if(__vboxLangData['contexts'][context]['messages'][w]['translation']['numerusform']) { 68 | 69 | var t = __vboxLangData['contexts'][context]['messages'][w]['translation']['numerusform']; 70 | 71 | if(!number) number = 1; 72 | 73 | if(number <= 1 && t[0]) return t[0]; 74 | if(number > 1 && t[1]) return t[1]; 75 | if(t[0]) return t[0]; 76 | return t[1]; 77 | } 78 | /* 79 | if (__vboxLangData['contexts'][context]['messages'][w] && __vboxLangData['contexts'][context]['messages'][w]['translation_attr'] && __vboxLangData['contexts'][context]['messages'][w]['translation_attr']['type'] == 'obsolete') { 80 | console.log(w + ' in ' + context + ' is obsolete'); 81 | } 82 | */ 83 | return __vboxLangData['contexts'][context]['messages'][w]['translation']; 84 | 85 | } else if(__vboxLangData['contexts'][context]['messages'][w][0]) { 86 | 87 | if(comment) { 88 | for(var i in __vboxLangData['contexts'][context]['messages'][w]) { 89 | if(__vboxLangData['contexts'][context]['messages'][w][i]['comment'] == comment) { 90 | /* 91 | if (__vboxLangData['contexts'][context]['messages'][w][i]['translation_attr'] && __vboxLangData['contexts'][context]['messages'][w][i]['translation_attr']['type'] == 'obsolete') { 92 | console.log(w + ' ' + ' and ' + comment + ' is obsolete'); 93 | } 94 | */ 95 | 96 | return __vboxLangData['contexts'][context]['messages'][w][i]['translation']; 97 | } 98 | } 99 | } 100 | /* 101 | if (__vboxLangData['contexts'][context]['messages'][w][0] && __vboxLangData['contexts'][context]['messages'][w][0]['translation_attr'] && __vboxLangData['contexts'][context]['messages'][w][0]['translation_attr']['type'] == 'obsolete') { 102 | console.log(w + ' in ' + context + ' is obsolete'); 103 | } 104 | */ 105 | 106 | return __vboxLangData['contexts'][context]['messages'][w][0]['translation']; 107 | 108 | } else { 109 | return w; 110 | } 111 | 112 | } catch(err) { 113 | // console.log(w + ' - ' + context + ': ' + err); 114 | return w; 115 | } 116 | } 117 | 118 | -------------------------------------------------------------------------------- /endpoints/lib/auth/LDAP.php: -------------------------------------------------------------------------------- 1 | false, 12 | 'canLogout' => true 13 | ); 14 | 15 | var $config = array( 16 | 'host' => '127.0.0.1', // LDAP server ip 17 | 'bind_dn' => 'uid=%s, ou=admins, dc=internal, dc=local', // %s will be replaced with login username 18 | 'adminUser' => '' 19 | ); 20 | 21 | function phpvbAuthLDAP($userConfig = null) { 22 | if($userConfig) $this->config = array_merge($this->config,$userConfig); 23 | } 24 | 25 | function login($username, $password) 26 | { 27 | global $_SESSION; 28 | 29 | // Check for LDAP functions 30 | if(!function_exists('ldap_connect')) { 31 | 32 | $ex = 'LDAP support is not enabled in your PHP configuration.'; 33 | 34 | if(strtolower(substr(PHP_OS, 0, 3)) == 'win') { 35 | 36 | ob_start(); 37 | phpinfo(INFO_GENERAL); 38 | $phpinfo = ob_get_contents(); 39 | ob_end_clean(); 40 | preg_match('/Loaded Configuration File <\/td>(.*?)\s* 1 ? ' (' .trim($phpinfo[1]).')' : '') . ' by removing the ";" and restart your web server.'; 44 | 45 | } else if(strtolower(substr(PHP_OS, 0, 5)) == 'Linux') { 46 | 47 | $ex .= ' You probably need to install the php5-ldap (or similar depending on your distribution) package.'; 48 | 49 | } 50 | throw new Exception($ex); 51 | } 52 | 53 | $auth = ldap_connect($this->config['host']); 54 | 55 | if(!$auth) return false; 56 | 57 | ldap_set_option($auth,LDAP_OPT_PROTOCOL_VERSION, 3); 58 | 59 | if(!@ldap_bind($auth, sprintf($this->config['bind_dn'], $username), $password)) 60 | return false; 61 | 62 | 63 | $_SESSION['valid'] = true; 64 | $_SESSION['user'] = $username; 65 | $_SESSION['admin'] = (!$this->config['adminUser']) || ($_SESSION['user'] == $this->config['adminUser']); 66 | $_SESSION['authCheckHeartbeat'] = time(); 67 | 68 | } 69 | 70 | 71 | function heartbeat($vbox) 72 | { 73 | global $_SESSION; 74 | 75 | $_SESSION['valid'] = true; 76 | $_SESSION['authCheckHeartbeat'] = time(); 77 | } 78 | 79 | function changePassword($old, $new) 80 | { 81 | } 82 | 83 | function logout(&$response) 84 | { 85 | global $_SESSION; 86 | if(function_exists('session_destroy')) session_destroy(); 87 | else unset($_SESSION['valid']); 88 | $response['data']['result'] = 1; 89 | } 90 | 91 | function listUsers() 92 | { 93 | 94 | } 95 | 96 | function updateUser($vboxRequest, $skipExistCheck) 97 | { 98 | 99 | } 100 | 101 | function deleteUser($user) 102 | { 103 | 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /endpoints/lib/auth/OpenMediaVault.php: -------------------------------------------------------------------------------- 1 | getCode().":
". str_replace("\n", "
",$e->__toString())); 22 | } 23 | 24 | class phpvbAuthOpenMediaVault implements phpvbAuth { 25 | 26 | static $session = null; 27 | 28 | var $capabilities = array( 29 | 'canChangePassword' => false, 30 | 'sessionStart' => 'sessionStart', 31 | 'canLogout' => true 32 | ); 33 | 34 | var $config = array( 35 | 'allowNonAdmin' => false 36 | ); 37 | 38 | function __construct($userConfig = null) { 39 | if($userConfig) $this->config = array_merge($this->config,$userConfig); 40 | } 41 | 42 | function login($username, $password) 43 | { 44 | # Try / catch so that we don't expose 45 | # usernames / passwords 46 | require_once("rpc/authentication.inc"); 47 | $a = new AuthenticationRpc(); 48 | try { 49 | 50 | $auth = $a->login(array('username'=>$username,'password'=>$password)); 51 | 52 | self::$session = &OMVSession::getInstance(); 53 | 54 | if(@$auth["authenticated"] && 55 | (self::$session->getRole() !== OMV_ROLE_USER || $this->config['allowNonAdmin'])) { 56 | $_SESSION['admin'] = (self::$session->getRole() !== OMV_ROLE_USER); 57 | $_SESSION['user'] = $_SESSION['username']; 58 | $_SESSION['valid'] = ($_SESSION['admin'] || $this->config['allowNonAdmin']); 59 | $_SESSION['authCheckHeartbeat'] = time(); 60 | 61 | } 62 | 63 | if(!@$_SESSION['valid']) { 64 | return false; 65 | } 66 | return true; 67 | 68 | } catch (Exception $e) { 69 | return false; 70 | } 71 | return false; 72 | } 73 | 74 | function sessionStart($keepopen) { 75 | 76 | self::$session = &OMVSession::getInstance(); 77 | self::$session->start(); 78 | 79 | 80 | if (self::$session->isAuthenticated() && !self::$session->isTimeout()) { 81 | 82 | self::$session->validate(); 83 | self::$session->updateLastAccess(); 84 | 85 | $_SESSION['admin'] = (self::$session->getRole() !== OMV_ROLE_USER); 86 | $_SESSION['user'] = $_SESSION['username']; 87 | $_SESSION['valid'] = (self::$session->getRole() !== OMV_ROLE_USER || $this->config['allowNonAdmin']); 88 | 89 | } else { 90 | 91 | $_SESSION['admin'] = $_SESSION['user'] = $_SESSION['valid'] = null; 92 | 93 | } 94 | 95 | if(!$keepopen) 96 | session_write_close(); 97 | 98 | } 99 | 100 | 101 | function logout(&$response) 102 | { 103 | require_once("rpc/authentication.inc"); 104 | $a = new AuthenticationRpc(); 105 | $a->logout(); 106 | $response['data']['result'] = 1; 107 | } 108 | 109 | /* Defined for compatibility with implemented interface */ 110 | function heartbeat($vbox){} 111 | function changePassword($old, $new){} 112 | function listUsers(){} 113 | function updateUser($vboxRequest, $skipExistCheck){} 114 | function deleteUser($user){} 115 | } 116 | -------------------------------------------------------------------------------- /endpoints/lib/auth/WebAuth.php: -------------------------------------------------------------------------------- 1 | false, 10 | 'canLogout' => false 11 | ); 12 | 13 | var $config = array( 14 | 'serverUserKey' => 'REMOTE_USER' 15 | ); 16 | 17 | function phpvbAuthWebAuth($userConfig = null) { 18 | if($userConfig) $this->config = array_merge($this->config,$userConfig); 19 | } 20 | 21 | function login($username, $password) 22 | { 23 | } 24 | 25 | function autoLoginHook() 26 | { 27 | global $_SESSION; 28 | // WebAuth passthrough 29 | if ( isset($_SERVER[$this->config['serverUserKey']]) ) 30 | { 31 | $_SESSION['valid'] = true; 32 | $_SESSION['user'] = $_SERVER[$this->config['serverUserKey']]; 33 | $_SESSION['admin'] = (!$this->config['adminUser']) || ($_SESSION['user'] == $this->config['adminUser']); 34 | $_SESSION['authCheckHeartbeat'] = time(); 35 | } 36 | } 37 | 38 | function heartbeat($vbox) 39 | { 40 | global $_SESSION; 41 | if ( isset($_SERVER[$this->config['serverUserKey']]) ) 42 | { 43 | $_SESSION['valid'] = true; 44 | $_SESSION['authCheckHeartbeat'] = time(); 45 | } 46 | } 47 | 48 | function changePassword($old, $new) 49 | { 50 | } 51 | 52 | function logout(&$response) 53 | { 54 | $response['data']['result'] = 1; 55 | if ( isset($this->config['logoutURL']) ) 56 | { 57 | $response['data']['url'] = $this->config['logoutURL']; 58 | } 59 | } 60 | 61 | function listUsers() 62 | { 63 | 64 | } 65 | 66 | function updateUser($vboxRequest, $skipExistCheck) 67 | { 68 | 69 | } 70 | 71 | function deleteUser($user) 72 | { 73 | 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /endpoints/lib/auth/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trasherdk/phpvirtualbox/294145c3c21ad07fbd275688b774fbc9fcfcb53e/endpoints/lib/auth/index.html -------------------------------------------------------------------------------- /endpoints/lib/authinterface.php: -------------------------------------------------------------------------------- 1 | true, 21 | * 'canModifyUsers' => true, 22 | * 'canLogout' => true 23 | * ); 24 | * 25 | * The implementing class may also define a public autoLoginHook 26 | * method that auto-populates $_SESSION. This would automatically 27 | * log the user in, bypassing the login() function. 28 | * 29 | * E.g. 30 | * 31 | * function autoLoginHook() 32 | * { 33 | * global $_SESSION; 34 | * 35 | * // HTTP Authentication passthrough 36 | * if ( isset($_SERVER['HTTP_X_WEBAUTH_USER']) ) 37 | * { 38 | * $_SESSION['valid'] = true; 39 | * $_SESSION['user'] = $_SERVER['HTTP_X_WEBAUTH_USER']]; 40 | * $_SESSION['admin'] = ($_SESSION['user'] === 'bob'); 41 | * $_SESSION['authCheckHeartbeat'] = time(); 42 | * } 43 | * } 44 | * 45 | * Implementing classes should be prefixed with phpvbAuth. E.g. 46 | * phpvbAuthMySiteAuth. authLib in config.php would then be set 47 | * to 'MySiteAuth' 48 | */ 49 | interface phpvbAuth { 50 | 51 | /** 52 | * 53 | * Log in function. Populates $_SESSION 54 | * @param string $username user name 55 | * @param string $password password 56 | */ 57 | function login($username, $password); 58 | 59 | /** 60 | * 61 | * Change password function. 62 | * @param string $old old password 63 | * @param string $new new password 64 | * @return boolean true on success 65 | */ 66 | function changePassword($old, $new); 67 | 68 | /** 69 | * 70 | * Revalidate login info and set authCheckHeartbeat session variable. 71 | * @param vboxconnector $vbox vboxconnector object instance 72 | */ 73 | function heartbeat($vbox); 74 | 75 | /** 76 | * 77 | * Log out user present in $_SESSION 78 | * @param array $response response passed byref by API and populated within function 79 | */ 80 | function logout(&$response); 81 | 82 | /** 83 | * 84 | * Return a list of users 85 | * @return array list of users 86 | */ 87 | function listUsers(); 88 | 89 | /** 90 | * 91 | * Update user information such as password and admin status 92 | * @param array $vboxRequest request passed from API representing the ajax request. Contains user, password and administration level. 93 | * @param boolean $skipExistCheck Do not check that the user exists first. Essentially, if this is set and the user does not exist, it is added. 94 | */ 95 | function updateUser($vboxRequest, $skipExistCheck); 96 | 97 | 98 | /** 99 | * 100 | * Remove the user $user 101 | * @param string $user Username to remove 102 | */ 103 | function deleteUser($user); 104 | 105 | 106 | 107 | } -------------------------------------------------------------------------------- /endpoints/lib/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trasherdk/phpvirtualbox/294145c3c21ad07fbd275688b774fbc9fcfcb53e/endpoints/lib/index.html -------------------------------------------------------------------------------- /endpoints/lib/utils.php: -------------------------------------------------------------------------------- 1 | auth->capabilities['sessionStart']) { 27 | call_user_func(array($settings->auth, $settings->auth->capabilities['sessionStart']), $keepopen); 28 | return; 29 | } 30 | 31 | // No session support? No login... 32 | if(@$settings->noAuth || !function_exists('session_start')) { 33 | global $_SESSION; 34 | $_SESSION['valid'] = true; 35 | $_SESSION['authCheckHeartbeat'] = time(); 36 | $_SESSION['admin'] = true; 37 | return; 38 | } 39 | 40 | // Session not is auto-started by PHP 41 | if(!ini_get('session.auto_start')) { 42 | 43 | ini_set('session.use_trans_sid', 0); 44 | ini_set('session.use_only_cookies', 1); 45 | 46 | // Session path 47 | if(isset($settings->sessionSavePath)) { 48 | session_save_path($settings->sessionSavePath); 49 | } 50 | 51 | if(isset($settings->session_name)) { 52 | $session_name = $settings->session_name; 53 | } else { 54 | $session_name = md5($_SERVER['DOCUMENT_ROOT'].$_SERVER['HTTP_USER_AGENT'].dirname(__FILE__)); 55 | } 56 | session_name($session_name); 57 | session_start(); 58 | } 59 | 60 | if(!$keepopen) 61 | session_write_close(); 62 | 63 | } 64 | 65 | 66 | /** 67 | * Clean (strip slashes from if applicable) $_GET and $_POST and return 68 | * an array containing a merged array of both. 69 | * @return array 70 | */ 71 | function clean_request() { 72 | 73 | if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { 74 | $json = json_decode(file_get_contents('php://input'), true); 75 | if(!is_array($json)) 76 | $json = array(); 77 | } else { 78 | $json = array(); 79 | } 80 | $req = array_merge_recursive($_GET, $_POST); 81 | return array_merge_recursive($req, $json); 82 | 83 | } 84 | 85 | if(!function_exists('hash')) { 86 | // Lower security, but better than nothing 87 | /** 88 | * Return a hash of the passed string. Mimmics PHP's hash() params 89 | * @param unused $type 90 | * @param string $str string to hash 91 | */ 92 | function hash($type,$str='') { 93 | return sha1(json_encode($str)); 94 | } 95 | } -------------------------------------------------------------------------------- /endpoints/lib/vboxwebService-5.2.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /endpoints/lib/vboxwebService-6.0.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /endpoints/lib/vboxwebService-6.1.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /endpoints/rdp.php: -------------------------------------------------------------------------------- 1 | =1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); -------------------------------------------------------------------------------- /languages/en.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /languages/source/en.dat: -------------------------------------------------------------------------------- 1 | a:1:{s:8:"contexts";a:4:{s:19:"UIGChooserItemGroup";a:1:{s:8:"messages";a:3:{s:13:"%n machine(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:10:"%n machine";i:1;s:11:"%n machines";}}}s:11:"%n group(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:8:"%n group";i:1;s:9:"%n groups";}}}s:0:"";a:2:{s:7:"numerus";s:3:"yes";s:11:"translation";s:0:"";}}}s:10:"VBoxGlobal";a:1:{s:8:"messages";a:7:{s:11:"%n month(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:8:"%n month";i:1;s:9:"%n months";}}}s:9:"%n day(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:6:"%n day";i:1;s:7:"%n days";}}}s:0:"";a:2:{s:7:"numerus";s:3:"yes";s:11:"translation";s:0:"";}s:12:"%n minute(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:9:"%n minute";i:1;s:10:"%n minutes";}}}s:12:"%n second(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:9:"%n second";i:1;s:10:"%n seconds";}}}s:10:"%n hour(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:7:"%n hour";i:1;s:8:"%n hours";}}}s:10:"%n year(s)";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:7:"%n year";i:1;s:8:"%n years";}}}}}s:19:"VBoxTakeSnapshotDlg";a:1:{s:8:"messages";a:1:{s:213:"Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.";a:1:{s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:207:"Warning: You are taking a snapshot of a running machine which has %n immutable image attached to it. As long as you are working from this snapshot the immutable image will not be reset to avoid loss of data.";i:1;s:209:"Warning: You are taking a snapshot of a running machine which has %n immutable images attached to it. As long as you are working from this snapshot the immutable images will not be reset to avoid loss of data.";}}}}}s:15:"UIMessageCenter";a:1:{s:8:"messages";a:1:{s:212:"

The %n following virtual machine(s) are currently in a saved state: %1

If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.

";a:2:{s:7:"comment";s:221:"This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).";s:11:"translation";a:1:{s:11:"numerusform";a:2:{i:0;s:197:"

The virtual machine %1 is currently in a saved state.

If you continue the runtime state of the exported machine will be discarded. Note that the existing machine is not changed.

";i:1;s:202:"

The virtual machines %1 are currently in a saved state.

If you continue the runtime state of the exported machines will be discarded. Note that the existing machines are not changed.

";}}}}}}} -------------------------------------------------------------------------------- /panes/about.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |

phpVirtualBox X -/- VirtualBox X compatible

4 |

https://github.com/phpvirtualbox/phpvirtualbox

5 |

6 | phpVirtualBox is from 2017 maintained by Smart Guide Pty Ltd (tudor at smartguide dot com dot au) 7 | with support from various contributors 8 |

9 |

10 | Originally Copyright (C) 2015 Ian Moore (imoore76 at yahoo dot com) - LICENSE 11 |

12 |

VirtualBox

13 | 17 |
18 |
19 | -------------------------------------------------------------------------------- /panes/chooser.html: -------------------------------------------------------------------------------- 1 | 11 |
12 | 97 | -------------------------------------------------------------------------------- /panes/guestNetAdapters.html: -------------------------------------------------------------------------------- 1 | 11 |
12 | 13 |
14 | 15 | 39 | 40 | 114 | -------------------------------------------------------------------------------- /panes/login.html: -------------------------------------------------------------------------------- 1 | 8 |
9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
Username:
Password:
24 |
25 |
26 | -------------------------------------------------------------------------------- /panes/mediumEncryptionPasswords.html: -------------------------------------------------------------------------------- 1 | 10 |
11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
StatusIDPassword
23 |
24 |
25 | -------------------------------------------------------------------------------- /panes/settingsAudio.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 26 | 27 |
Host Audio Driver: 16 | 18 |
Audio Controller: 23 | 25 |
28 | 117 | -------------------------------------------------------------------------------- /panes/settingsGlobalGeneral.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 40 | 41 | 42 | 43 | 44 | 47 | 48 | 49 |
Default Machine Folder: 13 | 14 | 15 | 20 | 21 |
16 | 17 | 19 |
22 |

VRDP Authentication Library: 30 | 31 | 32 | 37 | 38 |
33 | 34 | 36 |
39 |
Auto-start DB Path: 45 | 46 |
50 | -------------------------------------------------------------------------------- /panes/settingsGlobalLanguage.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 22 | 23 |
Interface Language:
15 |
16 |
    17 |
  • Default
  • 18 |
19 |
20 |
21 |
24 | 73 | -------------------------------------------------------------------------------- /panes/tabVMConsole.html: -------------------------------------------------------------------------------- 1 | 9 | 11 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /panes/userEdit.html: -------------------------------------------------------------------------------- 1 | 8 |
9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
Username:
Username:
Admin User:
Old Password:
Change Password
New Password:
Retype:
45 |
46 |
47 | 65 | -------------------------------------------------------------------------------- /panes/vmlogs.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 106 | -------------------------------------------------------------------------------- /panes/vmmISCSI.html: -------------------------------------------------------------------------------- 1 | 8 |
9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
Server:
Port:
Target:
LUN:
Username:
Password:
44 |
45 |
46 | -------------------------------------------------------------------------------- /panes/vmmModify.html: -------------------------------------------------------------------------------- 1 | 8 |
9 | 10 |
11 | 12 | Choose medium type: 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 |
33 |
34 |
35 | -------------------------------------------------------------------------------- /panes/wizardCloneVMAdvanced.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 55 | 56 | 57 | 101 | -------------------------------------------------------------------------------- /panes/wizardFirstRun.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 23 | 24 | 79 | -------------------------------------------------------------------------------- /phpvirtualbox.conf: -------------------------------------------------------------------------------- 1 | Alias /phpvirtualbox /usr/share/phpvirtualbox 2 | 3 | 4 | 5 | 6 | DirectoryIndex index.html index.php 7 | 8 | AllowOverride None 9 | 10 | # Only allow connections from localhost: 11 | Require local 12 | 13 | 14 | php_flag magic_quotes_gpc Off 15 | php_flag track_vars On 16 | #php_value include_path . 17 | 18 | 19 | 20 | 21 | AddType application/x-httpd-php .php 22 | Action application/x-httpd-php /cgi-bin/php 23 | 24 | 25 | AddType application/x-httpd-php .php 26 | Action application/x-httpd-php /cgi-bin/php 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /rdpweb/RDPClientUI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trasherdk/phpvirtualbox/294145c3c21ad07fbd275688b774fbc9fcfcb53e/rdpweb/RDPClientUI.swf -------------------------------------------------------------------------------- /rdpweb/license_3rd.txt: -------------------------------------------------------------------------------- 1 | 3rd party components used by the RDP Web Control: 2 | 3 | 4 | 1) RDP Web Control contains SWFObject library 5 | which is released under the MIT License 6 | 7 | 8 | 2) RDP Web Control contains code from as3crypto library which is 9 | covered under the following copyright: 10 | 11 | /* 12 | * Copyright (c) 2007 Henri Torgemane 13 | * All Rights Reserved. 14 | * 15 | * BigInteger, RSA, Random and ARC4 are derivative works of the jsbn library 16 | * (http://www-cs-students.stanford.edu/~tjw/jsbn/) 17 | * The jsbn library is Copyright (c) 2003-2005 Tom Wu (tjw@cs.Stanford.EDU) 18 | * 19 | * MD5, SHA1, and SHA256 are derivative works (http://pajhome.org.uk/crypt/md5/) 20 | * Those are Copyright (c) 1998-2002 Paul Johnston & Contributors (paj@pajhome.org.uk) 21 | * 22 | * SHA256 is a derivative work of jsSHA2 (http://anmar.eu.org/projects/jssha2/) 23 | * jsSHA2 is Copyright (c) 2003-2004 Angel Marin (anmar@gmx.net) 24 | * 25 | * AESKey is a derivative work of aestable.c (http://www.geocities.com/malbrain/aestable_c.html) 26 | * aestable.c is Copyright (c) Karl Malbrain (malbrain@yahoo.com) 27 | * 28 | * BlowFishKey, DESKey and TripeDESKey are derivative works of the Bouncy Castle Crypto Package (http://www.bouncycastle.org) 29 | * Those are Copyright (c) 2000-2004 The Legion Of The Bouncy Castle 30 | * 31 | * Base64 is copyright (c) 2006 Steve Webster (http://dynamicflash.com/goodies/base64) 32 | * 33 | * Redistribution and use in source and binary forms, with or without modification, 34 | * are permitted provided that the following conditions are met: 35 | * 36 | * Redistributions of source code must retain the above copyright notice, this list 37 | * of conditions and the following disclaimer. Redistributions in binary form must 38 | * reproduce the above copyright notice, this list of conditions and the following 39 | * disclaimer in the documentation and/or other materials provided with the distribution. 40 | * 41 | * Neither the name of the author nor the names of its contributors may be used to endorse 42 | * or promote products derived from this software without specific prior written permission. 43 | * 44 | * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 45 | * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 46 | * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 47 | * 48 | * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, 49 | * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER 50 | * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF 51 | * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT 52 | * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 53 | * 54 | */ 55 | 56 | Address all questions regarding this license to: 57 | 58 | Henri Torgemane 59 | henri_torgemane@yahoo.com 60 | 61 | 62 | Additionally, the MD5 algorithm is covered by the following notice: 63 | 64 | /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. 65 | * 66 | * License to copy and use this software is granted provided that it 67 | * is identified as the "RSA Data Security, Inc. MD5 Message-Digest 68 | * Algorithm" in all material mentioning or referencing this software 69 | * or this function. 70 | * 71 | * License is also granted to make and use derivative works provided 72 | * that such works are identified as "derived from the RSA Data 73 | * Security, Inc. MD5 Message-Digest Algorithm" in all material 74 | * mentioning or referencing the derived work. 75 | * 76 | * RSA Data Security, Inc. makes no representations concerning either 77 | * the merchantability of this software or the suitability of this 78 | * software for any particular purpose. It is provided "as is" 79 | * without express or implied warranty of any kind. 80 | * 81 | * These notices must be retained in any copies of any part of this 82 | * documentation and/or software. 83 | */ 84 | -------------------------------------------------------------------------------- /recovery.php-disabled: -------------------------------------------------------------------------------- 1 | skipSessionCheck = true; 39 | $vbox->connect(); 40 | 41 | $vbox->vbox->setExtraData('phpvb/users/admin/pass', hash('sha512', 'admin')); 42 | $vbox->vbox->setExtraData('phpvb/users/admin/admin', '1'); 43 | echo("Admin account updated. Please rename this file to recovery.php-disabled. phpVirtualBox will refuse to run if this has not been done."); 44 | 45 | } catch (Exception $e) { 46 | echo("
");
47 | 		print_r($e);
48 | 		echo("
"); 49 | } 50 | return; 51 | } 52 | 53 | ?> 54 | 55 | 56 | Admin Account Recovery 57 | 58 | 59 |

Admin Account Recovery

60 |

This form will add the default user admin with a default password of admin. If the user admin already exists, its password will be changed to admin.

61 |

Click the Recover button to add / update this user.

62 |
63 |

64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /tightvnc/VncViewer.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trasherdk/phpvirtualbox/294145c3c21ad07fbd275688b774fbc9fcfcb53e/tightvnc/VncViewer.jar -------------------------------------------------------------------------------- /vboxinit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # vboxinit: auto start sessions when booting and save 4 | # sessions when host is stopped 5 | # 6 | # Based on vboxtool. Only tested in Debian. 7 | # 8 | # Debian install: 9 | # copy this script to /etc/init.d 10 | # run: 11 | # chmod u+rx /etc/init.d/vboxinit 12 | # update-rc.d vboxinit defaults 13 | 14 | ### BEGIN INIT INFO 15 | # Provides: vboxinit 16 | # Required-Start: vboxdrv $local_fs 17 | # Required-Stop: vboxdrv $local_fs 18 | # Default-Start: 2 3 4 5 19 | # Default-Stop: 0 1 6 20 | # Description: Controls VirtualBox sessions 21 | ### END INIT INFO 22 | 23 | . /etc/default/virtualbox 24 | 25 | # Enable/disable service 26 | if [ "${VBOXWEB_USER}" == "" ]; then 27 | exit 0 28 | fi 29 | 30 | # Check for VirtualBox binary path 31 | if [ "$VBOX_BIN_PATH" != "" ]; then 32 | PATH = "$PATH:$VBOX_BIN_PATH"; 33 | fi 34 | 35 | start() 36 | { 37 | # Get all autostart machines 38 | MACHINES=$($su_command "VBoxManage list vms | awk '{ print \$NF }' | sed -e 's/[{}]//g'") 39 | for UUID in $MACHINES; do 40 | STARTUP=$($su_command "VBoxManage getextradata $UUID 'pvbx/startupMode'" | awk '{ print $NF }') 41 | if [ "${STARTUP}" == "auto" ]; then 42 | VMNAME=$($su_command "VBoxManage showvminfo $UUID | sed -n '0,/^Name:/s/^Name:[ \t]*//p'") 43 | echo "$0: starting machine ${VMNAME} ..." 44 | $su_command "VBoxManage startvm $UUID --type headless" >>/var/log/vb.log 45 | fi 46 | done 47 | } 48 | 49 | stop() 50 | { 51 | # vms are saved, instead of stopped. 52 | MACHINES=$($su_command "VBoxManage list runningvms | awk '{ print \$NF }' | sed -e 's/[{}]//g'") 53 | for UUID in $MACHINES; do 54 | VMNAME=$($su_command "VBoxManage showvminfo $UUID | sed -n '0,/^Name:/s/^Name:[ \t]*//p'") 55 | echo "$0: saving machine ${VMNAME} state ..." 56 | $su_command "VBoxManage controlvm $UUID savestate" >>/var/log/vb.log 57 | done 58 | 59 | } 60 | 61 | status() 62 | { 63 | $su_command "VBoxManage list runningvms" 64 | } 65 | 66 | restart() 67 | { 68 | stop 69 | start 70 | } 71 | 72 | 73 | # Implementation of user control, execute several commands as another (predefined) user, 74 | su_command="su - ${VBOXWEB_USER} -s /bin/bash -c" 75 | 76 | # 77 | # Check for a command line option 78 | # 79 | case "$1" in 80 | 81 | start) 82 | start 83 | ;; 84 | stop) 85 | stop 86 | ;; 87 | status) 88 | status 89 | ;; 90 | restart) 91 | restart 92 | ;; 93 | *) 94 | echo "Usage: $0 {start|stop|restart|status}" 95 | exit 1 96 | ;; 97 | esac 98 | 99 | exit 0 100 | --------------------------------------------------------------------------------