# 🌐 Web-Version (MVP) Diese Variante stellt den PDF-zu-ICS-Konverter im Browser bereit, damit die Nutzung auch auf mobilen GerĂ€ten möglich ist. ## Starten ### Linux/macOS ```bash ./start_web.sh ``` ### Windows Doppelklick auf `start_web.cmd` Danach im Browser öffnen: - Lokal: `http://localhost:8000` - Im Netzwerk (z. B. Smartphone): `http://:8000` ## Funktionen - PDF-Datei hochladen - Optional Ruhetage ausschließen - Optional Urlaub ausschließen - ICS-Datei direkt herunterladen ## Hinweise fĂŒr mobile Nutzung - Smartphone und Server mĂŒssen im gleichen Netzwerk sein (lokaler Betrieb) - Bei Internet-Betrieb sollte HTTPS und ein Reverse Proxy (z. B. Nginx) genutzt werden - Hochgeladene Dateien werden nur temporĂ€r verarbeitet ## Technischer Aufbau - `web/app.py` – FastAPI-Backend + Upload/Download-Endpunkte - `web/templates/index.html` – mobile Web-OberflĂ€che - `web/requirements-web.txt` – Web-spezifische AbhĂ€ngigkeiten ## Produktion (Kurz) Beispiel mit Uvicorn direkt: ```bash .venv/bin/python -m uvicorn web.app:app --host 0.0.0.0 --port 8000 ``` Optional mit App-Auth (zusĂ€tzliche Schutzschicht): ```bash WEB_AUTH_USER=kalender WEB_AUTH_PASSWORD='StarkesPasswort' \ .venv/bin/python -m uvicorn web.app:app --host 0.0.0.0 --port 8000 ``` Empfohlen fĂŒr Internet-Betrieb: - Uvicorn hinter Nginx - HTTPS aktivieren - Upload-GrĂ¶ĂŸenlimit setzen - Zugriff absichern (z. B. Basic Auth oder Login) ## App-Auth (optional, zusĂ€tzlich zu Nginx) Wenn `WEB_AUTH_USER` und `WEB_AUTH_PASSWORD` gesetzt sind, schĂŒtzt die App alle Endpunkte per HTTP Basic Auth. Linux/macOS Beispiel: ```bash export WEB_AUTH_USER=kalender export WEB_AUTH_PASSWORD='StarkesPasswort' ./start_web.sh ``` Windows (PowerShell) Beispiel: ```powershell $env:WEB_AUTH_USER='kalender' $env:WEB_AUTH_PASSWORD='StarkesPasswort' ./start_web.cmd ``` Hinweis: FĂŒr öffentlich erreichbare Server weiterhin Nginx + HTTPS verwenden. ## Öffentliches Deployment (HTTPS) Beispiel fĂŒr Ubuntu-Server mit Domain `ics.example.de`. ### 1) App als Service starten `/etc/systemd/system/pdf-to-ics-web.service` ```ini [Unit] Description=PDF to ICS Web After=network.target [Service] User=www-data WorkingDirectory=/opt/pdf_to_ics ExecStart=/opt/pdf_to_ics/.venv/bin/python -m uvicorn web.app:app --host 127.0.0.1 --port 8000 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target ``` Aktivieren: ```bash sudo systemctl daemon-reload sudo systemctl enable --now pdf-to-ics-web sudo systemctl status pdf-to-ics-web ``` ### 2) Nginx als Reverse Proxy `/etc/nginx/sites-available/pdf-to-ics` ```nginx server { listen 80; server_name ics.example.de; client_max_body_size 10M; auth_basic "Geschuetzter Bereich"; auth_basic_user_file /etc/nginx/.htpasswd-pdf-to-ics; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Aktivieren: ```bash sudo ln -s /etc/nginx/sites-available/pdf-to-ics /etc/nginx/sites-enabled/pdf-to-ics sudo nginx -t sudo systemctl reload nginx ``` ### 2b) Basic Auth einrichten (empfohlen) ```bash sudo apt-get update sudo apt-get install -y apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd-pdf-to-ics kalender sudo nginx -t sudo systemctl reload nginx ``` Weitere Nutzer hinzufĂŒgen (ohne `-c`): ```bash sudo htpasswd /etc/nginx/.htpasswd-pdf-to-ics weiterer_user ``` Schnelltest: ```bash curl -I https://ics.example.de ``` Erwartung: zuerst `401 Unauthorized`, mit Login im Browser dann Zugriff. ### 2c) IP-Whitelist (optional, zusĂ€tzlich) Wenn nur bestimmte Netze zugreifen sollen, kann Nginx den Zugriff auf IP-Bereiche begrenzen. Beispiel (lokales Netz + einzelne feste IP): ```nginx location / { allow 192.168.178.0/24; allow 203.0.113.10; deny all; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ``` Danach prĂŒfen und neu laden: ```bash sudo nginx -t sudo systemctl reload nginx ``` Kombiniert mit Basic Auth ist das eine robuste Mindestabsicherung. ### 3) HTTPS mit Let's Encrypt ```bash sudo apt-get update sudo apt-get install -y certbot python3-certbot-nginx sudo certbot --nginx -d ics.example.de ``` Test der Erneuerung: ```bash sudo certbot renew --dry-run ``` ### 4) Mindest-Sicherheit - Zugriffe absichern (mindestens Basic Auth) - Optional zusĂ€tzlich per IP-Whitelist einschrĂ€nken - Upload-Limit klein halten (`client_max_body_size`) - Server und Pakete regelmĂ€ĂŸig aktualisieren