diff --git a/api/request.go b/api/request.go index b1a0c77..b0f9af1 100644 --- a/api/request.go +++ b/api/request.go @@ -1,18 +1,33 @@ package api import ( + "bytes" "encoding/json" "fmt" + "io" "net/http" + "strings" "time" ) // Request to API and unmarshal result -func (c *Client) Request(url string, value interface{}) error { +func (c *Client) Request(method, url string, body, value interface{}) error { netClient := &http.Client{ Timeout: time.Second * 20, } - req, err := http.NewRequest(http.MethodGet, c.URL+url, nil) + var jsonBody io.Reader + if body != nil { + if strBody, ok := body.(string); ok { + jsonBody = strings.NewReader(strBody) + } else { + jsonBodyArray, err := json.Marshal(body) + if err != nil { + return err + } + jsonBody = bytes.NewBuffer(jsonBodyArray) + } + } + req, err := http.NewRequest(method, c.URL+url, jsonBody) if err != nil { return err } diff --git a/api/response_lists.go b/api/response_lists.go index 75f23a7..c82b8d1 100644 --- a/api/response_lists.go +++ b/api/response_lists.go @@ -2,6 +2,7 @@ package api import ( "fmt" + "net/http" ) const ( @@ -20,7 +21,7 @@ type ResponseList struct { func (c *Client) RequestListVHosts() (*ResponseList, error) { req := ResponseList{} url := fmt.Sprintf(URLRequestListVHost) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil @@ -30,7 +31,7 @@ func (c *Client) RequestListVHosts() (*ResponseList, error) { func (c *Client) RequestListApps(vhost string) (*ResponseList, error) { req := ResponseList{} url := fmt.Sprintf(URLRequestListApp, vhost) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil @@ -45,7 +46,7 @@ func (c *Client) RequestDefaultListApps() (*ResponseList, error) { func (c *Client) RequestListStreams(vhost, app string) (*ResponseList, error) { req := ResponseList{} url := fmt.Sprintf(URLRequestListStream, vhost, app) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil diff --git a/api/response_push.go b/api/response_push.go index 058b47c..77846f1 100644 --- a/api/response_push.go +++ b/api/response_push.go @@ -2,11 +2,13 @@ package api import ( "fmt" + "net/http" ) // API URLS for Push const ( URLRequestPushStatus = "/v1/vhosts/%s/apps/%s:pushes" + URLRequestPushStop = "/v1/vhosts/%s/apps/%s:stopPush" ) // ResponsePushStatus JSON Message with Push status data @@ -49,7 +51,7 @@ type ResponsePushDataStream struct { func (c *Client) RequestPushStatus(vhost, app string) (*ResponsePushStatus, error) { req := ResponsePushStatus{} url := fmt.Sprintf(URLRequestPushStatus, vhost, app) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil @@ -59,3 +61,21 @@ func (c *Client) RequestPushStatus(vhost, app string) (*ResponsePushStatus, erro func (c *Client) RequestPushStatusDefault() (*ResponsePushStatus, error) { return c.RequestPushStatus(c.DefaultVHost, c.DefaultApp) } + +// DeletePush to delete an push +func (c *Client) DeletePush(vhost, app, id string) error { + type idJSON struct { + ID string `json:"id"` + } + url := fmt.Sprintf(URLRequestPushStop, vhost, app) + data := idJSON{ID: id} + if err := c.Request(http.MethodPost, url, &data, nil); err != nil { + return err + } + return nil +} + +// DeletePushDefault to delete an push and on default vhost and app +func (c *Client) DeletePushDefault(id string) error { + return c.DeletePush(c.DefaultVHost, c.DefaultApp, id) +} diff --git a/api/response_stats.go b/api/response_stats.go index f0cdb00..2c4d4f6 100644 --- a/api/response_stats.go +++ b/api/response_stats.go @@ -2,6 +2,7 @@ package api import ( "fmt" + "net/http" ) const ( @@ -34,7 +35,7 @@ type ResponseStatsData struct { func (c *Client) RequestStatsVHost(vhost string) (*ResponseStats, error) { req := ResponseStats{} url := fmt.Sprintf(URLRequestStatsVHost, vhost) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil @@ -43,7 +44,7 @@ func (c *Client) RequestStatsVHost(vhost string) (*ResponseStats, error) { func (c *Client) RequestStatsApp(vhost, app string) (*ResponseStats, error) { req := ResponseStats{} url := fmt.Sprintf(URLRequestStatsApp, vhost, app) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil @@ -52,7 +53,7 @@ func (c *Client) RequestStatsApp(vhost, app string) (*ResponseStats, error) { func (c *Client) RequestStatsStream(vhost, app, stream string) (*ResponseStats, error) { req := ResponseStats{} url := fmt.Sprintf(URLRequestStatsStream, vhost, app, stream) - if err := c.Request(url, &req); err != nil { + if err := c.Request(http.MethodGet, url, nil, &req); err != nil { return nil, err } return &req, nil