| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package cloudflare
- import (
- "encoding/json"
- "fmt"
- "time"
- "github.com/pkg/errors"
- )
- var validSettingValues = []string{"on", "off"}
- // ArgoFeatureSetting is the structure of the API object for the
- // argo smart routing and tiered caching settings.
- type ArgoFeatureSetting struct {
- Editable bool `json:"editable,omitempty"`
- ID string `json:"id,omitempty"`
- ModifiedOn time.Time `json:"modified_on,omitempty"`
- Value string `json:"value"`
- }
- // ArgoDetailsResponse is the API response for the argo smart routing
- // and tiered caching response.
- type ArgoDetailsResponse struct {
- Result ArgoFeatureSetting `json:"result"`
- Response
- }
- // ArgoSmartRouting returns the current settings for smart routing.
- //
- // API reference: https://api.cloudflare.com/#argo-smart-routing-get-argo-smart-routing-setting
- func (api *API) ArgoSmartRouting(zoneID string) (ArgoFeatureSetting, error) {
- uri := "/zones/" + zoneID + "/argo/smart_routing"
- res, err := api.makeRequest("GET", uri, nil)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError)
- }
- var argoDetailsResponse ArgoDetailsResponse
- err = json.Unmarshal(res, &argoDetailsResponse)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError)
- }
- return argoDetailsResponse.Result, nil
- }
- // UpdateArgoSmartRouting updates the setting for smart routing.
- //
- // API reference: https://api.cloudflare.com/#argo-smart-routing-patch-argo-smart-routing-setting
- func (api *API) UpdateArgoSmartRouting(zoneID, settingValue string) (ArgoFeatureSetting, error) {
- if !contains(validSettingValues, settingValue) {
- return ArgoFeatureSetting{}, errors.New(fmt.Sprintf("invalid setting value '%s'. must be 'on' or 'off'", settingValue))
- }
- uri := "/zones/" + zoneID + "/argo/smart_routing"
- res, err := api.makeRequest("PATCH", uri, ArgoFeatureSetting{Value: settingValue})
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError)
- }
- var argoDetailsResponse ArgoDetailsResponse
- err = json.Unmarshal(res, &argoDetailsResponse)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError)
- }
- return argoDetailsResponse.Result, nil
- }
- // ArgoTieredCaching returns the current settings for tiered caching.
- //
- // API reference: TBA
- func (api *API) ArgoTieredCaching(zoneID string) (ArgoFeatureSetting, error) {
- uri := "/zones/" + zoneID + "/argo/tiered_caching"
- res, err := api.makeRequest("GET", uri, nil)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError)
- }
- var argoDetailsResponse ArgoDetailsResponse
- err = json.Unmarshal(res, &argoDetailsResponse)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError)
- }
- return argoDetailsResponse.Result, nil
- }
- // UpdateArgoTieredCaching updates the setting for tiered caching.
- //
- // API reference: TBA
- func (api *API) UpdateArgoTieredCaching(zoneID, settingValue string) (ArgoFeatureSetting, error) {
- if !contains(validSettingValues, settingValue) {
- return ArgoFeatureSetting{}, errors.New(fmt.Sprintf("invalid setting value '%s'. must be 'on' or 'off'", settingValue))
- }
- uri := "/zones/" + zoneID + "/argo/tiered_caching"
- res, err := api.makeRequest("PATCH", uri, ArgoFeatureSetting{Value: settingValue})
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError)
- }
- var argoDetailsResponse ArgoDetailsResponse
- err = json.Unmarshal(res, &argoDetailsResponse)
- if err != nil {
- return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError)
- }
- return argoDetailsResponse.Result, nil
- }
- func contains(s []string, e string) bool {
- for _, a := range s {
- if a == e {
- return true
- }
- }
- return false
- }
|