Files
ai-operator/internal/asterisk/ari/client.go
T

64 lines
1.4 KiB
Go

package ari
import (
"context"
"fmt"
"io"
"net/http"
"strings"
"time"
"ai-operator/internal/config"
)
type Client struct {
baseURL string
user string
password string
httpClient *http.Client
}
func NewClient(cfg config.AsteriskConfig) *Client {
return &Client{
baseURL: strings.TrimRight(cfg.ARIURL, "/"),
user: cfg.ARIUser,
password: cfg.ARIPassword,
httpClient: &http.Client{
Timeout: 5 * time.Second,
},
}
}
func (c *Client) AuthenticatedGET(ctx context.Context, path string) (*http.Response, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.endpoint(path), nil)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.user, c.password)
return c.httpClient.Do(req)
}
func (c *Client) UnauthenticatedGET(ctx context.Context, path string) (*http.Response, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.endpoint(path), nil)
if err != nil {
return nil, err
}
return c.httpClient.Do(req)
}
func (c *Client) endpoint(path string) string {
return c.baseURL + "/" + strings.TrimLeft(path, "/")
}
func drainAndClose(resp *http.Response) {
if resp == nil || resp.Body == nil {
return
}
_, _ = io.Copy(io.Discard, resp.Body)
_ = resp.Body.Close()
}
func statusError(name string, got int, want int) string {
return fmt.Sprintf("%s returned HTTP %d, want %d", name, got, want)
}