def test_ports(self): self.assertTrue(check_port("1/tcp")) self.assertTrue(check_port("12/tcp")) self.assertTrue(check_port("123/tcp")) self.assertTrue(check_port("1234/tcp")) self.assertTrue(check_port("12345/tcp")) self.assertTrue(check_port("1/udp")) self.assertTrue(check_port("12/udp"))
def test_ports_fail(self): self.assertFalse(check_port("1")) self.assertFalse(check_port("1//udp")) self.assertFalse(check_port("1/12/tcp")) self.assertFalse(check_port("tcp")) self.assertFalse(check_port("general")) self.assertFalse(check_port("lol"))
def create_override( self, text: str, nvt_oid: str, *, days_active: Optional[int] = None, hosts: Optional[List[str]] = None, port: Optional[str] = None, result_id: Optional[str] = None, severity: Optional[Severity] = None, new_severity: Optional[Severity] = None, task_id: Optional[str] = None, threat: Any = None, new_threat: Any = None, ) -> Any: """Create a new override Arguments: text: Text of the new override nvt_id: OID of the nvt to which override applies days_active: Days override will be active. -1 on always, 0 off hosts: A list of host addresses port: Port to which the override applies, needs to be a string in the form {number}/{protocol} result_id: UUID of a result to which override applies severity: Severity to which override applies new_severity: New severity for result task_id: UUID of task to which override applies threat: deprecated new_threat: deprecated Returns: The response. See :py:meth:`send_command` for details. """ if not text: raise RequiredArgument(function=self.create_override.__name__, argument="text") if not nvt_oid: raise RequiredArgument(function=self.create_override.__name__, argument="nvt_oid") cmd = XmlCommand("create_override") cmd.add_element("text", text) cmd.add_element("nvt", attrs={"oid": nvt_oid}) if days_active is not None: cmd.add_element("active", str(days_active)) if hosts: cmd.add_element("hosts", to_comma_list(hosts)) if port: if check_port(port): cmd.add_element("port", str(port)) else: raise InvalidArgument(function=self.create_override.__name__, argument="port") if result_id: cmd.add_element("result", attrs={"id": result_id}) if severity is not None: cmd.add_element("severity", str(severity)) if new_severity is not None: cmd.add_element("new_severity", str(new_severity)) if task_id: cmd.add_element("task", attrs={"id": task_id}) if threat is not None: major, minor = self.get_protocol_version() deprecation("The threat parameter has been removed in GMP" f" version {major}{minor}") if new_threat is not None: major, minor = self.get_protocol_version() deprecation("The new_threat parameter has been removed in GMP" f" version {major}{minor}") return self._send_xml_command(cmd)
def modify_note( self, note_id: str, text: str, *, days_active: Optional[int] = None, hosts: Optional[List[str]] = None, port: Optional[int] = None, result_id: Optional[str] = None, severity: Optional[Severity] = None, task_id: Optional[str] = None, threat: Any = None, ) -> Any: """Modifies an existing note. Arguments: note_id: UUID of note to modify. text: The text of the note. days_active: Days note will be active. -1 on always, 0 off. hosts: A list of hosts addresses port: Port to which the override applies, needs to be a string in the form {number}/{protocol} result_id: Result to which note applies. severity: Severity to which note applies. task_id: Task to which note applies. threat: deprecated Returns: The response. See :py:meth:`send_command` for details. """ if not note_id: raise RequiredArgument( function=self.modify_note.__name__, argument="note_id" ) if not text: raise RequiredArgument( function=self.modify_note.__name__, argument="text" ) cmd = XmlCommand("modify_note") cmd.set_attribute("note_id", note_id) cmd.add_element("text", text) if days_active is not None: cmd.add_element("active", str(days_active)) if hosts: cmd.add_element("hosts", to_comma_list(hosts)) if port: if check_port(port): cmd.add_element("port", str(port)) else: raise InvalidArgument( function=self.modify_note.__name__, argument="port" ) if result_id: cmd.add_element("result", attrs={"id": result_id}) if severity is not None: cmd.add_element("severity", str(severity)) if task_id: cmd.add_element("task", attrs={"id": task_id}) if threat is not None: major, minor = self.get_protocol_version() deprecation( "The threat parameter has been removed in GMP" f" version {major}{minor}" ) return self._send_xml_command(cmd)
def create_note( self, text: str, nvt_oid: str, *, days_active: Optional[int] = None, hosts: Optional[List[str]] = None, port: Optional[str] = None, result_id: Optional[str] = None, severity: Optional[Severity] = None, task_id: Optional[str] = None, threat: Optional[SeverityLevel] = None, ) -> Any: """Create a new note Arguments: text: Text of the new note nvt_id: OID of the nvt to which note applies days_active: Days note will be active. -1 on always, 0 off hosts: A list of hosts addresses port: Port to which the override applies, needs to be a string in the form {number}/{protocol} result_id: UUID of a result to which note applies severity: Severity to which note applies task_id: UUID of task to which note applies threat: Severity level to which note applies. Will be converted to severity. Returns: The response. See :py:meth:`send_command` for details. """ if not text: raise RequiredArgument( function=self.create_note.__name__, argument="text" ) if not nvt_oid: raise RequiredArgument( function=self.create_note.__name__, argument="nvt_oid" ) cmd = XmlCommand("create_note") cmd.add_element("text", text) cmd.add_element("nvt", attrs={"oid": nvt_oid}) if days_active is not None: cmd.add_element("active", str(days_active)) if hosts: cmd.add_element("hosts", to_comma_list(hosts)) if port: if check_port(port): cmd.add_element("port", str(port)) else: raise InvalidArgument( function=self.create_note.__name__, argument="port" ) if result_id: cmd.add_element("result", attrs={"id": result_id}) if severity is not None: cmd.add_element("severity", str(severity)) if task_id: cmd.add_element("task", attrs={"id": task_id}) if threat is not None: if not isinstance(threat, SeverityLevel): raise InvalidArgumentType( function="create_note", argument="threat", arg_type=SeverityLevel.__name__, ) cmd.add_element("threat", threat.value) return self._send_xml_command(cmd)
def test_port_general(self): self.assertTrue(check_port("general/tcp"))
def test_port_cpe_fail(self): self.assertFalse(check_port("cpe:meh haha"))
def test_port_cpe(self): self.assertTrue(check_port("cpe:meh:moo*"))
def modify_override( self, override_id: str, text: str, *, days_active: Optional[int] = None, hosts: Optional[List[str]] = None, port: Optional[str] = None, result_id: Optional[str] = None, severity: Optional[Severity] = None, new_severity: Optional[Severity] = None, task_id: Optional[str] = None, threat: Optional[SeverityLevel] = None, new_threat: Optional[SeverityLevel] = None, ) -> Any: """Modifies an existing override. Arguments: override_id: UUID of override to modify. text: The text of the override. days_active: Days override will be active. -1 on always, 0 off. hosts: A list of host addresses port: Port to which the override applies, needs to be a string in the form {number}/{protocol} result_id: Result to which override applies. severity: Severity to which override applies. new_severity: New severity score for result. task_id: Task to which override applies. threat: Threat level to which override applies. Will be converted to severity. new_threat: New threat level for results. Will be converted to new_severity. Returns: The response. See :py:meth:`send_command` for details. """ if not override_id: raise RequiredArgument(function=self.modify_override.__name__, argument="override_id") if not text: raise RequiredArgument(function=self.modify_override.__name__, argument="text") cmd = XmlCommand("modify_override") cmd.set_attribute("override_id", override_id) cmd.add_element("text", text) if days_active is not None: cmd.add_element("active", str(days_active)) if hosts: cmd.add_element("hosts", to_comma_list(hosts)) if port: if check_port(port): cmd.add_element("port", str(port)) else: raise InvalidArgument(function=self.modify_override.__name__, argument="port") if result_id: cmd.add_element("result", attrs={"id": result_id}) if severity is not None: cmd.add_element("severity", str(severity)) if new_severity is not None: cmd.add_element("new_severity", str(new_severity)) if task_id: cmd.add_element("task", attrs={"id": task_id}) if threat is not None: if not isinstance(threat, SeverityLevel): raise InvalidArgumentType( function=self.modify_override.__name__, argument="threat", arg_type=SeverityLevel.__name__, ) cmd.add_element("threat", threat.value) if new_threat is not None: if not isinstance(new_threat, SeverityLevel): raise InvalidArgumentType( function=self.modify_override.__name__, argument="new_threat", arg_type=SeverityLevel.__name__, ) cmd.add_element("new_threat", new_threat.value) return self._send_xml_command(cmd)