mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-09-20 14:56:20 +08:00
7fd6a74e0c
Co-authored-by: Josh Zhang <jzhang1@stackoverflow.com>
164 lines
5.4 KiB
Go
164 lines
5.4 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/goccy/go-json"
|
|
)
|
|
|
|
type ImagesVariant struct {
|
|
ID string `json:"id,omitempty"`
|
|
NeverRequireSignedURLs *bool `json:"neverRequireSignedURLs,omitempty"`
|
|
Options ImagesVariantsOptions `json:"options,omitempty"`
|
|
}
|
|
|
|
type ImagesVariantsOptions struct {
|
|
Fit string `json:"fit,omitempty"`
|
|
Height int `json:"height,omitempty"`
|
|
Metadata string `json:"metadata,omitempty"`
|
|
Width int `json:"width,omitempty"`
|
|
}
|
|
|
|
type ListImageVariantsParams struct{}
|
|
|
|
type ListImagesVariantsResponse struct {
|
|
Result ListImageVariantsResult `json:"result,omitempty"`
|
|
Response
|
|
}
|
|
|
|
type ListImageVariantsResult struct {
|
|
ImagesVariants map[string]ImagesVariant `json:"variants,omitempty"`
|
|
}
|
|
|
|
type CreateImagesVariantParams struct {
|
|
ID string `json:"id,omitempty"`
|
|
NeverRequireSignedURLs *bool `json:"neverRequireSignedURLs,omitempty"`
|
|
Options ImagesVariantsOptions `json:"options,omitempty"`
|
|
}
|
|
|
|
type UpdateImagesVariantParams struct {
|
|
ID string `json:"-"`
|
|
NeverRequireSignedURLs *bool `json:"neverRequireSignedURLs,omitempty"`
|
|
Options ImagesVariantsOptions `json:"options,omitempty"`
|
|
}
|
|
|
|
type ImagesVariantResult struct {
|
|
Variant ImagesVariant `json:"variant,omitempty"`
|
|
}
|
|
|
|
type ImagesVariantResponse struct {
|
|
Result ImagesVariantResult `json:"result,omitempty"`
|
|
Response
|
|
}
|
|
|
|
// Lists existing variants.
|
|
//
|
|
// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-list-variants
|
|
func (api *API) ListImagesVariants(ctx context.Context, rc *ResourceContainer, params ListImageVariantsParams) (ListImageVariantsResult, error) {
|
|
if rc.Identifier == "" {
|
|
return ListImageVariantsResult{}, ErrMissingAccountID
|
|
}
|
|
|
|
baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants", rc.Identifier)
|
|
res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL, nil)
|
|
if err != nil {
|
|
return ListImageVariantsResult{}, err
|
|
}
|
|
|
|
var listImageVariantsResponse ListImagesVariantsResponse
|
|
err = json.Unmarshal(res, &listImageVariantsResponse)
|
|
if err != nil {
|
|
return ListImageVariantsResult{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
|
|
}
|
|
|
|
return listImageVariantsResponse.Result, nil
|
|
}
|
|
|
|
// Fetch details for a single variant.
|
|
//
|
|
// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
|
|
func (api *API) GetImagesVariant(ctx context.Context, rc *ResourceContainer, variantID string) (ImagesVariant, error) {
|
|
if rc.Identifier == "" {
|
|
return ImagesVariant{}, ErrMissingAccountID
|
|
}
|
|
|
|
baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, variantID)
|
|
res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL, nil)
|
|
if err != nil {
|
|
return ImagesVariant{}, err
|
|
}
|
|
|
|
var imagesVariantDetailResponse ImagesVariantResponse
|
|
err = json.Unmarshal(res, &imagesVariantDetailResponse)
|
|
if err != nil {
|
|
return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
|
|
}
|
|
|
|
return imagesVariantDetailResponse.Result.Variant, nil
|
|
}
|
|
|
|
// Specify variants that allow you to resize images for different use cases.
|
|
//
|
|
// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-create-a-variant
|
|
func (api *API) CreateImagesVariant(ctx context.Context, rc *ResourceContainer, params CreateImagesVariantParams) (ImagesVariant, error) {
|
|
if rc.Identifier == "" {
|
|
return ImagesVariant{}, ErrMissingAccountID
|
|
}
|
|
|
|
baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants", rc.Identifier)
|
|
res, err := api.makeRequestContext(ctx, http.MethodPost, baseURL, params)
|
|
if err != nil {
|
|
return ImagesVariant{}, err
|
|
}
|
|
|
|
var createImagesVariantResponse ImagesVariantResponse
|
|
err = json.Unmarshal(res, &createImagesVariantResponse)
|
|
if err != nil {
|
|
return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
|
|
}
|
|
|
|
return createImagesVariantResponse.Result.Variant, nil
|
|
}
|
|
|
|
// Deleting a variant purges the cache for all images associated with the variant.
|
|
//
|
|
// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
|
|
func (api *API) DeleteImagesVariant(ctx context.Context, rc *ResourceContainer, variantID string) error {
|
|
if rc.Identifier == "" {
|
|
return ErrMissingAccountID
|
|
}
|
|
|
|
baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, variantID)
|
|
_, err := api.makeRequestContext(ctx, http.MethodDelete, baseURL, nil)
|
|
if err != nil {
|
|
return fmt.Errorf("%s: %w", errMakeRequestError, err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Updating a variant purges the cache for all images associated with the variant.
|
|
//
|
|
// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
|
|
func (api *API) UpdateImagesVariant(ctx context.Context, rc *ResourceContainer, params UpdateImagesVariantParams) (ImagesVariant, error) {
|
|
if rc.Identifier == "" {
|
|
return ImagesVariant{}, ErrMissingAccountID
|
|
}
|
|
|
|
baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, params.ID)
|
|
res, err := api.makeRequestContext(ctx, http.MethodPatch, baseURL, params)
|
|
if err != nil {
|
|
return ImagesVariant{}, err
|
|
}
|
|
|
|
var imagesVariantDetailResponse ImagesVariantResponse
|
|
err = json.Unmarshal(res, &imagesVariantDetailResponse)
|
|
if err != nil {
|
|
return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
|
|
}
|
|
|
|
return imagesVariantDetailResponse.Result.Variant, nil
|
|
}
|