123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
- <html xmlns="http://www.w3.org/1999/xhtml">
- <!-- $Id: index.html 595 2015-04-17 09:50:36Z imoore76 $ -->
- <!-- Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com) -->
- <head>
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
- <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
- <meta http-equiv="Expires" content="0"/>
- <meta http-equiv="Cache-Control" content ="no-cache"/>
- <meta http-equiv="Cache-Control" content ="no-store, must-revalidate, max-age=0"/>
- <meta http-equiv="Cache-Control" content ="post-check=0, pre-check=0"/>
- <meta http-equiv="Pragma" content="no-cache"/>
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <!-- Icon && title -->
- <link rel="shortcut icon" href="images/vbox/OSE/VirtualBox_win.ico"/>
- <link rel="icon" href="images/vbox/OSE/VirtualBox_win.ico"/>
- <title>phpVirtualBox - VirtualBox Web Console</title>
-
-
- <!-- Style sheets -->
- <link rel="stylesheet" type="text/css" href="css/jquery-ui.css"/>
- <link rel="stylesheet" type="text/css" href="css/jquery.projectPlugins.css"/>
- <link rel="stylesheet" type="text/css" href="css/tipped.css" />
- <link rel="stylesheet" type="text/css" href="css/layout.css"/>
-
- <!-- External or jQuery related scripts -->
- <script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.11.4.min.js"></script>
- <script type="text/javascript" src="js/jquery.tipped-2.1b.min.js"></script>
- <script type="text/javascript" src="js/jquery.scrollTo-min.js"></script>
- <script type="text/javascript" src="js/jquery.jec-1.3.1.js"></script>
-
- <!-- Oracle RDP Control -->
- <script type="text/javascript" src="rdpweb/webclient.js"></script>
- <script type="text/javascript" src="rdpweb/swfobject.js"></script>
-
- <!-- Internal / project related scripts -->
- <script type="text/javascript" src="endpoints/config.js"></script>
- <script type="text/javascript" src="js/jquery.projectPlugins.js"></script>
- <script type="text/javascript" src="js/phpvirtualbox.js"></script>
- <script type="text/javascript" src="js/utils.js"></script>
- <script type="text/javascript" src="js/eventlistener.js"></script>
- <script type="text/javascript" src="js/chooser.js"></script>
- <script type="text/javascript" src="js/datamediator.js"></script>
- <script type="text/javascript" src="js/dialogs.js"></script>
- <script type="text/javascript" src="js/canvasimages.js"></script>
-
-
- <!-- Main Setup -->
- <script type='text/javascript'>
-
- $(document).ready(function(){
-
- /* Synchronously load requirements */
- for(var i = 0; i < vboxEndpointConfig.require.length; i++) {
- $.ajax({
- type: "GET",
- url: vboxEndpointConfig.require[i],
- async: false,
- dataType: "script"
- });
- }
-
- /*
- * Parse cookies
- */
- vboxParseCookies();
-
- /*
- *
- * Begin sanity checks
- *
- */
-
-
- /**
- * Check that someone isn't accessing this from their local filesystem
- */
- try {
- if(window.location.toString().search('file:') == 0) {
- vboxAlert("You are accessing phpVirtualBox from your local filesystem.\
- phpVirtualBox must be accessed through your web browser. E.g. \
- http://localhost/phpVirtualBox (its actual URL may vary).");
- return;
- }
- } catch(err) {
- // noop
- }
-
-
- /*
- * If everything loaded correctly, trans() should be defined in
- * js/language.php and language data should be present.
- * If not, there is a PHP error somewhere.
- */
- if(typeof trans != "function" || typeof __vboxLangData == "undefined") {
- trans = function(s){return s;};
- vboxAlert("An unknown PHP error occurred. This is most likely a syntax error in\
- config.php in phpVirtualBox's folder. The most common errors are an unclosed\
- quote or a missing\
- semicolon in a configuration item that has been entered (e.g.\
- location, username, or password).<p>Depending on your PHP configuration,\
- navigating directly to <a href='config.php'>config.php</a> in your web\
- browser may display the PHP error message.</p>\
- <p>If find that this is not the case,\
- or have no idea what this error message means, please raise the issue\
- at <a href='http://sourceforge.net/p/phpvirtualbox/discussion/help/'\
- >http://sourceforge.net/p/phpvirtualbox/discussion/help/",{'width':'50%'});
- return;
- }
-
- // Sanity checks passed. Begin processing
-
- // Check for server setting (?server=xxxx in URL)
- if(location.search) {
- var query = location.search.substr(1).split('&');
- for(var kv in query) {
- kv = query[kv].split('=');
- if(kv[0] == 'server') {
- vboxSetCookie('vboxServer',unescape(kv[1]));
- location = location.href.substr(0,location.href.length-location.search.length);
- return;
- }
- }
- }
-
-
-
- /*
- * Resizable panes functionality
- */
- $('#vboxResizeBar').draggable({cursor:(jQuery.browser.opera ? 'e-resize' : 'col-resize'),axis:'x',zIndex:99,helper:function(){
-
- $('#vboxResizeBarTmp').remove();
- var h = $('#vboxResizeBar').parent().height();
- return $('#vboxResizeBar').clone(false)
- .attr({'id':'vboxResizeBarTmp'}).unbind('mouseleave')
- .css({'background':'#ccc','height':h+'px'});
-
- },scroll:false,'start':function(e,ui){
-
- $('#vboxResizeOverlay').remove();
- $('body').disableSelection().css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize')});
- $('#vboxPane').append($('<div />').attr({'id':'vboxResizeOverlay','style':'width:100%;height:100%;border:0px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;z-index:10;cursor:'+(jQuery.browser.opera ? 'e-resize' : 'col-resize')}));
- $('#vboxResizeBar').data('vboxX',e.pageX);
-
- },'stop':function(e){
-
- $('#vboxResizeBarTmp').remove();
- $('#vboxResizeOverlay').remove();
- $('body').enableSelection().css({'cursor':'default'});
-
-
- var nx = $('#vboxChooserDiv').width() + (e.pageX - $('#vboxResizeBar').data('vboxX'));
- $('#vboxChooserDiv').css('width',(nx)+'px');
-
- vboxSetLocalDataItem("vboxPaneX",($('#vboxChooserDiv').width()));
-
- $('#vboxChooserPane').css('width',$('#vboxChooserDiv').css('width'));
-
- $(window).trigger('resize');
-
- }}).css('cursor',(jQuery.browser.opera ? 'e-resize' : 'col-resize')).parent().disableSelection();
-
-
-
- /*
- progress resize n / s
- */
- $('#vboxResizeBarProgress').draggable({cursor:(jQuery.browser.opera ? 'n-resize' : 'row-resize'),axis:'y',zIndex:99,helper:function(){
-
- $('#vboxResizeBarTmp').remove();
- return $('#vboxResizeBarProgress').clone(false)
- .attr({'id':'vboxResizeBarTmp'})
- .css({'background':'#ccc','position':'absolute','left':'0','right':'0','margin-left':'auto','margin-right':'auto'});
-
- },scroll:false,'start':function(e,ui){
-
- $('#vboxResizeOverlay').remove();
- $('body').disableSelection().css({'cursor':(jQuery.browser.opera ? 'n-resize' : 'row-resize')});
- $('#vboxPane').append($('<div />').attr({'id':'vboxResizeOverlay','style':'width:100%;height:100%;border:0px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;z-index:10;cursor:'+(jQuery.browser.opera ? 'n-resize' : 'row-resize')}));
- $('#vboxResizeBarProgress').data('vboxY',e.pageY);
-
- },'stop':function(e){
-
- $('#vboxResizeBarTmp').remove();
- $('#vboxResizeOverlay').remove();
- $('body').enableSelection().css({'cursor':'default'});
-
-
- var nx = $('#vboxProgressOps').height() + ($('#vboxResizeBarProgress').data('vboxY') - e.pageY);
- $('#vboxProgressOps').css({'height':(nx)+'px','overflow':'auto'}).parent().css({'height':(nx)+'px'});
-
- vboxSetLocalDataItem("vboxPaneY",($('#vboxProgressOps').height()));
-
- $('#vboxResizeBarProgressEW').css({'height':(vboxGetLocalDataItem("vboxPaneY")-4)+'px'});
-
- $(window).trigger('resize');
-
- }}).css('cursor',(jQuery.browser.opera ? 'n-resize' : 'row-resize')).parent().disableSelection();
-
- /*
- Progress resize E / W
- */
- var vboxOpsPaneEW = 400;
- if(vboxGetLocalDataItem('vboxOpsPaneEW')) {
- vboxOpsPaneEW = vboxGetLocalDataItem('vboxOpsPaneEW');
- } else {
- vboxSetLocalDataItem('vboxOpsPaneEW', vboxOpsPaneEW);
- }
- $('#vboxResizeBarProgressEW').css({'left':vboxOpsPaneEW+'px','top':'0'});
- // inject CSS
- $('head').append('<style type="text/css" id="vboxProgressOpsStyle">div.vboxProgressOpTitle { width: '+vboxOpsPaneEW+'px; }</style>');
-
- // Show draggablebar onmouseenter
- $('#vboxProgressOps').hover(function(){
- if($(this).children().length == 1) return;
- $('#vboxResizeBarProgressEW').css({'display':'inline-block','height':($(this)[0].scrollHeight-2)+'px'});
- },function(){
- $('#vboxResizeBarProgressEW').css({'display':'none'});
- });
-
- // Draggable bar
- $('#vboxResizeBarProgressEW').draggable({cursor:(jQuery.browser.opera ? 'e-resize' : 'col-resize'),axis:'x',zIndex:99,helper:function(){
-
- $('#vboxResizeBarTmp').remove();
-
- return $('#vboxResizeBarProgressEW').clone(false)
- .attr({'id':'vboxResizeBarProgressEWTmp'}).css({'background':'#ccc'});
-
- },scroll:false,'start':function(e,ui){
-
- $('#vboxResizeOverlay').remove();
- $('body').disableSelection().css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize')});
- $('#vboxPane').append($('<div />').attr({'id':'vboxResizeOverlay','style':'width:100%;height:100%;border:0px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;z-index:10;cursor:'+(jQuery.browser.opera ? 'e-resize' : 'col-resize')}));
- $('#vboxResizeBarProgressEW').data('vboxX',e.pageX);
-
- },'stop':function(e){
-
- $('#vboxResizeBarTmp').remove();
- $('#vboxResizeOverlay').remove();
- $('body').enableSelection().css({'cursor':'default'});
-
- var nx = parseInt(vboxGetLocalDataItem('vboxOpsPaneEW')) + (e.pageX - $('#vboxResizeBarProgressEW').data('vboxX'));
- $('#vboxResizeBarProgressEW').css({'left':nx+'px'});
- vboxSetLocalDataItem('vboxOpsPaneEW',nx);
-
- // re-inject CSS
- $('#vboxProgressOpsStyle').empty().remove();
- $('head').append('<style type="text/css" id="vboxProgressOpsStyle">div.vboxProgressOpTitle { width: '+nx+'px; }</style>');
-
-
- }}).css('cursor',(jQuery.browser.opera ? 'e-resize' : 'col-resize'));
-
- /*
- * Resize panes when the window changes sizes
- */
- $(window).resize(function(){
-
- // Hide
- $('#vboxChooserResizePane').children().children().css({'display':'none'});
-
- var h = $('#vboxResize').innerHeight();
- $('#vboxChooserResizePane').children().children().css({'height':h+'px','overflow-y':'auto','overflow-x':'hidden','display':''});
-
- // special for resize bar
- $('#vboxResizeBar').css({'height':(h-10)+'px'});
-
-
- });
-
-
- /*
- * Refresh data when host changes
- */
- $('#vboxPane').on('hostChange',function(){
-
- var l = new vboxLoader();
- l.add('getConfig',function(d){$('#vboxPane').data('vboxConfig',d.responseData);$('#vboxPane').trigger('configLoaded');});
- l.add('vboxGetGuestOSTypes',function(d){$('#vboxPane').data('vboxOSTypes',d.responseData);});
- l.add('vboxSystemPropertiesGet',function(d){$('#vboxPane').data('vboxSystemProperties',d.responseData);});
- l.add('vboxGetMedia',function(d){$('#vboxPane').data('vboxMedia',d.responseData);});
- l.add('hostGetDetails',function(d){$('#vboxPane').data('vboxHostDetails',d.responseData);});
- l.add('vboxRecentMediaGet',function(d){$('#vboxPane').data('vboxRecentMedia',d.responseData);});
- l.add('vboxRecentMediaPathsGet',function(d){$('#vboxPane').data('vboxRecentMediaPaths',d.responseData);});
- l.add('vboxGetEnumerationMap',function(d){$('#vboxPane').data('vboxMediumVariants',d.responseData);},{'class':'MediumVariant','ValueMap':1});
-
- l.onLoad = function(){
- $('#vboxPane').trigger('hostChanged');
- };
-
- l.run();
-
- });
-
-
- /*
- * Load panes all and data after valid login
- */
- $('#vboxPane').on('login', function() {
-
- var l = new vboxLoader();
-
- // Get data and store it using data()
- l.add('getConfig',function(d){$('#vboxPane').data('vboxConfig',d.responseData);$('#vboxPane').trigger('configLoaded');});
- l.add('vboxGetGuestOSTypes',function(d){$('#vboxPane').data('vboxOSTypes',d.responseData);});
- l.add('vboxSystemPropertiesGet',function(d){$('#vboxPane').data('vboxSystemProperties',d.responseData);});
- l.add('vboxGetMedia',function(d){$('#vboxPane').data('vboxMedia',d.responseData);});
- l.add('hostGetDetails',function(d){$('#vboxPane').data('vboxHostDetails',d.responseData);});
- l.add('vboxRecentMediaGet',function(d){$('#vboxPane').data('vboxRecentMedia',d.responseData);});
- l.add('vboxRecentMediaPathsGet',function(d){$('#vboxPane').data('vboxRecentMediaPaths',d.responseData);});
- l.add('vboxGetEnumerationMap',function(d){$('#vboxPane').data('vboxMediumVariants',d.responseData);},{'class':'MediumVariant','ValueMap':1});
-
- // Load HTML panes and append them to their respective locations
- l.addFileToDOM('panes/chooser.html',$('#vboxChooserPane'));
- l.addFileToDOM('panes/topmenu.html');
- l.addFileToDOM('panes/toolbar.html');
- l.addFileToDOM('panes/tabs.html',$('#vboxPaneTabContent'));
-
- l.onLoad = function() {
-
-
- // Resize to last setting
- if(vboxGetLocalDataItem('vboxPaneX')) {
- $('#vboxChooserDiv').css('width',(vboxGetLocalDataItem('vboxPaneX'))+'px');
- } else {
- vboxSetLocalDataItem('vboxPaneX', $('#vboxChooserDiv').innerWidth());
- }
-
- if(vboxGetLocalDataItem('vboxPaneY')) {
- var nx = vboxGetLocalDataItem('vboxPaneY');
- $('#vboxProgressOps').css({'height':(nx)+'px'}).parent().css({'height':(nx)+'px'});
- } else {
- vboxSetLocalDataItem('vboxPaneY', $('#vboxProgressOps').height());
- }
- $('#vboxResizeBarProgressEW').css({'height':(vboxGetLocalDataItem("vboxPaneY")-4)+'px'});
-
- // Let everyone know that no vms are selected
- $('#vboxPane').trigger('vmSelectionListChanged',[vboxChooser]);
-
- };
-
- // Trigger resize event to size panes
- l.onShow = function() { $(window).trigger('resize'); };
-
- l.hideRoot = true;
- l.run();
-
- });
-
- /**
- * Check for valid session and display login box if one does not exist
- * @params {Boolean} tried - true if login was attempted before this call
- */
- var vboxCheckSession = function(tried) {
-
- // check session info
- if($('#vboxPane').data('vboxSession') && $('#vboxPane').data('vboxSession').valid) {
-
- // Session is valid, trigger login
- $('#vboxPane').trigger('login');
- return;
- }
-
- // Was there an error? Assume it was displayed and just return from function
- if($('#vboxPane').data('vboxSession') && !$('#vboxPane').data('vboxSession').success) {
- return;
- }
-
-
- // No valid session. Show login pane
- $('#vboxLogin').find('input[name=password]').val('');
- $('#vboxLogin').dialog('open');
-
- if(!$('#vboxLogin').find('input[name=username]').val()) $('#vboxLogin').find('input[name=username]').focus();
- else $('#vboxLogin').find('input[name=password]').focus();
-
- // Display error if we tried to log in
- if(tried) {
- vboxAlert(trans('Invalid username or password.','UIUsers'),{'width':'400px'});
- }
-
- };
-
- /** Load login form */
- var login = new vboxLoader();
- login.add('getSession',function(d){$('#vboxPane').data('vboxSession',$.extend({'success':d.success},d.responseData));});
- login.addFileToDOM('panes/login.html');
- login.onLoad = function(loader) {
-
- var buttons = {};
- buttons[trans('Log in','UIUsers')] = function() {
-
- // Login button triggers login attempt
- var u = $('#vboxLogin').find('input[name=username]').val();
- var p = $('#vboxLogin').find('input[name=password]').val();
- if(!(u&&p)) return;
- $('#vboxLogin').dialog('close');
-
- // A valid login should create a valid session
- var trylogin = new vboxLoader();
- trylogin.add('login',function(d){$('#vboxPane').data('vboxSession',$.extend({'success':d.success},d.responseData));},{'u':u,'p':p});
- trylogin.onLoad = function() { vboxCheckSession(true);};
- trylogin.run();
- };
-
- // Create but do not open dialog
- if($.browser.webkit) heightadd = 5;
- else heightadd = 0;
- $('#vboxLogin').dialog({'closeOnEscape':false,'width':300,'height':'auto','buttons':buttons,'modal':true,'autoOpen':false,'dialogClass':'vboxDialogContent','title':'<img src="images/vbox/OSE/about_16px.png" class="vboxDialogTitleIcon" /> phpVirtualBox :: ' + trans('Log in','UIUsers')});
- $('#vboxLogin').find('input[name=username]').first().focus();
-
- // Trick loader into not showing root pane again
- loader.hideRoot = false;
-
- // Login form is loaded, run check for valid session
- vboxCheckSession();
-
- };
- login.hideRoot = true;
- login.run();
-
- }); // </ document.ready event >
-
- </script>
-
- </head>
- <body>
- <div id='vboxPane' style='height: 100%; margin: 0px; padding: 0px;'>
- <table id='vboxTableMain' cellpadding=0 cellspacing=0 style="height: 100%; width: 100%; padding: 0px; margin: 0px; border: 0px; border-spacing: 0px;">
- <tr style='vertical-align: middle;'>
- <td style='height:20px;border:0px;padding:0px;margin:0px;border-spacing:0px;'>
- <div id='vboxMenu'>
- <!--
-
- Top menu bar
-
- -->
- </div>
- </td>
- </tr>
- <tr style='vertical-align: middle;'>
- <td id='vboxToolbarMain' style='height: 1%' class='vboxToolbarGrad'>
- <!--
-
- VM list toolbar
-
- -->
- <div id='vboxPaneToolbar'></div>
- <!--
-
- Tabs / buttons
-
- -->
- <div id='vboxTabsList'></div>
- </td>
- </tr>
- <tr style='vertical-align: top;'>
- <td style='border:0px;padding:0px;margin:0px;border-spacing:0px;' id='vboxResize'>
- <table style='width:100%;border:0px;padding:0px;border-spacing:0px;'>
- <tr id='vboxChooserResizePane' style='vertical-align: top;'>
- <td id="vboxChooserPane" style='padding:0px;border-spacing:0px;margin:0px;'>
- <!--
-
- VM List
-
- -->
- </td>
- <td id='vboxResizeTD' style='border: 0px; margin: 0px; padding: 0px; text-align: center;'>
- <div style='margin:0px;padding:0px;width:4px;height:100%;'>
- <div style='position: absolute; margin: 0px; padding:2px; width: 0px; height: 100%;' id='vboxResizeBar' ></div>
- </div>
- </td>
- <td id="vboxPaneTabContent" style='width:100%;border:0px;padding:0px;border-spacing:0px;margin:0px'>
- <!--
-
- Tab content
-
- -->
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <!--
- Progress operation list resize bar
- -->
- <tr style='padding: 0px; margin: 0px; vertical-align: middle;'>
- <td id='vboxResizeTDProgress' style='border: 0px; margin: 0px; padding: 0px; text-align: center; height: 5px; vertical-align: middle'>
- <div style='width:99%; margin:0 auto; padding:2px;' id='vboxResizeBarProgress' ></div>
- </td>
- </tr>
- <tr style='vertical-align: top; padding: 0px;'>
- <td style='border:0px;padding:0px;margin:0px;border-spacing:0px;height:1%'>
- <div id='vboxProgressOps' style='height:80px;overflow:auto;position:relative'>
- <!--
- Resize bar for E/ W
- -->
- <div style="position:absolute;z-index:1;margin:0px;border:0px;padding:1px;width: 0px;background:#aaa;display:none;" id='vboxResizeBarProgressEW' ></div>
- <!--
-
- Progress operation list
-
- -->
- </div>
- </td>
- </tr>
- </table>
- </div>
- <div onclick="javascript:window.location.href='./';" style="height:100%; cursor:pointer;"> </div>
- </body>
- </html>
|