diff --git a/consent-tester/services/consent_scanner.py b/consent-tester/services/consent_scanner.py index 56eb59d7..63f84ae1 100644 --- a/consent-tester/services/consent_scanner.py +++ b/consent-tester/services/consent_scanner.py @@ -83,6 +83,29 @@ class ConsentTestResult: banner_screenshot_b64: str = "" +def _apply_edge_case_findings(result) -> None: + """Edge-Case-Befunde nach dem Scan — an ALLEN Return-Pfaden aufrufen (auch + im no-banner-Fruehreturn): #1/#2 kein-Banner-affirmativ (statisch / nur + technisch notwendig → konform, inkl. Geo-Caveat) + #3 Non-Cookie-Tracking + (Pixel/Fingerprinting; §25 gilt auch ohne Cookies).""" + try: + from services.banner_text_checker import ( + build_no_banner_finding, detect_non_cookie_tracking, + build_non_cookie_tracking_finding, + ) + if (not result.banner_detected and not result.before_violations + and not result.before_tracking): + result.banner_text_violations.append( + build_no_banner_finding(result.banner_has_dse_link)) + nct = detect_non_cookie_tracking( + (result.before_scripts or []) + (result.accept_scripts or [])) + if nct: + result.banner_text_violations.append( + build_non_cookie_tracking_finding(nct)) + except Exception as e: + logger.warning("Edge-case findings skipped: %s", e) + + async def run_consent_test( url: str, wait_secs: int = 10, categories: list[str] | None = None, ) -> ConsentTestResult: @@ -217,6 +240,7 @@ async def run_consent_test( if not banner.detected: logger.info("No consent banner detected — skipping Phase B/C") await browser.close() + _apply_edge_case_findings(result) return result # ── Phase B: After rejecting ───────────────────────── @@ -541,27 +565,7 @@ async def run_consent_test( len(result.category_tests), len(result.cmp_payloads), ) - # Edge-Cases: kein Banner affirmativ einordnen (#1/#2) + Non-Cookie-Tracking (#3). - try: - from services.banner_text_checker import ( - build_no_banner_finding, detect_non_cookie_tracking, - build_non_cookie_tracking_finding, - ) - # #1/#2: KEIN Banner + KEIN Tracking vor Consent → konform (statisch / - # nur technisch notwendig), nicht still "Banner fehlt". Inkl. Geo-Caveat. - if (not result.banner_detected and not result.before_violations - and not result.before_tracking): - result.banner_text_violations.append( - build_no_banner_finding(result.banner_has_dse_link)) - # #3: Pixel/Fingerprinting (cookieloses Tracking) → §25 gilt auch ohne Cookies. - _nct = detect_non_cookie_tracking( - (result.before_scripts or []) + (result.accept_scripts or [])) - if _nct: - result.banner_text_violations.append( - build_non_cookie_tracking_finding(_nct)) - except Exception as e: - logger.warning("Edge-case findings skipped: %s", e) - + _apply_edge_case_findings(result) return result