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