fix: isolate GTIN tool and legal pages
This commit is contained in:
@@ -91,10 +91,13 @@ fi
|
||||
|
||||
printf '\n== routes\n'
|
||||
for route in / /fotografie/ /businessfotografie/ /portrait-und-model/ /familie/ \
|
||||
/minishootings/ /video/ /musik-und-buehne/ /social-media/ /projekte/ /ueber/ /kontakt/ /impressum/ /datenschutz/ /gtin/; do
|
||||
/minishootings/ /video/ /musik-und-buehne/ /social-media/ /projekte/ /ueber/ /kontakt/ /impressum/ /datenschutz/ \
|
||||
/gtin/ /gtin/impressum/ /gtin/datenschutz/; do
|
||||
check_status "$base$route" 200
|
||||
done
|
||||
check_redirect "$base/gtin" "$base/gtin/"
|
||||
check_redirect "$base/gtin/impressum" "$base/gtin/impressum/"
|
||||
check_redirect "$base/gtin/datenschutz" "$base/gtin/datenschutz/"
|
||||
|
||||
# The retired photo URL must keep working: it is the umbrella page now.
|
||||
check_redirect "$base/shootings" "$base/fotografie/"
|
||||
@@ -140,13 +143,19 @@ check_contains "$base/musik-und-buehne/" "Sagenbringer"
|
||||
check_contains "$base/impressum/" "§ 5 DDG"
|
||||
check_contains "$base/impressum/" "DE462149560"
|
||||
check_contains "$base/datenschutz/" "keine Zugriffsprotokolle"
|
||||
check_contains "$base/datenschutz/" "bis zu 20"
|
||||
check_contains "$base/impressum/" "GTIN-Tool"
|
||||
check_not_contains "$base/datenschutz/" "GTIN"
|
||||
check_not_contains "$base/impressum/" "GTIN"
|
||||
check_contains "$base/gtin/" 'name="robots" content="noindex, nofollow"'
|
||||
check_not_contains "$base/" 'href="/gtin'
|
||||
check_not_contains "$base/sitemap.xml" "/gtin/"
|
||||
check_contains "$base/gtin/" 'href="/impressum/"'
|
||||
check_contains "$base/gtin/" 'href="/datenschutz/"'
|
||||
check_contains "$base/gtin/" 'href="/gtin/impressum/"'
|
||||
check_contains "$base/gtin/" 'href="/gtin/datenschutz/"'
|
||||
check_contains "$base/gtin/impressum/" "§ 5 DDG"
|
||||
check_contains "$base/gtin/impressum/" "DE462149560"
|
||||
check_contains "$base/gtin/datenschutz/" "Cache API"
|
||||
check_contains "$base/gtin/datenschutz/" "nicht an einen Server übertragen"
|
||||
check_contains "$base/gtin/datenschutz/" 'name="robots" content="noindex, nofollow"'
|
||||
check_contains "$base/gtin/impressum/" 'name="robots" content="noindex, nofollow"'
|
||||
for route in / /fotografie/ /businessfotografie/ /portrait-und-model/ /familie/ \
|
||||
/minishootings/ /video/ /musik-und-buehne/ /social-media/ /projekte/ /ueber/ \
|
||||
/kontakt/ /impressum/ /datenschutz/; do
|
||||
|
||||
@@ -92,9 +92,10 @@ them is a defect, not a style question:
|
||||
- no cookies, analytics or tracking. The standalone `/gtin/` tool is the only
|
||||
`localStorage`/Cache API exception: it keeps its last 20 generated entries in
|
||||
the browser and caches only its own offline app shell; it sends no tool data
|
||||
to a server. The tool stays unlisted: no site navigation or page links, no
|
||||
sitemap entry, and `noindex,nofollow`; only the tool itself links out to the
|
||||
required legal pages;
|
||||
to a server. Its `/gtin/impressum/` and `/gtin/datenschutz/` pages are
|
||||
standalone, unlisted legal pages. The tool stays unlisted: no main-site
|
||||
navigation or page links, no sitemap entry, and `noindex,nofollow`; only the
|
||||
tool links to its own legal pages, which never link back to the main site;
|
||||
- `access_log off` in `nginx.conf` — never enable request logging;
|
||||
- `error_log /dev/null crit;` in `nginx.conf` — never write an error-log file either;
|
||||
- fonts, scripts, styles and images are served from this origin only;
|
||||
|
||||
@@ -47,7 +47,8 @@ Video · Social Media · Projekte · Über · Kontakt · Impressum · Datenschut
|
||||
|
||||
Der GTIN-Generator unter `/gtin/` ist ein separates, öffentlich direkt aufrufbares Werkzeug.
|
||||
Er bleibt absichtlich unverlinkt, fehlt in der Sitemap und trägt `noindex,nofollow`; nur das
|
||||
Werkzeug selbst verlinkt auf Impressum und Datenschutz.
|
||||
Werkzeug selbst verlinkt auf seine eigenständigen Rechtstexte unter `/gtin/impressum/` und
|
||||
`/gtin/datenschutz/`. Diese Seiten verwenden keine Navigation oder Rechtstexte des Hauptauftritts.
|
||||
|
||||
## Technische Entscheidungen
|
||||
|
||||
@@ -66,7 +67,8 @@ Werkzeug selbst verlinkt auf Impressum und Datenschutz.
|
||||
- **GTIN-Generator.** Der Generator unter `/gtin/` rechnet vollständig im Browser,
|
||||
ohne Konto, externe API oder Serverübertragung. Er speichert bis zu 20 zuletzt
|
||||
erzeugte Einträge lokal im Browser; der Offline-Appcache enthält nur die
|
||||
Anwendungsdateien. Beide Funktionen sind in der Datenschutzerklärung beschrieben.
|
||||
Anwendungsdateien. Die eigenständige Datenschutzerklärung liegt unter
|
||||
`/gtin/datenschutz/`; die Rechtstexte sind nicht mit denen des Hauptauftritts verknüpft.
|
||||
|
||||
## Herkunft der Inhalte
|
||||
|
||||
|
||||
@@ -65,6 +65,8 @@ server {
|
||||
location = /datenschutz.html { return 301 /datenschutz/; }
|
||||
location = /kontakt.html { return 301 /kontakt/; }
|
||||
location = /gtin { return 301 /gtin/; }
|
||||
location = /gtin/impressum { return 301 /gtin/impressum/; }
|
||||
location = /gtin/datenschutz { return 301 /gtin/datenschutz/; }
|
||||
location = /gtin/manifest.webmanifest {
|
||||
default_type application/manifest+json;
|
||||
try_files $uri =404;
|
||||
|
||||
@@ -40,7 +40,11 @@ from theme import CSS, TOKENS # noqa: E402
|
||||
|
||||
WIDTHS = (480, 768, 1200, 1600)
|
||||
WEBP_QUALITY = 84
|
||||
UNLISTED_HTML = ["gtin/index.html"]
|
||||
UNLISTED_HTML = [
|
||||
"gtin/index.html",
|
||||
"gtin/impressum/index.html",
|
||||
"gtin/datenschutz/index.html",
|
||||
]
|
||||
|
||||
INK = (23, 20, 15)
|
||||
PAPER = (246, 242, 234)
|
||||
@@ -281,7 +285,7 @@ def build_html(table: dict[str, dict]) -> list[tuple[str, str]]:
|
||||
print(f" [html] {rel}")
|
||||
shutil.rmtree(SITE / "gtin", ignore_errors=True)
|
||||
shutil.copytree(SRC / "gtin", SITE / "gtin")
|
||||
print(" [html] gtin/index.html (unlisted browser tool)")
|
||||
print(" [html] gtin/ (unlisted browser tool and standalone legal pages)")
|
||||
not_found = pages.not_found().replace("og-desfoto.jpg", "og-desfoto.jpg")
|
||||
(SITE / "404.html").write_text(not_found, encoding="utf-8")
|
||||
print(" [html] 404.html")
|
||||
@@ -531,6 +535,7 @@ def link_check(routes: list[tuple[str, str]]) -> list[str]:
|
||||
|
||||
problems: list[str] = []
|
||||
built = {f"/{rel}".replace("/index.html", "/") for _p, rel in routes}
|
||||
built.update(f"/{rel}".replace("/index.html", "/") for rel in UNLISTED_HTML)
|
||||
built.add("/404.html")
|
||||
for rel in ["sitemap.xml", "robots.txt", "site.webmanifest", "favicon.svg", ".well-known/security.txt",
|
||||
"assets/site.css", "assets/site.js", "assets/fonts.css"]:
|
||||
|
||||
@@ -101,11 +101,8 @@
|
||||
|
||||
<h2>5. Cookies und lokale Speicherung</h2>
|
||||
<p>Diese Website setzt <strong>keine Cookies</strong> und verwendet keine Analyse-, Marketing- oder
|
||||
Tracking-Technologien. Das browserbasierte GTIN-Tool speichert die letzten bis zu 20
|
||||
Artikelnummern und erzeugten GTINs im lokalen Speicher deines Browsers, damit du sie dort erneut
|
||||
aufrufen oder den Verlauf löschen kannst. Die Einträge werden nicht an einen Server übertragen.
|
||||
Für den Offlinebetrieb speichert dein Browser außerdem die Anwendungsdateien im Cache. Beides
|
||||
kannst du über das Tool beziehungsweise die Browser-Einstellungen löschen.</p>
|
||||
Tracking-Technologien. Auf den Seiten dieses Angebots werden keine Informationen dauerhaft im
|
||||
Browser gespeichert.</p>
|
||||
|
||||
<h2>6. Schriftarten und Bilder</h2>
|
||||
<p>Die verwendeten Schriftarten werden von diesem Server ausgeliefert und sind lokal eingebunden.
|
||||
|
||||
54
site/gtin/datenschutz/index.html
Normal file
54
site/gtin/datenschutz/index.html
Normal file
@@ -0,0 +1,54 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Datenschutz</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="canonical" href="https://desfoto.de/gtin/datenschutz/" />
|
||||
<style>
|
||||
:root { color-scheme: light; font: 16px/1.65 system-ui, sans-serif; color: #202124; background: #fff; }
|
||||
body { box-sizing: border-box; max-width: 42rem; margin: 0 auto; padding: 2.5rem 1.25rem; }
|
||||
h1 { margin: 0 0 1.5rem; font-size: clamp(2rem, 7vw, 3rem); line-height: 1.1; }
|
||||
h2 { margin: 2rem 0 .5rem; font-size: 1.1rem; }
|
||||
p { margin: .5rem 0 1rem; }
|
||||
a { color: #174ea6; }
|
||||
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #ddd; }
|
||||
footer a + a { margin-left: 1rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>Datenschutz</h1>
|
||||
<p>Stand: September 2026</p>
|
||||
|
||||
<h2>Verantwortlicher</h2>
|
||||
<p>Denny Schulz Fotografie, Inhaber Denny Schulz<br />
|
||||
Flensburger Str. 16, 24537 Neumünster, Deutschland<br />
|
||||
<a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a></p>
|
||||
|
||||
<h2>Aufruf und Nutzung</h2>
|
||||
<p>Beim Aufruf verarbeitet der selbst betriebene Server deine IP-Adresse kurzzeitig, um die
|
||||
angeforderte Seite auszuliefern. Zugriffsprotokolle werden nicht gespeichert. Rechtsgrundlage
|
||||
ist Art. 6 Abs. 1 lit. f DSGVO (sicherer und funktionsfähiger Betrieb).</p>
|
||||
<p>Deine Eingaben und erzeugten GTINs werden ausschließlich in deinem Browser verarbeitet und
|
||||
nicht an einen Server übertragen. Der Browser speichert bis zu 20 Verlaufseinträge im
|
||||
lokalen Speicher und Anwendungsdateien für den Offlinebetrieb in der Cache API. Den Verlauf
|
||||
kannst du im Werkzeug löschen; den Offline-Cache kannst du in den Browser-Einstellungen
|
||||
entfernen. Es werden keine Cookies, Analyse- oder Trackingdienste eingesetzt und keine
|
||||
externen Inhalte geladen.</p>
|
||||
|
||||
<h2>Deine Rechte</h2>
|
||||
<p>Du hast im gesetzlichen Umfang das Recht auf Auskunft, Berichtigung, Löschung,
|
||||
Einschränkung der Verarbeitung, Widerspruch und Datenübertragbarkeit. Außerdem kannst du
|
||||
dich bei der zuständigen Datenschutzaufsicht beschweren: Unabhängiges Landeszentrum für
|
||||
Datenschutz Schleswig-Holstein, Holstenstraße 98, 24103 Kiel. Für Fragen oder zur Ausübung
|
||||
deiner Rechte erreichst du den Verantwortlichen unter
|
||||
<a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a>.</p>
|
||||
</main>
|
||||
<footer>
|
||||
<a href="/gtin/">Zum GTIN-Werkzeug</a>
|
||||
<a href="/gtin/impressum/">Impressum</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
43
site/gtin/impressum/index.html
Normal file
43
site/gtin/impressum/index.html
Normal file
@@ -0,0 +1,43 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Impressum</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="canonical" href="https://desfoto.de/gtin/impressum/" />
|
||||
<style>
|
||||
:root { color-scheme: light; font: 16px/1.65 system-ui, sans-serif; color: #202124; background: #fff; }
|
||||
body { box-sizing: border-box; max-width: 42rem; margin: 0 auto; padding: 2.5rem 1.25rem; }
|
||||
h1 { margin: 0 0 1.5rem; font-size: clamp(2rem, 7vw, 3rem); line-height: 1.1; }
|
||||
h2 { margin: 2rem 0 .5rem; font-size: 1.1rem; }
|
||||
p { margin: .5rem 0 1rem; }
|
||||
a { color: #174ea6; }
|
||||
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #ddd; }
|
||||
footer a + a { margin-left: 1rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>Impressum</h1>
|
||||
<p>Angaben gemäß § 5 DDG für das GTIN-Werkzeug.</p>
|
||||
|
||||
<h2>Anbieter</h2>
|
||||
<p><strong>Denny Schulz Fotografie</strong><br />
|
||||
Inhaber: Denny Schulz<br />
|
||||
Flensburger Str. 16<br />
|
||||
24537 Neumünster<br />
|
||||
Deutschland</p>
|
||||
|
||||
<h2>Kontakt</h2>
|
||||
<p>E-Mail: <a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a><br />
|
||||
Telefon: <a href="tel:+491754083133">+49 175 4083133</a></p>
|
||||
|
||||
<p>Wirtschafts-Identifikationsnummer: DE462149560</p>
|
||||
</main>
|
||||
<footer>
|
||||
<a href="/gtin/">Zum GTIN-Werkzeug</a>
|
||||
<a href="/gtin/datenschutz/">Datenschutz</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -85,11 +85,10 @@
|
||||
</p>
|
||||
<p class="fuss-datenschutz">
|
||||
Eingaben und Verlauf bleiben in deinem Browser.
|
||||
<a href="/datenschutz/">Datenschutz</a>
|
||||
</p>
|
||||
<nav class="fuss-rechtliches" aria-label="Rechtliche Informationen">
|
||||
<a href="/impressum/">Impressum</a>
|
||||
<a href="/datenschutz/">Datenschutz</a>
|
||||
<a href="/gtin/impressum/">Impressum</a>
|
||||
<a href="/gtin/datenschutz/">Datenschutz</a>
|
||||
</nav>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
@@ -85,8 +85,7 @@
|
||||
|
||||
<h2>Marke und Angebot</h2>
|
||||
<p><strong>desfoto</strong> ist der Markenauftritt von Denny Schulz Fotografie. Alle über diese
|
||||
Website erreichbaren Leistungen werden von Denny Schulz Fotografie erbracht. Das kostenlose
|
||||
GTIN-Tool ist ein browserbasiertes Zusatzwerkzeug desselben Anbieters.</p>
|
||||
Website erreichbaren Leistungen werden von Denny Schulz Fotografie erbracht.</p>
|
||||
|
||||
<h2>Urheberrecht und Bildrechte</h2>
|
||||
<p>Alle auf dieser Website gezeigten Fotografien und Filme sind urheberrechtlich geschützt.
|
||||
|
||||
54
src/gtin/datenschutz/index.html
Normal file
54
src/gtin/datenschutz/index.html
Normal file
@@ -0,0 +1,54 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Datenschutz</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="canonical" href="https://desfoto.de/gtin/datenschutz/" />
|
||||
<style>
|
||||
:root { color-scheme: light; font: 16px/1.65 system-ui, sans-serif; color: #202124; background: #fff; }
|
||||
body { box-sizing: border-box; max-width: 42rem; margin: 0 auto; padding: 2.5rem 1.25rem; }
|
||||
h1 { margin: 0 0 1.5rem; font-size: clamp(2rem, 7vw, 3rem); line-height: 1.1; }
|
||||
h2 { margin: 2rem 0 .5rem; font-size: 1.1rem; }
|
||||
p { margin: .5rem 0 1rem; }
|
||||
a { color: #174ea6; }
|
||||
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #ddd; }
|
||||
footer a + a { margin-left: 1rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>Datenschutz</h1>
|
||||
<p>Stand: September 2026</p>
|
||||
|
||||
<h2>Verantwortlicher</h2>
|
||||
<p>Denny Schulz Fotografie, Inhaber Denny Schulz<br />
|
||||
Flensburger Str. 16, 24537 Neumünster, Deutschland<br />
|
||||
<a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a></p>
|
||||
|
||||
<h2>Aufruf und Nutzung</h2>
|
||||
<p>Beim Aufruf verarbeitet der selbst betriebene Server deine IP-Adresse kurzzeitig, um die
|
||||
angeforderte Seite auszuliefern. Zugriffsprotokolle werden nicht gespeichert. Rechtsgrundlage
|
||||
ist Art. 6 Abs. 1 lit. f DSGVO (sicherer und funktionsfähiger Betrieb).</p>
|
||||
<p>Deine Eingaben und erzeugten GTINs werden ausschließlich in deinem Browser verarbeitet und
|
||||
nicht an einen Server übertragen. Der Browser speichert bis zu 20 Verlaufseinträge im
|
||||
lokalen Speicher und Anwendungsdateien für den Offlinebetrieb in der Cache API. Den Verlauf
|
||||
kannst du im Werkzeug löschen; den Offline-Cache kannst du in den Browser-Einstellungen
|
||||
entfernen. Es werden keine Cookies, Analyse- oder Trackingdienste eingesetzt und keine
|
||||
externen Inhalte geladen.</p>
|
||||
|
||||
<h2>Deine Rechte</h2>
|
||||
<p>Du hast im gesetzlichen Umfang das Recht auf Auskunft, Berichtigung, Löschung,
|
||||
Einschränkung der Verarbeitung, Widerspruch und Datenübertragbarkeit. Außerdem kannst du
|
||||
dich bei der zuständigen Datenschutzaufsicht beschweren: Unabhängiges Landeszentrum für
|
||||
Datenschutz Schleswig-Holstein, Holstenstraße 98, 24103 Kiel. Für Fragen oder zur Ausübung
|
||||
deiner Rechte erreichst du den Verantwortlichen unter
|
||||
<a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a>.</p>
|
||||
</main>
|
||||
<footer>
|
||||
<a href="/gtin/">Zum GTIN-Werkzeug</a>
|
||||
<a href="/gtin/impressum/">Impressum</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
43
src/gtin/impressum/index.html
Normal file
43
src/gtin/impressum/index.html
Normal file
@@ -0,0 +1,43 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Impressum</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="canonical" href="https://desfoto.de/gtin/impressum/" />
|
||||
<style>
|
||||
:root { color-scheme: light; font: 16px/1.65 system-ui, sans-serif; color: #202124; background: #fff; }
|
||||
body { box-sizing: border-box; max-width: 42rem; margin: 0 auto; padding: 2.5rem 1.25rem; }
|
||||
h1 { margin: 0 0 1.5rem; font-size: clamp(2rem, 7vw, 3rem); line-height: 1.1; }
|
||||
h2 { margin: 2rem 0 .5rem; font-size: 1.1rem; }
|
||||
p { margin: .5rem 0 1rem; }
|
||||
a { color: #174ea6; }
|
||||
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #ddd; }
|
||||
footer a + a { margin-left: 1rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>Impressum</h1>
|
||||
<p>Angaben gemäß § 5 DDG für das GTIN-Werkzeug.</p>
|
||||
|
||||
<h2>Anbieter</h2>
|
||||
<p><strong>Denny Schulz Fotografie</strong><br />
|
||||
Inhaber: Denny Schulz<br />
|
||||
Flensburger Str. 16<br />
|
||||
24537 Neumünster<br />
|
||||
Deutschland</p>
|
||||
|
||||
<h2>Kontakt</h2>
|
||||
<p>E-Mail: <a href="mailto:info@dennyschulz.de">info@dennyschulz.de</a><br />
|
||||
Telefon: <a href="tel:+491754083133">+49 175 4083133</a></p>
|
||||
|
||||
<p>Wirtschafts-Identifikationsnummer: DE462149560</p>
|
||||
</main>
|
||||
<footer>
|
||||
<a href="/gtin/">Zum GTIN-Werkzeug</a>
|
||||
<a href="/gtin/datenschutz/">Datenschutz</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -85,11 +85,10 @@
|
||||
</p>
|
||||
<p class="fuss-datenschutz">
|
||||
Eingaben und Verlauf bleiben in deinem Browser.
|
||||
<a href="/datenschutz/">Datenschutz</a>
|
||||
</p>
|
||||
<nav class="fuss-rechtliches" aria-label="Rechtliche Informationen">
|
||||
<a href="/impressum/">Impressum</a>
|
||||
<a href="/datenschutz/">Datenschutz</a>
|
||||
<a href="/gtin/impressum/">Impressum</a>
|
||||
<a href="/gtin/datenschutz/">Datenschutz</a>
|
||||
</nav>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
10
src/pages.py
10
src/pages.py
@@ -1749,8 +1749,7 @@ def impressum() -> str:
|
||||
|
||||
<h2>Marke und Angebot</h2>
|
||||
<p><strong>desfoto</strong> ist der Markenauftritt von {e(LEGAL['business'])}. Alle über diese
|
||||
Website erreichbaren Leistungen werden von {e(LEGAL['business'])} erbracht. Das kostenlose
|
||||
GTIN-Tool ist ein browserbasiertes Zusatzwerkzeug desselben Anbieters.</p>
|
||||
Website erreichbaren Leistungen werden von {e(LEGAL['business'])} erbracht.</p>
|
||||
|
||||
<h2>Urheberrecht und Bildrechte</h2>
|
||||
<p>Alle auf dieser Website gezeigten Fotografien und Filme sind urheberrechtlich geschützt.
|
||||
@@ -1830,11 +1829,8 @@ def datenschutz() -> str:
|
||||
|
||||
<h2>5. Cookies und lokale Speicherung</h2>
|
||||
<p>Diese Website setzt <strong>keine Cookies</strong> und verwendet keine Analyse-, Marketing- oder
|
||||
Tracking-Technologien. Das browserbasierte GTIN-Tool speichert die letzten bis zu 20
|
||||
Artikelnummern und erzeugten GTINs im lokalen Speicher deines Browsers, damit du sie dort erneut
|
||||
aufrufen oder den Verlauf löschen kannst. Die Einträge werden nicht an einen Server übertragen.
|
||||
Für den Offlinebetrieb speichert dein Browser außerdem die Anwendungsdateien im Cache. Beides
|
||||
kannst du über das Tool beziehungsweise die Browser-Einstellungen löschen.</p>
|
||||
Tracking-Technologien. Auf den Seiten dieses Angebots werden keine Informationen dauerhaft im
|
||||
Browser gespeichert.</p>
|
||||
|
||||
<h2>6. Schriftarten und Bilder</h2>
|
||||
<p>Die verwendeten Schriftarten werden von diesem Server ausgeliefert und sind lokal eingebunden.
|
||||
|
||||
@@ -28,6 +28,8 @@ from content import CONTACT, LEGAL, SITE as META # noqa: E402
|
||||
ROUTE_PATHS = [route[0] for route in pages.ROUTES]
|
||||
HTML_FILES = [SITE / route[1] for route in pages.ROUTES] + [SITE / "404.html"]
|
||||
GTIN_HTML = SITE / "gtin" / "index.html"
|
||||
GTIN_IMPRESSUM = SITE / "gtin" / "impressum" / "index.html"
|
||||
GTIN_DATENSCHUTZ = SITE / "gtin" / "datenschutz" / "index.html"
|
||||
|
||||
|
||||
def read(path: Path) -> str:
|
||||
@@ -49,7 +51,12 @@ class BuildLayout(unittest.TestCase):
|
||||
self.assertTrue((SITE / rel).is_file(), f"missing {rel}")
|
||||
|
||||
def test_no_stray_html_files(self):
|
||||
expected = {route[1] for route in pages.ROUTES} | {"404.html", "gtin/index.html"}
|
||||
expected = {route[1] for route in pages.ROUTES} | {
|
||||
"404.html",
|
||||
"gtin/index.html",
|
||||
"gtin/impressum/index.html",
|
||||
"gtin/datenschutz/index.html",
|
||||
}
|
||||
actual = {str(f.relative_to(SITE)) for f in SITE.rglob("*.html")}
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
@@ -215,9 +222,6 @@ class PrivacyAndLegal(unittest.TestCase):
|
||||
for needle in (
|
||||
"keine Zugriffsprotokolle",
|
||||
"keine Cookies",
|
||||
"GTIN-Tool",
|
||||
"bis zu 20",
|
||||
"nicht an einen Server übertragen",
|
||||
"youtube-nocookie.com",
|
||||
"Art. 6 Abs. 1 lit. f DSGVO",
|
||||
LEGAL["authority"],
|
||||
@@ -323,13 +327,52 @@ class Content(unittest.TestCase):
|
||||
self.assertIn("GTIN Generator", text)
|
||||
self.assertIn('<link rel="canonical" href="https://desfoto.de/gtin/" />', text)
|
||||
self.assertIn('<meta name="robots" content="noindex, nofollow" />', text)
|
||||
self.assertIn('href="/impressum/"', text)
|
||||
self.assertIn('href="/datenschutz/"', text)
|
||||
self.assertIn('href="/gtin/impressum/"', text)
|
||||
self.assertIn('href="/gtin/datenschutz/"', text)
|
||||
self.assertEqual(len(re.findall(r'<a href="/gtin/datenschutz/">', text)), 1)
|
||||
self.assertNotIn('href="/impressum/"', text)
|
||||
self.assertNotIn('href="/datenschutz/"', text)
|
||||
self.assertNotIn('href="/"', text)
|
||||
self.assertNotIn("/gtin/", read(SITE / "sitemap.xml"))
|
||||
for file in HTML_FILES:
|
||||
with self.subTest(file=str(file.relative_to(SITE))):
|
||||
self.assertNotIn("/gtin", read(file))
|
||||
self.assertNotIn("GTIN", read(file))
|
||||
|
||||
def test_gtin_legal_pages_are_standalone_and_unlisted(self):
|
||||
impressum = read(GTIN_IMPRESSUM)
|
||||
datenschutz = read(GTIN_DATENSCHUTZ)
|
||||
for path, text in (
|
||||
("/gtin/impressum/", impressum),
|
||||
("/gtin/datenschutz/", datenschutz),
|
||||
):
|
||||
with self.subTest(path=path):
|
||||
self.assertIn(f'<link rel="canonical" href="https://desfoto.de{path}" />', text)
|
||||
self.assertIn('<meta name="robots" content="noindex, nofollow" />', text)
|
||||
self.assertNotIn('href="/impressum/"', text)
|
||||
self.assertNotIn('href="/datenschutz/"', text)
|
||||
self.assertNotIn('href="/"', text)
|
||||
self.assertNotIn("assets/", text)
|
||||
for value in (
|
||||
LEGAL["business"], LEGAL["owner"], LEGAL["street"], LEGAL["city"],
|
||||
CONTACT["email"], CONTACT["phone"], "§ 5 DDG", LEGAL["w_id"],
|
||||
):
|
||||
with self.subTest(impressum=value):
|
||||
self.assertIn(value, visible_text(impressum))
|
||||
for value in (
|
||||
LEGAL["owner"], CONTACT["email"], "bis zu 20", "Cache API",
|
||||
"nicht an einen Server übertragen", "keine Cookies", "Art. 6 Abs. 1 lit. f DSGVO",
|
||||
LEGAL["authority"],
|
||||
):
|
||||
with self.subTest(datenschutz=value):
|
||||
self.assertIn(value, visible_text(datenschutz))
|
||||
self.assertIn('href="/gtin/datenschutz/"', impressum)
|
||||
self.assertIn('href="/gtin/impressum/"', datenschutz)
|
||||
|
||||
def test_main_legal_pages_do_not_name_the_gtin_tool(self):
|
||||
for path in (SITE / "impressum" / "index.html", SITE / "datenschutz" / "index.html"):
|
||||
with self.subTest(path=str(path.relative_to(SITE))):
|
||||
self.assertNotIn("GTIN", visible_text(read(path)))
|
||||
|
||||
def test_gtin_assets_and_local_data_storage_are_scoped(self):
|
||||
html_text = read(GTIN_HTML)
|
||||
|
||||
Reference in New Issue
Block a user