diff --git a/configs/test.ini b/configs/test.ini index b5f04b5..1990aaf 100755 --- a/configs/test.ini +++ b/configs/test.ini @@ -59,7 +59,7 @@ db_path = /opt/VulnWhisperer/data/database verbose = true [openvas] -enabled = false +enabled = true hostname = openvas port = 4000 username = exampleuser diff --git a/vulnwhisp/test/mock.py b/vulnwhisp/test/mock.py index 95d3f32..4e668e9 100644 --- a/vulnwhisp/test/mock.py +++ b/vulnwhisp/test/mock.py @@ -19,6 +19,13 @@ class mockAPI(object): self.logger.info('mockAPI initialised, API requests will be mocked') self.logger.info('Test path resolved as {}'.format(self.mock_dir)) + self.openvas_requests = { + 'request_1': ('POST', 200, 'omp'), + 'request_2': ('GET', 200, 'omp?cmd=get_reports&token=efbe7076-4ae9-4e57-89cc-bcd6bd93f1f3&max_results=1&ignore_pagination=1&filter=apply_overrides%3D1+min_qod%3D70+autofp%3D0+first%3D1+rows%3D0+levels%3Dhml+sort-reverse%3Dseverity'), + 'request_3': ('GET', 200, 'omp?cmd=get_report_formats&token=efbe7076-4ae9-4e57-89cc-bcd6bd93f1f3'), + 'request_4': ('GET', 200, 'omp?token=efbe7076-4ae9-4e57-89cc-bcd6bd93f1f3&cmd=get_report&report_id=4c6c900c-71f5-42f7-91e2-1b19b7976606&filter=apply_overrides%3D0+min_qod%3D70+autofp%3D0+levels%3Dhml+first%3D1+rows%3D0+sort-reverse%3Dseverity&ignore_pagination=1&report_format_id=c1645568-627a-11e3-a660-406186ea4fc5&submit=Download') + } + def get_directories(self, path): dir, subdirs, files = next(os.walk(path)) return subdirs @@ -67,6 +74,20 @@ class mockAPI(object): httpretty.POST, 'https://{}:443/{}'.format(framework, 'api/2.0/fo/scan/'), body=self.qualys_vuln_callback) + def create_openvas_resource(self, framework): + for filename in self.get_files('{}/{}'.format(self.mock_dir, framework)): + try: + method, status, resource = self.openvas_requests[filename] + self.logger.debug('Adding mocked {} endpoint {} {}'.format(framework, method, resource)) + except: + self.logger.error('Cound not find mocked {} endpoint for file {}/{}/{}'.format(framework, self.mock_dir, framework, filename)) + continue + httpretty.register_uri( + getattr(httpretty, method), 'https://{}:4000/{}'.format(framework, resource), + body=open('{}/{}/{}'.format(self.mock_dir, framework, filename)).read(), + status=status + ) + def mock_endpoints(self): for framework in self.get_directories(self.mock_dir): if framework in ['nessus', 'tenable']: @@ -74,4 +95,6 @@ class mockAPI(object): elif framework == 'qualys_vuln': self.qualys_vuln_path = self.mock_dir + '/' + framework self.create_qualys_vuln_resource(framework) - httpretty.enable() \ No newline at end of file + elif framework == 'openvas': + self.create_openvas_resource(framework) + httpretty.enable()