From 2b928dcb3386429c14fa3722bc56ef8b6972a3bc Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Fri, 12 Jun 2026 19:55:42 +0200 Subject: [PATCH] =?UTF-8?q?fix(consent-tester):=20Edge-Case-Befunde=20auch?= =?UTF-8?q?=20im=20no-banner-Fr=C3=BChreturn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1/#2 (kein-Banner-affirmativ) feuerte nicht, weil der no-banner-Pfad bei Zeile 220 früh zurückkehrt — vor dem Edge-Case-Block am Funktionsende. Logik in _apply_edge_case_findings extrahiert und an BEIDEN Return-Pfaden aufgerufen (Früh-Return + Ende). Damit greift #1 jetzt auf statischen Seiten. Co-Authored-By: Claude Opus 4.7 --- consent-tester/services/consent_scanner.py | 46 ++++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) 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