dns-api/api.go
DataHoarder b0522a8abc
All checks were successful
continuous-integration/drone/push Build is passing
Fixed message ed25519 usage
2022-06-12 02:21:00 +02:00

62 lines
1.4 KiB
Go

package dns_api
import (
"git.gammaspectra.live/givna.me/dns-api/ed25519"
"net/http"
"time"
)
type Client struct {
privateKey ed25519.PrivateKey
client *http.Client
RequestExpirationTime time.Duration
}
//NewClient Creates an API client with either a specified http Client, or nil
func NewClient(privateKey ed25519.PrivateKey, client *http.Client) *Client {
if client == nil {
client = http.DefaultClient
}
return &Client{
privateKey: privateKey,
client: client,
}
}
func (c *Client) Do(req *http.Request) (*http.Response, error) {
var expirationTime time.Time
if c.RequestExpirationTime != 0 {
expirationTime = time.Now().Add(c.RequestExpirationTime)
}
host := req.Host
if host == "" {
host = req.URL.Host
}
newUrl, err := CreateSignatureMessage(req.Method, req.Host, req.URL, c.privateKey, expirationTime)
if err != nil {
return nil, err
}
//TODO: WithContext?
return c.client.Do(&http.Request{
Method: req.Method,
URL: newUrl,
Header: req.Header,
Body: req.Body,
GetBody: req.GetBody,
ContentLength: req.ContentLength,
TransferEncoding: req.TransferEncoding,
Close: req.Close,
Host: req.Host,
Form: req.Form,
PostForm: req.PostForm,
MultipartForm: req.MultipartForm,
Trailer: req.Trailer,
Response: req.Response,
})
}
//TODO: server call methods