131 lines
3.2 KiB
Go
131 lines
3.2 KiB
Go
|
package fastly
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
// Purge is a response from a purge request.
|
||
|
type Purge struct {
|
||
|
// Status is the status of the purge, usually "ok".
|
||
|
Status string `mapstructure:"status"`
|
||
|
|
||
|
// ID is the unique ID of the purge request.
|
||
|
ID string `mapstructure:"id"`
|
||
|
}
|
||
|
|
||
|
// PurgeInput is used as input to the Purge function.
|
||
|
type PurgeInput struct {
|
||
|
// URL is the URL to purge (required).
|
||
|
URL string
|
||
|
|
||
|
// Soft performs a soft purge.
|
||
|
Soft bool
|
||
|
}
|
||
|
|
||
|
// Purge instantly purges an individual URL.
|
||
|
func (c *Client) Purge(i *PurgeInput) (*Purge, error) {
|
||
|
if i.URL == "" {
|
||
|
return nil, ErrMissingURL
|
||
|
}
|
||
|
|
||
|
req, err := c.RawRequest("PURGE", i.URL, nil)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if i.Soft {
|
||
|
req.Header.Set("Fastly-Soft-Purge", "1")
|
||
|
}
|
||
|
|
||
|
resp, err := checkResp(c.HTTPClient.Do(req))
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var r *Purge
|
||
|
if err := decodeJSON(&r, resp.Body); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return r, nil
|
||
|
}
|
||
|
|
||
|
// PurgeKeyInput is used as input to the Purge function.
|
||
|
type PurgeKeyInput struct {
|
||
|
// Service is the ID of the service (required).
|
||
|
Service string
|
||
|
|
||
|
// Key is the key to purge (required).
|
||
|
Key string
|
||
|
|
||
|
// Soft performs a soft purge.
|
||
|
Soft bool
|
||
|
}
|
||
|
|
||
|
// PurgeKey instantly purges a particular service of items tagged with a key.
|
||
|
func (c *Client) PurgeKey(i *PurgeKeyInput) (*Purge, error) {
|
||
|
if i.Service == "" {
|
||
|
return nil, ErrMissingService
|
||
|
}
|
||
|
|
||
|
if i.Key == "" {
|
||
|
return nil, ErrMissingKey
|
||
|
}
|
||
|
|
||
|
path := fmt.Sprintf("/service/%s/purge/%s", i.Service, i.Key)
|
||
|
req, err := c.RawRequest("POST", path, nil)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if i.Soft {
|
||
|
req.Header.Set("Fastly-Soft-Purge", "1")
|
||
|
}
|
||
|
|
||
|
resp, err := checkResp(c.HTTPClient.Do(req))
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var r *Purge
|
||
|
if err := decodeJSON(&r, resp.Body); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return r, nil
|
||
|
}
|
||
|
|
||
|
// PurgeAllInput is used as input to the Purge function.
|
||
|
type PurgeAllInput struct {
|
||
|
// Service is the ID of the service (required).
|
||
|
Service string
|
||
|
|
||
|
// Soft performs a soft purge.
|
||
|
Soft bool
|
||
|
}
|
||
|
|
||
|
// PurgeAll instantly purges everything from a service.
|
||
|
func (c *Client) PurgeAll(i *PurgeAllInput) (*Purge, error) {
|
||
|
if i.Service == "" {
|
||
|
return nil, ErrMissingService
|
||
|
}
|
||
|
|
||
|
path := fmt.Sprintf("/service/%s/purge_all", i.Service)
|
||
|
req, err := c.RawRequest("POST", path, nil)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if i.Soft {
|
||
|
req.Header.Set("Fastly-Soft-Purge", "1")
|
||
|
}
|
||
|
|
||
|
resp, err := checkResp(c.HTTPClient.Do(req))
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var r *Purge
|
||
|
if err := decodeJSON(&r, resp.Body); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return r, nil
|
||
|
|
||
|
}
|