Files
patchpinglite/README.md
jbergner 270c13af5b
All checks were successful
release-tag / release-image (push) Successful in 2m3s
init
2026-05-04 22:25:50 +02:00

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 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

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 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:

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.