MCPcopy Index your code
hub / github.com/blacklanternsecurity/bbot / _worker

Method _worker

bbot/modules/base.py:1805–1876  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1803 _intercept = True
1804
1805 async def _worker(self):
1806 async with self.scan._acatch(context=self._worker, unhandled_is_critical=True):
1807 try:
1808 while not self.scan.stopping and not self.errored:
1809 try:
1810 if self.incoming_event_queue is not False:
1811 incoming = await self.get_incoming_event()
1812 try:
1813 event, kwargs = incoming
1814 except ValueError:
1815 event = incoming
1816 kwargs = {}
1817 else:
1818 self.debug("Event queue is in bad state")
1819 break
1820 except asyncio.queues.QueueEmpty:
1821 await asyncio.sleep(0.1)
1822 continue
1823
1824 if event.type == "FINISHED":
1825 context = f"{self.name}.finish()"
1826 async with self.scan._acatch(context), self._task_counter.count(context):
1827 await self.finish()
1828 continue
1829
1830 acceptable = True
1831 async with self._task_counter.count(f"event_precheck({event})"):
1832 precheck_pass, reason = self._event_precheck(event)
1833 if not precheck_pass:
1834 self.debug(f"Not intercepting {event} because precheck failed ({reason})")
1835 acceptable = False
1836 async with self._task_counter.count(f"event_postcheck({event})"):
1837 postcheck_pass, reason = await self._event_postcheck(event)
1838 if not postcheck_pass:
1839 self.debug(f"Not intercepting {event} because postcheck failed ({reason})")
1840 acceptable = False
1841
1842 # whether to pass the event on to the rest of the scan
1843 # defaults to true, unless handle_event returns False
1844 forward_event = True
1845 forward_event_reason = ""
1846
1847 if acceptable:
1848 context = f"{self.name}.handle_event({event, kwargs})"
1849 self.scan.stats.event_consumed(event, self)
1850 self.debug(f"Intercepting {event}")
1851 try:
1852 forward_event = await self.run_task(self.handle_event(event, **kwargs), context)
1853 except asyncio.CancelledError:
1854 self.debug(f"{context} was cancelled")
1855 continue
1856 with suppress(ValueError, TypeError):
1857 forward_event, forward_event_reason = forward_event
1858
1859 if forward_event is False:
1860 self.debug(f"Not forwarding {event} because {forward_event_reason}")
1861 continue
1862

Callers

nothing calls this directly

Calls 14

get_incoming_eventMethod · 0.95
_event_postcheckMethod · 0.95
forward_eventMethod · 0.95
countMethod · 0.80
event_consumedMethod · 0.80
run_taskMethod · 0.80
stopMethod · 0.80
_acatchMethod · 0.45
debugMethod · 0.45
finishMethod · 0.45
_event_precheckMethod · 0.45
handle_eventMethod · 0.45

Tested by

no test coverage detected