Files
UpSnap/backend/networking/sleep.go
2024-12-28 11:03:19 +01:00

53 lines
1.1 KiB
Go

package networking
import (
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"github.com/pocketbase/pocketbase/core"
"github.com/seriousm4x/upsnap/logger"
)
type SolResponse struct {
Message string `json:"message"`
}
func SleepDevice(device *core.Record) (SolResponse, error) {
logger.Info.Println("Sleep triggered for", device.GetString("name"))
var solResp SolResponse
var url string
if device.GetBool("sol_auth") {
url = fmt.Sprintf("http://%s:%s@%s:%d/sleep?format=JSON",
device.GetString("sol_user"), device.GetString("sol_password"), device.GetString("ip"), device.GetInt("sol_port"))
} else {
url = fmt.Sprintf("http://%s:%d/sleep?format=JSON", device.GetString("ip"), device.GetInt("sol_port"))
}
resp, err := http.Get(url)
if err != nil {
return solResp, err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
body, err := io.ReadAll(resp.Body)
if err != nil {
return solResp, err
}
var solResp SolResponse
if err := json.Unmarshal(body, &solResp); err != nil {
return solResp, err
}
return solResp, errors.New("status code was not 200")
}
return solResp, nil
}