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