64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
|
package httpcall
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
|
||
|
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||
|
)
|
||
|
|
||
|
// RegisterDevice ..
|
||
|
func RegisterDevice(configDir string, force bool) error {
|
||
|
con, err := config.Read(configDir)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
device := new(stypes.Device)
|
||
|
device.DeviceID = con.DeviceID
|
||
|
|
||
|
var buffer bytes.Buffer
|
||
|
device.EncodeToJSON(&buffer)
|
||
|
|
||
|
for _, remote := range con.Remotes {
|
||
|
if !remote.Registered || force {
|
||
|
requestURL := fmt.Sprintf("%s%s", remote.Address, "/devices")
|
||
|
req, err := http.NewRequest("POST", requestURL, &buffer)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
client := http.Client{}
|
||
|
resp, err := client.Do(req)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||
|
b, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d - can not read response body: %v", resp.StatusCode, err)
|
||
|
}
|
||
|
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d: %v", resp.StatusCode, string(b))
|
||
|
}
|
||
|
remote.Registered = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err := config.Write(con, configDir); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// UnregisterDevice ...
|
||
|
func UnregisterDevice(configDir string) error {
|
||
|
|
||
|
return nil
|
||
|
}
|