[feature] Initial commit
This commit is contained in:
103
pangolin/pangolin.go
Normal file
103
pangolin/pangolin.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package pangolin
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/auroradevllc/apiclient"
|
||||
)
|
||||
|
||||
func New(apiUrl, apiKey string) *Client {
|
||||
return &Client{
|
||||
apiUrl: apiUrl,
|
||||
apiKey: apiKey,
|
||||
}
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
apiUrl string
|
||||
apiKey string
|
||||
debug bool
|
||||
}
|
||||
|
||||
type Response[V any] struct {
|
||||
Success bool `json:"success"`
|
||||
Error bool `json:"error"`
|
||||
Message string `json:"message"`
|
||||
Pagination struct {
|
||||
Total int `json:"total"`
|
||||
PageSize int `json:"pageSize"`
|
||||
Page int `json:"page"`
|
||||
}
|
||||
Data V `json:"data"`
|
||||
}
|
||||
|
||||
func (p *Client) Domains(orgID string) ([]Domain, error) {
|
||||
var response Response[DomainResponse]
|
||||
|
||||
if err := p.doRequestJSON(http.MethodGet, "/org/"+orgID+"/domains", nil, &response); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response.Data.Domains, nil
|
||||
}
|
||||
|
||||
func (p *Client) Resources(orgID string) ([]Resource, error) {
|
||||
var response Response[ResourceResponse]
|
||||
|
||||
if err := p.doRequestJSON(http.MethodGet, "/org/"+orgID+"/resources?pageSize=1000", nil, &response); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response.Data.Resources, nil
|
||||
}
|
||||
|
||||
func (p *Client) doRequest(method, uri string, body any) (*apiclient.Response, error) {
|
||||
opts := []apiclient.Option{
|
||||
apiclient.WithMethod(method),
|
||||
apiclient.WithHeader("Authorization", "Bearer "+p.apiKey),
|
||||
}
|
||||
|
||||
if body != nil {
|
||||
opts = append(opts, apiclient.WithJSON(body))
|
||||
}
|
||||
|
||||
req, err := apiclient.NewRequest(p.apiUrl+"/"+strings.TrimLeft(uri, "/"), opts...)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := req.Send()
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (p *Client) doRequestJSON(method, uri string, body any, out any) error {
|
||||
res, err := p.doRequest(method, uri, body)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// If debugging, we want to read the entire body
|
||||
if p.debug {
|
||||
b, err := res.Bytes()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(string(b))
|
||||
|
||||
return json.Unmarshal(b, out)
|
||||
}
|
||||
|
||||
return res.Unmarshal(out)
|
||||
}
|
||||
Reference in New Issue
Block a user