feat: Initial commit of the server management tool

This commit is contained in:
Matthias
2025-09-08 20:36:50 +02:00
commit 75406bd56c
8 changed files with 474 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
package webserver
import (
"encoding/json"
"fmt"
"net/http"
"manage-servers/server-actions"
)
type WebServer struct {
servers []serveractions.Server
}
func StartWebServer(servers []serveractions.Server) {
ws := &WebServer{servers: servers}
fmt.Println("Starting web server on :8080...")
http.HandleFunc("/", ws.handleRoot)
http.HandleFunc("/servers", ws.handleGetServers)
http.HandleFunc("/wake", ws.handleWakeServer)
http.HandleFunc("/shutdown", ws.handleShutdownServer)
http.HandleFunc("/reboot", ws.handleRebootServer)
http.HandleFunc("/status", ws.handleStatus)
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Printf("Error starting server: %v\n", err)
}
}
func (ws *WebServer) handleRoot(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
}
func (ws *WebServer) handleGetServers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(ws.servers)
}
func (ws *WebServer) handleWakeServer(w http.ResponseWriter, r *http.Request) {
serverName := r.URL.Query().Get("name")
if serverName == "" {
http.Error(w, "Missing server name", http.StatusBadRequest)
return
}
serveractions.WakeServer(serverName, ws.servers)
w.WriteHeader(http.StatusOK)
}
func (ws *WebServer) handleShutdownServer(w http.ResponseWriter, r *http.Request) {
serverName := r.URL.Query().Get("name")
if serverName == "" {
http.Error(w, "Missing server name", http.StatusBadRequest)
return
}
serveractions.ShutdownServer(serverName, ws.servers)
w.WriteHeader(http.StatusOK)
}
func (ws *WebServer) handleRebootServer(w http.ResponseWriter, r *http.Request) {
serverName := r.URL.Query().Get("name")
if serverName == "" {
http.Error(w, "Missing server name", http.StatusBadRequest)
return
}
serveractions.RebootServer(serverName, ws.servers)
w.WriteHeader(http.StatusOK)
}
func (ws *WebServer) handleStatus(w http.ResponseWriter, r *http.Request) {
serverName := r.URL.Query().Get("name")
if serverName == "" {
http.Error(w, "Missing server name", http.StatusBadRequest)
return
}
for _, s := range ws.servers {
if s.Name == serverName {
online := serveractions.PingHost(s.IP)
status := "Offline"
if online {
status = "Online"
}
w.Write([]byte(status))
return
}
}
http.Error(w, "Server not found", http.StatusNotFound)
}