def _get_pages(self, verb, route, params, model): """ Get one or more pages for a method using api v3 pagination """ response_list = [] if params is None: params = {} params['per_page'] = 100 if 'per_page' not in params: params['per_page'] = 100 if 'page' in params: response = self._request(verb, route, params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(model, response) response = self._request(verb, route, params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None response_list.extend(CBWParser().parse_response(model, response)) while 'next' in response.links: next_url = urlparse(response.links['next']['url']) params['page'] = parse_qs(next_url.query)['page'][0] response = self._request(verb, route, params) response_list.extend(CBWParser().parse_response(model, response)) return response_list
def create_remote_access(self, info): """"POST request to /api/v3/remote_accesses to create a specific remote access""" if info: response = self._request( "POST", [ROUTE_REMOTE_ACCESSES], { "type": info["type"], "address": info["address"], "port": info["port"], "login": info["login"], "password": info.get("auth_password") or info.get("password"), "key": info.get("priv_password") or info.get("key"), "node_id": info["node_id"], "server_groups": info.get("server_groups", "") }) logging.debug("Create connexion remote access::{}".format( response.text)) if self.verif_response(response): logging.info('remote access successfully created {}'.format( info["address"])) return CBWParser().parse_response(CBWRemoteAccess, response) logging.error("Error create connection remote access") return False
def agent(self, agent_id): """GET request to /api/v3/agents/{agent_id} to get all informations about a specific agent""" response = self._request("GET", [ROUTE_AGENTS, agent_id]) if response.status_code != 200: logging.error("Error agent id::{}".format(response.text)) return None return CBWParser().parse_response(CBWAgent, response)
def fetch_importer_script(self, script_id): """GET request to /api/v2/cbw_scans/scripts/{SCRIPT_ID} to get a specific Importer scanning script""" response = self._request("GET", [ROUTE_IMPORTER, script_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWImporter, response)
def create_group(self, params): """POST request to /api/v3/groups to create a group""" response = self._request("POST", [ROUTE_GROUPS], params) if response.status_code != 201: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWGroup, response)
def delete_host(self, host_id): """DELETE request to /api/v3/hosts/<host_id> to delete a host""" response = self._request("DELETE", [ROUTE_HOSTS, host_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWHost, response)
def update_host(self, host_id, params=None): """PUT request to /api/v3/hosts/<host_id> to update a host""" response = self._request("PUT", [ROUTE_HOSTS, host_id], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWHost, response)
def node(self, node_id): """GET request to /api/v3/nodes/<node_id> to get a list of all nodes""" response = self._request("GET", [ROUTE_NODES, node_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWNode, response)
def host(self, host_id): """GET request to /api/v3/hosts/<host_id> to get a specific host""" response = self._request("GET", [ROUTE_HOSTS, host_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWHost, response)
def create_host(self, params): """POST request to /api/v3/hosts to create a host""" response = self._request("POST", [ROUTE_HOSTS], params) if response.status_code != 201: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWHost, response)
def test_deploy_remote_access(self, remote_access_id): """POST request to /api/v3/remote_accesses/:id/test_deploy to test an agentless deployment""" response = self._request( "PUT", [ROUTE_REMOTE_ACCESSES, remote_access_id, 'test_deploy']) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWRemoteAccess, response)
def delete_node(self, node_id, new_node_id): """DELETE request to /api/v3/nodes/<node_id> to delete a node and transfer the data to another one""" response = self._request("DELETE", [ROUTE_NODES, node_id], new_node_id) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWNode, response)
def update_group(self, group_id, params=None): """PUT request to /api/v3/groups/<group_id> to update a group""" response = self._request("PUT", [ROUTE_GROUPS, group_id], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWGroup, response)
def delete_group(self, group_id): """DELETE request to /api/v3/groups/<group_id> to delete a group""" response = self._request("DELETE", [ROUTE_GROUPS, group_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWGroup, response)
def create_security_issue(self, params=None): """POST request to /api/v3/security_issues to create a security_issue""" response = self._request("POST", [ROUTE_SECURITY_ISSUES], params) if response.status_code != 201: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWSecurityIssue, response)
def group(self, group_id): """GET request to /api/v3/groups/<group_id> to get a specific group""" response = self._request("GET", [ROUTE_GROUPS, group_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWGroup, response)
def fetch_importer_scripts(self, params=None): """GET request to /api/v2/cbw_scans/scripts to get a list of all Importer scanning scripts""" response = self._request("GET", [ROUTE_IMPORTER], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWImporter, response)
def server_schedule_updates(self, server_id, params=None): """POST request to /api/v3/server/<server_id>/updates to install fixes""" response = self._request("POST", [ROUTE_SERVERS, server_id, "updates"], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWServer, response)
def user(self, user_id): """GET request to /api/v3/users/<id> to get a specific user""" response = self._request("GET", [ROUTE_USERS, user_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWUsers, response)
def delete_cve_announcement(self, cve_code): """DELETE request to /api/v3/cve_announcements/{cve_code} to delete a cvss_custom/score_custom fields of a cve_announcement""" response = self._request("DELETE", [ROUTE_CVE_ANNOUNCEMENTS, cve_code]) if response.status_code != 200: logging.error("Error server id::{}".format(response.text)) return None return CBWParser().parse_response(CBWCve, response)
def cve_announcement(self, cve_code): """GET request to /api/v3/cve_announcements/{cve_code} to get all informations about a specific cve_announcement""" response = self._request("GET", [ROUTE_CVE_ANNOUNCEMENTS, cve_code]) if response.status_code != 200: logging.error("Error server id::{}".format(response.text)) return None return CBWParser().parse_response(CBWCve, response)
def server(self, server_id): """GET request to /api/v2/server/{server_id} to get all informations about a specific server""" response = self._request("GET", [ROUTE_SERVERS, server_id]) if response.status_code != 200: logging.error("Error server id::{}".format(response.text)) return None return CBWParser().parse_response(CBWServer, response)
def server_refresh(self, server_id): """PUT request to /api/v3/server/{server_id}/refresh to relaunch analysis script on a specific server""" response = self._request("PUT", [ROUTE_SERVERS, server_id, 'refresh']) if response.status_code != 200: logging.error("Error server id::{}".format(response.text)) return None return CBWParser().parse_response(CBWServer, response)
def __init__(self, ignoring_policy_items=None, name="", **kwargs): # pylint: disable=unused-argument self.ignoring_policy_items = ([CBWParser().parse(CBWIgnoringPolicyItems, ignoring_policy_item) for ignoring_policy_item in ignoring_policy_items] if ignoring_policy_items else []) self.name = name
def delete_security_issue(self, security_issue_id): """DELETE request to /api/v3/security_issues/<security_issue_id> to delete a security_issue""" response = self._request("DELETE", [ROUTE_SECURITY_ISSUES, security_issue_id]) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWSecurityIssue, response)
def update_server_cve(self, server_id, cve_code, params=None): """PUT request to /api/v3/server/<server_id>/cve_announcements/<cve_code> to update a server cve""" response = self._request( "PUT", [ROUTE_SERVERS, server_id, "cve_announcements", cve_code], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWServer, response)
def update_cve_announcement(self, cve_code, params=None): """PUT request to /api/v3/cve_announcements/{cve_code} to update cvss_custom/score_custom informations about a specific cve_announcement""" response = self._request("PUT", [ROUTE_CVE_ANNOUNCEMENTS, cve_code], params) if response.status_code != 200: logging.error("Error server id::{}".format(response.text)) return None return CBWParser().parse_response(CBWCve, response)
def update_security_issue(self, security_issue_id, params=None): """PUT request to /api/v3/security_issues/<security_issue_id> to update a security_issue""" response = self._request("PUT", [ROUTE_SECURITY_ISSUES, security_issue_id], params) if response.status_code != 200: logging.error("Error::{}".format(response.text)) return None return CBWParser().parse_response(CBWSecurityIssue, response)
def remote_access(self, remote_access_id): """GET request to /api/v2/remote_accesses/{remote_access_id} to get all informations about a specific remote access""" response = self._request("GET", [ROUTE_REMOTE_ACCESSES, remote_access_id]) if response.status_code != 200: logging.error("error remote_access_id::{}".format(response.text)) return None return CBWParser().parse_response(CBWRemoteAccess, response)
def update_remote_access(self, remote_access_id, info): """PATCH request to /api/v3/remote_accesses/{remote_id} to update a remote access""" if remote_access_id and info: response = self._request("PATCH", [ROUTE_REMOTE_ACCESSES, remote_access_id], info) logging.debug("Update remote access::{}".format(response.text)) return CBWParser().parse_response(CBWRemoteAccess, response) logging.error("Error update remote access") return False