package http import ( "encoding/json" "log" "net/http" "github.com/0x1d/rcond/pkg/network" ) const ( NETWORK_CONNECTION_UUID = "7d706027-727c-4d4c-a816-f0e1b99db8ab" ) func HandleNetworkUp(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var req struct { Interface string `json:"interface"` SSID string `json:"ssid"` Password string `json:"password"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } log.Printf("Bringing up network interface %s with SSID %s", req.Interface, req.SSID) if err := network.Up(req.Interface, req.SSID, req.Password, NETWORK_CONNECTION_UUID); err != nil { log.Printf("Failed to bring up network interface %s: %v", req.Interface, err) http.Error(w, err.Error(), http.StatusInternalServerError) return } log.Printf("Successfully brought up network interface %s", req.Interface) w.WriteHeader(http.StatusOK) } func HandleNetworkDown(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var req struct { Interface string `json:"interface"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := network.Down(req.Interface); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } func HandleNetworkRemove(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } if err := network.Remove(NETWORK_CONNECTION_UUID); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } func HandleGetHostname(w http.ResponseWriter, r *http.Request) { hostname, err := network.GetHostname() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write([]byte(hostname)) } func HandleSetHostname(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var req struct { Hostname string `json:"hostname"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := network.SetHostname(req.Hostname); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) }