Files
cloudsave/pkg/remote/client/client.go
2025-05-15 19:38:13 +02:00

96 lines
1.6 KiB
Go

package client
import (
"cloudsave/pkg/remote/obj"
"encoding/json"
"errors"
"fmt"
"net/http"
"net/url"
)
type (
Client struct {
baseURL string
username string
password string
}
)
func New(baseURL, username, password string) *Client {
return &Client{
baseURL: baseURL,
username: username,
password: password,
}
}
func (c *Client) Hash(gameID string) (string, error) {
u, err := url.JoinPath(c.baseURL, "api", "v1", "game", gameID, "hash")
if err != nil {
return "", err
}
o, err := c.get(u)
if err != nil {
return "", err
}
if h, ok := (o).(string); ok {
return h, nil
}
return "", errors.New("invalid payload sent by the server")
}
func (c *Client) Version(gameID string) (int, error) {
u, err := url.JoinPath(c.baseURL, "api", "v1", "game", gameID, "version")
if err != nil {
return 0, err
}
o, err := c.get(u)
if err != nil {
return 0, err
}
if h, ok := (o).(int); ok {
return h, nil
}
return 0, errors.New("invalid payload sent by the server")
}
func (c *Client) get(url string) (any, error) {
cli := http.Client{}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.username, c.password)
res, err := cli.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("server returns an unexpected status code: %d %s", res.StatusCode, res.Status)
}
var httpObject obj.HTTPObject
d := json.NewDecoder(res.Body)
err = d.Decode(&httpObject)
if err != nil {
return nil, err
}
return httpObject, nil
}
func (c *Client) post() {
}