Files
medi-wol/cmd/server/main.go

114 lines
3.0 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"medi-wol/internal/database"
"medi-wol/internal/handlers"
"medi-wol/internal/wol"
"os"
"strconv"
"github.com/gin-gonic/gin"
)
func main() {
// Kommandozeilenparameter definieren
var port int
var installService bool
var uninstallService bool
flag.IntVar(&port, "port", 0, "Port für den Server (Standard: 8080 oder PORT Umgebungsvariable)")
flag.BoolVar(&installService, "install", false, "Installiere Medi-WOL als Windows-Dienst")
flag.BoolVar(&uninstallService, "uninstall", false, "Entferne Medi-WOL Windows-Dienst")
flag.Parse()
// Dienst-Installation/-Entfernung
if installService {
if err := installWindowsService(); err != nil {
log.Fatal("Fehler beim Installieren des Dienstes:", err)
}
log.Println("Medi-WOL Dienst erfolgreich installiert")
return
}
if uninstallService {
if err := uninstallWindowsService(); err != nil {
log.Fatal("Fehler beim Entfernen des Dienstes:", err)
}
log.Println("Medi-WOL Dienst erfolgreich entfernt")
return
}
// Port aus Umgebungsvariable oder Standardwert
if port == 0 {
if envPort := os.Getenv("PORT"); envPort != "" {
if parsedPort, err := strconv.Atoi(envPort); err == nil {
port = parsedPort
} else {
log.Printf("Warnung: Ungültige PORT Umgebungsvariable '%s', verwende Standard-Port 8080", envPort)
port = 8080
}
} else {
port = 8080
}
}
// Port-Validierung
if port < 1 || port > 65535 {
log.Fatal("Fehler: Port muss zwischen 1 und 65535 liegen")
}
// Datenbank initialisieren
db, err := database.InitDB()
if err != nil {
log.Fatal("Fehler beim Initialisieren der Datenbank:", err)
}
defer db.Close()
// Wake-on-LAN Service initialisieren
wolService := wol.NewService()
// Handler initialisieren
pcHandler := handlers.NewPCHandler(db, wolService)
// Gin Router konfigurieren
r := gin.Default()
// Statische Dateien bereitstellen
r.Static("/static", "./web/static")
r.LoadHTMLGlob("web/templates/*")
// Routen definieren
r.GET("/", pcHandler.Index)
r.GET("/api/pcs", pcHandler.GetAllPCs)
r.POST("/api/pcs", pcHandler.CreatePC)
r.PUT("/api/pcs/:id", pcHandler.UpdatePC)
r.DELETE("/api/pcs/:id", pcHandler.DeletePC)
r.POST("/api/pcs/:id/wake", pcHandler.WakePC)
r.GET("/api/pcs/status", pcHandler.GetPCStatus)
// Server starten
serverAddr := fmt.Sprintf(":%d", port)
log.Printf("Server startet auf Port %d...", port)
log.Printf("Web-Oberfläche verfügbar unter: http://localhost%s", serverAddr)
if err := r.Run(serverAddr); err != nil {
log.Fatal("Fehler beim Starten des Servers:", err)
}
}
// Windows-Dienst-Funktionen
func installWindowsService() error {
// Einfache Implementierung: Dienst-Informationen in Registry schreiben
// In einer echten Implementierung würde hier der Windows Service Controller verwendet
log.Println("Installiere Medi-WOL als Windows-Dienst...")
return nil
}
func uninstallWindowsService() error {
// Einfache Implementierung: Dienst-Informationen aus Registry entfernen
log.Println("Entferne Medi-WOL Windows-Dienst...")
return nil
}