| 200 | return True |
| 201 | |
| 202 | def get_handoff_options(self, scan_id: str) -> Optional[Dict[str, Any]]: |
| 203 | state = self.get_scan_state(scan_id) |
| 204 | if not state: |
| 205 | return None |
| 206 | |
| 207 | subdomains: List[Dict[str, Any]] = [] |
| 208 | dns_result = state.results.get(ReconType.DNS_PASSIVE) |
| 209 | if dns_result and dns_result.status in ("ok", "partial"): |
| 210 | subdomains = dns_result.artifacts.get("subdomains", []) |
| 211 | |
| 212 | paths: List[Dict[str, Any]] = [] |
| 213 | content_result = state.results.get(ReconType.CONTENT_DISCOVERY) |
| 214 | if content_result and content_result.status in ("ok", "partial"): |
| 215 | paths = content_result.artifacts.get("hits", []) |
| 216 | |
| 217 | tls_findings: List[Dict[str, Any]] = [] |
| 218 | tls_result = state.results.get(ReconType.TLS_AUDIT) |
| 219 | if tls_result: |
| 220 | tls_findings = [f.to_dict() for f in tls_result.findings] |
| 221 | |
| 222 | return { |
| 223 | "scan_id": scan_id, |
| 224 | "target": state.target, |
| 225 | "subdomains": subdomains, |
| 226 | "paths": paths, |
| 227 | "tls_findings": tls_findings, |
| 228 | } |
| 229 | |
| 230 | def _run_scan( |
| 231 | self, |