HexaWetter v1.2.0: Security, Admin, Radar, UI

This commit is contained in:
TheOnlyMace
2026-06-18 23:59:08 +02:00
parent 7ba9687619
commit 3589f7fdcf
72 changed files with 695 additions and 409 deletions

View File

@@ -2,6 +2,13 @@
HexaWetter ist ein vollständiges Self-Hosting-Wetterportal mit Forecast, DWD-Beobachtungen, interaktiver Radar-Karte (WMS + Zeitleiste), Warnungen, Geocoding und lokalem Radar-Rendering.
## Repository
```bash
git clone ssh://git@git.hexahost.dev:8006/smueller/HexaWetter.git
cd HexaWetter
```
## Features
- **Dashboard**: Aktuelles Wetter, DWD-Station, 48h-Stundenansicht, 7-Tage-Forecast
@@ -16,7 +23,7 @@ HexaWetter ist ein vollständiges Self-Hosting-Wetterportal mit Forecast, DWD-Be
```bash
pip install bcrypt
python scripts/hash_admin_password.py 'dein-sicheres-passwort'
python scripts/setup_secrets.py 'dein-sicheres-passwort'
```
Die ausgegebenen Werte in `.env` eintragen, dann Stack neu starten.
@@ -24,11 +31,14 @@ Die ausgegebenen Werte in `.env` eintragen, dann Stack neu starten.
Admin-UI: `http://localhost:8080/admin.html`
Sicherheit:
- **API-Key** (`API_KEY`) für alle `/api/*`-Endpunkte (Nginx setzt den Header automatisch)
- bcrypt-Passwort-Hash (niemals Klartext in `.env` committen)
- JWT mit `ADMIN_JWT_SECRET` (min. 32 Zeichen)
- Rate-Limiting auf Login (5 Versuche / 5 Min.)
- Token nur in `sessionStorage` (nicht localStorage)
- Security-Headers auf allen API-Antworten
- API-Port nur auf `127.0.0.1` gebunden (kein direkter externer Zugriff)
- Schreibende Endpunkte (Radar-Sync, Cache leeren, Einstellungen) nur im Admin-Bereich
```bash
@@ -36,7 +46,7 @@ cp .env.example .env
docker compose up -d --build
```
Web-UI: `http://localhost:8080` · API: `http://localhost:8081/api/health`
Web-UI: `http://localhost:8080` · API (lokal): `http://127.0.0.1:8081/api/health`
## Architektur
@@ -59,7 +69,8 @@ Web-UI: `http://localhost:8080` · API: `http://localhost:8081/api/health`
| `GET /api/warnings` | DWD-Warnungen (standortbezogen) |
| `GET /api/geocode/search` | Ortssuche |
| `GET /api/radar/wms/times` | WMS-Zeitschritte für Animation |
| `GET /api/radar/rendered` | Lokal gerenderte Radar-Frames |
| `GET /api/admin/radar/files` | Lokale Radar-Rohdaten (Admin) |
| `GET /api/admin/radar/rendered` | Gerenderte Radar-Frames (Admin) |
## Selfhosted Forecast (optional)