fix(cookie+impressum): Drittland-FP, Impressum-Beleg, neuer Opt-Out-Finding
- Drittland: unbekannte Herkunft ('N/A') + Self-Hosting feuern nicht mehr —
First-Party-Session-Cookies (PHPSESSID/JSESSIONID) waren False Positives.
- Impressum _line_of: enges Fenster um den Treffer bei Texten ohne Umbrüche
(BMW = ein Block) → jede Pflichtangabe zeigt IHREN Beleg statt denselben Satz.
- Neuer Finding-Typ missing_opt_out: einwilligungspflichtiger Anbieter mit
Cookies ohne Opt-Out-/Widerspruchs-Link (Art. 7 Abs. 3 + Art. 21).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -79,12 +79,18 @@ def _build_measure(label: str, norm: str) -> str:
|
||||
|
||||
|
||||
def _line_of(text: str, start_pos: int, end_pos: int) -> str:
|
||||
"""Die Zeile um einen Regex-Treffer — als 'gefundener Wert' für die
|
||||
Pflichtangaben-Tabelle. Gekappt + bereinigt."""
|
||||
"""Ein enger Ausschnitt um einen Regex-Treffer — der 'gefundene Wert' für die
|
||||
Pflichtangaben-Tabelle. Bevorzugt die Zeile; bei Texten ohne (genug)
|
||||
Zeilenumbrüche (z.B. BMW-Impressum als ein Block) ein Fenster um den Treffer,
|
||||
damit jede MC IHREN Beleg zeigt statt immer denselben Anfangssatz."""
|
||||
start = text.rfind("\n", 0, start_pos) + 1
|
||||
end = text.find("\n", end_pos)
|
||||
if end == -1:
|
||||
end = len(text)
|
||||
# Zeile zu lang (kein/seltener Umbruch) → enges Fenster zentriert am Treffer.
|
||||
if end - start > 160:
|
||||
start = max(start, start_pos - 70)
|
||||
end = min(end, end_pos + 70)
|
||||
return " ".join(text[start:end].split())[:160]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user