TestRunNoArgsDefaultsToServe rief run(nil) auf und griff damit auf den Default-Pfad /etc/vpnportal/config.yaml zu. Auf einem Entwicklungsrechner existiert der nicht, der Test war dort gruen. Auf einem Zielhost mit installierter Konfiguration las er dagegen die Produktivkonfiguration und loeste echte Verbindungsversuche zu Firewall und Domain Controllern aus. Die Kommandoauswahl ist jetzt als reine Funktion commandFor testbar. Kein Test ruft serve oder check mehr ohne expliziten --config-Pfad auf. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBHF4R9EAejDJUMdwr6C68
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
const usage = `vpnportal — VPN-Konfig-Portal für OPNsense
|
|
|
|
Aufruf:
|
|
vpnportal serve [--config PFAD] Portal starten (Default)
|
|
vpnportal check [--config PFAD] [--test-auth BENUTZER]
|
|
vpnportal version
|
|
|
|
Optionen:
|
|
--config PFAD Pfad zur Konfigurationsdatei (Default: /etc/vpnportal/config.yaml)
|
|
`
|
|
|
|
func main() {
|
|
os.Exit(run(os.Args[1:], os.Stdout, os.Stderr))
|
|
}
|
|
|
|
// commandFor waehlt das Unterkommando. Fehlt es oder beginnt das erste
|
|
// Argument mit '-', gilt serve als Vorgabe.
|
|
func commandFor(args []string) (cmd string, rest []string) {
|
|
if len(args) > 0 && len(args[0]) > 0 && args[0][0] != '-' {
|
|
return args[0], args[1:]
|
|
}
|
|
return "serve", args
|
|
}
|
|
|
|
func run(args []string, stdout, stderr io.Writer) int {
|
|
cmd, rest := commandFor(args)
|
|
|
|
switch cmd {
|
|
case "version":
|
|
fmt.Fprintln(stdout, versionString())
|
|
return 0
|
|
case "serve":
|
|
return runServe(rest, stdout, stderr)
|
|
case "check":
|
|
return runCheck(rest, stdout, stderr)
|
|
case "help", "-h", "--help":
|
|
fmt.Fprint(stdout, usage)
|
|
return 0
|
|
default:
|
|
fmt.Fprintf(stderr, "Unbekanntes Kommando: %s\n\n%s", cmd, usage)
|
|
return 2
|
|
}
|
|
}
|