diff --git a/VBoxWebSrv.py b/VBoxWebSrv.py index f07f0bb..da10268 100644 --- a/VBoxWebSrv.py +++ b/VBoxWebSrv.py @@ -18,7 +18,6 @@ import re import StringIO import types -import md5 import random import uuid import gc @@ -26,7 +25,6 @@ # Enable garbage collection gc.enable() -gc.set_debug(gc.DEBUG_UNCOLLECTABLE) if sys.platform == 'win32': try: @@ -48,9 +46,11 @@ else: import vboxapi # Main VirtualBox API +from vboxapi.VirtualBox_constants import VirtualBoxReflectionInfo + # VBoxWeb modules -sys.path.insert(0,'lib') -sys.path.insert(0,'languages') +sys.path.insert(0,os.path.abspath(os.path.dirname(__file__))+'/lib') +sys.path.insert(0,os.path.abspath(os.path.dirname(__file__))+'/languages') # Load vbox connector import vboxactions @@ -240,7 +240,7 @@ def __init__(self, ctx): self.ctx['progressOps'] = {'get':progressObjGet,'store':progressObjStore,'delete':progressObjDel} # generate session_cookie name. Not very secure, but better than a static / predictable key. - self.session_cookie = md5.md5(os.path.abspath(os.path.dirname(__file__))).hexdigest() + self.session_cookie = hashlib.md5(os.path.abspath(os.path.dirname(__file__))).hexdigest() """ @@ -801,7 +801,7 @@ def main(argv = sys.argv): 'tools.staticdir.root': os.path.abspath(os.path.dirname(__file__)) }) - ctx = {'global':g_vboxManager,'vbox':None} + ctx = {'global':g_vboxManager,'vbox':None, 'vboxTypes':VirtualBoxReflectionInfo(True)} cherrypy.engine.subscribe('stop', onShutdown) diff --git a/VBoxWebSrv.vbs b/VBoxWebSrv.vbs deleted file mode 100644 index adf0f7e..0000000 --- a/VBoxWebSrv.vbs +++ /dev/null @@ -1,16 +0,0 @@ -Dim sh, scriptPath, p, WshShell, objArgs, strArgs - -set sh = WScript.CreateObject("WScript.Shell") -scriptPath = Left ( WScript.ScriptFullName, InStrRev ( WScript.ScriptFullName, WScript.ScriptName) - 1 ) -p = sh.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Python.exe\") - -rem WScript.Echo p & " " & scriptPath - -Set WshShell = WScript.CreateObject("WScript.Shell") - -Set objArgs = WScript.Arguments -For I = 0 to objArgs.Count - 1 - strArgs = strArgs & " " & objArgs(I) -Next - -WshShell.Run "cmd /C " & p & " " & scriptPath & "VBoxWebSrv.py " & strArgs & " & pause", 1, True \ No newline at end of file diff --git a/VboxWebSrv.bat b/VboxWebSrv.bat new file mode 100644 index 0000000..90b4a5c --- /dev/null +++ b/VboxWebSrv.bat @@ -0,0 +1,100 @@ +@Echo off +echo. +echo VBoxWebSrv Windows +echo. + +:: +:: reset vars +:: +set act=%1 +set puname=%2 +set pwset1=%3 +set pwset2=%3 +set arg1=%1 +set arg2=%2 +set arg3=%3 + +:: Search the registry tree for the required values +IF NOT EXIST "%PYTHON%" ( + FOR /F "skip=2 tokens=3" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Python.exe"') DO ( + IF EXIST "%%A" SET PYTHON=%%A + ) +) +if NOT EXIST "%PYTHON%" GOTO NOPYTHON + +:PROMPTACT +echo. +echo Commands: start, adduser, deluser +echo. +if "%act%" == "" set /p act= Enter a command to run: + +if "%act%" == "start" ( + echo Starting... + GOTO RUNPYTHON +) +if "%act%" == "adduser" GOTO PROMPTUSER +if "%act%" == "deluser" GOTO PROMPTUSER +echo %act% not understood. +set act= +GOTO PROMPTACT + +:PROMPTUSER +if "%act%" == "deluser" ( + if "%puname%" == "" set /p puname= Enter a user to remove: +) +if "%act%" == "adduser" ( + if "%puname%" == "" set /p puname= Enter a user to add: +) +if "%puname%" == "" goto PROMPTUSER +if "%act%" == "deluser" goto DELUSER +if "%act%" == "adduser" goto PROMPTPW + +GOTO RUNPYTHON + +:: +:: Prompt for password +:: +:PROMPTPW +if "%pwset1%" == "" set /p pwset1= Enter password: +if "%pwset1%" == "" GOTO PROMPTPW +if "%pwset2%" == "" set /p pwset2= Again: +if "%pwset1%" == "%pwset2%" GOTO ADDUSER +echo Passwords do not match. +set pwset1= +set pwset2= +GOTO PROMPTPW + +:: +:: Add a user +:: +:ADDUSER +set arg1="adduser" +set arg2=%puname% +set arg3="%pwset1%" +GOTO RUNPYTHON + +:: +:: Python not found +:: +:NOPYTHON +echo Unable to find python.exe. Please set the PYTHON environment variable. +pause +GOTO :END + +:: +:: Delete a user +:: +:DELUSER +set arg1="deluser" +set arg2=%puname% +set arg3= +GOTO RUNPYTHON + +:: +:: Start server +:: +:RUNPYTHON +%PYTHON% %~dp0VBoxWebSrv.py %arg1% %arg2% %arg3% +pause + +:END \ No newline at end of file diff --git a/lib/VirtualBox_wrappers.py b/lib/VirtualBox_wrappers.py index 7b81eda..7a1034c 100644 --- a/lib/VirtualBox_wrappers.py +++ b/lib/VirtualBox_wrappers.py @@ -18,12 +18,14 @@ # # This file is autogenerated from VirtualBox.xidl, DO NOT EDIT! # +""" from VirtualBox_services import * try: from VirtualBox_client import * except: pass +""" class ManagedManager: def __init__(self): diff --git a/lib/vboxactions.py b/lib/vboxactions.py index 8aebef8..ef2a0ab 100644 --- a/lib/vboxactions.py +++ b/lib/vboxactions.py @@ -12,7 +12,7 @@ import time import types import traceback -import md5 +import hashlib import os from VBoxWebSrv import trans from vboxapi import VirtualBoxManager @@ -115,10 +115,10 @@ def __init__(self, ctx): self.cache.prefix = 'vbwc-' if self.settings.get('location'): - self.cache.prefix = self.cache.prefix + str(md5.md5(self.settings.get('location')).hexdigest()) + self.cache.prefix = self.cache.prefix + str(hashlib.md5(self.settings.get('location')).hexdigest()) else: # Handle both Win* And *nix - self.cache.prefix = self.cache.prefix + str(md5.md5(str(os.environ.get('USERNAME',''))+str(os.environ.get('USER',''))).hexdigest()) + self.cache.prefix = self.cache.prefix + str(hashlib.md5(str(os.environ.get('USERNAME',''))+str(os.environ.get('USER',''))).hexdigest()) # Progress operation handling self.progressOps = ctx['progressOps'] @@ -196,7 +196,12 @@ def vboxType(self,vbtype,conv): Return vbox type for setting values """ def vboxTypeSet(self,vbtype,conv): - return int(self.vboxType(vbtype,conv)) + i = 0 + try: + i = self.vboxType(vbtype,conv) + except: + pass + return int(i) """ Return array of vbox items diff --git a/www/js/utils.js b/www/js/utils.js index 433453e..6309177 100644 --- a/www/js/utils.js +++ b/www/js/utils.js @@ -716,10 +716,10 @@ function vboxParseCookies() { /* Check version against supported versions */ function vboxVersionCheck(ver) { - var supported = {'3':{'2':1}}; + var supported = {'4':{'0':1}}; // No ver passed? - if(ver && !supported[ver.major][ver.minor]) { + if(ver && !(supported[ver.major] && supported[ver.major][ver.minor])) { vboxParseCookies();