def __init__(self): self.db = DBManager_django() self.running_emulators = set()
class VMManager(object): __vmm = None def __init__(self): self.db = DBManager_django() self.running_emulators = set() @staticmethod def get_vmm(): if not VMManager.__vmm: VMManager.__vmm = VMManager() return VMManager.__vmm def restore_vm(self, ip): thread.start_new_thread(self.one_restore_vm, (ip,)) def one_restore_vm(self, ip): self.restore_host_to_snapshot(self.get_vm_id_from_ip(ip)) def get_vm_id_from_ip(self, ip): xml_response = Utils.run_get_output( 'java -jar ONE-API/network_info.jar %s %s %s' % (settings.ONE_CREDS, settings.ONE_IP, settings.NET_ID)) et = ET.fromstring(xml_response) for lease in et.iter("LEASE"): if lease.find("IP") is not None and lease.find("IP").text == ip: return int(lease.find("VM").text) raise Exception("NO VM ID found for %s" % ip) def restore_host_to_snapshot(self, vm_emulator_id): # hardcoding snapshot ID to 1 return Utils.run_get_output( 'java -jar ONE-API/restore.jar %s %s %d %d' % (settings.ONE_CREDS, settings.ONE_IP, vm_emulator_id, 0)) def save_report(self, vm_client_id, content): print content status = content['status'] extras = content['description'] if status == 'SUCCESS': self.db.update_success(vm_client_id, extras) else: # there was an error in the report self.db.log_failure(vm_client_id, status, extras) def find_target_for_VM_client(self,vm_client_id): return self.db.pick_dynamic_test_with_status_unknown(vm_client_id) def add_running_emulator(self, emulator): self.running_emulators.add(emulator) def remove_running_emulator(self, emulator): self.running_emulators.remove(emulator) def find_emulator_for(self, vulnerability_type): possibleEmulators = settings.ANDROID_VM_POOL if "SSL" in vulnerability_type: key = "SSL" elif vulnerability_type in ["PHONEGAP_JS_INJECTION", "JAVASCRIPTINTERFACE"]: key = "JAVASCRIPTINTERFACE" else: key = "NONSSL" print set(possibleEmulators[key]) - self.running_emulators return random.sample(set(possibleEmulators[key]) - self.running_emulators, 1)[0] def get_VMManager_request_handler(self): return VMManagerRequestHandler
class VMManager(object): __vmm = None def __init__(self): self.db = DBManager_django() self.running_emulators = set() @staticmethod def get_vmm(): if not VMManager.__vmm: VMManager.__vmm = VMManager() return VMManager.__vmm def restore_vm(self, ip): thread.start_new_thread(self.one_restore_vm, (ip, )) def one_restore_vm(self, ip): self.restore_host_to_snapshot(self.get_vm_id_from_ip(ip)) def get_vm_id_from_ip(self, ip): xml_response = Utils.run_get_output( 'java -jar ONE-API/network_info.jar %s %s %s' % (settings.ONE_CREDS, settings.ONE_IP, settings.NET_ID)) et = ET.fromstring(xml_response) for lease in et.iter("LEASE"): if lease.find("IP") is not None and lease.find("IP").text == ip: return int(lease.find("VM").text) raise Exception("NO VM ID found for %s" % ip) def restore_host_to_snapshot(self, vm_emulator_id): # hardcoding snapshot ID to 1 return Utils.run_get_output( 'java -jar ONE-API/restore.jar %s %s %d %d' % (settings.ONE_CREDS, settings.ONE_IP, vm_emulator_id, 0)) def save_report(self, vm_client_id, content): print content status = content['status'] extras = content['description'] if status == 'SUCCESS': self.db.update_success(vm_client_id, extras) else: # there was an error in the report self.db.log_failure(vm_client_id, status, extras) def find_target_for_VM_client(self, vm_client_id): return self.db.pick_dynamic_test_with_status_unknown(vm_client_id) def add_running_emulator(self, emulator): self.running_emulators.add(emulator) def remove_running_emulator(self, emulator): self.running_emulators.remove(emulator) def find_emulator_for(self, vulnerability_type): possibleEmulators = settings.ANDROID_VM_POOL if "SSL" in vulnerability_type: key = "SSL" elif vulnerability_type in [ "PHONEGAP_JS_INJECTION", "JAVASCRIPTINTERFACE" ]: key = "JAVASCRIPTINTERFACE" else: key = "NONSSL" print set(possibleEmulators[key]) - self.running_emulators return random.sample( set(possibleEmulators[key]) - self.running_emulators, 1)[0] def get_VMManager_request_handler(self): return VMManagerRequestHandler