wireguard-negotiator/lib/client.go

54 lines
1.3 KiB
Go
Raw Normal View History

2019-12-19 19:48:52 +08:00
package lib
import (
"crypto/tls"
2019-12-22 17:11:40 +08:00
"encoding/json"
"fmt"
2019-12-19 19:48:52 +08:00
"net/http"
2019-12-22 17:11:40 +08:00
"net/url"
2019-12-19 19:48:52 +08:00
)
2019-12-22 17:11:40 +08:00
var ErrRequestFailed = fmt.Errorf("request for peer config was not successful")
2019-12-19 19:48:52 +08:00
type Client struct {
2019-12-22 17:11:40 +08:00
serverURL string
2019-12-19 19:48:52 +08:00
httpClient *http.Client
}
func NewClient(serverURL string, insecure bool) *Client {
httpClient := &http.Client{}
if insecure {
httpClient.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
}
return &Client{
2019-12-22 17:11:40 +08:00
serverURL: serverURL,
// Client is not used in time or resource sensitive environments, therefore
// omitting timeout reduces code
2019-12-19 19:48:52 +08:00
httpClient: &http.Client{},
}
}
2019-12-22 17:11:40 +08:00
func (c *Client) Request(publicKey string) (PeerConfigResponse, error) {
peerConfigRequest := url.Values{}
peerConfigRequest.Set("PublicKey", publicKey)
resp, err := c.httpClient.PostForm(c.serverURL+"/request", peerConfigRequest)
if err != nil {
return PeerConfigResponse{}, fmt.Errorf("unable to request: %w", err)
}
if resp.StatusCode != http.StatusOK {
return PeerConfigResponse{}, ErrRequestFailed
}
decoder := json.NewDecoder(resp.Body)
var peerConfigResponse PeerConfigResponse
err = decoder.Decode(&peerConfigResponse)
if err != nil {
return PeerConfigResponse{}, fmt.Errorf("unable to request: %w", err)
}
2019-12-19 19:48:52 +08:00
2019-12-22 17:11:40 +08:00
return peerConfigResponse, nil
2019-12-19 19:48:52 +08:00
}