# HG changeset patch
# User om
# Date 1386769774 -3600
# Node ID 7c2e34bcdf3d46385306c359452390dd6b072a76
# Parent 76d9177ca5093f77aa8ddff8ceeed96132b661d9# Parent e10a08095ccce191d48269a2315119c346b36f84
polished about, launch and systray
diff -r 76d9177ca509 -r 7c2e34bcdf3d OpenSecurity/bin/launch.pyw
--- a/OpenSecurity/bin/launch.pyw Wed Dec 11 14:34:19 2013 +0100
+++ b/OpenSecurity/bin/launch.pyw Wed Dec 11 14:49:34 2013 +0100
@@ -36,7 +36,6 @@
import os
import subprocess
import sys
-import urllib
import urllib2
from PyQt4 import QtCore
@@ -68,7 +67,8 @@
size = self.geometry()
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
- self._vms = [ { 'name': 'SecurityDVM0', 'ip': '192.168.56.101' } ]
+ # TODO: THIS HERE IS HARD CODED
+ self._vms = [ { 'name': 'SecurityDVM0' } ]
self._apps = [ { 'name': 'Browser', 'command': '/usr/bin/iceweasel' } ]
# add the VMs we know
@@ -186,11 +186,7 @@
def vm_get(self):
"""The vm of choice."""
- v = str(self._cbVM.currentText())
- for vm in self._vms:
- if v == vm['name']:
- return vm['ip']
- return v
+ return str(self._cbVM.currentText())
vm = property(vm_get)
@@ -227,43 +223,33 @@
# parse command line
parser = argparse.ArgumentParser(description = 'OpenSecurity Launcher: run application in VM')
- parser.add_argument('ip', metavar='IP', help='IP of Virtual Machine', nargs='?', type=str, default='')
+ parser.add_argument('vm', metavar='VM', help='Name of Virtual Machine', nargs='?', type=str, default='')
parser.add_argument('command', metavar='COMMAND', help='Full path of command and arguments to start inside VM', nargs='?', type=str, default='')
args = parser.parse_args()
- # we must have at least all or none set
- set_ip = args.ip != ''
- set_command = args.command != ''
- set_ALL = set_ip and set_command
- set_NONE = (not set_ip) and (not set_command)
- if (not set_ALL) and (not set_NONE):
- sys.stderr.write("Please specify ip and command or none.\n")
- sys.stderr.write("Type '--help' for help.\n")
- sys.exit(1)
+ # we must have all set
+ if args.vm == "" or args.command == '':
+ print('VM and/or COMMAND missing - invoking user dialog')
+ args.vm, args.command = ask_user()
- # check if we need to ask the user
- if set_NONE:
- args.ip, args.command = ask_user()
-
- # still no IP? --> no chance, over and out!
- if args.ip == '':
+ # still no VM? --> no chance, over and out!
+ if args.vm == '':
sys.exit(0)
# ensure we have our X11 running
Cygwin.start_X11()
# call the OpenSecurity Admin to launch our progie =)
- url_vm = urllib.quote(args.ip)
- url_command = urllib.quote(args.command)
- QtGui.QMessageBox.information(None, 'OpenSecurity Launche', 'About to launch
' + url_command + '
at VM
' + url_vm + '')
+ # TODO: hard coded PORT
+ url = 'http://127.0.0.1:8080/sdvms/' + args.vm + '/application' + args.command
+ print('Calling ' + url)
+ try:
+ result = urllib2.urlopen(url, None, 5)
+ except urllib2.HTTPError as e:
+ # Error, Fail, ... :(
+ msg = 'Error received from OpenSecurity Subsystem\nError code: ' + str(e.code) + '\nReason: ' + e.reason
+ QtGui.QMessageBox.critical(None, 'OpenSecurity Error', msg)
- # user_at_guest = args.user + '@' + args.ip
- # ssh = 'DISPLAY=:0 /usr/bin/ssh -Y ' + user_at_guest + ' ' + args.command
- # print(ssh)
-
- # # off we go!
- # Cygwin()(['/bin/bash', '--login', '-i', '-c', ssh], None, None, None)
-
# start
if __name__ == "__main__":
diff -r 76d9177ca509 -r 7c2e34bcdf3d OpenSecurity/bin/opensecurity_tray.pyw
--- a/OpenSecurity/bin/opensecurity_tray.pyw Wed Dec 11 14:34:19 2013 +0100
+++ b/OpenSecurity/bin/opensecurity_tray.pyw Wed Dec 11 14:49:34 2013 +0100
@@ -36,6 +36,7 @@
import os
import subprocess
import sys
+import urllib2
from PyQt4 import QtCore
from PyQt4 import QtGui
@@ -49,6 +50,30 @@
# code
+class OpenSecurityWait(QtGui.QDialog):
+
+ """OpenSecurity: please wait ..."""
+
+ def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags(0)):
+ super(OpenSecurityWait, self).__init__(parent, flags)
+ self.setWindowTitle('OpenSecurity')
+ self.setup_ui()
+
+
+ def setup_ui(self):
+ """Create the widgets."""
+
+ lyMain = QtGui.QVBoxLayout(self)
+ lyMain.setContentsMargins(8, 8, 8, 8)
+
+ # content area: left pixmap, right text
+ lbTitle = QtGui.QLabel('Creating secure subsystem. Please stand by ...')
+ lyMain.addWidget(lbTitle)
+
+ self.setMinimumSize(400, 50)
+ self.resize(lyMain.minimumSize())
+
+
class OpenSecurityTrayIcon(QtGui.QSystemTrayIcon):
"""This is the OpenSecuirty Tray Icon"""
@@ -67,11 +92,31 @@
def clicked_browser(self):
"""wish for safe internet browsing"""
- dlg_launch_image = os.path.join(sys.path[0], 'launch.pyw')
- process_command = [sys.executable, dlg_launch_image, '192.168.56.101', '/usr/bin/iceweasel']
- print(process_command)
- process = subprocess.Popen(process_command, shell = False)
- process.communicate()
+
+ # TODO: HARDCODED ADDRESS OF OPENSECURITYD
+
+ # tell the user to wait
+ dlg = OpenSecurityWait()
+ dlg.show()
+ QtGui.QApplication.instance().processEvents()
+
+ try:
+
+ # get a proper browsing VM
+ browsing_vm = urllib2.urlopen('http://127.0.0.1:8080/browsing').readline()
+ dlg_launch_image = os.path.join(sys.path[0], 'launch.pyw')
+ process_command = [sys.executable, dlg_launch_image, browsing_vm, '/usr/bin/iceweasel']
+ print(process_command)
+ process = subprocess.Popen(process_command, shell = False)
+ process.communicate()
+
+ except:
+ dlg.hide()
+ QtGui.QApplication.instance().processEvents()
+ QtGui.QMessageBox.critical(None, 'Failed to invoke Safe Internet Browsing', 'OpenSecurity Error')
+
+ dlg.hide()
+ QtGui.QApplication.instance().processEvents()
def clicked_exit(self):
diff -r 76d9177ca509 -r 7c2e34bcdf3d OpenSecurity/bin/opensecurityd.py
--- a/OpenSecurity/bin/opensecurityd.py Wed Dec 11 14:34:19 2013 +0100
+++ b/OpenSecurity/bin/opensecurityd.py Wed Dec 11 14:49:34 2013 +0100
@@ -81,8 +81,9 @@
"""OpenSecurity '/device_change' handler"""
def GET(self):
- gvm_mgr.handleDeviceChange()
-
+ new_ip = gvm_mgr.handleDeviceChange()
+ if new_ip != None:
+ gvm_mgr.mapNetworkDrive('h:', '\\\\' + new_ip + '\\USB', None, None)
return "os_device_change"
@@ -95,6 +96,7 @@
def GET(self):
try:
browsingVM = gvm_mgr.handleBrowsingRequest()
+ gvm_mgr.startVM(browsingVM)
return browsingVM
except:
raise web.internalerror()
diff -r 76d9177ca509 -r 7c2e34bcdf3d OpenSecurity/bin/vmmanager.py
--- a/OpenSecurity/bin/vmmanager.py Wed Dec 11 14:34:19 2013 +0100
+++ b/OpenSecurity/bin/vmmanager.py Wed Dec 11 14:49:34 2013 +0100
@@ -16,7 +16,7 @@
import string
-DEBUG = False
+DEBUG = True
class USBFilter:
vendorid = ""
@@ -225,14 +225,7 @@
def startVM(self, vm_name):
print('starting ' + vm_name)
cmd = 'VBoxManage startvm ' + vm_name + ' --type headless'
- result = self.execute(cmd)
- while result[0] != 0:
- print "Failed to start SDVM: ", vm_name, " retrying"
- time.sleep(1)
- result = self.execute(cmd)
- #verify against (0, 'Waiting for VM "SecurityDVM0" to power on...\r\nVM "SecurityDVM0" has been successfully started.\r\n', '')
- return result[0]
-
+ print self.execute(cmd) #verify against (0, 'Waiting for VM "SecurityDVM0" to power on...\r\nVM "SecurityDVM0" has been successfully started.\r\n', '')
# stop VM
def stopVM(self, vm_name):
@@ -326,37 +319,25 @@
new_sdvm = self.generateSDVMName()
self.createVM(new_sdvm)
self.attachRSD(new_sdvm, connected_device)
-
-
+ #sleep like method
+ self.listSDVM()
self.startVM(new_sdvm)
- # wait for machine to come up
+
while new_ip == None:
time.sleep(1)
new_ip = self.getHostOnlyIP(new_sdvm)
while new_ip not in self.startNotifications:
time.sleep(1)
- if new_ip != None:
- self.mapNetworkDrive('h:', '\\\\' + new_ip + '\\USB', None, None)
#TODO: cleanup notifications somwhere else (eg. machine shutdown)
self.startNotifications.remove(new_ip)
VMManager.handleDeviceChangeLock.release()
return new_ip
def handleBrowsingRequest(self):
- if VMManager.handleDeviceChangeLock.acquire(True):
- new_ip = None
- new_sdvm = self.generateSDVMName()
- self.createVM(new_sdvm)
- self.genCertificateISO(new_sdvm)
- self.attachCertificateISO(new_sdvm)
- self.startVM(new_sdvm)
- # wait for machine to come up
- while new_ip == None:
- time.sleep(1)
- new_ip = self.getHostOnlyIP(new_sdvm)
- while new_ip not in self.startNotifications:
- time.sleep(1)
- VMManager.handleDeviceChangeLock.release()
+ new_sdvm = self.generateSDVMName()
+ self.createVM(new_sdvm)
+ self.genCertificateISO(new_sdvm)
+ self.attachCertificateISO(new_sdvm)
return new_sdvm
# executes command over ssh on guest vm
@@ -369,7 +350,7 @@
return self.execute(cmd)
# executes command over ssh on guest vm with X forwarding
- def sshGuestX11Execute(self, vm_name, prog, user_name='osecuser'):
+ def sshGuestX11Execute(self, vm_name, prog, user_name='opensec'):
#TODO: verify if X server is running on user account
#TODO: set DISPLAY accordingly
address = self.getHostOnlyIP(vm_name)
@@ -429,13 +410,13 @@
return -1
return 1
-#if __name__ == '__main__':
+if __name__ == '__main__':
- #man = VMManager.getInstance()
+ man = VMManager.getInstance()
#man.removeVM('SecurityDVM0')
#man.netUse('192.168.56.134', 'USB\\')
- #ip = '192.168.56.139'
- #man.mapNetworkDrive('h:', '\\\\' + ip + '\USB', None, None)
+ ip = '192.168.56.139'
+ man.mapNetworkDrive('h:', '\\\\' + ip + '\USB', None, None)
#man.cygwin_path = 'c:\\cygwin64\\bin\\'
#man.handleDeviceChange()
diff -r 76d9177ca509 -r 7c2e34bcdf3d OpenSecurity/test/create-security-vm.bat
--- a/OpenSecurity/test/create-security-vm.bat Wed Dec 11 14:34:19 2013 +0100
+++ b/OpenSecurity/test/create-security-vm.bat Wed Dec 11 14:49:34 2013 +0100
@@ -1,2 +1,2 @@
@echo off
-..\cygwin\bin\curl -X POST http://127.0.0.1:8080/sdvms
\ No newline at end of file
+..\cygwin\bin\curl -X POST http://127.0.0.1:8080/sdvms