Dateien
AegisSight-Globe/CLAUDE.md
Claude Dev af08fa6b4d Auth: Nur noch Magic Link, Code-Verifizierung entfernt
- /api/auth/verify-code Endpoint entfernt
- generate_magic_code() entfernt
- E-Mail: Nur noch Anmelde-Link, kein 6-stelliger Code
- Login-Seite: Zeigt nach E-Mail-Eingabe Hinweis statt Code-Feld
- Magic Link Token-Verifikation via URL bleibt bestehen
2026-03-25 00:01:21 +01:00

5.0 KiB

AegisSight Globe — Entwicklungsdokumentation

Projektueberblick

Eigenstaendige GEOINT-Anwendung (Geospatial Intelligence) auf globe.aegis-sight.de. CesiumJS 3D-Globus mit Echtzeit-Datenfusion aus oeffentlichen Quellen. Inspiriert vom WorldView/God's Eye Konzept, komplett eigenentwickelt.

Server & Deployment

  • Server: 178.104.43.177 (Monitor-Server, 8GB RAM, Ubuntu 22.04)
  • Port: 8890
  • URL: https://globe.aegis-sight.de
  • Service: systemd globe.service (auto-start, Memory-Limit 1GB)
  • Venv: ~/.venvs/globe/ (Python 3.10)
  • Verzeichnis: ~/AegisSight-Globe/
  • Nginx: /etc/nginx/sites-enabled/globe.aegis-sight.de (SSL via Certbot)
  • Git: Gitea gitea-undso.aegis-sight.de/AegisSight/AegisSight-Globe

Tech-Stack

  • Backend: FastAPI + uvicorn
  • Frontend: CesiumJS (CDN v1.125), Vanilla JS, kein Build-Step
  • Datenbank: Geteilte SQLite /mnt/gitea/osint-data/osint.db (mit Monitor)
  • Auth: Magic Link Login (JWT, gleicher JWT_SECRET wie Monitor)

Datenquellen & Layer

Layer Quelle API Refresh Menge
Flugverkehr adsb.lol /v2/point/30/0/10000 15s ~10.800
adsb.one (Fallback) /v2/point/30/0/10000 - ~7.000
Schiffsverkehr AISStream.io WebSocket wss://stream.aisstream.io Echtzeit ~15.000+
Erdbeben USGS earthquake.usgs.gov GeoJSON 5min ~50/Tag
Katastrophen NASA EONET eonet.gsfc.nasa.gov/api/v3 10min ~30-80 aktiv
Nachrichten GDELT api.gdeltproject.org/v2/geo 10min ~200
Satelliten CelesTrak celestrak.org TLE JSON 1h ~500
Regenradar RainViewer api.rainviewer.com 5min Radar-Overlay
Monitor OSINT AegisSight Monitor monitor.aegis-sight.de/api/public 2min variabel

Satellitenbilder (Imagery Switcher)

Quelle URL-Template Lizenz
Cesium Ion (Default via Ion Token) Free-Tier / Commercial
Esri World Imagery server.arcgisonline.com/.../tile/{z}/{y}/{x} Frei fuer Display
Sentinel-2 2018-2024 tiles.maps.eox.at/wmts/.../s2cloudless-{YEAR} CC-BY (ESA Copernicus)
OpenTopoMap tile.opentopomap.org/{z}/{x}/{y}.png ODbL
OpenStreetMap a.tile.openstreetmap.org/{z}/{x}/{y}.png ODbL

API-Keys & Credentials

Alle in ~/AegisSight-Globe/.env (nicht in Git):

  • AISSTREAM_KEY — AISStream.io WebSocket API
  • CESIUM_ION_TOKEN — Cesium Ion (Free-Tier, Commercial noetig fuer Vertrieb)
  • JWT_SECRET — Gleicher wie Monitor
  • SMTP_* — E-Mail-Versand fuer Magic Link
  • MONITOR_API_KEY — Public API Key des Monitors
  • DISASTER_INCIDENT_ID=45 — Naturkatastrophen-Lage fuer Auto-Push

Verzeichnisstruktur

Bidirektionale Monitor-Verbindung

Globe -> Monitor (Auto-Push)

  • data_push.py sendet alle 10min NASA EONET + USGS M4.5+ an Monitor
  • Ziel-Lage: ID 45 (Naturkatastrophen international)
  • Duplikat-Check per Headline im Monitor
  • Monitor verifiziert und erstellt Zusammenfassung

Monitor -> Globe (Feed)

  • /api/public/globe-feed?incident_id=X liefert GeoJSON
  • Pro Standort: Ortsspezifische Artikel (Headline, Quelle, Auszug, Datum)
  • Lage-Auswahl im Globe-Header bestimmt welche Daten angezeigt werden
  • Nur aktive Live-Monitorings in der Auswahl

Klick-Flow

  1. User waehlt Lage im Header (z.B. Naturkatastrophen)
  2. Monitor-Standorte erscheinen als rote Punkte auf dem Globus
  3. Klick auf Katastrophe zeigt: NASA-Daten + passende Monitor-Artikel
  4. Artikel sind ortsspezifisch (Kenia-Klick = Kenia-Artikel, nicht global)

Auth-System

  • Magic Link Login: E-Mail -> 6-stelliger Code per Mail -> JWT
  • Prueft: users.is_active=1 UND users.globe_access=1
  • Globe-Zugang wird im Verwaltungsportal per An/Aus-Button gesteuert
  • JWT-Tokens: 24h Gueltigkeit, akzeptiert auch Monitor-Tokens
  • Alle Daten-APIs hinter Auth-Middleware

Rendering-Architektur

Performance

  • Flugzeuge/Schiffe: PointPrimitiveCollection (GPU-beschleunigt)
  • Zoom-adaptiv: Cluster bei Uebersicht, Einzelpunkte bei Detail
  • Weit (>5.000km): 5-Grad-Raster mit Count-Labels
  • Mittel (1.000-5.000km): 2-Grad-Raster
  • Nah (<1.000km): Einzelne Punkte
  • Katastrophen/Satelliten: Entity API (kleinere Mengen)

Visual Modes

  • STD: Photorealistisch
  • NVG: Nachtsicht (gruener Monochrom-Filter)
  • FLIR: Thermal (invertiert, Infrarot-Look)
  • CRT: Retro-Monitor (Scanlines, Vignette)

Bekannte Limitierungen

  • Cesium Ion Free-Tier: Nicht fuer kommerziellen Vertrieb (Commercial License noetig)
  • Satelliten-Positionen: Vereinfachte Kepler-Berechnung (nicht SGP4-exakt)
  • AISStream: Schiffsdaten brauchen ~1-2min bis globale Abdeckung nach Restart
  • OpenSky als Flug-Fallback: Aggressive Rate-Limits (429), daher adsb.lol als Primary

Services neustarten

Entwicklungshinweise

  • Alle JS-Dateien werden als statische Dateien ausgeliefert (kein Build-Step)
  • Cache-Busting: Browser-Cache manuell mit Ctrl+Shift+R leeren
  • JS-Syntax pruefen: node --check ~/AegisSight-Globe/static/js/layers/DATEI.js
  • Inkrementelle Patches vermeiden — bei groesseren Aenderungen Datei komplett neu schreiben
  • .env Aenderungen erfordern Service-Restart