# ReleaseWatcher ReleaseWatcher ist eine webbasierte Go-Anwendung zur Pflege und Veröffentlichung von Software-Releases. ## Funktionen - Hersteller, Software und Release-Historie verwalten - Release-Felder: Software, Version, Channel, Architektur, Release-Datum, Download-Link, Release-Link, Informationen - Schwachstellen je Release im Format `CVE | Schweregrad | Beschreibung | Referenz` - Rollenmodell: - `admin`: Releases erstellen, Benutzer anlegen, Audit-Log ansehen - `employee`: Hersteller- und Softwaredaten pflegen, Releases ansehen - HMAC-signierte Session-Cookies - Passwort-Hashing mit PBKDF2-SHA256 ohne externe Abhängigkeiten - JSON-Dateipersistenz mit atomarem Schreiben - Audit-Log - Discord-Bot-Integration: - DMs per `/subscribe` und `/unsubscribe` - automatische Software-Kanäle pro Software - Release-Pings in den passenden Software-Kanal ## Start ```bash go mod tidy go run ./cmd/releasewatcher ``` Danach im Browser öffnen: ```text http://localhost:8080 ``` Standard-Admin: ```text E-Mail: admin@example.local Passwort: admin12345 ``` ## Produktion Setze mindestens diese Variablen: ```bash export RW_SECRET='lange-zufaellige-session-secret' export RW_ADMIN_EMAIL='admin@firma.example' export RW_ADMIN_PASSWORD='langes-sicheres-passwort' export RW_ADDR=':8080' export RW_DATA='data/releasewatcher.json' ``` Baue und starte: ```bash go mod tidy go build -o releasewatcher ./cmd/releasewatcher ./releasewatcher ``` Empfehlung: Hinter einem Reverse Proxy mit HTTPS betreiben. In `internal/auth/auth.go` kann `Secure: true` für Cookies aktiviert werden, sobald HTTPS erzwungen ist. ## Discord-Integration Die Integration liegt in: ```text internal/discordbot/bot.go ``` Aktivierung über Umgebungsvariablen: ```bash export RW_DISCORD_TOKEN='dein-bot-token' export RW_DISCORD_APP_ID='deine-discord-application-id' export RW_DISCORD_GUILD_ID='deine-server-id' export RW_DISCORD_CATEGORY_NAME='Software Releases' # optional, wenn die Kategorie schon existiert und explizit genutzt werden soll: # export RW_DISCORD_CATEGORY_ID='deine-kategorie-id' # optionaler Ping-Text; Standard ist @here export RW_DISCORD_RELEASE_MENTION='@here' # optional DMs deaktivieren, Kanäle bleiben aktiv: # export RW_DISCORD_SEND_DMS='false' go run ./cmd/releasewatcher ``` Wenn `RW_DISCORD_TOKEN` gesetzt ist, startet die Webapp zusätzlich die Discord-Session. Wenn `RW_DISCORD_APP_ID` gesetzt ist, werden diese Commands registriert: - `/subscribe`: Nutzer trägt sich selbst als DM-Empfänger ein - `/unsubscribe`: Nutzer trägt sich aus - User-Command `Zu Empfängern hinzufügen`: Nutzer mit Manage-Guild-Recht kann andere Empfänger hinzufügen ### Automatische Software-Kanäle Wenn zusätzlich `RW_DISCORD_GUILD_ID` gesetzt ist, erstellt der Bot beim Anlegen einer Software automatisch einen Textkanal unter der konfigurierten Kategorie. Das Kanalformat ist: ```text hersteller-software ``` Beispiele: ```text microsoft-edge mozilla-firefox adobe-acrobat-reader ``` Die erzeugte Discord-Channel-ID wird direkt am Software-Datensatz gespeichert (`discord_channel_id`). Beim Erstellen eines Releases postet der Bot dann einen Embed in genau diesen Kanal. Zusätzlich werden weiterhin DMs an Subscriber versendet, außer `RW_DISCORD_SEND_DMS=false` ist gesetzt. Der Bot benötigt auf dem Discord-Server mindestens diese Rechte: - `Manage Channels`, wenn Kategorien oder Kanäle automatisch erstellt werden sollen - `Send Messages` - `Embed Links` - optional `Mention @everyone, @here, and All Roles`, wenn `RW_DISCORD_RELEASE_MENTION='@here'` oder Rollen-Mentions genutzt werden ## Datenhaltung Die Anwendung speichert Daten standardmäßig in: ```text data/releasewatcher.json ``` Für größere Installationen wäre der nächste professionelle Schritt ein Wechsel auf PostgreSQL oder SQLite mit Migrationen. Die Store-Schicht ist dafür bewusst gekapselt.