BUGSCANNER v2.0
All bugs are fixed. Here's a summary of every change made:
web_gui.py — Queue isolation
scan_queues[scan_id] = queue.Queue() now created in scan_start() before the thread launches
run_scan() uses a local q = scan_queues[scan_id] for all .put() calls (no more global scan_queue)
_detect_finding() guards with if scan_id in scan_queues: before putting
scan_stream() fetches the correct queue via scan_queues.get(scan_id), returns an error event if the scan_id doesn't exist, and cleans up the queue entry on done/error/timeout
ai_scanner.py — Import cleanup + logic fix
Removed unused import hashlib, urlencode, and from rich import print as rprint
Moved import base64 to module top level (was inside a function body)
Fixed ask_json partial recovery loop: each closing bracket (} and ]) is now tried independently with its own try/except, so a failed } parse no longer silently swallows the ] attempt
reporter/generator.py — ReportLab API fixes
sev_color.hexval().lstrip("#") → sev_color.hexval()[2:] — hexval() returns "0xRRGGBB", so [2:] strips the 0x prefix correctly
"ROWBACKGROUND" → "ROWBACKGROUNDS" (both occurrences) — the correct ReportLab TableStyle constant name
utils/auth.py — Redirect detection
if resp.status_code in (301, 302, 303) and resp.history: → if resp.history: — since _post() uses allow_redirects=True, the final response status is already 200; the redirect is detected via resp.history (non-empty when redirects occurred), and resp.url gives the actual final destination URL