All checks were successful
release-tag / release-image (push) Successful in 2m3s
131 lines
3.8 KiB
Markdown
131 lines
3.8 KiB
Markdown
# 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.
|