Analyse: Rechtstexte Fix 1 (Kommentare nicht veroeffentlichen, Abschalt-Wortlaut, TOM)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e33e1cf5ec
commit
e3fed71c76
8 files changed
+35
-22
No files matched your search
@@ -38,8 +38,8 @@ Bezug: aktuelle Abo-Bedingungen (Aufbau § 1 bis § 16, Leistungsbeschreibung B
|
||||
## 4. § 11 Vertragsende: neuer Satz am Ende
|
||||
|
||||
```diff
|
||||
+ Mit dem Vertragsende endet auch die Website-Analyse; wir entfernen Skript und Banner beim nächsten
|
||||
+ Veröffentlichen der Website und löschen die Messdaten 60 Tage nach Abschaltung.
|
||||
+ Mit dem Vertragsende endet auch die Website-Analyse; wir speichern dann keine Messdaten mehr, entfernen
|
||||
+ Skript und Banner beim nächsten Veröffentlichen der Website und löschen die Messdaten 60 Tage nach Abschaltung.
|
||||
```
|
||||
|
||||
## 5. § 14 Datenschutz, Absatz (2): Ergänzung
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
zwischen dem Kunden als Verantwortlichem („Kunde“) und der WEBklar GbR, Am Schwimmbad 10, 67722 Winnweiler, vertreten durch die Gesellschafter Kenso Grimm und Justin Klein, als Auftragsverarbeiter („WEBklar“).
|
||||
|
||||
Dieser Vertrag ergänzt den Auftragsverarbeitungsvertrag in Anlage 1 der Abo-Bedingungen. Er wird vereinbart, wenn der Kunde im Kundenportal die Funktion „Website-Analyse“ einschaltet und dabei die Zustimmung zu dieser Fassung bestätigt (Haken im Portal; das Portal speichert Fassung, Zeitpunkt und Person). Schaltet ein Mitarbeiter von WEBklar die Funktion auf Wunsch des Kunden ein, bestätigt der Kunde diese Fassung vorher in Textform; WEBklar protokolliert das.
|
||||
Dieser Vertrag ergänzt den Auftragsverarbeitungsvertrag in Anlage 1 der Abo-Bedingungen. Er wird vereinbart, wenn der Kunde im Kundenportal die Funktion „Website-Analyse“ einschaltet und dabei die Zustimmung zu dieser Fassung bestätigt (Haken im Portal; das Portal speichert Fassung, Zeitpunkt und Person). Schaltet ein Mitarbeiter von WEBklar die Funktion auf Wunsch des Kunden ein, bestätigt der Mitarbeiter im System, dass der Kunde diese Fassung des Vertrags bestätigt hat. Gespeichert werden die Fassung, der Zeitpunkt und der Name des Mitarbeiters. Bei Zustimmung im Kundenportal wird die Zustimmung dem Kundenkonto zugeordnet.
|
||||
|
||||
<!-- Prüfpunkt Anwalt P11: Wirksamer Abschluss durch Portal-Haken (Textform, Art. 28 Abs. 9 DSGVO) und mündliche Bestätigung durch Mitarbeiter; Nachweis der Fassung. -->
|
||||
<!-- Prüfpunkt Anwalt P11: Wirksamer Abschluss durch Portal-Haken (Textform, Art. 28 Abs. 9 DSGVO) und mündliche Bestätigung durch Mitarbeiter; Nachweis der Fassung. Reicht die Bestätigung durch den Mitarbeiter (nur Fassung, Zeitpunkt, Name; keine Textform-Bestätigung des Kunden gespeichert) für den Abschluss? -->
|
||||
<!-- Prüfpunkt Anwalt P6: Rollenverteilung. Kunde = Verantwortlicher, WEBklar = Auftragsverarbeiter; keine gemeinsame Verantwortlichkeit (Art. 26), weil WEBklar die Daten nur für den Kunden verwendet. Prüfen, ob die Auswertung in Aggregaten für WEBklar-Produktverbesserung ausgeschlossen bleiben soll (Ja, siehe Nr. 3). -->
|
||||
|
||||
## 1. Gegenstand und Dauer
|
||||
@@ -83,7 +83,7 @@ WEBklar setzt nur Personen ein, die zur Vertraulichkeit verpflichtet sind oder e
|
||||
|
||||
(1) Einzelne Ereignisse und Klickpositionen löscht WEBklar automatisch nach 30 Tagen. Zusammengefasste Tageswerte ohne Besucher-Kennung bleiben bis zum Ende der Website-Analyse (Ausschalten oder Ende des Wartungs-Abos) und weitere 60 Tage gespeichert; danach löscht WEBklar alle Daten der Website. Eine Kopie der Tageswerte stellt WEBklar dem Kunden auf Verlangen in Textform innerhalb dieser Frist zur Verfügung.
|
||||
|
||||
(2) Sicherungskopien werden im Rahmen der regulären Rotation überschrieben.
|
||||
(2) Ob und wie lange Sicherungskopien Daten der Website-Analyse enthalten, ist noch zu klären (Prüfpunkt P8, siehe Anlage); soweit sie enthalten sind, werden sie im Rahmen der regulären Rotation überschrieben.
|
||||
|
||||
(3) Gesetzliche Aufbewahrungspflichten bleiben unberührt.
|
||||
|
||||
@@ -91,7 +91,7 @@ WEBklar setzt nur Personen ein, die zur Vertraulichkeit verpflichtet sind oder e
|
||||
|
||||
## 10. Nachweise und Kontrollen
|
||||
|
||||
WEBklar stellt dem Kunden alle Informationen zur Verfügung, die zum Nachweis der Pflichten aus Art. 28 DSGVO nötig sind, und ermöglicht Überprüfungen einschließlich Inspektionen durch den Kunden oder einen von ihm beauftragten, zur Verschwiegenheit verpflichteten Prüfer. Sie finden nach Anmeldung mit angemessener Frist (in der Regel 14 Tage) zu den Servicezeiten statt, ohne den Betrieb unzumutbar zu stören. Für das Rechenzentrum genügen in der Regel die Nachweise des Betreibers. Für mehr als eine Vor-Ort-Kontrolle pro Jahr kann WEBklar eine angemessene Vergütung verlangen.
|
||||
WEBklar stellt dem Kunden alle Informationen zur Verfügung, die zum Nachweis der Pflichten aus Art. 28 DSGVO nötig sind, und ermöglicht Überprüfungen einschließlich Inspektionen durch den Kunden oder einen von ihm beauftragten, zur Verschwiegenheit verpflichteten Prüfer. Sie finden nach Anmeldung mit angemessener Frist (in der Regel 14 Tage) zu den Servicezeiten statt, ohne den Betrieb unzumutbar zu stören. Für das Rechenzentrum genügen in der Regel die Nachweise des Betreibers (Prüfpunkt P13). Für mehr als eine Vor-Ort-Kontrolle pro Jahr kann WEBklar eine angemessene Vergütung verlangen.
|
||||
|
||||
## 11. Pflichten des Kunden
|
||||
|
||||
@@ -115,7 +115,7 @@ Der Kunde ist Verantwortlicher für die Verarbeitung. Er sorgt dafür, dass das
|
||||
|---|---|
|
||||
| Übertragung | Skript und Messdaten werden nur über TLS (HTTPS) übertragen. |
|
||||
| Keine Cookies | Es werden keine Cookies gesetzt. Auf dem Gerät des Besuchers wird nur die Banner-Auswahl im lokalen Speicher (Eintrag „wk-consent“) gespeichert; sie gilt sechs Monate. |
|
||||
| Datenminimierung | IP-Adresse und Browser-Kennzeichen werden nicht gespeichert und nicht protokolliert; sie werden nur im Moment der Abfrage für Land, Geräteklasse und Bot-Erkennung verwendet. Pfade ohne Suchparameter, Elementpfade ohne Kennungen und Klassennamen. Keine Formulareingaben. |
|
||||
| Datenminimierung | IP-Adresse und Browser-Kennzeichen werden nicht gespeichert und nicht protokolliert. Die IP-Adresse wird nur im Moment der Abfrage verwendet für: Länderzuordnung, Schlüssel der Mengenbegrenzung (Hash mit Tagessalz, nur im Arbeitsspeicher) und, nur nach Einwilligung, die tägliche Besucher-Kennung. Das Browser-Kennzeichen wird nur im Moment der Abfrage verwendet für: Geräteklasse, Bot-Erkennung und, nur nach Einwilligung, die tägliche Besucher-Kennung. Pfade ohne Suchparameter, Elementpfade ohne Kennungen und Klassennamen. Keine Formulareingaben. |
|
||||
| Pseudonymisierung | Die Besucher-Kennung (nur nach Einwilligung) ist ein gekürzter Hash mit Tagessalz. Das Salz liegt nur im Arbeitsspeicher und wird täglich um 00:00 Uhr (Europe/Berlin) neu erzeugt; ältere Kennungen sind danach nicht mehr verknüpfbar. |
|
||||
| Einwilligung | Ohne „Annehmen“ sendet das Skript nur Seitenaufruf und Banner-Zähler. „Global Privacy Control“ und „Do Not Track“ gelten als Ablehnen. |
|
||||
| Zugriffskontrolle | Die Verwaltungsschnittstelle des Messdienstes (Auswertung, Website-Verwaltung) läuft auf einem getrennten, internen Port, der nicht öffentlich erreichbar ist, und ist durch ein Zugriffstoken geschützt. Zugriff nur über das Kundenportal und die Verwaltung von WEBklar. Im Portal sieht jeder Kunde nur die Daten seiner eigenen Website. |
|
||||
@@ -123,7 +123,7 @@ Der Kunde ist Verantwortlicher für die Verarbeitung. Er sorgt dafür, dass das
|
||||
| Heatmap-Zugriff | Die Heatmap wird über einen signierten Link abgerufen, der 30 Minuten gültig ist. |
|
||||
| Löschung | Täglicher automatischer Job (02:30 Uhr, Europe/Berlin): Rohdaten und Klicks nach 30 Tagen; Websites, die seit mehr als 60 Tagen abgeschaltet sind, werden vollständig gelöscht. |
|
||||
| Trennung | Daten sind je Website getrennt (Website-Schlüssel); eigener Container und eigenes Datenverzeichnis des Messdienstes; kein Zugriff auf andere Kundendaten. |
|
||||
| Rechenzentrum | Hetzner Online GmbH, Falkenstein (Deutschland), ISO/IEC 27001. |
|
||||
| Rechenzentrum | Hetzner Online GmbH, Falkenstein (Deutschland). **[Prüfpunkt: Zertifizierung des Rechenzentrums (ISO/IEC 27001) vor Verwendung belegen, bevor sie genannt wird.]** |
|
||||
| Protokolle des Reverse-Proxys | Das Zugriffsprotokoll für die Messdienst-Adresse wird ohne Client-IP geführt. **[Prüfpunkt P7: Einstellung beim Livegang verifizieren.]** |
|
||||
| Datensicherung | Die tägliche Serversicherung (7 Tage) erfasst voraussichtlich auch das Datenverzeichnis des Messdienstes. **[Prüfpunkt P8: ob das Verzeichnis in der Sicherung enthalten ist und wie lange dort gelöschte Daten verbleiben, ist noch zu klären.]** |
|
||||
| Organisation | Verpflichtung aller Beteiligten auf Vertraulichkeit, Ablauf für Datenschutzverletzungen (Nr. 8 Abs. 4), Überprüfung der Maßnahmen mindestens einmal im Jahr. |
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Prüfpunkte zur Vorlage datenschutz-analyse.html (intern, nicht veröffentlichen)
|
||||
|
||||
> Entwurf – vor Verwendung anwaltlich prüfen lassen.
|
||||
|
||||
- **P1** Zählung ohne Einwilligung (Seitenaufruf, Referrer-Domain, Land, Gerätegröße): kein Zugriff auf das Endgerät nach § 25 TDDDG? Das Skript liest Referrer und Fensterbreite aus; Einordnung nach strenger DSK-Lesart offen.
|
||||
- **P2** Tages-Kennung nach Einwilligung: pseudonym oder faktisch anonym?
|
||||
- **P3** Rechtsgrundlage des anonymen Banner-Zählers (angezeigt, angenommen, abgelehnt).
|
||||
- **P5** Speicherung der Banner-Wahl (auch der Ablehnung) im lokalen Speicher nach § 25 Abs. 2 Nr. 2 TDDDG; GPC/DNT wie Ablehnung.
|
||||
- **P18** Betroffenenrechte bei nicht identifizierbaren Daten (Art. 11, Art. 12 Abs. 2 DSGVO), Formulierung unter "Deine Rechte".
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
(1) Der Kunde kann die Website-Analyse jederzeit im Kundenportal ausschalten. Mit Ende des Wartungs-Abos (auch bei Wechsel ins Hosting-Abo) endet die Website-Analyse automatisch.
|
||||
|
||||
(2) Beim nächsten Veröffentlichen der Website entfernt WEBklar dann Skript, Banner und Zusatzseite. Bis dahin kann die Messung weiterlaufen. WEBklar informiert den Kunden per E-Mail über die Abschaltung.
|
||||
(2) Mit dem Abschalten werden keine Messdaten mehr gespeichert und die Heatmap ist nicht mehr abrufbar. Skript, Banner und Zusatzseite bleiben auf der Website sichtbar, bis die Website das nächste Mal veröffentlicht wird; dann entfernt WEBklar sie. Bei Websites ohne automatische Veröffentlichung geschieht das erst bei einer manuellen Veröffentlichung. WEBklar informiert den Kunden per E-Mail über die Abschaltung.
|
||||
|
||||
(3) Die gespeicherten Daten der Website löscht WEBklar 60 Tage nach der Abschaltung (Einzelheiten im Auftragsverarbeitungsvertrag). Der Kunde ergänzt seine Datenschutzerklärung nach der Abschaltung entsprechend.
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
<div class="brand">WEBKLAR</div>
|
||||
<h1>Datenschutzerklärung</h1>
|
||||
<p class="meta">Stand 01.10.2026</p>
|
||||
<p class="meta">Stand 30.09.2026</p>
|
||||
|
||||
<p>Hier erfahren Sie, welche personenbezogenen Daten wir verarbeiten, wenn Sie unsere Websites besuchen, unser Kundenportal nutzen oder mit uns einen Vertrag schließen, und welche Rechte Sie haben.</p>
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
<h2 id="analyse">6b. Website-Analyse auf Websites unserer Kunden</h2>
|
||||
<!-- Entwurf – vor Verwendung anwaltlich prüfen lassen (Prüfpunkt Anwalt P6: Rollenverteilung Auftragsverarbeiter) -->
|
||||
<p>Kunden mit Wartungs-Abo können für ihre eigene Website eine Reichweitenmessung einschalten. Dabei verarbeiten wir die Daten der Besucher dieser Websites ausschließlich als Auftragsverarbeiter nach den Weisungen des jeweiligen Kunden, der dafür Verantwortlicher ist. Wir verwenden diese Daten nicht für eigene Zwecke. Diese Datenschutzerklärung gilt für unsere eigenen Seiten und das Kundenportal. Wer eine Kundenwebsite besucht, findet die Informationen zur Messung (Zwecke, Rechtsgrundlagen, Speicherdauer, Rechte) auf der Website des Kunden, in der Regel unter „/datenschutz-analyse.html“. Die Daten liegen auf unserem Server bei der Hetzner Online GmbH in Deutschland.</p>
|
||||
<p>Sobald diese Funktion freigeschaltet ist, können Kunden mit Wartungs-Abo für ihre eigene Website eine Reichweitenmessung einschalten. Dabei verarbeiten wir die Daten der Besucher dieser Websites ausschließlich als Auftragsverarbeiter nach den Weisungen des jeweiligen Kunden, der dafür Verantwortlicher ist. Wir verwenden diese Daten nicht für eigene Zwecke. Diese Datenschutzerklärung gilt für unsere eigenen Seiten und das Kundenportal. Wer eine Kundenwebsite besucht, findet die Informationen zur Messung (Zwecke, Rechtsgrundlagen, Speicherdauer, Rechte) auf der Website des Kunden, in der Regel unter „/datenschutz-analyse.html“. Die Daten liegen dann auf unserem Server bei der Hetzner Online GmbH in Deutschland.</p>
|
||||
|
||||
<h2>7. Abos und Zahlung über Stripe</h2>
|
||||
<p>Schließen Sie eines unserer Abos ab, verarbeiten wir Name, E-Mail-Adresse, Rechnungsanschrift, das gewählte Abo und den gebuchten Zusatzspeicher, Abo- und Zahlungsstatus sowie Ihre Rechnungen. Zahlungsdaten wie Kartennummer oder IBAN geben Sie direkt bei unserem Zahlungsdienstleister ein. Wir erhalten davon nur eingeschränkte Angaben, etwa die Art des Zahlungsmittels und die letzten vier Ziffern.</p>
|
||||
|
||||
@@ -10,6 +10,9 @@ const TEMPLATE_URL = new URL('./templates/datenschutz-analyse.html', import.meta
|
||||
|
||||
const esc = (s) => String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
||||
|
||||
// Interne Kommentare dürfen nie veröffentlicht werden.
|
||||
export const stripComments = (t) => t.replace(/<!--[\s\S]*?-->\s*?\n?/g, '');
|
||||
|
||||
export const isValidBase = (b) => typeof b === 'string' && /^https:\/\/[^\s"'<>]+\/$/.test(b);
|
||||
|
||||
export function scriptTag(analytics, baseUrl) {
|
||||
@@ -78,7 +81,7 @@ export async function injectAnalytics(dir, analytics, { baseUrl, onLine, fs = no
|
||||
if (!isValidBase(baseUrl)) throw new Error('Analyse: ungültige öffentliche Basis-URL');
|
||||
const tag = scriptTag(analytics, baseUrl);
|
||||
const p = analytics.privacy || {};
|
||||
const template = await fs.readFile(TEMPLATE_URL, 'utf8');
|
||||
const template = stripComments(await fs.readFile(TEMPLATE_URL, 'utf8'));
|
||||
const withAddr = p.address ? template.replace(/\{\{#address\}\}|\{\{\/address\}\}/g, '') : template.replace(/\{\{#address\}\}[\s\S]*?\{\{\/address\}\}/g, '');
|
||||
const page = withAddr.replace(/\{\{(company|address|email)\}\}/g, (_, k) => esc(p[k] ?? ''));
|
||||
await fs.writeFile(join(dir, PAGE), page, 'utf8');
|
||||
|
||||
@@ -5,12 +5,6 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="robots" content="noindex">
|
||||
<title>Datenschutz – Reichweitenmessung</title>
|
||||
<!-- Entwurf – vor Verwendung anwaltlich prüfen lassen. -->
|
||||
<!-- Prüfpunkt Anwalt P1: Zählung ohne Einwilligung (Seitenaufruf, Referrer-Domain, Land, Gerätegröße) – kein Zugriff auf Endgerät nach § 25 TDDDG? Das Skript liest Referrer und Fensterbreite aus; Einordnung nach DSK-Lesart ist offen. -->
|
||||
<!-- Prüfpunkt Anwalt P2: Tages-Kennung nach Einwilligung als pseudonym oder faktisch anonym einzuordnen? -->
|
||||
<!-- Prüfpunkt Anwalt P3: Rechtsgrundlage des anonymen Banner-Zählers (Anzeigen/Annehmen/Ablehnen). -->
|
||||
<!-- Prüfpunkt Anwalt P5: Speicherung der Banner-Wahl (auch der Ablehnung) im lokalen Speicher nach § 25 Abs. 2 Nr. 2 TDDDG; GPC/DNT wie Ablehnung. -->
|
||||
<!-- Prüfpunkt Anwalt P18: Betroffenenrechte bei nicht identifizierbaren Daten (Art. 11, Art. 12 Abs. 2 DSGVO) – Formulierung unter "Deine Rechte". -->
|
||||
<style>
|
||||
body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.6;color:#111;max-width:46rem;margin:0 auto;padding:1.5rem 1rem 4rem}
|
||||
h1{font-size:1.6rem}h2{font-size:1.15rem;margin-top:2rem}
|
||||
@@ -27,7 +21,7 @@
|
||||
<p>{{company}}<br>{{#address}}{{address}}<br>{{/address}}E-Mail: <a href="mailto:{{email}}">{{email}}</a></p>
|
||||
|
||||
<h2>Worum es geht</h2>
|
||||
<p>Wir möchten verstehen, wie diese Website genutzt wird, um sie zu verbessern: Welche Seiten werden gelesen, woher kommen die Besucher, wo bleiben sie hängen? Es gibt dabei keine Werbung, kein Profiling und keine Weitergabe an Werbenetzwerke. Wir setzen keine Cookies und binden keine Dienste von Google, Meta oder anderen Drittanbietern ein. Die Messung läuft auf Servern in Deutschland.</p>
|
||||
<p>Wir möchten verstehen, wie diese Website genutzt wird, um sie zu verbessern: Welche Seiten werden gelesen, woher kommen die Besucher, wo bleiben sie hängen? Es gibt dabei keine Werbung, kein Profiling und keine Weitergabe an Werbenetzwerke. Die Messung setzt keine Cookies und bindet keine Dienste von Google, Meta oder anderen Drittanbietern ein. Die Messung läuft auf Servern in Deutschland.</p>
|
||||
|
||||
<h2>Wenn Du nichts oder „Ablehnen“ auswählst</h2>
|
||||
<p>Dann zählen wir nur, dass eine Seite aufgerufen wurde. Dabei werden gespeichert:</p>
|
||||
@@ -35,10 +29,10 @@
|
||||
<li>der Seitenpfad (ohne Suchbegriffe oder Parameter hinter dem „?“),</li>
|
||||
<li>die Website, von der Du kommst (nur der Domainname, falls es nicht diese Website selbst ist),</li>
|
||||
<li>das Land, abgeleitet aus Deiner IP-Adresse,</li>
|
||||
<li>die Geräteklasse (Handy, Tablet oder Computer, nach Fensterbreite) und</li>
|
||||
<li>die Geräteklasse (Handy, Tablet oder Computer), abgeleitet aus dem Browser-Kennzeichen im Moment der Abfrage und aus der Fensterbreite, und</li>
|
||||
<li>anonyme Zähler dafür, ob das Banner angezeigt, angenommen oder abgelehnt wurde.</li>
|
||||
</ul>
|
||||
<p>Deine IP-Adresse wird nur für den Augenblick der Abfrage verwendet, um das Land zu bestimmen. Sie wird nicht gespeichert, ebenso wenig Dein Browser-Kennzeichen (User-Agent). Es gibt keine Kennung, mit der wir Dich wiedererkennen könnten. Dasselbe gilt, wenn Dein Browser das Signal „Global Privacy Control“ oder „Do Not Track“ sendet: Wir behandeln das wie ein „Ablehnen“ und zeigen das Banner nicht an.</p>
|
||||
<p>Deine IP-Adresse wird nur für den Augenblick der Abfrage verwendet, um das Land zu bestimmen. Sie wird nicht gespeichert, ebenso wenig Dein Browser-Kennzeichen (User-Agent). Ohne Einwilligung gibt es keine Kennung, mit der wir Dich wiedererkennen könnten. Dasselbe gilt, wenn Dein Browser das Signal „Global Privacy Control“ oder „Do Not Track“ sendet: Wir behandeln das wie ein „Ablehnen“ und zeigen das Banner nicht an.</p>
|
||||
<p>Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse ist, die Nutzung unserer Website in Zahlen zu kennen und das Banner korrekt zu betreiben. Auf Informationen in Deinem Endgerät greifen wir dafür nach unserer Einschätzung nicht im Sinne von § 25 TDDDG zu.</p>
|
||||
|
||||
<h2>Wenn Du „Annehmen“ wählst</h2>
|
||||
|
||||
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
|
||||
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, readdirSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { injectAnalytics } from '../src/analytics-inject.js';
|
||||
import { injectAnalytics, stripComments } from '../src/analytics-inject.js';
|
||||
import { validateJob } from '../src/validate.js';
|
||||
import { loadConfig } from '../src/config.js';
|
||||
import { createJobs } from '../src/jobs.js';
|
||||
@@ -222,3 +222,10 @@ test('validateJob: Adresse nur Leerraum ⇒ leer, sonst getrimmt', () => {
|
||||
const r2 = validateJob({ ...base, analytics: A({ privacy: { company: 'F', email: 'e@x.de', address: ' Weg 1 ' } }) });
|
||||
assert.equal(r2.job.analytics.privacy.address, 'Weg 1');
|
||||
});
|
||||
|
||||
test('Zusatzseite enthält keine HTML-Kommentare', async () => {
|
||||
const d = dir();
|
||||
await injectAnalytics(d, A(), { baseUrl: BASE });
|
||||
assert.ok(!get(d, 'datenschutz-analyse.html').includes('<!--'));
|
||||
assert.equal(stripComments('a<!-- Prüfpunkt\nx -->b<!--y-->c'), 'abc');
|
||||
});
|
||||
Reference in new issue
Block a user