From 7b455cd43149834ccd2163b4e5d197809bd34a37 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sun, 9 Aug 2026 08:33:37 +0200 Subject: Add a public web front end alongside the CLI Extracts the CLI pipeline into a reusable Pipeline class and exposes it via a dependency-free JDK HttpServer (upload form, bounded worker pool with 503 on overload, per-request size/time limits, no persisted uploads), plus nginx/systemd deploy templates and Impressum/Datenschutz placeholders for public operation. Change-Id: I6e8e7afa3c4b1082cdf9e82da0fae0b5b49470ad --- .../eu/mulk/aendggner/web/datenschutz.html | 41 ++++++++ .../resources/eu/mulk/aendggner/web/impressum.html | 26 +++++ .../resources/eu/mulk/aendggner/web/index.html | 62 +++++++++++ src/main/resources/eu/mulk/aendggner/web/style.css | 114 +++++++++++++++++++++ 4 files changed, 243 insertions(+) create mode 100644 src/main/resources/eu/mulk/aendggner/web/datenschutz.html create mode 100644 src/main/resources/eu/mulk/aendggner/web/impressum.html create mode 100644 src/main/resources/eu/mulk/aendggner/web/index.html create mode 100644 src/main/resources/eu/mulk/aendggner/web/style.css (limited to 'src/main/resources') diff --git a/src/main/resources/eu/mulk/aendggner/web/datenschutz.html b/src/main/resources/eu/mulk/aendggner/web/datenschutz.html new file mode 100644 index 0000000..65ec0c9 --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/web/datenschutz.html @@ -0,0 +1,41 @@ + + + + + + Datenschutz — ÄndGgner + + + +
+

Datenschutzerklärung

+

+ TODO vor dem Livegang: Bitte prüfen und um die für diesen konkreten Server + zutreffenden Angaben ergänzen (Betreiber, Kontakt, tatsächliche Speicherdauer der + Zugriffslogs, Hosting-Anbieter). +

+ +

Hochgeladene Dateien

+

+ Stammgesetz und Änderungsgesetz(e) werden ausschließlich im Arbeitsspeicher bzw. in + temporären Dateien verarbeitet, um die Synopse zu erzeugen. Nach Auslieferung der Antwort + werden diese temporären Dateien sofort gelöscht. Es findet keine dauerhafte Speicherung des + Inhalts statt. +

+ +

Zugriffsprotokolle

+

+ Wie bei jedem Webserver werden beim Aufruf technische Zugriffsdaten (u. a. IP-Adresse, + Zeitpunkt, aufgerufene Adresse) für einen begrenzten Zeitraum zur Absicherung des Betriebs + protokolliert. +

+ +

Keine Cookies, keine Konten, kein Tracking

+

+ Dieser Dienst verwendet keine Cookies, erfordert keine Registrierung und bindet keine + Analyse- oder Tracking-Dienste Dritter ein. +

+
+ + + diff --git a/src/main/resources/eu/mulk/aendggner/web/impressum.html b/src/main/resources/eu/mulk/aendggner/web/impressum.html new file mode 100644 index 0000000..303db8e --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/web/impressum.html @@ -0,0 +1,26 @@ + + + + + + Impressum — ÄndGgner + + + +
+

Impressum

+

+ TODO vor dem Livegang: Diese Seite muss durch die nach § 5 DDG + (Digitale-Dienste-Gesetz, vormals § 5 TMG) vorgeschriebenen Angaben ersetzt werden, bevor + dieser Dienst öffentlich betrieben wird. +

+
+ [Name]
+ [Straße, Hausnummer]
+ [PLZ, Ort]
+ [E-Mail-Adresse] +
+
+ + + diff --git a/src/main/resources/eu/mulk/aendggner/web/index.html b/src/main/resources/eu/mulk/aendggner/web/index.html new file mode 100644 index 0000000..ec2511a --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/web/index.html @@ -0,0 +1,62 @@ + + + + + + ÄndGgner — Änderungsgesetze konsolidieren + + + +
+

ÄndGgner

+

+ Änderungsgesetze automatisch auf ein Stammgesetz anwenden und als Synopse darstellen. +

+
+ +
+
+
+ + +

+ gii-Norm-XML von gesetze-im-internet.de, oder — für bayerisches Landesrecht — die + konsolidierte Fassung von gesetze-bayern.de (PDF oder Klartext). +

+
+ +
+ + +

+ Ein oder mehrere BGBl-PDFs oder Klartextdateien. Werden bei Mehrfachauswahl in der + gewählten Reihenfolge nacheinander angewendet. +

+
+ +
+ +
+ + +
+ +

+ Die Synopse wird automatisch erstellt und ist ohne Gewähr für Vollständigkeit + und Richtigkeit; sie ersetzt keine Rechtsberatung. Uneindeutige Änderungsbefehle werden zur + manuellen Prüfung markiert statt stillschweigend verworfen. Hochgeladene Dateien werden + ausschließlich zur Erzeugung der Synopse verarbeitet und danach sofort wieder gelöscht — es + findet keine dauerhafte Speicherung statt. Bitte nur Rechtstexte hochladen. +

+
+ + + + diff --git a/src/main/resources/eu/mulk/aendggner/web/style.css b/src/main/resources/eu/mulk/aendggner/web/style.css new file mode 100644 index 0000000..6e2ec70 --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/web/style.css @@ -0,0 +1,114 @@ +:root { + color-scheme: light dark; + --fg: #1b1b1b; + --bg: #fdfdfb; + --muted: #5a5a54; + --accent: #6b4423; + --border: #d8d3c4; +} + +@media (prefers-color-scheme: dark) { + :root { + --fg: #e8e6df; + --bg: #1c1b18; + --muted: #a6a296; + --accent: #c99a6c; + --border: #3a382f; + } +} + +* { + box-sizing: border-box; +} + +body { + margin: 0 auto; + padding: 2rem 1.25rem 3rem; + max-width: 40rem; + font-family: "Georgia", "Times New Roman", serif; + color: var(--fg); + background: var(--bg); + line-height: 1.5; +} + +header { + margin-bottom: 2rem; +} + +h1 { + margin: 0 0 0.25rem; + font-size: 1.75rem; +} + +.tagline { + color: var(--muted); + margin: 0; +} + +.field { + margin-bottom: 1.25rem; +} + +label { + display: block; + font-weight: bold; + margin-bottom: 0.35rem; +} + +.field.checkbox label { + font-weight: normal; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.hint { + margin: 0.35rem 0 0; + font-size: 0.875rem; + color: var(--muted); +} + +input[type="file"] { + width: 100%; + padding: 0.4rem; + border: 1px solid var(--border); + border-radius: 4px; + background: transparent; + color: inherit; +} + +button { + font: inherit; + font-weight: bold; + padding: 0.6rem 1.5rem; + border: 1px solid var(--accent); + border-radius: 4px; + background: var(--accent); + color: var(--bg); + cursor: pointer; +} + +button:hover { + filter: brightness(1.1); +} + +.disclaimer { + margin-top: 2rem; + padding: 1rem; + border: 1px solid var(--border); + border-radius: 6px; + font-size: 0.875rem; + color: var(--muted); +} + +footer { + margin-top: 2.5rem; + padding-top: 1rem; + border-top: 1px solid var(--border); + font-size: 0.875rem; + color: var(--muted); +} + +footer a { + color: var(--accent); +} -- cgit v1.2.1