Webbasiertes Tool zur Verwaltung von PDF-Druckfreigaben. Sachbearbeiter laden PDFs hoch, Kunden prüfen und geben frei per personalisiertem Deep-Link – ohne Kunden-Login.
- Multi-PDF-Upload mit Drag & Drop (akkumulierend, einzeln entfernbar)
- Einzelfreigabe pro Datei bei Multi-PDF-Jobs
- Versionshistorie mit aufklappbarer Dateiansicht (V1, V2, V3…)
- Eigene Seite für neue Versionen (vorausgefüllte Daten, Kommentare änderbar)
- Optionaler Passwortschutz für Freigabe-Links
- Option "Keine E-Mail senden" (Link manuell teilen)
- Fälligkeitsdatum (wird Kunde angezeigt, Dashboard-Farbcodierung)
- Wiedervorlage mit Datum und Notiz
- Freigabeprotokoll als PDF (Download + Mail-Versand)
- Ampel-Status, Filter, Volltextsuche
- Auto-Refresh (30s, pausiert bei Tab-Hintergrund / Bulk-Auswahl)
- Fällig-Spalte mit Farbcodierung (überfällig / dringend / bald)
- Info-Spalte: Notiz, Privat, Passwort, Keine-Mail, Datei-Fortschritt, Wiedervorlage
- Bulk-Aktionen (Löschen, Mail erneut senden)
- CSV-Export, Statistiken mit Chart.js
- Keyboard-Shortcuts (N, D, /)
- Flexibles Event-basiertes Vorlagen-System
- 6 Events: Freigabe erstellt, erteilt, abgelehnt, Kundenbestätigung, Erinnerung, Neue Version
- Mehrere Vorlagen pro Event möglich (alle werden versendet)
- Eigene Vorlagen erstellen/löschen, System-Vorlagen bearbeiten/deaktivieren
- Drag & Drop Platzhalter-Leiste im Editor mit Live-Vorschau
- Automatisches Mahnwesen (Cronjob)
- SMTP im Tool konfigurierbar (Testmail-Funktion)
- Datenschutz-Link automatisch in allen Mails
- Kunden, Ansprechpartner, Sachbearbeiter (CRUD)
- Firmenlogo-Upload (Kundenseite + Protokoll-PDF)
- Firmenfarben konfigurierbar (Kundenseite)
- Datenschutzerklärung + Impressum (HTML-Editor mit Vorschau, vorformulierte Texte)
- Backup & Restore (ein .tar.gz mit DB + PDFs + Logo)
- Webhooks (GET/POST, HMAC-SHA256, Events wählbar)
- In-App-Benachrichtigungen
- Audit-Log mit Suche
- Systeminfo-Seite
- Übersichtliche Freigabeseite ohne Login
- PDF-Vorschau im Browser + Download pro Datei
- Fälligkeitsdatum sichtbar
- Firmenlogo + Firmenfarben
- Kommentarfeld bei Freigabe/Ablehnung
- Bestätigungsmail nach Entscheidung
- Footer mit Impressum + Datenschutz
- Debian 12+ oder Ubuntu 22.04+ (andere Linux-Distributionen möglich)
- Internetzugang bei der Installation (für Node.js, npm, Fonts)
- Empfohlen: Reverse Proxy (Caddy oder nginx) für HTTPS
wget https://github.com/ipod86/PDF-Freigabe/archive/refs/heads/master.tar.gz -O pdf-freigabe.tar.gz && tar -xzf pdf-freigabe.tar.gz && sudo bash PDF-Freigabe-master/setup.sh && rm -rf PDF-Freigabe-master pdf-freigabe.tar.gztar -xzf pdf-freigabe.tar.gz
cd pdf-freigabe
chmod +x setup.sh download-assets.sh
sudo ./setup.shDas Script erkennt automatisch ob eine bestehende Installation vorhanden ist und fragt ob Update oder Neuinstallation.
Die App wird automatisch nach /opt/pdf-freigabe installiert (der Service-Benutzer braucht Zugriff — Home-Verzeichnisse wie /root sind nicht geeignet).
Es installiert automatisch:
- Node.js 22 LTS (über NodeSource)
- npm-Abhängigkeiten
- Lokale Fonts und Chart.js (DSGVO-konform)
- systemd-Service mit Auto-Start und Security-Hardening
- Datenbank mit Testdaten
| Passwort | Rolle | |
|---|---|---|
| max@firma.de | test1234 | Admin |
| lisa@firma.de | test1234 | Benutzer |
| tom@firma.de | test1234 | Benutzer |
- Einloggen als Admin
- Verwaltung → Einstellungen: Firmenname, Logo, SMTP, Base-URL setzen
- Verwaltung → Einstellungen: Datenschutzerklärung und Impressum anpassen (Platzhalter ersetzen)
- Verwaltung → Sachbearbeiter: Eigene Benutzer anlegen, Testbenutzer entfernen
- Verwaltung → Kunden: Kundenstamm anlegen
systemctl status pdf-freigabe # Status
systemctl restart pdf-freigabe # Neustart
systemctl stop pdf-freigabe # Stoppen
journalctl -u pdf-freigabe -f # Live-Logscd ~
tar -xzf pdf-freigabe.tar.gz
cd pdf-freigabe
sudo ./setup.sh
# → "1) Update (Daten behalten)" wählenDas Update kopiert die neuen Dateien nach /opt/pdf-freigabe, sichert automatisch Datenbank, PDFs, Logo, .env und Backups, installiert die neue Version, stellt die Daten wieder her und führt Datenbank-Migrationen aus.
Alternativ ohne Nachfrage: sudo ./setup.sh --update
apt install caddyIn /etc/caddy/Caddyfile:
freigabe.meinefirma.de {
reverse_proxy localhost:3000
}
Caddy holt automatisch ein Let's-Encrypt-Zertifikat. Danach in den Einstellungen die Base-URL setzen: https://freigabe.meinefirma.de
Das Tool funktioniert gleichzeitig im LAN per HTTP und extern per HTTPS — Session-Cookies passen sich automatisch an (secure: auto).
Über die Web-Oberfläche: Verwaltung → Backup
Manuell:
# Backup
tar -czf backup-$(date +%Y%m%d).tar.gz data/ uploads/ public/uploads/logo/ .env
# Restore
systemctl stop pdf-freigabe
tar -xzf backup-DATUM.tar.gz
systemctl start pdf-freigabe- Passwort-Hashing mit bcrypt (12 Rounds)
- Passwort-Policy: min. 8 Zeichen, Buchstaben + Zahlen
- Login Rate-Limiting (10 Versuche / 15 Min)
- Session Fixation Protection
- Constant-Time Passwort-Prüfung (verhindert User-Enumeration)
- 8h Session-Timeout
- Token in Session, per Cookie an JS übermittelt
- Formulare: Hidden-Field
_csrf - AJAX: Header
X-CSRF-Token - Multipart-Uploads: geschützt durch SameSite-Cookie
- Content Security Policy (CSP)
- X-Content-Type-Options: nosniff
- X-Frame-Options (Clickjacking-Schutz)
- HSTS wird vom Reverse Proxy gesetzt
- PDF Magic Bytes Validierung (
%PDF-Header) - MIME-Type Filter
- Upload-Limit: 50 MB
- Dateinamen als UUID gespeichert (kein Path Traversal)
- Dedizierter Service-Benutzer
pdf-freigabeohne Shell-Zugang (/usr/sbin/nologin) - Code-Verzeichnis: root besitzt (read-only für App), Datenverzeichnisse: Service-User besitzt
.envnur für root + Service-User lesbar (chmod 640)- SQL-Injection: ausschließlich Prepared Statements
- LIKE-Injection:
escapeLike()auf allen Suchfeldern - Rate-Limiting auf Login, Freigabeseite und API
- Kein Debug-Output in Produktion
- systemd: NoNewPrivileges, PrivateTmp, ProtectSystem, ProtectHome, ProtectKernelTunables
- Keine IP-Adressen gespeichert
- Keine User-Agents gespeichert
- Keine externen CDN-Requests (Fonts, JS lokal gehostet)
- Nur technisch notwendige Cookies (sid, csrf-token)
- Kein Tracking, keine Analytics, keine Drittanbieter
- Konfigurierbare Datenschutzerklärung + Impressum
- Datenschutz-Link automatisch in allen E-Mails
- Backup/Export aller Daten möglich
- Audit-Log löschbar
| Komponente | Technologie | Version |
|---|---|---|
| Runtime | Node.js LTS | 22.x |
| Framework | Express | 5.x |
| Datenbank | SQLite | better-sqlite3 |
| Templates | EJS | 3.x |
| PDF-Erstellung | PDFKit | 0.16.x |
| Security Headers | Helmet | 8.x |
| Passwort-Hashing | bcryptjs | 2.x |
| Schriftarten | DM Sans + JetBrains Mono | lokal (WOFF2) |
| Charts | Chart.js | 4.x (lokal) |
pdf-freigabe/
├── server.js # Express-Server (Security-Config)
├── database.js # SQLite-Schema + Migrationen
├── security.js # PDF-Validierung, Passwort-Policy, Input-Sanitierung
├── mailer.js # SMTP + Event-basierter Mail-Versand
├── protocol.js # Freigabeprotokoll PDF-Generator
├── notifications.js # In-App-Benachrichtigungen
├── seed.js # Testdaten
├── setup.sh # Installations- & Update-Script
├── download-assets.sh # Fonts + Chart.js lokal herunterladen
├── routes/
│ ├── auth.js # Login/Logout/Profil
│ ├── dashboard.js # Übersicht
│ ├── jobs.js # Freigaben CRUD + Versionen
│ ├── approve.js # Öffentliche Kundenseite
│ ├── admin.js # Verwaltung (Benutzer, Kunden, Vorlagen, Settings)
│ ├── api.js # AJAX-Endpunkte
│ └── webhooks.js # Externe Webhooks
├── middleware/
│ └── auth.js # requireLogin, requireAdmin
├── cron/
│ └── reminders.js # Automatische Erinnerungen
├── views/ # 27 EJS-Templates
├── public/
│ ├── css/
│ │ ├── style.css # Haupt-Stylesheet
│ │ ├── approve.css # Kunden-Freigabeseite
│ │ └── fonts.css # Lokale @font-face
│ ├── js/app.js # Client-JS
│ ├── fonts/ # WOFF2-Schriftarten
│ └── vendor/ # Chart.js
├── data/ # SQLite-Datenbank + Sessions
├── uploads/ # Hochgeladene PDFs
└── backups/ # Backup-Archive
Empfohlen: einmal jährlich (z.B. Januar) prüfen:
node -v— Node.js Version noch im LTS-Support?npm audit— Sicherheitslücken in Abhängigkeiten?- Node.js 22 EOL: April 2027 → dann auf Node 24 wechseln
Bei Security-Warnungen: npm audit fix und systemctl restart pdf-freigabe
Intern entwickelt. Alle Rechte vorbehalten.