57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"os/exec"
|
|
)
|
|
|
|
type Handler struct{}
|
|
|
|
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
switch r.Method {
|
|
case http.MethodGet:
|
|
toggle := r.URL.Query().Get("toggle")
|
|
switch toggle {
|
|
case "on":
|
|
if !h.WifiEnabled(w, r) {
|
|
if e := exec.Command("nmcli", "radio", "wifi", "on").Run(); e != nil {
|
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
if e := exec.Command("nmcli", "connection", "up", "Hotspot", "ifname", "wlp2s0").Run(); e != nil {
|
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
case "off":
|
|
if h.WifiEnabled(w, r) {
|
|
if e := exec.Command("nmcli", "connection", "down", "Hotspot").Run(); e != nil {
|
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
if e := exec.Command("nmcli", "radio", "wifi", "off").Run(); e != nil {
|
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
default:
|
|
http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
|
|
}
|
|
}
|
|
|
|
func (h *Handler) WifiEnabled(w http.ResponseWriter, r *http.Request) bool {
|
|
status, e := exec.Command("nmcli", "radio", "wifi").Output()
|
|
if e != nil {
|
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
|
panic(e)
|
|
}
|
|
if string(status) == "enabled" {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|