1.1 --- a/OpenSecurity/bin/opensecurityd.pyw Mon Mar 03 15:05:17 2014 +0100
1.2 +++ b/OpenSecurity/bin/opensecurityd.pyw Tue Mar 04 16:54:51 2014 +0100
1.3 @@ -39,7 +39,7 @@
1.4 import web
1.5 from cygwin import Cygwin
1.6
1.7 -from vmmanager import VMManager
1.8 +import vmmanager
1.9
1.10 # local
1.11 from environment import Environment
1.12 @@ -54,8 +54,6 @@
1.13
1.14 """All the URLs we know mapping to class handler"""
1.15 opensecurity_urls = (
1.16 - #'/device_change', 'os_device_change', # http://localhost:8080/device_change GET
1.17 - #'/sdvm_started', 'os_sdvm_started', # http://localhost:8080/sdvm_started GET
1.18 '/browsing', 'os_browsing', # http://localhost:8080/browsing GET
1.19 '/sdvms', 'os_sdvms', # http://localhost:8080/sdvms GET, PUT
1.20 '/sdvms/(.*)/application/(.*)', 'os_sdvm_application', # http://localhost:8080/sdvms/[VMNAME]/application/[COMMAND] GET
1.21 @@ -65,10 +63,12 @@
1.22 '/sdvms/(.*)', 'os_sdvm', # http://localhost:8080/sdvms/[VMNAME] GET, DELETE
1.23 '/vms', 'os_vms', # http://localhost:8080/vms GET
1.24 '/vms/(.*)', 'os_vm', # http://localhost:8080/vms/[VMNAME] GET
1.25 - '/', 'os_root', # http://localhost:8080/ GET
1.26 - '/update_template', 'os_update_template' # http://localhost:8080/update_template GET
1.27 + '/update_template', 'os_update_template', # http://localhost:8080/update_template GET
1.28 + '/terminate', 'os_terminate', # http://localhost:8080/terminate GET
1.29 + '/', 'os_root' # http://localhost:8080/ GET
1.30 )
1.31
1.32 +
1.33 # ------------------------------------------------------------
1.34 # vars
1.35
1.36 @@ -80,18 +80,6 @@
1.37 # code
1.38
1.39
1.40 -#class os_device_change:
1.41 -# """OpenSecurity '/device_change' handler"""
1.42 -#
1.43 -# def GET(self):
1.44 -# log_call(web.ctx.environ)
1.45 -# try:
1.46 -# new_ip = gvm_mgr.handleDeviceChange()
1.47 -# return new_ip
1.48 -# except:
1.49 -# raise web.internalerror()
1.50 -
1.51 -
1.52 class os_browsing:
1.53 """OpenSecurity '/browsing' handler
1.54
1.55 @@ -100,21 +88,30 @@
1.56
1.57 def GET(self):
1.58 log_call(web.ctx.environ)
1.59 + global gvm_mgr
1.60 try:
1.61 - browsingVM = vmmanager().handleBrowsingRequest()
1.62 + browsingVM = gvm_mgr.handleBrowsingRequest()
1.63 return browsingVM
1.64 except:
1.65 raise web.internalerror()
1.66
1.67 -#class os_sdvm_started:
1.68 -# """OpenSecurity '/sdvm_started' handler"""
1.69 -#
1.70 -# def GET(self):
1.71 -# log_call(web.ctx.environ)
1.72 -# remote_ip = web.ctx.environ['REMOTE_ADDR']
1.73 -# gvm_mgr.putStartNotification(remote_ip)
1.74 -# return "os_sdvm_started"
1.75 -
1.76 +
1.77 +class os_root:
1.78 + """OpenSecurity '/' handler
1.79 +
1.80 + - GET: give information about current installation.
1.81 + """
1.82 +
1.83 + def GET(self):
1.84 + log_call(web.ctx.environ)
1.85 + global gvm_mgr
1.86 + res = "'os_server': { "
1.87 + res += "'version': '" + __version__ + "', "
1.88 + res += "'machine_folder': '" + gvm_mgr.getDefaultMachineFolder() + "' "
1.89 + res += "}"
1.90 + return res
1.91 +
1.92 +
1.93 class os_sdvm:
1.94 """OpenSecurity '/sdvms/[VM]' handler
1.95
1.96 @@ -124,11 +121,13 @@
1.97
1.98 def GET(self, name):
1.99 log_call(web.ctx.environ)
1.100 - return vmmanager().getVMInfo(name)
1.101 + global gvm_mgr
1.102 + return gvm_mgr.getVMInfo(name)
1.103
1.104 def DELETE(self, name):
1.105 log_call(web.ctx.environ)
1.106 - return vmmanager().removeVM(name)
1.107 + global gvm_mgr
1.108 + return gvm_mgr.removeVM(name)
1.109
1.110
1.111 class os_sdvm_application:
1.112 @@ -139,10 +138,11 @@
1.113
1.114 def GET(self, name, command):
1.115 log_call(web.ctx.environ)
1.116 + global gvm_mgr
1.117 command = '/' + command
1.118 - result = Cygwin.sshExecuteX11(command, vmmanager().getHostOnlyIP(name), 'osecuser', Cygwin.cygPath(gvm_mgr.getMachineFolder()) + '/' + name + '/dvm_key' )
1.119 + result = Cygwin.sshExecuteX11(command, gvm_mgr.getHostOnlyIP(name), 'osecuser', Cygwin.cygPath(gvm_mgr.getMachineFolder()) + '/' + name + '/dvm_key' )
1.120 self.poweroffVM(name)
1.121 - return vmmanager().removeVM(name)
1.122 + return gvm_mgr.removeVM(name)
1.123
1.124
1.125 class os_sdvm_ip:
1.126 @@ -153,7 +153,8 @@
1.127
1.128 def GET(self, name):
1.129 log_call(web.ctx.environ)
1.130 - return vmmanager().getHostOnlyIP(name)
1.131 + global gvm_mgr
1.132 + return gvm_mgr.getHostOnlyIP(name)
1.133
1.134
1.135 class os_sdvm_start:
1.136 @@ -164,7 +165,8 @@
1.137
1.138 def GET(self, name):
1.139 log_call(web.ctx.environ)
1.140 - return vmmanager().startVM(name)
1.141 + global gvm_mgr
1.142 + return gvm_mgr.startVM(name)
1.143
1.144
1.145 class os_sdvm_stop:
1.146 @@ -175,7 +177,8 @@
1.147
1.148 def GET(self, name):
1.149 log_call(web.ctx.environ)
1.150 - return vmmanager().stopVM(name)
1.151 + global gvm_mgr
1.152 + return gvm_mgr.stopVM(name)
1.153
1.154
1.155 class os_sdvms:
1.156 @@ -188,21 +191,62 @@
1.157 def GET(self):
1.158 """get the list of SDVMs"""
1.159 log_call(web.ctx.environ)
1.160 - return vmmanager().listSDVM()
1.161 + global gvm_mgr
1.162 + return gvm_mgr.listSDVM()
1.163
1.164 def POST(self):
1.165 """create a new SDVM"""
1.166 log_call(web.ctx.environ)
1.167 + global gvm_mgr
1.168
1.169 # get a new vm-name
1.170 - name = vmmanager().generateSDVMName()
1.171 + name = gvm_mgr.generateSDVMName()
1.172 try:
1.173 - vmmanager().createVM(name)
1.174 + gvm_mgr.createVM(name)
1.175 except:
1.176 raise web.internalerror()
1.177
1.178 return name
1.179
1.180 +
1.181 +class os_terminate:
1.182 + """OpenSecurity '/terminate' handler
1.183 +
1.184 + - GET: terminate the opensecurityd.
1.185 +
1.186 + YES: this here is bonkers. But the web.py http
1.187 + server runs infinite until a SystemExit exception
1.188 + or KeyboardInterrupt exception is raised.
1.189 +
1.190 + see: site-packages/web/httpserver.py - line 157ff
1.191 + see: site-packages/web/wsgiserver/__init__.py - line 1682ff
1.192 +
1.193 + So, we invoke a sys.exit(0) here to trigger server.stop().
1.194 +
1.195 + TODO: need to find a better way doing this, and not via the
1.196 + REST api. Maybe hack web.py server code?
1.197 + """
1.198 +
1.199 + def GET(self):
1.200 + log_call(web.ctx.environ)
1.201 + global gvm_mgr
1.202 + sys.exit(0)
1.203 + return None
1.204 +
1.205 +
1.206 +class os_update_template:
1.207 + """OpenSecurity '/update_template' handler
1.208 +
1.209 + - GET: update template vm
1.210 + """
1.211 +
1.212 + def GET(self):
1.213 + #return gvm_mgr.guestExecute('SecurityDVM', 'sudo apt-get -y update')
1.214 + global gvm_mgr
1.215 + log_call(web.ctx.environ)
1.216 + return gvm_mgr.updateTemplate()
1.217 +
1.218 +
1.219 class os_vm:
1.220 """OpenSecurity '/vms/[VM]' handler
1.221
1.222 @@ -211,7 +255,8 @@
1.223
1.224 def GET(self, name):
1.225 log_call(web.ctx.environ)
1.226 - return vmmanager().getVMInfo(name)
1.227 + global gvm_mgr
1.228 + return gvm_mgr.getVMInfo(name)
1.229
1.230
1.231 class os_vms:
1.232 @@ -222,35 +267,10 @@
1.233
1.234 def GET(self):
1.235 log_call(web.ctx.environ)
1.236 - return vmmanager().listVM()
1.237 + global gvm_mgr
1.238 + return gvm_mgr.listVM()
1.239
1.240
1.241 -class os_root:
1.242 - """OpenSecurity '/' handler
1.243 -
1.244 - - GET: give information about current installation.
1.245 - """
1.246 -
1.247 - def GET(self):
1.248 - log_call(web.ctx.environ)
1.249 - res = "'os_server': { "
1.250 - res += "'version': '" + __version__ + "', "
1.251 - res += "'machine_folder': '" + vmmanager().getDefaultMachineFolder() + "' "
1.252 - res += "}"
1.253 - return res
1.254 -
1.255 -class os_update_template:
1.256 - """OpenSecurity '/update_template' handler
1.257 -
1.258 - - GET: update template vm
1.259 - """
1.260 -
1.261 - def GET(self):
1.262 - #return gvm_mgr.guestExecute('SecurityDVM', 'sudo apt-get -y update')
1.263 - log_call(web.ctx.environ)
1.264 - return vmmanager().updateTemplate()
1.265 -
1.266 -
1.267 def log_call(web_environ):
1.268 """log the incoming call to the REST api"""
1.269 try:
1.270 @@ -262,16 +282,17 @@
1.271
1.272 def main():
1.273 """main startup for the opensecuirityd"""
1.274 - server = web.application(opensecurity_urls, globals())
1.275 +
1.276 + logger.debug('Starting OpenSecurity REST server')
1.277 +
1.278 + # ensure a VMManger is yet loaded
1.279 + global gvm_mgr
1.280 + gvm_mgr = vmmanager.VMManager.getInstance()
1.281 +
1.282 + server = web.application(opensecurity_urls, globals(), autoreload = False)
1.283 server.run()
1.284 -
1.285 -
1.286 -def vmmanager():
1.287 -
1.288 - """helper method to make lazy init of VMManager"""
1.289 - if gvm_mgr is None:
1.290 - gvm_mgr = VMManager.getInstance()
1.291 - return gvm_mgr
1.292 +
1.293 + logger.debug('Stopped OpenSecurity REST server')
1.294
1.295
1.296 # start