mirror of
https://github.com/0x1d/rcond.git
synced 2025-12-14 18:25:21 +01:00
feat: add hostname management and improve error handling
This commit is contained in:
@@ -76,3 +76,35 @@ func HandleNetworkRemove(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ func (s *Server) RegisterRoutes() {
|
||||
s.router.HandleFunc("/network/up", HandleNetworkUp).Methods(http.MethodPost)
|
||||
s.router.HandleFunc("/network/down", HandleNetworkDown).Methods(http.MethodPost)
|
||||
s.router.HandleFunc("/network/remove", HandleNetworkRemove).Methods(http.MethodPost)
|
||||
s.router.HandleFunc("/hostname", HandleGetHostname).Methods(http.MethodGet)
|
||||
s.router.HandleFunc("/hostname", HandleSetHostname).Methods(http.MethodPost)
|
||||
}
|
||||
|
||||
func (s *Server) healthHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -253,6 +253,32 @@ func GetDeviceByIpIface(conn *dbus.Conn, iface string) (dbus.ObjectPath, error)
|
||||
return devPath, nil
|
||||
}
|
||||
|
||||
// GetHostname returns the hostname of the current machine
|
||||
func GetHostname() (string, error) {
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("GetHostname failed: %v", err)
|
||||
}
|
||||
return hostname, nil
|
||||
}
|
||||
|
||||
// SetHostname changes the static hostname via the system bus.
|
||||
// newHost is your desired hostname, interactive=false skips any prompt.
|
||||
func SetHostname(newHost string) error {
|
||||
return withDbus(func(conn *dbus.Conn) error {
|
||||
obj := conn.Object(
|
||||
"org.freedesktop.hostname1",
|
||||
dbus.ObjectPath("/org/freedesktop/hostname1"),
|
||||
)
|
||||
return obj.Call(
|
||||
"org.freedesktop.hostname1.SetStaticHostname",
|
||||
0, // no special flags
|
||||
newHost, // the hostname you want
|
||||
false, // interactive? (PolicyKit)
|
||||
).Err
|
||||
})
|
||||
}
|
||||
|
||||
// Up creates and activates a WiFi access point connection.
|
||||
// It takes the interface name, SSID, password and UUID as arguments.
|
||||
// If a connection with the given UUID exists, it will be reused.
|
||||
|
||||
Reference in New Issue
Block a user