3.8 KiB
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 ansehenemployee: 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
/subscribeund/unsubscribe - automatische Software-Kanäle pro Software
- Release-Pings in den passenden Software-Kanal
- DMs per
Start
go mod tidy
go run ./cmd/releasewatcher
Danach im Browser öffnen:
http://localhost:8080
Standard-Admin:
E-Mail: admin@example.local
Passwort: admin12345
Produktion
Setze mindestens diese Variablen:
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:
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:
internal/discordbot/bot.go
Aktivierung über Umgebungsvariablen:
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:
hersteller-software
Beispiele:
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 sollenSend MessagesEmbed Links- optional
Mention @everyone, @here, and All Roles, wennRW_DISCORD_RELEASE_MENTION='@here'oder Rollen-Mentions genutzt werden
Datenhaltung
Die Anwendung speichert Daten standardmäßig in:
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.