From 07ca0398d5c0304f9202ab443d7a2cb9820ee179 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 19 Oct 2020 12:23:20 -0700 Subject: [PATCH 01/58] adds custom cert types and can GET list certs --- fastly/custom_tls.go | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 fastly/custom_tls.go diff --git a/fastly/custom_tls.go b/fastly/custom_tls.go new file mode 100644 index 000000000..217f10e19 --- /dev/null +++ b/fastly/custom_tls.go @@ -0,0 +1,83 @@ +package fastly + +import ( + "fmt" + "reflect" + "time" + + "github.com/google/jsonapi" +) + +// CustomCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate +type CustomCertificate struct { + ID string `jsonapi:"primary,tls_certificate"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + IssuedTo string `jsonapi:"attr,issued_to"` + Issuer string `jsonapi:"attr,issuer"` + Name string `jsonapi:"attr,name"` + NotAfter *time.Time `jsonapi:"attr,not_after,iso8601"` + NotBefore *time.Time `jsonapi:"attr,not_before,iso8601"` + Replace bool `jsonapi:"attr,replace"` + SerialNumber string `jsonapi:"attr,serial_number"` + SignatureAlgorithm string `jsonapi:"attr,signature_algorithm"` + UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` + TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` +} + +// ListCustomCertificatesInput is used as input to the ListBulkCertificates function. +type ListCustomCertificatesInput struct { + PageNumber *uint // The page index for pagination. + PageSize *uint // The number of keys per page. + FilterTLSDomainsIDMatch *string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. + Sort *string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. +} + +// formatFilters converts user input into query parameters for filtering. +func (i *ListCustomCertificatesInput) formatFilters() map[string]string { + result := map[string]string{} + pairings := map[string]interface{}{ + "filter[tls_domains.id][match]": i.FilterTLSDomainsIDMatch, + "page[size]": i.PageSize, + "page[number]": i.PageNumber, + "sort": i.Sort, + } + for key, value := range pairings { + if !reflect.ValueOf(value).IsNil() { + result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + } + } + return result +} + +// ListCustomCertificates list all certificates. +func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*CustomCertificate, error) { + + p := "/tls/certificates" + filters := &RequestOptions{ + Params: i.formatFilters(), + Headers: map[string]string{ + "Accept": "application/vnd.api+json", // this is required otherwise the filters don't work + }, + } + + r, err := c.Get(p, filters) + if err != nil { + return nil, err + } + + data, err := jsonapi.UnmarshalManyPayload(r.Body, reflect.TypeOf(new(CustomCertificate))) + if err != nil { + return nil, err + } + + cc := make([]*CustomCertificate, len(data)) + for i := range data { + typed, ok := data[i].(*CustomCertificate) + if !ok { + return nil, fmt.Errorf("got back a non-CustomCertificate response") + } + cc[i] = typed + } + + return cc, nil +} From d1cb5ceaf7e3bd06fe5f75b0e3187c807d75d824 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 19 Oct 2020 12:39:27 -0700 Subject: [PATCH 02/58] can get a single custom certificate --- fastly/custom_tls.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/fastly/custom_tls.go b/fastly/custom_tls.go index 217f10e19..acdd48377 100644 --- a/fastly/custom_tls.go +++ b/fastly/custom_tls.go @@ -21,7 +21,7 @@ type CustomCertificate struct { SerialNumber string `jsonapi:"attr,serial_number"` SignatureAlgorithm string `jsonapi:"attr,signature_algorithm"` UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` - TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` + TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` // TODO "type" is not populating } // ListCustomCertificatesInput is used as input to the ListBulkCertificates function. @@ -81,3 +81,29 @@ func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*Cust return cc, nil } + +// GetCustomCertificateInput is used as input to the GetCustomCertificate function. +type GetCustomCertificateInput struct { + ID string +} + +func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCertificate, error) { + + if i.ID == "" { + return nil, ErrMissingID + } + + p := fmt.Sprintf("/tls/certificates/%s", i.ID) + + r, err := c.Get(p, nil) + if err != nil { + return nil, err + } + + var cc CustomCertificate + if err := jsonapi.UnmarshalPayload(r.Body, &cc); err != nil { + return nil, err + } + + return &cc, nil +} From da7e6e612ce6e6b06ed499563d7c6c5525e3370a Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 19 Oct 2020 16:37:50 -0700 Subject: [PATCH 03/58] adds delete, updated, create custom TLS --- fastly/custom_tls.go | 81 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/fastly/custom_tls.go b/fastly/custom_tls.go index acdd48377..2903ff4d6 100644 --- a/fastly/custom_tls.go +++ b/fastly/custom_tls.go @@ -107,3 +107,84 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert return &cc, nil } + +type CreateCustomCertificateInput struct { + CertBlob string `jsonapi:"attr,cert_blob"` + Name string `jsonapi:"attr,name"` +} + +func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { // TODO panic: invalid character '<' looking for beginning of value + + if i.CertBlob == "" { + return nil, ErrMissingCertBlob + } + if i.Name == "" { + return nil, ErrMissingName + } + + p := "/tls/certificates" + + r, err := c.PostJSONAPI(p, i, nil) + if err != nil { + return nil, err + } + + var cc CustomCertificate + if err := jsonapi.UnmarshalPayload(r.Body, &cc); err != nil { + return nil, err + } + + return &cc, nil +} + +type UpdateCustomCertificateInput struct { + ID string `jsonapi:"attr,id"` + CertBlob string `jsonapi:"attr,cert_blob"` + Name string `jsonapi:"attr,name"` +} + +// UpdateCustomCertificate replace a certificate with a newly reissued certificate. +// By using this endpoint, the original certificate will cease to be used for future TLS handshakes. +// Thus, only SAN entries that appear in the replacement certificate will become TLS enabled. +// Any SAN entries that are missing in the replacement certificate will become disabled. +func (c *Client) UpdateCustomCertificate(i *UpdateCustomCertificateInput) (*CustomCertificate, error) { // TODO TEST THIS + if i.ID == "" { + return nil, ErrMissingID + } + + if i.CertBlob == "" { + return nil, ErrMissingCertBlob + } + + if i.Name == "" { + return nil, ErrMissingName + } + + path := fmt.Sprintf("/tls/certificates/%s", i.ID) + resp, err := c.PatchJSONAPI(path, i, nil) + if err != nil { + return nil, err + } + + var cc CustomCertificate + if err := jsonapi.UnmarshalPayload(resp.Body, &cc); err != nil { + return nil, err + } + return &cc, nil +} + +// DeleteCustomCertificateInput used for deleting a certificate. +type DeleteCustomCertificateInput struct { + ID string +} + +// DeleteCustomCertificate destroy a certificate. This disables TLS for all domains listed as SAN entries. +func (c *Client) DeleteCustomCertificate(i *DeleteCustomCertificateInput) error { + if i.ID == "" { + return ErrMissingID + } + + path := fmt.Sprintf("/tls/certificates/%s", i.ID) + _, err := c.Delete(path, nil) + return err +} From 04d9b79f64772b7295ec10ea584eb48c66c4e0bd Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 20 Oct 2020 10:46:17 -0700 Subject: [PATCH 04/58] cleaned up for feedback --- ...ustom_tls.go => custom_tls_certificate.go} | 12 +- fastly/custom_tls_certificate_test.go | 154 ++++++++++++++++++ 2 files changed, 160 insertions(+), 6 deletions(-) rename fastly/{custom_tls.go => custom_tls_certificate.go} (93%) create mode 100644 fastly/custom_tls_certificate_test.go diff --git a/fastly/custom_tls.go b/fastly/custom_tls_certificate.go similarity index 93% rename from fastly/custom_tls.go rename to fastly/custom_tls_certificate.go index 2903ff4d6..f7fa50318 100644 --- a/fastly/custom_tls.go +++ b/fastly/custom_tls_certificate.go @@ -8,7 +8,7 @@ import ( "github.com/google/jsonapi" ) -// CustomCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate +// CustomCertificate represents a custom certificate. Uses common TLSDomain type from CustomCertificate type CustomCertificate struct { ID string `jsonapi:"primary,tls_certificate"` CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` @@ -24,7 +24,7 @@ type CustomCertificate struct { TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` // TODO "type" is not populating } -// ListCustomCertificatesInput is used as input to the ListBulkCertificates function. +// ListCustomCertificatesInput is used as input to the ListCustomCertificatesInput function. type ListCustomCertificatesInput struct { PageNumber *uint // The page index for pagination. PageSize *uint // The number of keys per page. @@ -113,7 +113,7 @@ type CreateCustomCertificateInput struct { Name string `jsonapi:"attr,name"` } -func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { // TODO panic: invalid character '<' looking for beginning of value +func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { // TODO Possible platform bug, returns "Internal Server Error" if "type" is blank if i.CertBlob == "" { return nil, ErrMissingCertBlob @@ -138,9 +138,9 @@ func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*Cust } type UpdateCustomCertificateInput struct { - ID string `jsonapi:"attr,id"` - CertBlob string `jsonapi:"attr,cert_blob"` - Name string `jsonapi:"attr,name"` + ID string `jsonapi:"attr,id"` + CertBlob string `jsonapi:"attr,cert_blob"` + Name string `jsonapi:"attr,name"` } // UpdateCustomCertificate replace a certificate with a newly reissued certificate. diff --git a/fastly/custom_tls_certificate_test.go b/fastly/custom_tls_certificate_test.go new file mode 100644 index 000000000..ebd6158d0 --- /dev/null +++ b/fastly/custom_tls_certificate_test.go @@ -0,0 +1,154 @@ +package fastly + +import "testing" + +func TestClient_CustomCertificate(t *testing.T) { + t.Parallel() + + fixtureBase := "custom_tls/" + + // Create + var err error + var cc *CustomCertificate + record(t, fixtureBase+"create", func(c *Client) { + cc, err = c.CreateCustomCertificate(&CreateCustomCertificateInput{ + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + Name: "My certificate", + }) + }) + if err != nil { + t.Fatal(err) + } + + // Ensure deleted + defer func() { + record(t, fixtureBase+"cleanup", func(c *Client) { + c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + ID: cc.ID, + }) + }) + }() + + // List + var lcc []*CustomCertificate + record(t, fixtureBase+"list", func(c *Client) { + lcc, err = c.ListCustomCertificates(&ListCustomCertificatesInput{}) + }) + if err != nil { + t.Fatal(err) + } + if len(lcc) < 1 { + t.Errorf("bad Custom certificates: %v", lcc) + } + + // Get + var gcc *CustomCertificate + record(t, fixtureBase+"get", func(c *Client) { + gcc, err = c.GetCustomCertificate(&GetCustomCertificateInput{ + ID: cc.ID, + }) + }) + if err != nil { + t.Fatal(err) + } + if cc.ID != gcc.ID { + t.Errorf("bad ID: %q (%q)", cc.ID, gcc.ID) + } + + // Update + var ucc *CustomCertificate + record(t, fixtureBase+"update", func(c *Client) { + ucc, err = c.UpdateCustomCertificate(&UpdateCustomCertificateInput{ + ID: "CERTIFICATE_ID", + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + Name: "My certificate", + }) + }) + if err != nil { + t.Fatal(err) + } + if cc.ID != ucc.ID { + t.Errorf("bad ID: %q (%q)", cc.ID, ucc.ID) + } + + // Delete + record(t, fixtureBase+"delete", func(c *Client) { + err = c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + ID: cc.ID, + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_CreateCustomCertificate_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls/create", func(c *Client) { + _, err = c.CreateCustomCertificate(&CreateCustomCertificateInput{ + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + Name: "My certificate", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_DeleteCustomCertificate_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls/delete", func(c *Client) { + err = c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + ID: "CERTIFICATE_ID", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_ListCustomCertificates_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls/list", func(c *Client) { + _, err = c.ListCustomCertificates(&ListCustomCertificatesInput{}) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_GetCustomCertificate_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls/get", func(c *Client) { + _, err = c.GetCustomCertificate(&GetCustomCertificateInput{ + ID: "CERTIFICATE_ID", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_UpdateCustomCertificate_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls/update", func(c *Client) { + _, err = c.UpdateCustomCertificate(&UpdateCustomCertificateInput{ + ID: "CERTIFICATE_ID", + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + Name: "My certificate", + }) + }) + if err != nil { + t.Fatal(err) + } +} From 51d3428d185cca33979e1540122ef594e75147ab Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 20 Oct 2020 15:30:13 -0700 Subject: [PATCH 05/58] get, list and patch custom tls configurations --- fastly/custom_tls_configuration.go | 149 +++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 fastly/custom_tls_configuration.go diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go new file mode 100644 index 000000000..d3645cbbe --- /dev/null +++ b/fastly/custom_tls_configuration.go @@ -0,0 +1,149 @@ +package fastly + +import ( + "fmt" + "reflect" + "time" + + "github.com/google/jsonapi" +) + +// CustomTLSConfiguration +type CustomTLSConfiguration struct { + ID string `jsonapi:"primary,tls_configuration"` + DNSRecords []*DNSRecord `jsonapi:"relation,dns_records,dns_record"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + Bulk bool `jsonapi:"attr,bulk"` + Default bool `jsonapi:"attr,default"` + HTTPProtocols []string `jsonapi:"attr,http_protocols"` + Name string `jsonapi:"attr,name"` + UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` +} + +// DNSRecord +type DNSRecord struct { + ID string `jsonapi:"primary,dns_record"` + RecordType string `jsonapi:"attr,record_type"` + Region string `jsonapi:"attr,region"` +} + +// ListCustomTLSConfigurationsInput is used as input to the ListCustomTLSConfigurationsInput function. +type ListCustomTLSConfigurationsInput struct { + PageNumber *uint // The page index for pagination. + PageSize *uint // The number of keys per page. + FilterBulk *bool // Whether or not to only include bulk=true configurations +} + +// formatFilters converts user input into query parameters for filtering. +func (i *ListCustomTLSConfigurationsInput) formatFilters() map[string]string { + result := map[string]string{} + pairings := map[string]interface{}{ + "filter[bulk]": i.FilterBulk, + "page[size]": i.PageSize, + "page[number]": i.PageNumber, + } + for key, value := range pairings { + if !reflect.ValueOf(value).IsNil() { + result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + } + } + return result +} + +// ListCustomTLSConfigurations list all TLS configurations. +func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput) ([]*CustomTLSConfiguration, error) { + + p := "/tls/configurations" + filters := &RequestOptions{ + Params: i.formatFilters(), + Headers: map[string]string{ + "Accept": "application/vnd.api+json", // this is required otherwise the filters don't work + }, + } + + r, err := c.Get(p, filters) + if err != nil { + return nil, err + } + + data, err := jsonapi.UnmarshalManyPayload(r.Body, reflect.TypeOf(new(CustomTLSConfiguration))) + if err != nil { + return nil, err + } + + con := make([]*CustomTLSConfiguration, len(data)) + for i := range data { + typed, ok := data[i].(*CustomTLSConfiguration) + if !ok { + return nil, fmt.Errorf("got back a non-tls-configuration response") + } + con[i] = typed + } + + return con, nil +} + +// GetCustomTLSConfigurationInput is used as input to the GetCustomTLSConfiguration function. +type GetCustomTLSConfigurationInput struct { + ID string + Include string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. +} + +func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (*CustomTLSConfiguration, error) { + + if i.ID == "" { + return nil, ErrMissingID + } + + p := fmt.Sprintf("/tls/configurations/%s", i.ID) + + ro := &RequestOptions{ + Headers: map[string]string{ + "Accept": "application/vnd.api+json", // this is required otherwise the params don't work + }, + } + + if i.Include != "" { + ro.Params = map[string]string{"include": i.Include} + } + + r, err := c.Get(p, ro) + if err != nil { + return nil, err + } + + var con CustomTLSConfiguration + if err := jsonapi.UnmarshalPayload(r.Body, &con); err != nil { + return nil, err + } + + return &con, nil +} + +type UpdateCustomTLSConfigurationInput struct { + ID string `jsonapi:"attr,id"` + Name string `jsonapi:"attr,name"` +} + +// UpdateCustomTLSConfiguration can only be used to change the name of the configuration +func (c *Client) UpdateCustomTLSConfiguration(i *UpdateCustomTLSConfigurationInput) (*CustomTLSConfiguration, error) { + if i.ID == "" { + return nil, ErrMissingID + } + + if i.Name == "" { + return nil, ErrMissingName + } + + path := fmt.Sprintf("/tls/configurations/%s", i.ID) + resp, err := c.PatchJSONAPI(path, i, nil) + if err != nil { + return nil, err + } + + var con CustomTLSConfiguration + if err := jsonapi.UnmarshalPayload(resp.Body, &con); err != nil { + return nil, err + } + return &con, nil +} From c4e5eb80cd9427b832dfbe776376b05b024b694a Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 21 Oct 2020 10:51:42 -0700 Subject: [PATCH 06/58] adds test fixtures --- fastly/custom_tls_certificate.go | 6 +-- fastly/fixtures/custom_tls/cleanup.yaml | 37 ++++++++++++++++++ fastly/fixtures/custom_tls/create.yaml | 50 +++++++++++++++++++++++++ fastly/fixtures/custom_tls/delete.yaml | 37 ++++++++++++++++++ fastly/fixtures/custom_tls/get.yaml | 43 +++++++++++++++++++++ fastly/fixtures/custom_tls/list.yaml | 45 ++++++++++++++++++++++ fastly/fixtures/custom_tls/update.yaml | 46 +++++++++++++++++++++++ 7 files changed, 261 insertions(+), 3 deletions(-) create mode 100644 fastly/fixtures/custom_tls/cleanup.yaml create mode 100644 fastly/fixtures/custom_tls/create.yaml create mode 100644 fastly/fixtures/custom_tls/delete.yaml create mode 100644 fastly/fixtures/custom_tls/get.yaml create mode 100644 fastly/fixtures/custom_tls/list.yaml create mode 100644 fastly/fixtures/custom_tls/update.yaml diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index f7fa50318..5121e75e4 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -8,7 +8,7 @@ import ( "github.com/google/jsonapi" ) -// CustomCertificate represents a custom certificate. Uses common TLSDomain type from CustomCertificate +// CustomCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate type CustomCertificate struct { ID string `jsonapi:"primary,tls_certificate"` CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` @@ -21,7 +21,7 @@ type CustomCertificate struct { SerialNumber string `jsonapi:"attr,serial_number"` SignatureAlgorithm string `jsonapi:"attr,signature_algorithm"` UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` - TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` // TODO "type" is not populating + TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` } // ListCustomCertificatesInput is used as input to the ListCustomCertificatesInput function. @@ -147,7 +147,7 @@ type UpdateCustomCertificateInput struct { // By using this endpoint, the original certificate will cease to be used for future TLS handshakes. // Thus, only SAN entries that appear in the replacement certificate will become TLS enabled. // Any SAN entries that are missing in the replacement certificate will become disabled. -func (c *Client) UpdateCustomCertificate(i *UpdateCustomCertificateInput) (*CustomCertificate, error) { // TODO TEST THIS +func (c *Client) UpdateCustomCertificate(i *UpdateCustomCertificateInput) (*CustomCertificate, error) { if i.ID == "" { return nil, ErrMissingID } diff --git a/fastly/fixtures/custom_tls/cleanup.yaml b/fastly/fixtures/custom_tls/cleanup.yaml new file mode 100644 index 000000000..978488f0c --- /dev/null +++ b/fastly/fixtures/custom_tls/cleanup.yaml @@ -0,0 +1,37 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates/CERTIFICATE_ID + method: DELETE + response: + body: "" + headers: + Accept-Ranges: + - bytes + Date: + - Sat, 11 May 2019 21:45:02 GMT + Status: + - 204 No Content + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-lax8631-LAX + X-Timer: + - S1557611103.608075,VS0,VE254 + status: 204 No Content + code: 204 diff --git a/fastly/fixtures/custom_tls/create.yaml b/fastly/fixtures/custom_tls/create.yaml new file mode 100644 index 000000000..10634a5dd --- /dev/null +++ b/fastly/fixtures/custom_tls/create.yaml @@ -0,0 +1,50 @@ +--- +version: 1 +interactions: +- request: + body: | + {"data":{"type":"","attributes":{"cert_blob":"-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n","name":"My certificate"}}} + form: {} + headers: + Accept: + - application/vnd.api+json + Content-Type: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates + method: POST + response: + body: '{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate","attributes":{"created_at":"2020-10-21T17:39:36.000Z","issued_to":"ISSUED_TO","issuer":"ISSUER","name":"My certificate","not_after":"2021-11-14T17:21:03.000Z","not_before":"2020-10-13T17:21:03.000Z","replace":false,"serial_number":"00000000000000000","signature_algorithm":"SHA256-RSA","updated_at":"2020-10-21T17:39:36.000Z"},"relationships":{"tls_domains":{"data":[{"id":"DOMAIN_NAME","type":"tls_domain"}]}}}}' + headers: + Accept-Ranges: + - bytes + Cache-Control: + - no-cache + Content-Type: + - application/json + Date: + - Thu, 06 Jun 2019 22:12:54 GMT + Fastly-Ratelimit-Remaining: + - "980" + Fastly-Ratelimit-Reset: + - "1559862000" + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-sjc3621-SJC + X-Timer: + - S1559859174.118436,VS0,VE554 + status: 200 OK + code: 200 diff --git a/fastly/fixtures/custom_tls/delete.yaml b/fastly/fixtures/custom_tls/delete.yaml new file mode 100644 index 000000000..978488f0c --- /dev/null +++ b/fastly/fixtures/custom_tls/delete.yaml @@ -0,0 +1,37 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates/CERTIFICATE_ID + method: DELETE + response: + body: "" + headers: + Accept-Ranges: + - bytes + Date: + - Sat, 11 May 2019 21:45:02 GMT + Status: + - 204 No Content + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-lax8631-LAX + X-Timer: + - S1557611103.608075,VS0,VE254 + status: 204 No Content + code: 204 diff --git a/fastly/fixtures/custom_tls/get.yaml b/fastly/fixtures/custom_tls/get.yaml new file mode 100644 index 000000000..29ddb4ad4 --- /dev/null +++ b/fastly/fixtures/custom_tls/get.yaml @@ -0,0 +1,43 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates/CERTIFICATE_ID + method: GET + response: + body: '{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate","attributes":{"created_at":"2020-10-21T17:39:36.000Z","issued_to":"ISSUED_TO","issuer":"ISSUER","name":"My certificate","not_after":"2021-11-14T17:21:03.000Z","not_before":"2020-10-13T17:21:03.000Z","replace":false,"serial_number":"00000000000000000","signature_algorithm":"SHA256-RSA","updated_at":"2020-10-21T17:39:36.000Z"},"relationships":{"tls_domains":{"data":[{"id":"DOMAIN_NAME","type":"tls_domain"}]}}}}' + headers: + Accept-Ranges: + - bytes + Age: + - "0" + Content-Type: + - application/json + Date: + - Sat, 11 May 2019 03:33:50 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-lax8622-LAX + X-Timer: + - S1557545630.411550,VS0,VE560 + status: 200 OK + code: 200 diff --git a/fastly/fixtures/custom_tls/list.yaml b/fastly/fixtures/custom_tls/list.yaml new file mode 100644 index 000000000..4c7f49cd4 --- /dev/null +++ b/fastly/fixtures/custom_tls/list.yaml @@ -0,0 +1,45 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + Accept: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates + method: GET + response: + body: '{"data": [{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate","attributes":{"created_at":"2020-10-21T17:39:36.000Z","issued_to":"ISSUED_TO","issuer":"ISSUER","name":"My certificate","not_after":"2021-11-14T17:21:03.000Z","not_before":"2020-10-13T17:21:03.000Z","replace":false,"serial_number":"00000000000000000","signature_algorithm":"SHA256-RSA","updated_at":"2020-10-21T17:39:36.000Z"},"relationships":{"tls_domains":{"data":[{"id":"DOMAIN_NAME","type":"tls_domain"}]}}}}]}' + headers: + Accept-Ranges: + - bytes + Age: + - "0" + Content-Type: + - application/json + Date: + - Sat, 11 May 2019 03:33:50 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-lax8622-LAX + X-Timer: + - S1557545630.411550,VS0,VE560 + status: 200 OK + code: 200 diff --git a/fastly/fixtures/custom_tls/update.yaml b/fastly/fixtures/custom_tls/update.yaml new file mode 100644 index 000000000..5c7ddeb36 --- /dev/null +++ b/fastly/fixtures/custom_tls/update.yaml @@ -0,0 +1,46 @@ +--- +version: 1 +interactions: +- request: + body: | + {"data":{"type":"","attributes":{"cert_blob":"-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n","id":"CERTIFICATE_ID","name":"My certificate"}}} + form: {} + headers: + Accept: + - application/vnd.api+json + Content-Type: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/certificates/CERTIFICATE_ID + method: PATCH + response: + body: '{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate","attributes":{"created_at":"2020-10-21T17:39:36.000Z","issued_to":"ISSUED_TO","issuer":"ISSUER","name":"My certificate","not_after":"2021-11-14T17:21:03.000Z","not_before":"2020-10-13T17:21:03.000Z","replace":false,"serial_number":"00000000000000000","signature_algorithm":"SHA256-RSA","updated_at":"2020-10-21T17:39:36.000Z"},"relationships":{"tls_domains":{"data":[{"id":"DOMAIN_NAME","type":"tls_domain"}]}}}}' + headers: + Accept-Ranges: + - bytes + Content-Length: + - "890" + Content-Type: + - application/vnd.api+json + Date: + - Sat, 11 May 2019 21:45:02 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9036-CONTROL-SLWDC, cache-lax8631-LAX + X-Timer: + - S1557611102.061591,VS0,VE521 + status: 200 OK + code: 200 From 10182e010ddf9a91935a552d56ac9620a487f058 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 21 Oct 2020 16:40:28 -0700 Subject: [PATCH 07/58] adds TLSActivation API operations --- fastly/custom_tls_activation.go | 193 ++++++++++++++++++++++++++++++++ fastly/errors.go | 12 ++ 2 files changed, 205 insertions(+) create mode 100644 fastly/custom_tls_activation.go diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go new file mode 100644 index 000000000..a0e791449 --- /dev/null +++ b/fastly/custom_tls_activation.go @@ -0,0 +1,193 @@ +package fastly + +import ( + "fmt" + "reflect" + "time" + + "github.com/google/jsonapi" +) + +// TLSActivation represents a /tls/activations response. +type TLSActivation struct { + ID string `jsonapi:"primary,tls_activation"` + TLSConfigurations []*TLSConfiguration `jsonapi:"relation,tls_configurations,tls_configuration"` // TLSConfiguration type shared with BulkCertificate + TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` // TLSDomain type shared with BulkCertificate + TLSCertificates []*TLSCertificate `jsonapi:"relation,tls_certificates,tls_certificate"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` +} + +// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API +type TLSCertificate struct { + ID string `jsonapi:"primary,tls_certificate"` + Type string `jsonapi:"attr,type"` +} + +// ListTLSActivationsInput is used as input to the ListTLSActivations function. +type ListTLSActivationsInput struct { + FilterTLSCertificateID *string // Limit the returned activations to a specific certificate. + FilterTLSConfigurationID *string // Limit the returned activations to a specific TLS configuration. + FilterTLSDomainID *string // Limit the returned rules to a specific domain name. + Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. + PageNumber *uint // The page index for pagination. + PageSize *uint // The number of activations per page. +} + +// formatFilters converts user input into query parameters for filtering. +func (i *ListTLSActivationsInput) formatFilters() map[string]string { + result := map[string]string{} + pairings := map[string]interface{}{ + "filter[tls_certificate.id]": i.FilterTLSCertificateID, + "filter[tls_configuration.id]": i.FilterTLSConfigurationID, + "filter[tls_domain.id]": i.FilterTLSDomainID, + "include": i.Include, + "page[number]": i.PageNumber, + "page[size]": i.PageSize, + } + for key, value := range pairings { + if !reflect.ValueOf(value).IsNil() { + result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + } + } + + return result +} + +// ListTLSActivations list all activations. +func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivation, error) { // TODO not populating relations + + p := "/tls/activations" + filters := &RequestOptions{ + Params: i.formatFilters(), + Headers: map[string]string{ + "Accept": "application/vnd.api+json", // this is required otherwise the filters don't work + }, + } + + r, err := c.Get(p, filters) + if err != nil { + return nil, err + } + + data, err := jsonapi.UnmarshalManyPayload(r.Body, reflect.TypeOf(new(TLSActivation))) + if err != nil { + return nil, err + } + + a := make([]*TLSActivation, len(data)) + for i := range data { + typed, ok := data[i].(*TLSActivation) + if !ok { + return nil, fmt.Errorf("got back a non-TLSActivation response") + } + a[i] = typed + } + + return a, nil +} + +// GetTLSActivationInput is used as input to the GetTLSActivation function. +type GetTLSActivationInput struct { + ID string +} + +// GetTLSActivation retrieve a single activation. +func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, error) { // TODO not populating relations + + if i.ID == "" { + return nil, ErrMissingID + } + + p := fmt.Sprintf("/tls/activations/%s", i.ID) + + r, err := c.Get(p, nil) + if err != nil { + return nil, err + } + + var a TLSActivation + if err := jsonapi.UnmarshalPayload(r.Body, &a); err != nil { + return nil, err + } + + return &a, nil +} + +// CreateTLSActivationInput is used as input to the CreateTLSActivation function. +type CreateTLSActivationInput struct { + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` +} + +// CreateTLSActivation enable TLS for a domain using a custom certificate. +func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { // TODO test + + if i.TLSCertificate == nil { + return nil, ErrMissingTLSCertificateID // TODO update this error + } + if i.TLSConfiguration == nil { + return nil, ErrMissingTLSConfigurationID // TODO update this error + } + if i.TLSDomain == nil { + return nil, ErrMissingTLSDomainID // TODO update this error + } + + p := "/tls/activations" + + r, err := c.PostJSONAPI(p, i, nil) + if err != nil { + return nil, err + } + + var a TLSActivation + if err := jsonapi.UnmarshalPayload(r.Body, &a); err != nil { + return nil, err + } + + return &a, nil +} + +// UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. +type UpdateTLSActivationInput struct { + ID string `jsonapi:"attr,id"` + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` +} + +// UpdateTLSActivation +func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivation, error) { // TODO test + if i.ID == "" { + return nil, ErrMissingID + } + if i.TLSCertificate == nil { + return nil, ErrMissingTLSCertificateID // TODO update this error + } + + path := fmt.Sprintf("/tls/activations/%s", i.ID) + resp, err := c.PatchJSONAPI(path, i, nil) + if err != nil { + return nil, err + } + + var bc TLSActivation + if err := jsonapi.UnmarshalPayload(resp.Body, &bc); err != nil { + return nil, err + } + return &bc, nil +} + +// DeleteTLSActivationInput used for deleting a certificate. +type DeleteTLSActivationInput struct { + ID string +} + +// DeleteTLSActivation destroy a certificate. +func (c *Client) DeleteTLSActivation(i *DeleteTLSActivationInput) error { + if i.ID == "" { + return ErrMissingID + } + + path := fmt.Sprintf("/tls/activations/%s", i.ID) + _, err := c.Delete(path, nil) + return err +} diff --git a/fastly/errors.go b/fastly/errors.go index e16a83251..c8fbfb7a5 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -149,6 +149,18 @@ var ErrMissingCertBlob = errors.New("missing required field 'CertBlob'") // a "IntermediatesBlob" key, but one was not set. var ErrMissingIntermediatesBlob = errors.New("missing required field 'IntermediatesBlob'") +// ErrMissingTLSCertificateID is an error that is returned from an input struct that requires +// a "TLSCertificateID" key, but one was not set. +var ErrMissingTLSCertificateID = errors.New("missing required field 'TLSCertificateID'") + +// ErrMissingTLSConfigurationID is an error that is returned from an input struct that requires +// a "TLSConfigurationID" key, but one was not set. +var ErrMissingTLSConfigurationID = errors.New("missing required field 'TLSConfigurationID'") + +// ErrMissingTLSDomainID is an error that is returned from an input struct that requires +// a "TLSDomainID" key, but one was not set. +var ErrMissingTLSDomainID = errors.New("missing required field 'TLSDomainID'") + // ErrStatusNotOk is an error that indicates that indicates that the response body returned // by the Fastly API was not `{"status": "ok"}` var ErrStatusNotOk = errors.New("unexpected 'status' field in API response body") From b42b8fd7cb91d8e8502e311068d4b470f1f94879 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 21 Oct 2020 16:41:56 -0700 Subject: [PATCH 08/58] go fmt --- fastly/custom_tls_activation.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index a0e791449..7c94cf1ab 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -115,9 +115,9 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` } // CreateTLSActivation enable TLS for a domain using a custom certificate. @@ -150,8 +150,8 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { - ID string `jsonapi:"attr,id"` - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` + ID string `jsonapi:"attr,id"` + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` } // UpdateTLSActivation From 6f609191200f51fa1442d20281de689f5641cb3e Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 22 Oct 2020 15:45:05 -0700 Subject: [PATCH 09/58] adds tls configuration tests and fixtures --- fastly/custom_tls_configuration_test.go | 101 ++++++++++++++++++ .../custom_tls_configuration/get.yaml | 43 ++++++++ .../custom_tls_configuration/list.yaml | 46 ++++++++ .../custom_tls_configuration/update.yaml | 46 ++++++++ 4 files changed, 236 insertions(+) create mode 100644 fastly/custom_tls_configuration_test.go create mode 100644 fastly/fixtures/custom_tls_configuration/get.yaml create mode 100644 fastly/fixtures/custom_tls_configuration/list.yaml create mode 100644 fastly/fixtures/custom_tls_configuration/update.yaml diff --git a/fastly/custom_tls_configuration_test.go b/fastly/custom_tls_configuration_test.go new file mode 100644 index 000000000..53afecdca --- /dev/null +++ b/fastly/custom_tls_configuration_test.go @@ -0,0 +1,101 @@ +package fastly + +import "testing" + +func TestClient_CustomTLSConfiguration(t *testing.T) { + t.Parallel() + + fixtureBase := "custom_tls_configuration/" + + var err error + conID := "TLS_CONFIGURATION_ID" + + // Get + var gcon *CustomTLSConfiguration + record(t, fixtureBase+"get", func(c *Client) { + gcon, err = c.GetCustomTLSConfiguration(&GetCustomTLSConfigurationInput{ + ID: conID, + }) + }) + if err != nil { + t.Fatal(err) + } + if conID != gcon.ID { + t.Errorf("bad ID: %q (%q)", conID, gcon.ID) + } + + // List + var lcon []*CustomTLSConfiguration + record(t, fixtureBase+"list", func(c *Client) { + lcon, err = c.ListCustomTLSConfigurations(&ListCustomTLSConfigurationsInput{}) + }) + if err != nil { + t.Fatal(err) + } + if len(lcon) < 1 { + t.Errorf("bad tls configurations: %v", lcon) + } + + + + // Update + var ucon *CustomTLSConfiguration + newName := "My configuration v2" + record(t, fixtureBase+"update", func(c *Client) { + ucon, err = c.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ + ID: "TLS_CONFIGURATION_ID", + Name: newName, + }) + }) + if err != nil { + t.Fatal(err) + } + if conID != ucon.ID { + t.Errorf("bad ID: %q (%q)", conID, ucon.ID) + } + if ucon.Name != newName { + t.Errorf("bad Name: %q (%q)", newName, ucon.Name) + } + +} + +func TestClient_ListCustomTLSConfigurations_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_configuration/list", func(c *Client) { + _, err = c.ListCustomTLSConfigurations(&ListCustomTLSConfigurationsInput{}) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_GetCustomTLSConfiguration_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_configuration/get", func(c *Client) { + _, err = c.GetCustomTLSConfiguration(&GetCustomTLSConfigurationInput{ + ID: "TLS_CONFIGURATION_ID", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_UpdateCustomTLSConfiguration_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_configuration/update", func(c *Client) { + _, err = c.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ + ID: "TLS_CONFIGURATION_ID", + Name: "My configuration v2", + }) + }) + if err != nil { + t.Fatal(err) + } +} diff --git a/fastly/fixtures/custom_tls_configuration/get.yaml b/fastly/fixtures/custom_tls_configuration/get.yaml new file mode 100644 index 000000000..7495ad456 --- /dev/null +++ b/fastly/fixtures/custom_tls_configuration/get.yaml @@ -0,0 +1,43 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + Accept: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/configurations/TLS_CONFIGURATION_ID + method: GET + response: + body: '{"data":{"id":"TLS_CONFIGURATION_ID","type":"tls_configuration","attributes":{"bulk":false,"created_at":"2018-09-11T20:59:51.000Z","default":true,"http_protocols":["http/1.1","http/2"],"name":"My configuration","tls_protocols":["1.2"],"updated_at":"2020-10-20T22:16:11.000Z"},"relationships":{"dns_records":{"data":[{"id":"IP_ADDRESS","type":"dns_record"}]}}},"included":[{"id":"IP_ADDRESS","type":"dns_record","attributes":{"record_type":"A","region":"global"}}]}' + headers: + Accept-Ranges: + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 22 Oct 2020 22:07:52 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish, 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9036-CONTROL-SLWDC, cache-sea4481-SEA + X-Timer: + - S1603404473.590476,VS0,VE111 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_configuration/list.yaml b/fastly/fixtures/custom_tls_configuration/list.yaml new file mode 100644 index 000000000..36a8c364f --- /dev/null +++ b/fastly/fixtures/custom_tls_configuration/list.yaml @@ -0,0 +1,46 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + Accept: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/configurations + method: GET + response: + body: '{"data":[{"id":"TLS_CONFIGURATION_ID","type":"tls_configuration","attributes":{"bulk":false,"created_at":"2018-09-11T20:59:51.000Z","default":true,"http_protocols":["http/1.1","http/2"],"name":"My configuration","tls_protocols":["1.2"],"updated_at":"2020-10-20T22:16:11.000Z"}}]}' + headers: + Accept-Ranges: + - bytes + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 22 Oct 2020 22:34:56 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9036-CONTROL-SLWDC, cache-sea4463-SEA + X-Timer: + - S1603406096.136249,VS0,VE107 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_configuration/update.yaml b/fastly/fixtures/custom_tls_configuration/update.yaml new file mode 100644 index 000000000..2c1e821ad --- /dev/null +++ b/fastly/fixtures/custom_tls_configuration/update.yaml @@ -0,0 +1,46 @@ +--- +version: 1 +interactions: +- request: + body: | + {"data":{"type":"","attributes":{"id":"TLS_CONFIGURATION_ID","name":"My configuration v2"}}} + form: {} + headers: + Accept: + - application/vnd.api+json + Content-Type: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/configurations/TLS_CONFIGURATION_ID + method: PATCH + response: + body: '{"data":{"id":"TLS_CONFIGURATION_ID","type":"tls_configuration","attributes":{"bulk":false,"created_at":"2018-09-11T20:59:51.000Z","default":true,"http_protocols":["http/1.1","http/2"],"name":"My configuration v2","tls_protocols":["1.2"],"updated_at":"2020-10-22T22:38:24.000Z"}}}' + headers: + Accept-Ranges: + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 22 Oct 2020 22:37:37 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish, 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-sea4469-SEA + X-Timer: + - S1603406257.897746,VS0,VE113 + status: 200 OK + code: 200 + duration: "" From 72b317d10a1becb186d0ba62321accf5b7a672fe Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 3 Nov 2020 08:56:49 -0800 Subject: [PATCH 10/58] adds tests for activation, fixes relationships --- fastly/custom_tls_activation.go | 10 +- fastly/custom_tls_activation_test.go | 165 ++++++++++++++++++ .../custom_tls_activation/cleanup.yaml | 43 +++++ .../custom_tls_activation/create.yaml | 48 +++++ .../custom_tls_activation/delete.yaml | 43 +++++ .../fixtures/custom_tls_activation/get.yaml | 43 +++++ .../fixtures/custom_tls_activation/list.yaml | 45 +++++ .../custom_tls_activation/update.yaml | 48 +++++ 8 files changed, 440 insertions(+), 5 deletions(-) create mode 100644 fastly/custom_tls_activation_test.go create mode 100644 fastly/fixtures/custom_tls_activation/cleanup.yaml create mode 100644 fastly/fixtures/custom_tls_activation/create.yaml create mode 100644 fastly/fixtures/custom_tls_activation/delete.yaml create mode 100644 fastly/fixtures/custom_tls_activation/get.yaml create mode 100644 fastly/fixtures/custom_tls_activation/list.yaml create mode 100644 fastly/fixtures/custom_tls_activation/update.yaml diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 7c94cf1ab..fd22225f5 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -11,9 +11,9 @@ import ( // TLSActivation represents a /tls/activations response. type TLSActivation struct { ID string `jsonapi:"primary,tls_activation"` - TLSConfigurations []*TLSConfiguration `jsonapi:"relation,tls_configurations,tls_configuration"` // TLSConfiguration type shared with BulkCertificate - TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` // TLSDomain type shared with BulkCertificate - TLSCertificates []*TLSCertificate `jsonapi:"relation,tls_certificates,tls_certificate"` + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate"` CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } @@ -54,7 +54,7 @@ func (i *ListTLSActivationsInput) formatFilters() map[string]string { } // ListTLSActivations list all activations. -func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivation, error) { // TODO not populating relations +func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivation, error) { p := "/tls/activations" filters := &RequestOptions{ @@ -92,7 +92,7 @@ type GetTLSActivationInput struct { } // GetTLSActivation retrieve a single activation. -func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, error) { // TODO not populating relations +func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, error) { if i.ID == "" { return nil, ErrMissingID diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go new file mode 100644 index 000000000..feb2c88a4 --- /dev/null +++ b/fastly/custom_tls_activation_test.go @@ -0,0 +1,165 @@ +package fastly + +import ( + "testing" +) + +func TestClient_TLSActivation(t *testing.T) { + t.Parallel() + + fixtureBase := "custom_tls_activation/" + + // Create + var err error + var ta *TLSActivation + record(t, fixtureBase+"create", func(c *Client) { + ta, err = c.CreateTLSActivation(&CreateTLSActivationInput{ + TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + TLSConfiguration: &TLSConfiguration{ID:"CONFIGURATION_ID"}, + TLSDomain: &TLSDomain{ID:"DOMAIN_NAME"}, + }) + }) + if err != nil { + t.Fatal(err) + } + + // Ensure deleted + defer func() { + record(t, fixtureBase+"cleanup", func(c *Client) { + c.DeleteTLSActivation(&DeleteTLSActivationInput{ + ID: ta.ID, + }) + }) + }() + + // List + var lta []*TLSActivation + record(t, fixtureBase+"list", func(c *Client) { + lta, err = c.ListTLSActivations(&ListTLSActivationsInput{}) + }) + if err != nil { + t.Fatal(err) + } + if len(lta) < 1 { + t.Errorf("bad TLS activations: %v", lta) + } + if lta[0].TLSCertificate == nil { + t.Errorf("TLS certificate relation should not be nil: %v", lta) + } + if lta[0].TLSConfiguration == nil { + t.Errorf("TLS configuration relation should not be nil: %v", lta) + } + if lta[0].TLSDomain == nil { + t.Errorf("TLS domain relation should not be nil: %v", lta) + } + + // Get + var gta *TLSActivation + record(t, fixtureBase+"get", func(c *Client) { + gta, err = c.GetTLSActivation(&GetTLSActivationInput{ + ID: ta.ID, + }) + }) + if err != nil { + t.Fatal(err) + } + if ta.ID != gta.ID { + t.Errorf("bad ID: %q (%q)", ta.ID, gta.ID) + } + + // Update + var uta *TLSActivation + record(t, fixtureBase+"update", func(c *Client) { + uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ + ID: "ACTIVATION_ID", + TLSCertificate: &TLSCertificate{}, + }) + }) + if err != nil { + t.Fatal(err) + } + if ta.ID != uta.ID { + t.Errorf("bad ID: %q (%q)", ta.ID, uta.ID) + } + + // Delete + record(t, fixtureBase+"delete", func(c *Client) { + err = c.DeleteTLSActivation(&DeleteTLSActivationInput{ + ID: ta.ID, + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_CreateTLSActivation_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_activation/create", func(c *Client) { + _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ + TLSCertificate: &TLSCertificate{}, + TLSConfiguration: &TLSConfiguration{}, + TLSDomain: &TLSDomain{}, + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_DeleteTLSActivation_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_activation/delete", func(c *Client) { + err = c.DeleteTLSActivation(&DeleteTLSActivationInput{ + ID: "ACTIVATION_ID", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_ListTLSActivations_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_activation/list", func(c *Client) { + _, err = c.ListTLSActivations(&ListTLSActivationsInput{}) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_GetTLSActivation_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_activation/get", func(c *Client) { + _, err = c.GetTLSActivation(&GetTLSActivationInput{ + ID: "ACTIVATION_ID", + }) + }) + if err != nil { + t.Fatal(err) + } +} + +func TestClient_UpdateTLSActivation_validation(t *testing.T) { + t.Parallel() + + var err error + record(t, "custom_tls_activation/update", func(c *Client) { + _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ + ID: "ACTIVATION_ID", + TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + }) + }) + if err != nil { + t.Fatal(err) + } +} diff --git a/fastly/fixtures/custom_tls_activation/cleanup.yaml b/fastly/fixtures/custom_tls_activation/cleanup.yaml new file mode 100644 index 000000000..1728eb4e9 --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/cleanup.yaml @@ -0,0 +1,43 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations/ACTIVATION_ID + method: DELETE + response: + body: '{}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Fri, 30 Oct 2020 19:40:25 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-sea4475-SEA + X-Timer: + - S1604086825.126245,VS0,VE103 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_activation/create.yaml b/fastly/fixtures/custom_tls_activation/create.yaml new file mode 100644 index 000000000..385f9c327 --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/create.yaml @@ -0,0 +1,48 @@ +--- +version: 1 +interactions: +- request: + body: | + {"data":{"type":"","relationships":{"tls_certificate":{"data":{"type":"tls_certificate"}},"tls_configuration":{"data":{"type":"tls_configuration"}},"tls_domain":{"data":{"type":"tls_domain"}}}},"included":[{"type":"tls_certificate","attributes":{"type":""}},{"type":"tls_configuration","attributes":{"type":""}},{"type":"tls_domain","attributes":{"type":""}}]} + form: {} + headers: + Accept: + - application/vnd.api+json + Content-Type: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations + method: POST + response: + body: '{"data":{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-15T15:50:17.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}}}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 29 Oct 2020 21:56:36 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9037-CONTROL-SLWDC, cache-sea4479-SEA + X-Timer: + - S1604008596.366056,VS0,VE70 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_activation/delete.yaml b/fastly/fixtures/custom_tls_activation/delete.yaml new file mode 100644 index 000000000..08842cc17 --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/delete.yaml @@ -0,0 +1,43 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations/ACTIVATION_ID + method: DELETE + response: + body: '{}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 29 Oct 2020 21:56:36 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9037-CONTROL-SLWDC, cache-sea4479-SEA + X-Timer: + - S1604008596.365429,VS0,VE113 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_activation/get.yaml b/fastly/fixtures/custom_tls_activation/get.yaml new file mode 100644 index 000000000..542764bd1 --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/get.yaml @@ -0,0 +1,43 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations/ACTIVATION_ID + method: GET + response: + body: '{"data":{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-15T15:50:17.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}}}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 29 Oct 2020 21:56:36 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9037-CONTROL-SLWDC, cache-sea4479-SEA + X-Timer: + - S1604008596.366056,VS0,VE70 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_activation/list.yaml b/fastly/fixtures/custom_tls_activation/list.yaml new file mode 100644 index 000000000..616910223 --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/list.yaml @@ -0,0 +1,45 @@ +--- +version: 1 +interactions: +- request: + body: "" + form: {} + headers: + Accept: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations + method: GET + response: + body: '{"data":[{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-15T15:50:17.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}},{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-15T15:49:05.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}},{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-14T21:08:30.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}}]}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 29 Oct 2020 21:56:36 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-sea4479-SEA + X-Timer: + - S1604008596.365928,VS0,VE104 + status: 200 OK + code: 200 + duration: "" diff --git a/fastly/fixtures/custom_tls_activation/update.yaml b/fastly/fixtures/custom_tls_activation/update.yaml new file mode 100644 index 000000000..96b05283e --- /dev/null +++ b/fastly/fixtures/custom_tls_activation/update.yaml @@ -0,0 +1,48 @@ +--- +version: 1 +interactions: +- request: + body: | + {"data":{"type":"","attributes":{"id":"ACTIVATION_ID"},"relationships":{"tls_certificate":{"data":{"type":"tls_certificate"}}}},"included":[{"type":"tls_certificate","attributes":{"type":""}}]} + form: {} + headers: + Accept: + - application/vnd.api+json + Content-Type: + - application/vnd.api+json + User-Agent: + - FastlyGo/1.17.0 (+github.com/fastly/go-fastly; go1.14.2) + url: https://api.fastly.com/tls/activations/ACTIVATION_ID + method: PATCH + response: + body: '{"data":{"id":"ACTIVATION_ID","type":"tls_activation","attributes":{"created_at":"2020-10-15T15:50:17.000Z"},"relationships":{"tls_certificate":{"data":{"id":"CERTIFICATE_ID","type":"tls_certificate"}},"tls_configuration":{"data":{"id":"CONFIGURATION_ID","type":"tls_configuration"}},"tls_domain":{"data":{"id":"DOMAIN_NAME","type":"tls_domain"}}}}}' + headers: + Accept-Ranges: + - bytes + - bytes + Content-Length: + - "55" + Content-Type: + - application/vnd.api+json + Date: + - Thu, 29 Oct 2020 21:56:36 GMT + Status: + - 200 OK + Strict-Transport-Security: + - max-age=31536000 + Via: + - 1.1 varnish + - 1.1 varnish + X-Cache: + - MISS, MISS + X-Cache-Hits: + - 0, 0 + X-Content-Type-Options: + - nosniff + X-Served-By: + - cache-control-slwdc9035-CONTROL-SLWDC, cache-sea4479-SEA + X-Timer: + - S1604008596.366085,VS0,VE103 + status: 200 OK + code: 200 + duration: "" From 2def394ebbebbbbedf87076e60ee018db2a32949 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 10:04:48 -0800 Subject: [PATCH 11/58] fixes server error due to API not accepting "type" to be blank --- fastly/custom_tls_activation.go | 7 ++++--- fastly/custom_tls_activation_test.go | 18 +++++++++--------- fastly/custom_tls_configuration_test.go | 6 ++---- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index fd22225f5..edd9293db 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -10,11 +10,11 @@ import ( // TLSActivation represents a /tls/activations response. type TLSActivation struct { - ID string `jsonapi:"primary,tls_activation"` + ID string `jsonapi:"primary,tls_activation"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate"` - CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } // TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API @@ -118,6 +118,7 @@ type CreateTLSActivationInput struct { TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be set. } // CreateTLSActivation enable TLS for a domain using a custom certificate. diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go index feb2c88a4..854ddc31b 100644 --- a/fastly/custom_tls_activation_test.go +++ b/fastly/custom_tls_activation_test.go @@ -14,9 +14,9 @@ func TestClient_TLSActivation(t *testing.T) { var ta *TLSActivation record(t, fixtureBase+"create", func(c *Client) { ta, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, - TLSConfiguration: &TLSConfiguration{ID:"CONFIGURATION_ID"}, - TLSDomain: &TLSDomain{ID:"DOMAIN_NAME"}, + TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + TLSConfiguration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, + TLSDomain: &TLSDomain{ID: "DOMAIN_NAME"}, }) }) if err != nil { @@ -71,8 +71,8 @@ func TestClient_TLSActivation(t *testing.T) { var uta *TLSActivation record(t, fixtureBase+"update", func(c *Client) { uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ - ID: "ACTIVATION_ID", - TLSCertificate: &TLSCertificate{}, + ID: "ACTIVATION_ID", + TLSCertificate: &TLSCertificate{}, }) }) if err != nil { @@ -99,9 +99,9 @@ func TestClient_CreateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/create", func(c *Client) { _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &TLSCertificate{}, + TLSCertificate: &TLSCertificate{}, TLSConfiguration: &TLSConfiguration{}, - TLSDomain: &TLSDomain{}, + TLSDomain: &TLSDomain{}, }) }) if err != nil { @@ -155,8 +155,8 @@ func TestClient_UpdateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/update", func(c *Client) { _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ - ID: "ACTIVATION_ID", - TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + ID: "ACTIVATION_ID", + TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, }) }) if err != nil { diff --git a/fastly/custom_tls_configuration_test.go b/fastly/custom_tls_configuration_test.go index 53afecdca..9b186702f 100644 --- a/fastly/custom_tls_configuration_test.go +++ b/fastly/custom_tls_configuration_test.go @@ -36,14 +36,12 @@ func TestClient_CustomTLSConfiguration(t *testing.T) { t.Errorf("bad tls configurations: %v", lcon) } - - // Update var ucon *CustomTLSConfiguration newName := "My configuration v2" record(t, fixtureBase+"update", func(c *Client) { ucon, err = c.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ - ID: "TLS_CONFIGURATION_ID", + ID: "TLS_CONFIGURATION_ID", Name: newName, }) }) @@ -91,7 +89,7 @@ func TestClient_UpdateCustomTLSConfiguration_validation(t *testing.T) { var err error record(t, "custom_tls_configuration/update", func(c *Client) { _, err = c.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ - ID: "TLS_CONFIGURATION_ID", + ID: "TLS_CONFIGURATION_ID", Name: "My configuration v2", }) }) From edb7a22e13e5b4b3f15137109e1285b817c5d346 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 10:15:50 -0800 Subject: [PATCH 12/58] adds "Type" tag to update activation --- fastly/custom_tls_activation.go | 1 + 1 file changed, 1 insertion(+) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index edd9293db..978e131fe 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -153,6 +153,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio type UpdateTLSActivationInput struct { ID string `jsonapi:"attr,id"` TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be set. } // UpdateTLSActivation From 7356a3f84b6bef05ff12deec79f27b39dea4c52b Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 10:26:29 -0800 Subject: [PATCH 13/58] updated comments, fmt --- fastly/custom_tls_activation.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 978e131fe..eaa31c2fe 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -17,7 +17,7 @@ type TLSActivation struct { CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } -// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API +// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tlsrtificates API/ce type TLSCertificate struct { ID string `jsonapi:"primary,tls_certificate"` Type string `jsonapi:"attr,type"` @@ -118,11 +118,11 @@ type CreateTLSActivationInput struct { TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be set. + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API that requires "type" to be present. } // CreateTLSActivation enable TLS for a domain using a custom certificate. -func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { // TODO test +func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { if i.TLSCertificate == nil { return nil, ErrMissingTLSCertificateID // TODO update this error @@ -153,11 +153,11 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio type UpdateTLSActivationInput struct { ID string `jsonapi:"attr,id"` TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be set. + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API that requires "type" to be present. } // UpdateTLSActivation -func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivation, error) { // TODO test +func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivation, error) { if i.ID == "" { return nil, ErrMissingID } @@ -171,11 +171,11 @@ func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivatio return nil, err } - var bc TLSActivation - if err := jsonapi.UnmarshalPayload(resp.Body, &bc); err != nil { + var ta TLSActivation + if err := jsonapi.UnmarshalPayload(resp.Body, &ta); err != nil { return nil, err } - return &bc, nil + return &ta, nil } // DeleteTLSActivationInput used for deleting a certificate. From 0e060aa226e2586a78f9c9c6c7b831819d083a08 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 12:31:13 -0800 Subject: [PATCH 14/58] update errors --- fastly/custom_tls_activation.go | 12 ++++++------ fastly/errors.go | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index eaa31c2fe..195189b38 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -118,20 +118,20 @@ type CreateTLSActivationInput struct { TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API that requires "type" to be present. + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } // CreateTLSActivation enable TLS for a domain using a custom certificate. func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { if i.TLSCertificate == nil { - return nil, ErrMissingTLSCertificateID // TODO update this error + return nil, ErrMissingTLSCertificate } if i.TLSConfiguration == nil { - return nil, ErrMissingTLSConfigurationID // TODO update this error + return nil, ErrMissingTLSConfiguration } if i.TLSDomain == nil { - return nil, ErrMissingTLSDomainID // TODO update this error + return nil, ErrMissingTLSDomain } p := "/tls/activations" @@ -153,7 +153,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio type UpdateTLSActivationInput struct { ID string `jsonapi:"attr,id"` TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API that requires "type" to be present. + Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } // UpdateTLSActivation @@ -162,7 +162,7 @@ func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivatio return nil, ErrMissingID } if i.TLSCertificate == nil { - return nil, ErrMissingTLSCertificateID // TODO update this error + return nil, ErrMissingTLSCertificate } path := fmt.Sprintf("/tls/activations/%s", i.ID) diff --git a/fastly/errors.go b/fastly/errors.go index c8fbfb7a5..ca3e8a0ad 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -149,17 +149,17 @@ var ErrMissingCertBlob = errors.New("missing required field 'CertBlob'") // a "IntermediatesBlob" key, but one was not set. var ErrMissingIntermediatesBlob = errors.New("missing required field 'IntermediatesBlob'") -// ErrMissingTLSCertificateID is an error that is returned from an input struct that requires -// a "TLSCertificateID" key, but one was not set. -var ErrMissingTLSCertificateID = errors.New("missing required field 'TLSCertificateID'") +// ErrMissingTLSCertificate is an error that is returned from an input struct that requires +// a "TLSCertificate" struct, but one was not set. +var ErrMissingTLSCertificate = errors.New("missing required field 'TLSCertificate'") -// ErrMissingTLSConfigurationID is an error that is returned from an input struct that requires -// a "TLSConfigurationID" key, but one was not set. -var ErrMissingTLSConfigurationID = errors.New("missing required field 'TLSConfigurationID'") +// ErrMissingTLSConfiguration is an error that is returned from an input struct that requires +// a "TLSConfiguration" struct, but one was not set. +var ErrMissingTLSConfiguration = errors.New("missing required field 'TLSConfiguration'") // ErrMissingTLSDomainID is an error that is returned from an input struct that requires -// a "TLSDomainID" key, but one was not set. -var ErrMissingTLSDomainID = errors.New("missing required field 'TLSDomainID'") +// a "TLSDomain" struct, but one was not set. +var ErrMissingTLSDomain = errors.New("missing required field 'TLSDomainID'") // ErrStatusNotOk is an error that indicates that indicates that the response body returned // by the Fastly API was not `{"status": "ok"}` From bb51a556ce41f71fcc87e0fc4da919ff1b0554e6 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 13:05:08 -0800 Subject: [PATCH 15/58] adds Type field to input structs to get around API bug --- fastly/custom_tls_certificate.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 5121e75e4..e19f811a0 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -111,9 +111,10 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert type CreateCustomCertificateInput struct { CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` + Type string `jsonapi:"primary,tls_certificate"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } -func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { // TODO Possible platform bug, returns "Internal Server Error" if "type" is blank +func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { if i.CertBlob == "" { return nil, ErrMissingCertBlob @@ -141,6 +142,7 @@ type UpdateCustomCertificateInput struct { ID string `jsonapi:"attr,id"` CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` + Type string `jsonapi:"primary,tls_certificate"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } // UpdateCustomCertificate replace a certificate with a newly reissued certificate. From 55f05d0e060d58722aebb45f9d1876a0233ee3ea Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 4 Nov 2020 13:37:03 -0800 Subject: [PATCH 16/58] updates Create and Update input struct tags per feedback --- fastly/custom_tls_activation.go | 5 ++--- fastly/custom_tls_certificate.go | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 195189b38..4d52f134d 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -115,10 +115,10 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { + ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } // CreateTLSActivation enable TLS for a domain using a custom certificate. @@ -151,9 +151,8 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { - ID string `jsonapi:"attr,id"` + ID string `jsonapi:"primary,tls_activation"` TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` - Type string `jsonapi:"primary,tls_activation"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. } // UpdateTLSActivation diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index e19f811a0..996113f07 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -111,7 +111,7 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert type CreateCustomCertificateInput struct { CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` - Type string `jsonapi:"primary,tls_certificate"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. + ID string `jsonapi:"primary,tls_certificate"` // ID value does not need to be set. } func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { @@ -139,10 +139,10 @@ func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*Cust } type UpdateCustomCertificateInput struct { - ID string `jsonapi:"attr,id"` + ID string `jsonapi:"primary,tls_certificate"` CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` - Type string `jsonapi:"primary,tls_certificate"` // Type value does not need to be set but existence of this key prevents server error due to API bug that requires "type" to be present. + Type string `jsonapi:"primary,tls_certificate"` } // UpdateCustomCertificate replace a certificate with a newly reissued certificate. From 69b9704c46eaeedfb759bb66018378baa415f6f6 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 5 Nov 2020 12:30:20 -0800 Subject: [PATCH 17/58] adds comments to exported functions --- fastly/custom_tls_certificate.go | 3 +++ fastly/custom_tls_configuration.go | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 996113f07..bb50f2752 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -108,12 +108,14 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert return &cc, nil } +// CreateCustomCertificateInput is used as inpput to the CreateCustomCertificate function. type CreateCustomCertificateInput struct { CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` ID string `jsonapi:"primary,tls_certificate"` // ID value does not need to be set. } +// CreateCustomCertificate creates a custom TLS certificate. func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { if i.CertBlob == "" { @@ -138,6 +140,7 @@ func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*Cust return &cc, nil } +// UpdateCustomCertificateInput is used as inpput to the UpdateCustomCertificate function. type UpdateCustomCertificateInput struct { ID string `jsonapi:"primary,tls_certificate"` CertBlob string `jsonapi:"attr,cert_blob"` diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index d3645cbbe..11b0d2084 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -8,7 +8,7 @@ import ( "github.com/google/jsonapi" ) -// CustomTLSConfiguration +// CustomTLSConfiguration represents a TLS configuration response from the Fastly API. type CustomTLSConfiguration struct { ID string `jsonapi:"primary,tls_configuration"` DNSRecords []*DNSRecord `jsonapi:"relation,dns_records,dns_record"` @@ -20,7 +20,7 @@ type CustomTLSConfiguration struct { UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` } -// DNSRecord +// DNSRecord is a child of CustomTLSConfiguration type DNSRecord struct { ID string `jsonapi:"primary,dns_record"` RecordType string `jsonapi:"attr,record_type"` @@ -89,6 +89,7 @@ type GetCustomTLSConfigurationInput struct { Include string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. } +// GetCustomTLSConfiguration returns a single TLS configuration. func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (*CustomTLSConfiguration, error) { if i.ID == "" { @@ -120,6 +121,7 @@ func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (* return &con, nil } +// UpdateCustomTLSConfigurationInput is used as input to the UpdateCustomTLSConfiguration function. type UpdateCustomTLSConfigurationInput struct { ID string `jsonapi:"attr,id"` Name string `jsonapi:"attr,name"` From 445ef455f0de89f08e986add057261e97ed59a51 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 09:18:14 -0800 Subject: [PATCH 18/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 4d52f134d..73a54ad66 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -17,7 +17,7 @@ type TLSActivation struct { CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } -// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tlsrtificates API/ce +// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API. type TLSCertificate struct { ID string `jsonapi:"primary,tls_certificate"` Type string `jsonapi:"attr,type"` From 91c63c2ead526dda34081099d8ddf805e282f3d3 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 09:19:00 -0800 Subject: [PATCH 19/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 73a54ad66..e53f7a447 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -78,7 +78,7 @@ func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivatio for i := range data { typed, ok := data[i].(*TLSActivation) if !ok { - return nil, fmt.Errorf("got back a non-TLSActivation response") + return nil, fmt.Errorf("unexpected response type: %T", data[i]) } a[i] = typed } From 5e0ae8ea9054fd4e425c0a762905c87736e47cec Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 09:25:08 -0800 Subject: [PATCH 20/58] Update fastly/custom_tls_activation.go "Include" value Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 1 + 1 file changed, 1 insertion(+) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index e53f7a447..bdcd4354d 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -89,6 +89,7 @@ func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivatio // GetTLSActivationInput is used as input to the GetTLSActivation function. type GetTLSActivationInput struct { ID string + Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. } // GetTLSActivation retrieve a single activation. From 8c4490d5dec3196f0ab54e47a972d07c5c65574c Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 09:27:29 -0800 Subject: [PATCH 21/58] Update fastly/custom_tls_configuration.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_configuration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 11b0d2084..0e1767b0e 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -75,7 +75,7 @@ func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput for i := range data { typed, ok := data[i].(*CustomTLSConfiguration) if !ok { - return nil, fmt.Errorf("got back a non-tls-configuration response") + return nil, fmt.Errorf("unexpected response type: %T", data[i]) } con[i] = typed } From 75085e57f9887afc798938f26fae8d6742af46d0 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 09:32:58 -0800 Subject: [PATCH 22/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index bdcd4354d..0b5b2982c 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -117,9 +117,9 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration,tls_configuration"` - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain,tls_domain"` + TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate"` + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` } // CreateTLSActivation enable TLS for a domain using a custom certificate. From f93ba45ab4c30c3040dccf2cafe532d7a6376579 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 10:10:18 -0800 Subject: [PATCH 23/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 1 - 1 file changed, 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 0b5b2982c..1f6db82a6 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -55,7 +55,6 @@ func (i *ListTLSActivationsInput) formatFilters() map[string]string { // ListTLSActivations list all activations. func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivation, error) { - p := "/tls/activations" filters := &RequestOptions{ Params: i.formatFilters(), From caa5a30be4270877499a15aadecdcf327019c6ac Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 10:35:53 -0800 Subject: [PATCH 24/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 1f6db82a6..135015d34 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -18,10 +18,6 @@ type TLSActivation struct { } // TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API. -type TLSCertificate struct { - ID string `jsonapi:"primary,tls_certificate"` - Type string `jsonapi:"attr,type"` -} // ListTLSActivationsInput is used as input to the ListTLSActivations function. type ListTLSActivationsInput struct { From 2278fb132080f91c3c0cc6167d62534bd0b508e5 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 10:37:40 -0800 Subject: [PATCH 25/58] Update fastly/custom_tls_certificate.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_certificate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index bb50f2752..27ab6a006 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -74,7 +74,7 @@ func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*Cust for i := range data { typed, ok := data[i].(*CustomCertificate) if !ok { - return nil, fmt.Errorf("got back a non-CustomCertificate response") + return nil, fmt.Errorf("unexpected response type: %T", data[i]) } cc[i] = typed } From 0368ea301c1d89272fea2866ffc5cd4384a2500b Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:18:57 -0800 Subject: [PATCH 26/58] adds include param to GetTLSActivation() --- fastly/custom_tls_activation.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 135015d34..eefb7a74f 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -89,13 +89,22 @@ type GetTLSActivationInput struct { // GetTLSActivation retrieve a single activation. func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, error) { - if i.ID == "" { return nil, ErrMissingID } p := fmt.Sprintf("/tls/activations/%s", i.ID) + ro := &RequestOptions{ + Headers: map[string]string{ + "Accept": "application/vnd.api+json", // this is required otherwise the params don't work + }, + } + + if *i.Include != "" { + ro.Params = map[string]string{"include": *i.Include} + } + r, err := c.Get(p, nil) if err != nil { return nil, err @@ -112,7 +121,7 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate"` + TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomCertificate needs to be set. TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` } @@ -148,7 +157,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` + TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomCertificate needs to be set. } // UpdateTLSActivation From c4db15722bc409af354929f623ecfbc17afba211 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:24:44 -0800 Subject: [PATCH 27/58] adds tls protocols to CustomTLSConfiguration --- fastly/custom_tls_activation.go | 16 ++++++++-------- fastly/custom_tls_configuration.go | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index eefb7a74f..bd0cb8c5b 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -83,8 +83,8 @@ func (c *Client) ListTLSActivations(i *ListTLSActivationsInput) ([]*TLSActivatio // GetTLSActivationInput is used as input to the GetTLSActivation function. type GetTLSActivationInput struct { - ID string - Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. + ID string + Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. } // GetTLSActivation retrieve a single activation. @@ -120,10 +120,10 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. - TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomCertificate needs to be set. - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` + ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. + TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomCertificate needs to be set. + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` } // CreateTLSActivation enable TLS for a domain using a custom certificate. @@ -156,8 +156,8 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` - TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomCertificate needs to be set. + ID string `jsonapi:"primary,tls_activation"` + TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomCertificate needs to be set. } // UpdateTLSActivation diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 0e1767b0e..b6a1d4212 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -17,6 +17,7 @@ type CustomTLSConfiguration struct { Default bool `jsonapi:"attr,default"` HTTPProtocols []string `jsonapi:"attr,http_protocols"` Name string `jsonapi:"attr,name"` + TLSProtocols []string `jsonapi:"attr,tls_protocols"` UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` } @@ -52,7 +53,6 @@ func (i *ListCustomTLSConfigurationsInput) formatFilters() map[string]string { // ListCustomTLSConfigurations list all TLS configurations. func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput) ([]*CustomTLSConfiguration, error) { - p := "/tls/configurations" filters := &RequestOptions{ Params: i.formatFilters(), @@ -91,7 +91,6 @@ type GetCustomTLSConfigurationInput struct { // GetCustomTLSConfiguration returns a single TLS configuration. func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (*CustomTLSConfiguration, error) { - if i.ID == "" { return nil, ErrMissingID } From 4fc5651edd3137aad0f2fb2344848a890a698c02 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:29:46 -0800 Subject: [PATCH 28/58] adds include to ListCustomTLSConfigurationsInput --- fastly/custom_tls_configuration.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index b6a1d4212..913d2cb00 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -12,12 +12,12 @@ import ( type CustomTLSConfiguration struct { ID string `jsonapi:"primary,tls_configuration"` DNSRecords []*DNSRecord `jsonapi:"relation,dns_records,dns_record"` - CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` Bulk bool `jsonapi:"attr,bulk"` Default bool `jsonapi:"attr,default"` HTTPProtocols []string `jsonapi:"attr,http_protocols"` Name string `jsonapi:"attr,name"` TLSProtocols []string `jsonapi:"attr,tls_protocols"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` } @@ -30,9 +30,11 @@ type DNSRecord struct { // ListCustomTLSConfigurationsInput is used as input to the ListCustomTLSConfigurationsInput function. type ListCustomTLSConfigurationsInput struct { - PageNumber *uint // The page index for pagination. - PageSize *uint // The number of keys per page. - FilterBulk *bool // Whether or not to only include bulk=true configurations + FilterBulk *bool // Whether or not to only include bulk=true configurations + Include *string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. + PageNumber *uint // The page index for pagination. + PageSize *uint // The number of keys per page. + } // formatFilters converts user input into query parameters for filtering. @@ -40,6 +42,7 @@ func (i *ListCustomTLSConfigurationsInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ "filter[bulk]": i.FilterBulk, + "include": i.Include, "page[size]": i.PageSize, "page[number]": i.PageNumber, } From 8a2e97aceee44a145315a0aeaa167385d2cc5089 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:41:07 -0800 Subject: [PATCH 29/58] removes white space and compares i.Include to nil rather than an empty string --- fastly/custom_tls_activation.go | 13 ++++++------- fastly/custom_tls_certificate.go | 3 --- fastly/custom_tls_configuration.go | 6 +++--- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index bd0cb8c5b..69f46c277 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -10,11 +10,11 @@ import ( // TLSActivation represents a /tls/activations response. type TLSActivation struct { - ID string `jsonapi:"primary,tls_activation"` - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate - TLSCertificate *TLSCertificate `jsonapi:"relation,tls_certificate"` - CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + ID string `jsonapi:"primary,tls_activation"` + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate + TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } // TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API. @@ -101,7 +101,7 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err }, } - if *i.Include != "" { + if i.Include != nil { ro.Params = map[string]string{"include": *i.Include} } @@ -128,7 +128,6 @@ type CreateTLSActivationInput struct { // CreateTLSActivation enable TLS for a domain using a custom certificate. func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { - if i.TLSCertificate == nil { return nil, ErrMissingTLSCertificate } diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 27ab6a006..4bf073790 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -51,7 +51,6 @@ func (i *ListCustomCertificatesInput) formatFilters() map[string]string { // ListCustomCertificates list all certificates. func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*CustomCertificate, error) { - p := "/tls/certificates" filters := &RequestOptions{ Params: i.formatFilters(), @@ -88,7 +87,6 @@ type GetCustomCertificateInput struct { } func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCertificate, error) { - if i.ID == "" { return nil, ErrMissingID } @@ -117,7 +115,6 @@ type CreateCustomCertificateInput struct { // CreateCustomCertificate creates a custom TLS certificate. func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { - if i.CertBlob == "" { return nil, ErrMissingCertBlob } diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 913d2cb00..6320625ef 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -89,7 +89,7 @@ func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput // GetCustomTLSConfigurationInput is used as input to the GetCustomTLSConfiguration function. type GetCustomTLSConfigurationInput struct { ID string - Include string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. + Include *string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. } // GetCustomTLSConfiguration returns a single TLS configuration. @@ -106,8 +106,8 @@ func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (* }, } - if i.Include != "" { - ro.Params = map[string]string{"include": i.Include} + if i.Include != nil { + ro.Params = map[string]string{"include": *i.Include} } r, err := c.Get(p, ro) From a3e7505af6458b8be3501ad423d61658e891b9d8 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:44:57 -0800 Subject: [PATCH 30/58] updates tls activation tests to match changes to tls activation child types --- fastly/custom_tls_activation_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go index 854ddc31b..d1a9f186a 100644 --- a/fastly/custom_tls_activation_test.go +++ b/fastly/custom_tls_activation_test.go @@ -14,7 +14,7 @@ func TestClient_TLSActivation(t *testing.T) { var ta *TLSActivation record(t, fixtureBase+"create", func(c *Client) { ta, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + TLSCertificate: &CustomCertificate{ID: "CERTIFICATE_ID"}, TLSConfiguration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, TLSDomain: &TLSDomain{ID: "DOMAIN_NAME"}, }) @@ -72,7 +72,7 @@ func TestClient_TLSActivation(t *testing.T) { record(t, fixtureBase+"update", func(c *Client) { uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &TLSCertificate{}, + TLSCertificate: &CustomCertificate{}, }) }) if err != nil { @@ -99,7 +99,7 @@ func TestClient_CreateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/create", func(c *Client) { _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &TLSCertificate{}, + TLSCertificate: &CustomCertificate{}, TLSConfiguration: &TLSConfiguration{}, TLSDomain: &TLSDomain{}, }) @@ -156,7 +156,7 @@ func TestClient_UpdateTLSActivation_validation(t *testing.T) { record(t, "custom_tls_activation/update", func(c *Client) { _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &TLSCertificate{ID: "CERTIFICATE_ID"}, + TLSCertificate: &CustomCertificate{ID: "CERTIFICATE_ID"}, }) }) if err != nil { From 532dc0b08a31b10554c1838944f8e8fcbd0b4ffc Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 14:57:51 -0800 Subject: [PATCH 31/58] Refactors CustomCertificate to CustomTLSCertificate and updates all related tests and CRUD functions --- fastly/custom_tls_activation.go | 22 +++++----- fastly/custom_tls_activation_test.go | 14 +++---- fastly/custom_tls_certificate.go | 60 +++++++++++++-------------- fastly/custom_tls_certificate_test.go | 42 +++++++++---------- 4 files changed, 69 insertions(+), 69 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 69f46c277..18af1dc2f 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -10,11 +10,11 @@ import ( // TLSActivation represents a /tls/activations response. type TLSActivation struct { - ID string `jsonapi:"primary,tls_activation"` - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate - TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` - CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + ID string `jsonapi:"primary,tls_activation"` + Configuration *TLSConfiguration `jsonapi:"relation,tls_configuration"` // TLSConfiguration type shared with BulkCertificate + Domain *TLSDomain `jsonapi:"relation,tls_domain"` // TLSDomain type shared with BulkCertificate + Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } // TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API. @@ -120,10 +120,10 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. - TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomCertificate needs to be set. - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` + ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. + TLSCertificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. + TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` + TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` } // CreateTLSActivation enable TLS for a domain using a custom certificate. @@ -155,8 +155,8 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` - TLSCertificate *CustomCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomCertificate needs to be set. + ID string `jsonapi:"primary,tls_activation"` + TLSCertificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. } // UpdateTLSActivation diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go index d1a9f186a..2241766b6 100644 --- a/fastly/custom_tls_activation_test.go +++ b/fastly/custom_tls_activation_test.go @@ -14,7 +14,7 @@ func TestClient_TLSActivation(t *testing.T) { var ta *TLSActivation record(t, fixtureBase+"create", func(c *Client) { ta, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &CustomCertificate{ID: "CERTIFICATE_ID"}, + TLSCertificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, TLSConfiguration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, TLSDomain: &TLSDomain{ID: "DOMAIN_NAME"}, }) @@ -43,13 +43,13 @@ func TestClient_TLSActivation(t *testing.T) { if len(lta) < 1 { t.Errorf("bad TLS activations: %v", lta) } - if lta[0].TLSCertificate == nil { + if lta[0].Certificate == nil { t.Errorf("TLS certificate relation should not be nil: %v", lta) } - if lta[0].TLSConfiguration == nil { + if lta[0].Configuration == nil { t.Errorf("TLS configuration relation should not be nil: %v", lta) } - if lta[0].TLSDomain == nil { + if lta[0].Domain == nil { t.Errorf("TLS domain relation should not be nil: %v", lta) } @@ -72,7 +72,7 @@ func TestClient_TLSActivation(t *testing.T) { record(t, fixtureBase+"update", func(c *Client) { uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &CustomCertificate{}, + TLSCertificate: &CustomTLSCertificate{}, }) }) if err != nil { @@ -99,7 +99,7 @@ func TestClient_CreateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/create", func(c *Client) { _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &CustomCertificate{}, + TLSCertificate: &CustomTLSCertificate{}, TLSConfiguration: &TLSConfiguration{}, TLSDomain: &TLSDomain{}, }) @@ -156,7 +156,7 @@ func TestClient_UpdateTLSActivation_validation(t *testing.T) { record(t, "custom_tls_activation/update", func(c *Client) { _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &CustomCertificate{ID: "CERTIFICATE_ID"}, + TLSCertificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, }) }) if err != nil { diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 4bf073790..72494e485 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -8,10 +8,9 @@ import ( "github.com/google/jsonapi" ) -// CustomCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate -type CustomCertificate struct { +// CustomTLSCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate +type CustomTLSCertificate struct { ID string `jsonapi:"primary,tls_certificate"` - CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` IssuedTo string `jsonapi:"attr,issued_to"` Issuer string `jsonapi:"attr,issuer"` Name string `jsonapi:"attr,name"` @@ -20,12 +19,13 @@ type CustomCertificate struct { Replace bool `jsonapi:"attr,replace"` SerialNumber string `jsonapi:"attr,serial_number"` SignatureAlgorithm string `jsonapi:"attr,signature_algorithm"` - UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` + CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` + UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` } -// ListCustomCertificatesInput is used as input to the ListCustomCertificatesInput function. -type ListCustomCertificatesInput struct { +// ListCustomTLSCertificatesInput is used as input to the ListCustomTLSCertificatesInput function. +type ListCustomTLSCertificatesInput struct { PageNumber *uint // The page index for pagination. PageSize *uint // The number of keys per page. FilterTLSDomainsIDMatch *string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. @@ -33,7 +33,7 @@ type ListCustomCertificatesInput struct { } // formatFilters converts user input into query parameters for filtering. -func (i *ListCustomCertificatesInput) formatFilters() map[string]string { +func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ "filter[tls_domains.id][match]": i.FilterTLSDomainsIDMatch, @@ -49,8 +49,8 @@ func (i *ListCustomCertificatesInput) formatFilters() map[string]string { return result } -// ListCustomCertificates list all certificates. -func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*CustomCertificate, error) { +// ListCustomTLSCertificates list all certificates. +func (c *Client) ListCustomTLSCertificates(i *ListCustomTLSCertificatesInput) ([]*CustomTLSCertificate, error) { p := "/tls/certificates" filters := &RequestOptions{ Params: i.formatFilters(), @@ -64,14 +64,14 @@ func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*Cust return nil, err } - data, err := jsonapi.UnmarshalManyPayload(r.Body, reflect.TypeOf(new(CustomCertificate))) + data, err := jsonapi.UnmarshalManyPayload(r.Body, reflect.TypeOf(new(CustomTLSCertificate))) if err != nil { return nil, err } - cc := make([]*CustomCertificate, len(data)) + cc := make([]*CustomTLSCertificate, len(data)) for i := range data { - typed, ok := data[i].(*CustomCertificate) + typed, ok := data[i].(*CustomTLSCertificate) if !ok { return nil, fmt.Errorf("unexpected response type: %T", data[i]) } @@ -81,12 +81,12 @@ func (c *Client) ListCustomCertificates(i *ListCustomCertificatesInput) ([]*Cust return cc, nil } -// GetCustomCertificateInput is used as input to the GetCustomCertificate function. -type GetCustomCertificateInput struct { +// GetCustomTLSCertificateInput is used as input to the GetCustomTLSCertificate function. +type GetCustomTLSCertificateInput struct { ID string } -func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCertificate, error) { +func (c *Client) GetCustomTLSCertificate(i *GetCustomTLSCertificateInput) (*CustomTLSCertificate, error) { if i.ID == "" { return nil, ErrMissingID } @@ -98,7 +98,7 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert return nil, err } - var cc CustomCertificate + var cc CustomTLSCertificate if err := jsonapi.UnmarshalPayload(r.Body, &cc); err != nil { return nil, err } @@ -106,15 +106,15 @@ func (c *Client) GetCustomCertificate(i *GetCustomCertificateInput) (*CustomCert return &cc, nil } -// CreateCustomCertificateInput is used as inpput to the CreateCustomCertificate function. -type CreateCustomCertificateInput struct { +// CreateCustomTLSCertificateInput is used as input to the CreateCustomTLSCertificate function. +type CreateCustomTLSCertificateInput struct { CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` ID string `jsonapi:"primary,tls_certificate"` // ID value does not need to be set. } -// CreateCustomCertificate creates a custom TLS certificate. -func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*CustomCertificate, error) { +// CreateCustomTLSCertificate creates a custom TLS certificate. +func (c *Client) CreateCustomTLSCertificate(i *CreateCustomTLSCertificateInput) (*CustomTLSCertificate, error) { if i.CertBlob == "" { return nil, ErrMissingCertBlob } @@ -129,7 +129,7 @@ func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*Cust return nil, err } - var cc CustomCertificate + var cc CustomTLSCertificate if err := jsonapi.UnmarshalPayload(r.Body, &cc); err != nil { return nil, err } @@ -137,19 +137,19 @@ func (c *Client) CreateCustomCertificate(i *CreateCustomCertificateInput) (*Cust return &cc, nil } -// UpdateCustomCertificateInput is used as inpput to the UpdateCustomCertificate function. -type UpdateCustomCertificateInput struct { +// UpdateCustomTLSCertificateInput is used as input to the UpdateCustomTLSCertificate function. +type UpdateCustomTLSCertificateInput struct { ID string `jsonapi:"primary,tls_certificate"` CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` Type string `jsonapi:"primary,tls_certificate"` } -// UpdateCustomCertificate replace a certificate with a newly reissued certificate. +// UpdateCustomTLSCertificate replace a certificate with a newly reissued certificate. // By using this endpoint, the original certificate will cease to be used for future TLS handshakes. // Thus, only SAN entries that appear in the replacement certificate will become TLS enabled. // Any SAN entries that are missing in the replacement certificate will become disabled. -func (c *Client) UpdateCustomCertificate(i *UpdateCustomCertificateInput) (*CustomCertificate, error) { +func (c *Client) UpdateCustomTLSCertificate(i *UpdateCustomTLSCertificateInput) (*CustomTLSCertificate, error) { if i.ID == "" { return nil, ErrMissingID } @@ -168,20 +168,20 @@ func (c *Client) UpdateCustomCertificate(i *UpdateCustomCertificateInput) (*Cust return nil, err } - var cc CustomCertificate + var cc CustomTLSCertificate if err := jsonapi.UnmarshalPayload(resp.Body, &cc); err != nil { return nil, err } return &cc, nil } -// DeleteCustomCertificateInput used for deleting a certificate. -type DeleteCustomCertificateInput struct { +// DeleteCustomTLSCertificateInput used for deleting a certificate. +type DeleteCustomTLSCertificateInput struct { ID string } -// DeleteCustomCertificate destroy a certificate. This disables TLS for all domains listed as SAN entries. -func (c *Client) DeleteCustomCertificate(i *DeleteCustomCertificateInput) error { +// DeleteCustomTLSCertificate destroy a certificate. This disables TLS for all domains listed as SAN entries. +func (c *Client) DeleteCustomTLSCertificate(i *DeleteCustomTLSCertificateInput) error { if i.ID == "" { return ErrMissingID } diff --git a/fastly/custom_tls_certificate_test.go b/fastly/custom_tls_certificate_test.go index ebd6158d0..9fcce592e 100644 --- a/fastly/custom_tls_certificate_test.go +++ b/fastly/custom_tls_certificate_test.go @@ -2,16 +2,16 @@ package fastly import "testing" -func TestClient_CustomCertificate(t *testing.T) { +func TestClient_CustomTLSCertificate(t *testing.T) { t.Parallel() fixtureBase := "custom_tls/" // Create var err error - var cc *CustomCertificate + var cc *CustomTLSCertificate record(t, fixtureBase+"create", func(c *Client) { - cc, err = c.CreateCustomCertificate(&CreateCustomCertificateInput{ + cc, err = c.CreateCustomTLSCertificate(&CreateCustomTLSCertificateInput{ CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", Name: "My certificate", }) @@ -23,16 +23,16 @@ func TestClient_CustomCertificate(t *testing.T) { // Ensure deleted defer func() { record(t, fixtureBase+"cleanup", func(c *Client) { - c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + c.DeleteCustomTLSCertificate(&DeleteCustomTLSCertificateInput{ ID: cc.ID, }) }) }() // List - var lcc []*CustomCertificate + var lcc []*CustomTLSCertificate record(t, fixtureBase+"list", func(c *Client) { - lcc, err = c.ListCustomCertificates(&ListCustomCertificatesInput{}) + lcc, err = c.ListCustomTLSCertificates(&ListCustomTLSCertificatesInput{}) }) if err != nil { t.Fatal(err) @@ -42,9 +42,9 @@ func TestClient_CustomCertificate(t *testing.T) { } // Get - var gcc *CustomCertificate + var gcc *CustomTLSCertificate record(t, fixtureBase+"get", func(c *Client) { - gcc, err = c.GetCustomCertificate(&GetCustomCertificateInput{ + gcc, err = c.GetCustomTLSCertificate(&GetCustomTLSCertificateInput{ ID: cc.ID, }) }) @@ -56,9 +56,9 @@ func TestClient_CustomCertificate(t *testing.T) { } // Update - var ucc *CustomCertificate + var ucc *CustomTLSCertificate record(t, fixtureBase+"update", func(c *Client) { - ucc, err = c.UpdateCustomCertificate(&UpdateCustomCertificateInput{ + ucc, err = c.UpdateCustomTLSCertificate(&UpdateCustomTLSCertificateInput{ ID: "CERTIFICATE_ID", CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", Name: "My certificate", @@ -73,7 +73,7 @@ func TestClient_CustomCertificate(t *testing.T) { // Delete record(t, fixtureBase+"delete", func(c *Client) { - err = c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + err = c.DeleteCustomTLSCertificate(&DeleteCustomTLSCertificateInput{ ID: cc.ID, }) }) @@ -82,12 +82,12 @@ func TestClient_CustomCertificate(t *testing.T) { } } -func TestClient_CreateCustomCertificate_validation(t *testing.T) { +func TestClient_CreateCustomTLSCertificate_validation(t *testing.T) { t.Parallel() var err error record(t, "custom_tls/create", func(c *Client) { - _, err = c.CreateCustomCertificate(&CreateCustomCertificateInput{ + _, err = c.CreateCustomTLSCertificate(&CreateCustomTLSCertificateInput{ CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", Name: "My certificate", }) @@ -97,12 +97,12 @@ func TestClient_CreateCustomCertificate_validation(t *testing.T) { } } -func TestClient_DeleteCustomCertificate_validation(t *testing.T) { +func TestClient_DeleteCustomTLSCertificate_validation(t *testing.T) { t.Parallel() var err error record(t, "custom_tls/delete", func(c *Client) { - err = c.DeleteCustomCertificate(&DeleteCustomCertificateInput{ + err = c.DeleteCustomTLSCertificate(&DeleteCustomTLSCertificateInput{ ID: "CERTIFICATE_ID", }) }) @@ -111,24 +111,24 @@ func TestClient_DeleteCustomCertificate_validation(t *testing.T) { } } -func TestClient_ListCustomCertificates_validation(t *testing.T) { +func TestClient_ListCustomTLSCertificates_validation(t *testing.T) { t.Parallel() var err error record(t, "custom_tls/list", func(c *Client) { - _, err = c.ListCustomCertificates(&ListCustomCertificatesInput{}) + _, err = c.ListCustomTLSCertificates(&ListCustomTLSCertificatesInput{}) }) if err != nil { t.Fatal(err) } } -func TestClient_GetCustomCertificate_validation(t *testing.T) { +func TestClient_GetCustomTLSCertificate_validation(t *testing.T) { t.Parallel() var err error record(t, "custom_tls/get", func(c *Client) { - _, err = c.GetCustomCertificate(&GetCustomCertificateInput{ + _, err = c.GetCustomTLSCertificate(&GetCustomTLSCertificateInput{ ID: "CERTIFICATE_ID", }) }) @@ -137,12 +137,12 @@ func TestClient_GetCustomCertificate_validation(t *testing.T) { } } -func TestClient_UpdateCustomCertificate_validation(t *testing.T) { +func TestClient_UpdateCustomTLSCertificate_validation(t *testing.T) { t.Parallel() var err error record(t, "custom_tls/update", func(c *Client) { - _, err = c.UpdateCustomCertificate(&UpdateCustomCertificateInput{ + _, err = c.UpdateCustomTLSCertificate(&UpdateCustomTLSCertificateInput{ ID: "CERTIFICATE_ID", CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", Name: "My certificate", From cfd22dc93c6ea0cac250f1cdddd7ee44d0549deb Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Fri, 6 Nov 2020 15:26:27 -0800 Subject: [PATCH 32/58] removes redudant struct tag, adds tests to confirm child struct still deserializes --- fastly/custom_tls_certificate.go | 4 ++-- fastly/custom_tls_certificate_test.go | 6 ++++++ fastly/custom_tls_configuration.go | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 72494e485..2665fe228 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -19,7 +19,7 @@ type CustomTLSCertificate struct { Replace bool `jsonapi:"attr,replace"` SerialNumber string `jsonapi:"attr,serial_number"` SignatureAlgorithm string `jsonapi:"attr,signature_algorithm"` - TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains,tls_domain"` + TLSDomains []*TLSDomain `jsonapi:"relation,tls_domains"` CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` UpdatedAt *time.Time `jsonapi:"attr,updated_at,iso8601"` } @@ -108,9 +108,9 @@ func (c *Client) GetCustomTLSCertificate(i *GetCustomTLSCertificateInput) (*Cust // CreateCustomTLSCertificateInput is used as input to the CreateCustomTLSCertificate function. type CreateCustomTLSCertificateInput struct { + ID string `jsonapi:"primary,tls_certificate"` // ID value does not need to be set. CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` - ID string `jsonapi:"primary,tls_certificate"` // ID value does not need to be set. } // CreateCustomTLSCertificate creates a custom TLS certificate. diff --git a/fastly/custom_tls_certificate_test.go b/fastly/custom_tls_certificate_test.go index 9fcce592e..e11ae03ae 100644 --- a/fastly/custom_tls_certificate_test.go +++ b/fastly/custom_tls_certificate_test.go @@ -54,6 +54,12 @@ func TestClient_CustomTLSCertificate(t *testing.T) { if cc.ID != gcc.ID { t.Errorf("bad ID: %q (%q)", cc.ID, gcc.ID) } + if cc.TLSDomains == nil { + t.Errorf("TLSDomains should not be nil: %v", cc.TLSDomains) + } + if len(cc.TLSDomains) < 1 { + t.Errorf("TLSDomains should not be an empty slice: %v", cc.TLSDomains) + } // Update var ucc *CustomTLSCertificate diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 6320625ef..18d5da167 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -11,7 +11,7 @@ import ( // CustomTLSConfiguration represents a TLS configuration response from the Fastly API. type CustomTLSConfiguration struct { ID string `jsonapi:"primary,tls_configuration"` - DNSRecords []*DNSRecord `jsonapi:"relation,dns_records,dns_record"` + DNSRecords []*DNSRecord `jsonapi:"relation,dns_records"` Bulk bool `jsonapi:"attr,bulk"` Default bool `jsonapi:"attr,default"` HTTPProtocols []string `jsonapi:"attr,http_protocols"` From 3548d48b2129cdff1fb411e6bd488790c0091f2b Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 9 Nov 2020 10:43:46 -0800 Subject: [PATCH 33/58] removes redudant "TLS" in Activation input types, updates tests to check for matching IDs in get and list --- fastly/custom_tls_activation.go | 16 ++++++++-------- fastly/custom_tls_activation_test.go | 27 ++++++++++++++++++--------- fastly/custom_tls_certificate_test.go | 7 +++++-- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 18af1dc2f..776bbf25c 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -121,20 +121,20 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. - TLSCertificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. - TLSConfiguration *TLSConfiguration `jsonapi:"relation,tls_configuration"` - TLSDomain *TLSDomain `jsonapi:"relation,tls_domain"` + Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. + Configuration *TLSConfiguration `jsonapi:"relation,tls_configuration"` + Domain *TLSDomain `jsonapi:"relation,tls_domain"` } // CreateTLSActivation enable TLS for a domain using a custom certificate. func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivation, error) { - if i.TLSCertificate == nil { + if i.Certificate == nil { return nil, ErrMissingTLSCertificate } - if i.TLSConfiguration == nil { + if i.Configuration == nil { return nil, ErrMissingTLSConfiguration } - if i.TLSDomain == nil { + if i.Domain == nil { return nil, ErrMissingTLSDomain } @@ -156,7 +156,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` - TLSCertificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. + Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. } // UpdateTLSActivation @@ -164,7 +164,7 @@ func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivatio if i.ID == "" { return nil, ErrMissingID } - if i.TLSCertificate == nil { + if i.Certificate == nil { return nil, ErrMissingTLSCertificate } diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go index 2241766b6..9ae319c5c 100644 --- a/fastly/custom_tls_activation_test.go +++ b/fastly/custom_tls_activation_test.go @@ -14,9 +14,9 @@ func TestClient_TLSActivation(t *testing.T) { var ta *TLSActivation record(t, fixtureBase+"create", func(c *Client) { ta, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, - TLSConfiguration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, - TLSDomain: &TLSDomain{ID: "DOMAIN_NAME"}, + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + Configuration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, + Domain: &TLSDomain{ID: "DOMAIN_NAME"}, }) }) if err != nil { @@ -46,12 +46,21 @@ func TestClient_TLSActivation(t *testing.T) { if lta[0].Certificate == nil { t.Errorf("TLS certificate relation should not be nil: %v", lta) } + if lta[0].Certificate.ID != ta.Certificate.ID { + t.Errorf("bad Certificate ID: %q (%q)", lta[0].Certificate.ID, ta.Certificate.ID) + } if lta[0].Configuration == nil { - t.Errorf("TLS configuration relation should not be nil: %v", lta) + t.Errorf("TLS Configuration relation should not be nil: %v", lta) + } + if lta[0].Configuration.ID != ta.Configuration.ID { + t.Errorf("bad Configuration ID: %q (%q)", lta[0].Configuration.ID, ta.Configuration.ID) } if lta[0].Domain == nil { t.Errorf("TLS domain relation should not be nil: %v", lta) } + if lta[0].Domain.ID != ta.Domain.ID { + t.Errorf("bad Domain ID: %q (%q)", lta[0].Domain.ID, ta.Domain.ID) + } // Get var gta *TLSActivation @@ -72,7 +81,7 @@ func TestClient_TLSActivation(t *testing.T) { record(t, fixtureBase+"update", func(c *Client) { uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &CustomTLSCertificate{}, + Certificate: &CustomTLSCertificate{}, }) }) if err != nil { @@ -99,9 +108,9 @@ func TestClient_CreateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/create", func(c *Client) { _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - TLSCertificate: &CustomTLSCertificate{}, - TLSConfiguration: &TLSConfiguration{}, - TLSDomain: &TLSDomain{}, + Certificate: &CustomTLSCertificate{}, + Configuration: &TLSConfiguration{}, + Domain: &TLSDomain{}, }) }) if err != nil { @@ -156,7 +165,7 @@ func TestClient_UpdateTLSActivation_validation(t *testing.T) { record(t, "custom_tls_activation/update", func(c *Client) { _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ ID: "ACTIVATION_ID", - TLSCertificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, }) }) if err != nil { diff --git a/fastly/custom_tls_certificate_test.go b/fastly/custom_tls_certificate_test.go index e11ae03ae..96637203f 100644 --- a/fastly/custom_tls_certificate_test.go +++ b/fastly/custom_tls_certificate_test.go @@ -54,12 +54,15 @@ func TestClient_CustomTLSCertificate(t *testing.T) { if cc.ID != gcc.ID { t.Errorf("bad ID: %q (%q)", cc.ID, gcc.ID) } - if cc.TLSDomains == nil { + if gcc.TLSDomains == nil { t.Errorf("TLSDomains should not be nil: %v", cc.TLSDomains) } - if len(cc.TLSDomains) < 1 { + if len(gcc.TLSDomains) < 1 { t.Errorf("TLSDomains should not be an empty slice: %v", cc.TLSDomains) } + if cc.TLSDomains[0].ID != gcc.TLSDomains[0].ID { + t.Errorf("bad Domain ID: %q (%q)", cc.TLSDomains[0].ID, gcc.TLSDomains[0].ID) + } // Update var ucc *CustomTLSCertificate From 87b2450943b71397e46095ba2644a518df8eab76 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 9 Nov 2020 14:29:54 -0800 Subject: [PATCH 34/58] adds robust input unit testing for TLS activation operations --- fastly/custom_tls_activation.go | 4 +- fastly/custom_tls_activation_test.go | 58 +++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 776bbf25c..5c64c0aee 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -120,7 +120,7 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err // CreateTLSActivationInput is used as input to the CreateTLSActivation function. type CreateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. + ID string `jsonapi:"primary,tls_activation"` // ID value does not need to be set. Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. Configuration *TLSConfiguration `jsonapi:"relation,tls_configuration"` Domain *TLSDomain `jsonapi:"relation,tls_domain"` @@ -155,7 +155,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { - ID string `jsonapi:"primary,tls_activation"` + ID string `jsonapi:"primary,tls_activation"` Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. } diff --git a/fastly/custom_tls_activation_test.go b/fastly/custom_tls_activation_test.go index 9ae319c5c..e399485cb 100644 --- a/fastly/custom_tls_activation_test.go +++ b/fastly/custom_tls_activation_test.go @@ -80,7 +80,7 @@ func TestClient_TLSActivation(t *testing.T) { var uta *TLSActivation record(t, fixtureBase+"update", func(c *Client) { uta, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ - ID: "ACTIVATION_ID", + ID: "ACTIVATION_ID", Certificate: &CustomTLSCertificate{}, }) }) @@ -108,14 +108,38 @@ func TestClient_CreateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/create", func(c *Client) { _, err = c.CreateTLSActivation(&CreateTLSActivationInput{ - Certificate: &CustomTLSCertificate{}, - Configuration: &TLSConfiguration{}, - Domain: &TLSDomain{}, + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + Configuration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, + Domain: &TLSDomain{ID: "DOMAIN_NAME"}, }) }) if err != nil { t.Fatal(err) } + + _, err = testClient.CreateTLSActivation(&CreateTLSActivationInput{ + Configuration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, + Domain: &TLSDomain{ID: "DOMAIN_NAME"}, + }) + if err != ErrMissingTLSCertificate { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.CreateTLSActivation(&CreateTLSActivationInput{ + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + Domain: &TLSDomain{ID: "DOMAIN_NAME"}, + }) + if err != ErrMissingTLSConfiguration { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.CreateTLSActivation(&CreateTLSActivationInput{ + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + Configuration: &TLSConfiguration{ID: "CONFIGURATION_ID"}, + }) + if err != ErrMissingTLSDomain { + t.Errorf("bad error: %s", err) + } } func TestClient_DeleteTLSActivation_validation(t *testing.T) { @@ -130,6 +154,11 @@ func TestClient_DeleteTLSActivation_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + err = testClient.DeleteTLSActivation(&DeleteTLSActivationInput{}) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } func TestClient_ListTLSActivations_validation(t *testing.T) { @@ -156,6 +185,11 @@ func TestClient_GetTLSActivation_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.GetTLSActivation(&GetTLSActivationInput{}) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } func TestClient_UpdateTLSActivation_validation(t *testing.T) { @@ -164,11 +198,25 @@ func TestClient_UpdateTLSActivation_validation(t *testing.T) { var err error record(t, "custom_tls_activation/update", func(c *Client) { _, err = c.UpdateTLSActivation(&UpdateTLSActivationInput{ - ID: "ACTIVATION_ID", + ID: "ACTIVATION_ID", Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, }) }) if err != nil { t.Fatal(err) } + + _, err = testClient.UpdateTLSActivation(&UpdateTLSActivationInput{ + ID: "ACTIVATION_ID", + }) + if err != ErrMissingTLSCertificate { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.UpdateTLSActivation(&UpdateTLSActivationInput{ + Certificate: &CustomTLSCertificate{ID: "CERTIFICATE_ID"}, + }) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } From d772e8a30447963ccc2b8379adbab7429235f795 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 9 Nov 2020 15:04:05 -0800 Subject: [PATCH 35/58] adds input validation tests for custom TLS certificate operations --- fastly/custom_tls_certificate_test.go | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/fastly/custom_tls_certificate_test.go b/fastly/custom_tls_certificate_test.go index 96637203f..7d1b1eb33 100644 --- a/fastly/custom_tls_certificate_test.go +++ b/fastly/custom_tls_certificate_test.go @@ -104,6 +104,20 @@ func TestClient_CreateCustomTLSCertificate_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.CreateCustomTLSCertificate(&CreateCustomTLSCertificateInput{ + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + }) + if err != ErrMissingName { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.CreateCustomTLSCertificate(&CreateCustomTLSCertificateInput{ + Name: "My certificate", + }) + if err != ErrMissingCertBlob { + t.Errorf("bad error: %s", err) + } } func TestClient_DeleteCustomTLSCertificate_validation(t *testing.T) { @@ -118,6 +132,11 @@ func TestClient_DeleteCustomTLSCertificate_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + err = testClient.DeleteCustomTLSCertificate(&DeleteCustomTLSCertificateInput{}) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } func TestClient_ListCustomTLSCertificates_validation(t *testing.T) { @@ -144,6 +163,11 @@ func TestClient_GetCustomTLSCertificate_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.GetCustomTLSCertificate(&GetCustomTLSCertificateInput{}) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } func TestClient_UpdateCustomTLSCertificate_validation(t *testing.T) { @@ -160,4 +184,28 @@ func TestClient_UpdateCustomTLSCertificate_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.UpdateCustomTLSCertificate(&UpdateCustomTLSCertificateInput{ + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + Name: "My certificate", + }) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.UpdateCustomTLSCertificate(&UpdateCustomTLSCertificateInput{ + ID: "CERTIFICATE_ID", + Name: "My certificate", + }) + if err != ErrMissingCertBlob { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.UpdateCustomTLSCertificate(&UpdateCustomTLSCertificateInput{ + ID: "CERTIFICATE_ID", + CertBlob: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + }) + if err != ErrMissingName { + t.Errorf("bad error: %s", err) + } } From d53357e64240e074d863b661fb99d9395fee06cb Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 9 Nov 2020 15:21:03 -0800 Subject: [PATCH 36/58] adds input validation unit tests to TLS configuration operations --- fastly/custom_tls_configuration_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fastly/custom_tls_configuration_test.go b/fastly/custom_tls_configuration_test.go index 9b186702f..d6ad79193 100644 --- a/fastly/custom_tls_configuration_test.go +++ b/fastly/custom_tls_configuration_test.go @@ -81,6 +81,11 @@ func TestClient_GetCustomTLSConfiguration_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.GetCustomTLSConfiguration(&GetCustomTLSConfigurationInput{}) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } } func TestClient_UpdateCustomTLSConfiguration_validation(t *testing.T) { @@ -96,4 +101,18 @@ func TestClient_UpdateCustomTLSConfiguration_validation(t *testing.T) { if err != nil { t.Fatal(err) } + + _, err = testClient.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ + Name: "My configuration v2", + }) + if err != ErrMissingID { + t.Errorf("bad error: %s", err) + } + + _, err = testClient.UpdateCustomTLSConfiguration(&UpdateCustomTLSConfigurationInput{ + ID: "CONFIGURATION_ID", + }) + if err != ErrMissingName { + t.Errorf("bad error: %s", err) + } } From ca2eb8e57fea70e32803fbf66e39e0850fb45659 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Mon, 9 Nov 2020 15:38:38 -0800 Subject: [PATCH 37/58] adds missing params to ListCustomCertificates --- fastly/custom_tls_certificate.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 2665fe228..ed6c7e8ca 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -26,9 +26,11 @@ type CustomTLSCertificate struct { // ListCustomTLSCertificatesInput is used as input to the ListCustomTLSCertificatesInput function. type ListCustomTLSCertificatesInput struct { + FilterNotAfter *string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). + FilterTLSDomainsIDMatch *string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. + Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. PageNumber *uint // The page index for pagination. PageSize *uint // The number of keys per page. - FilterTLSDomainsIDMatch *string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. Sort *string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. } @@ -36,7 +38,9 @@ type ListCustomTLSCertificatesInput struct { func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ + "filter[not_after]": i.FilterNotAfter, "filter[tls_domains.id][match]": i.FilterTLSDomainsIDMatch, + "include": i.Include, "page[size]": i.PageSize, "page[number]": i.PageNumber, "sort": i.Sort, From 1b191e7f820db027fb902dbd9d612ee2aaf15a3e Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 10 Nov 2020 09:06:33 -0800 Subject: [PATCH 38/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 5c64c0aee..c651eac23 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -159,7 +159,7 @@ type UpdateTLSActivationInput struct { Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. } -// UpdateTLSActivation +// UpdateTLSActivation updates the certificate used to terminate TLS traffic for the domain associated with this TLS activation. func (c *Client) UpdateTLSActivation(i *UpdateTLSActivationInput) (*TLSActivation, error) { if i.ID == "" { return nil, ErrMissingID From d9cfa49d5bf096bf257135efc292ca85c912ea21 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 10 Nov 2020 09:06:52 -0800 Subject: [PATCH 39/58] Update fastly/custom_tls_certificate.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_certificate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index ed6c7e8ca..15d4f242a 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -8,7 +8,7 @@ import ( "github.com/google/jsonapi" ) -// CustomTLSCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate +// CustomTLSCertificate represents a custom certificate. Uses common TLSDomain type from BulkCertificate. type CustomTLSCertificate struct { ID string `jsonapi:"primary,tls_certificate"` IssuedTo string `jsonapi:"attr,issued_to"` From 9582d70379419f3c45be60ecd560b3f2c70084b6 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 10 Nov 2020 09:44:39 -0800 Subject: [PATCH 40/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index c651eac23..86d37da67 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -156,7 +156,7 @@ func (c *Client) CreateTLSActivation(i *CreateTLSActivationInput) (*TLSActivatio // UpdateTLSActivationInput is used as input to the UpdateTLSActivation function. type UpdateTLSActivationInput struct { ID string `jsonapi:"primary,tls_activation"` - Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. + Certificate *CustomTLSCertificate `jsonapi:"relation,tls_certificate"` // Only ID of CustomTLSCertificate needs to be set. } // UpdateTLSActivation updates the certificate used to terminate TLS traffic for the domain associated with this TLS activation. From 28f284c931807b745a83caedb0c3e137e9ce1265 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 10 Nov 2020 09:45:11 -0800 Subject: [PATCH 41/58] Update fastly/custom_tls_activation.go Co-authored-by: Patrick Hamann --- fastly/custom_tls_activation.go | 1 - 1 file changed, 1 deletion(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 86d37da67..625d22209 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -17,7 +17,6 @@ type TLSActivation struct { CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } -// TLSCertificate represents a certificate relationship. See CustomTLSCertificate for the /tls/certificates API. // ListTLSActivationsInput is used as input to the ListTLSActivations function. type ListTLSActivationsInput struct { From 99777a2cc247984e905cdd02cc6eed567b2a7498 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 10 Nov 2020 09:47:24 -0800 Subject: [PATCH 42/58] remove pesky type --- fastly/custom_tls_activation.go | 1 - fastly/custom_tls_certificate.go | 1 - 2 files changed, 2 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 625d22209..042401d17 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -17,7 +17,6 @@ type TLSActivation struct { CreatedAt *time.Time `jsonapi:"attr,created_at,iso8601"` } - // ListTLSActivationsInput is used as input to the ListTLSActivations function. type ListTLSActivationsInput struct { FilterTLSCertificateID *string // Limit the returned activations to a specific certificate. diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 15d4f242a..6f0a7fee8 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -146,7 +146,6 @@ type UpdateCustomTLSCertificateInput struct { ID string `jsonapi:"primary,tls_certificate"` CertBlob string `jsonapi:"attr,cert_blob"` Name string `jsonapi:"attr,name"` - Type string `jsonapi:"primary,tls_certificate"` } // UpdateCustomTLSCertificate replace a certificate with a newly reissued certificate. From f5af37eedc1d57331e5029ae3e1d22bbcb2caf8d Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 12 Nov 2020 11:21:45 -0800 Subject: [PATCH 43/58] Update fastly/custom_tls_configuration.go Co-authored-by: Mark McDonnell --- fastly/custom_tls_configuration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 18d5da167..98aeda550 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -57,7 +57,7 @@ func (i *ListCustomTLSConfigurationsInput) formatFilters() map[string]string { // ListCustomTLSConfigurations list all TLS configurations. func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput) ([]*CustomTLSConfiguration, error) { p := "/tls/configurations" - filters := &RequestOptions{ + ro := &RequestOptions{ Params: i.formatFilters(), Headers: map[string]string{ "Accept": "application/vnd.api+json", // this is required otherwise the filters don't work From 5f937e4e460ba69e40041147a85341514194e94f Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 12 Nov 2020 11:22:05 -0800 Subject: [PATCH 44/58] Update fastly/custom_tls_configuration.go Co-authored-by: Mark McDonnell --- fastly/custom_tls_configuration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 98aeda550..8050c8926 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -64,7 +64,7 @@ func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput }, } - r, err := c.Get(p, filters) + r, err := c.Get(p, ro) if err != nil { return nil, err } From 520f5ed50bcb915882ae92d0bcb29f3cb7743c93 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 12 Nov 2020 11:22:37 -0800 Subject: [PATCH 45/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index ca3e8a0ad..0b993d1f1 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -157,7 +157,7 @@ var ErrMissingTLSCertificate = errors.New("missing required field 'TLSCertificat // a "TLSConfiguration" struct, but one was not set. var ErrMissingTLSConfiguration = errors.New("missing required field 'TLSConfiguration'") -// ErrMissingTLSDomainID is an error that is returned from an input struct that requires +// ErrMissingTLSDomain is an error that is returned from an input struct that requires // a "TLSDomain" struct, but one was not set. var ErrMissingTLSDomain = errors.New("missing required field 'TLSDomainID'") From ce2d715f89fbd1a67013d7e12827fea6b11166a0 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 12 Nov 2020 11:23:23 -0800 Subject: [PATCH 46/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 0b993d1f1..444a906a9 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -159,7 +159,7 @@ var ErrMissingTLSConfiguration = errors.New("missing required field 'TLSConfigur // ErrMissingTLSDomain is an error that is returned from an input struct that requires // a "TLSDomain" struct, but one was not set. -var ErrMissingTLSDomain = errors.New("missing required field 'TLSDomainID'") +var ErrMissingTLSDomain = errors.New("missing required field 'TLSDomain'") // ErrStatusNotOk is an error that indicates that indicates that the response body returned // by the Fastly API was not `{"status": "ok"}` From 79f7c5d61ac70e8bc785391e41e18582d76fe6ab Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Thu, 12 Nov 2020 11:45:11 -0800 Subject: [PATCH 47/58] small changes to match convention, per feedback --- fastly/custom_tls_activation.go | 2 +- fastly/custom_tls_configuration.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index 042401d17..ce74b9710 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -103,7 +103,7 @@ func (c *Client) GetTLSActivation(i *GetTLSActivationInput) (*TLSActivation, err ro.Params = map[string]string{"include": *i.Include} } - r, err := c.Get(p, nil) + r, err := c.Get(p, ro) if err != nil { return nil, err } diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 8050c8926..1aae4b39e 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -89,7 +89,7 @@ func (c *Client) ListCustomTLSConfigurations(i *ListCustomTLSConfigurationsInput // GetCustomTLSConfigurationInput is used as input to the GetCustomTLSConfiguration function. type GetCustomTLSConfigurationInput struct { ID string - Include *string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. + Include string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. } // GetCustomTLSConfiguration returns a single TLS configuration. @@ -106,8 +106,8 @@ func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (* }, } - if i.Include != nil { - ro.Params = map[string]string{"include": *i.Include} + if i.Include != "" { + ro.Params = map[string]string{"include": i.Include} } r, err := c.Get(p, ro) @@ -125,7 +125,7 @@ func (c *Client) GetCustomTLSConfiguration(i *GetCustomTLSConfigurationInput) (* // UpdateCustomTLSConfigurationInput is used as input to the UpdateCustomTLSConfiguration function. type UpdateCustomTLSConfigurationInput struct { - ID string `jsonapi:"attr,id"` + ID string Name string `jsonapi:"attr,name"` } From 436cc6c40c53e1844a3f94a963a3ae61ee1f0c91 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Wed, 18 Nov 2020 10:47:41 -0800 Subject: [PATCH 48/58] converts list operations to not use pointers in their input structs --- fastly/custom_tls_activation.go | 25 +++++++++++++++++-------- fastly/custom_tls_certificate.go | 26 ++++++++++++++++++-------- fastly/custom_tls_configuration.go | 22 ++++++++++++++++------ 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/fastly/custom_tls_activation.go b/fastly/custom_tls_activation.go index ce74b9710..19b3dad2d 100644 --- a/fastly/custom_tls_activation.go +++ b/fastly/custom_tls_activation.go @@ -3,6 +3,7 @@ package fastly import ( "fmt" "reflect" + "strconv" "time" "github.com/google/jsonapi" @@ -19,12 +20,12 @@ type TLSActivation struct { // ListTLSActivationsInput is used as input to the ListTLSActivations function. type ListTLSActivationsInput struct { - FilterTLSCertificateID *string // Limit the returned activations to a specific certificate. - FilterTLSConfigurationID *string // Limit the returned activations to a specific TLS configuration. - FilterTLSDomainID *string // Limit the returned rules to a specific domain name. - Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. - PageNumber *uint // The page index for pagination. - PageSize *uint // The number of activations per page. + FilterTLSCertificateID string // Limit the returned activations to a specific certificate. + FilterTLSConfigurationID string // Limit the returned activations to a specific TLS configuration. + FilterTLSDomainID string // Limit the returned rules to a specific domain name. + Include string // Include related objects. Optional, comma-separated values. Permitted values: tls_certificate, tls_configuration, and tls_domain. + PageNumber int // The page index for pagination. + PageSize int // The number of activations per page. } // formatFilters converts user input into query parameters for filtering. @@ -38,9 +39,17 @@ func (i *ListTLSActivationsInput) formatFilters() map[string]string { "page[number]": i.PageNumber, "page[size]": i.PageSize, } + for key, value := range pairings { - if !reflect.ValueOf(value).IsNil() { - result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + switch t := reflect.TypeOf(value).String(); t { + case "string": + if value != "" { + result[key] = value.(string) + } + case "int": + if value != 0 { + result[key] = strconv.Itoa(value.(int)) + } } } diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 6f0a7fee8..db61c1aa3 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -3,6 +3,7 @@ package fastly import ( "fmt" "reflect" + "strconv" "time" "github.com/google/jsonapi" @@ -26,12 +27,12 @@ type CustomTLSCertificate struct { // ListCustomTLSCertificatesInput is used as input to the ListCustomTLSCertificatesInput function. type ListCustomTLSCertificatesInput struct { - FilterNotAfter *string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). - FilterTLSDomainsIDMatch *string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. - Include *string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. - PageNumber *uint // The page index for pagination. - PageSize *uint // The number of keys per page. - Sort *string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. + FilterNotAfter string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). + FilterTLSDomainsIDMatch string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. + Include string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. + PageNumber int // The page index for pagination. + PageSize int // The number of keys per page. + Sort string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. } // formatFilters converts user input into query parameters for filtering. @@ -45,11 +46,20 @@ func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { "page[number]": i.PageNumber, "sort": i.Sort, } + for key, value := range pairings { - if !reflect.ValueOf(value).IsNil() { - result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + switch t := reflect.TypeOf(value).String(); t { + case "string": + if value != "" { + result[key] = value.(string) + } + case "int": + if value != 0 { + result[key] = strconv.Itoa(value.(int)) + } } } + return result } diff --git a/fastly/custom_tls_configuration.go b/fastly/custom_tls_configuration.go index 1aae4b39e..3e5d54574 100644 --- a/fastly/custom_tls_configuration.go +++ b/fastly/custom_tls_configuration.go @@ -3,6 +3,7 @@ package fastly import ( "fmt" "reflect" + "strconv" "time" "github.com/google/jsonapi" @@ -30,10 +31,10 @@ type DNSRecord struct { // ListCustomTLSConfigurationsInput is used as input to the ListCustomTLSConfigurationsInput function. type ListCustomTLSConfigurationsInput struct { - FilterBulk *bool // Whether or not to only include bulk=true configurations - Include *string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. - PageNumber *uint // The page index for pagination. - PageSize *uint // The number of keys per page. + FilterBulk bool // Whether or not to only include bulk=true configurations + Include string // Include related objects. Optional, comma-separated values. Permitted values: dns_records. + PageNumber int // The page index for pagination. + PageSize int // The number of keys per page. } @@ -46,11 +47,20 @@ func (i *ListCustomTLSConfigurationsInput) formatFilters() map[string]string { "page[size]": i.PageSize, "page[number]": i.PageNumber, } + for key, value := range pairings { - if !reflect.ValueOf(value).IsNil() { - result[key] = fmt.Sprintf("%v", reflect.ValueOf(value).Elem()) + switch t := reflect.TypeOf(value).String(); t { + case "string": + if value != "" { + result[key] = value.(string) + } + case "int": + if value != 0 { + result[key] = strconv.Itoa(value.(int)) + } } } + return result } From 9d5ec1e9840a82cb43110376520cd64a3b529bae Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 08:17:39 -0800 Subject: [PATCH 49/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 04da66226..61c8bd625 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -171,7 +171,7 @@ var ErrMissingIntermediatesBlob = errors.New("missing required field 'Intermedia // ErrMissingTLSCertificate is an error that is returned from an input struct that requires // a "TLSCertificate" struct, but one was not set. -var ErrMissingTLSCertificate = errors.New("missing required field 'TLSCertificate'") +var ErrMissingTLSCertificate = errors.New("missing required field 'Certificate'") // ErrMissingTLSConfiguration is an error that is returned from an input struct that requires // a "TLSConfiguration" struct, but one was not set. From 3372671769eb78dfe9a2a6f4f9bdae9f8b9c20e8 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 08:17:48 -0800 Subject: [PATCH 50/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 61c8bd625..7e32be33d 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -175,7 +175,7 @@ var ErrMissingTLSCertificate = errors.New("missing required field 'Certificate'" // ErrMissingTLSConfiguration is an error that is returned from an input struct that requires // a "TLSConfiguration" struct, but one was not set. -var ErrMissingTLSConfiguration = errors.New("missing required field 'TLSConfiguration'") +var ErrMissingTLSConfiguration = errors.New("missing required field 'Configuration'") // ErrMissingTLSDomain is an error that is returned from an input struct that requires // a "TLSDomain" struct, but one was not set. From 4a70090ed2b0982f564069c5f991820c71dedb21 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 08:17:56 -0800 Subject: [PATCH 51/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 7e32be33d..4eeeaabc2 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -179,7 +179,7 @@ var ErrMissingTLSConfiguration = errors.New("missing required field 'Configurati // ErrMissingTLSDomain is an error that is returned from an input struct that requires // a "TLSDomain" struct, but one was not set. -var ErrMissingTLSDomain = errors.New("missing required field 'TLSDomain'") +var ErrMissingTLSDomain = errors.New("missing required field 'Domain'") // ErrStatusNotOk is an error that indicates that indicates that the response body returned // by the Fastly API was not `{"status": "ok"}` From 010b02425e3c69696062564907f45d3d9216d571 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 08:18:37 -0800 Subject: [PATCH 52/58] fixes ListCustomTLSCertificates filter --- fastly/custom_tls_certificate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index db61c1aa3..d896b70d3 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -40,7 +40,7 @@ func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ "filter[not_after]": i.FilterNotAfter, - "filter[tls_domains.id][match]": i.FilterTLSDomainsIDMatch, + "filter[tls_domains.id]": i.FilterTLSDomainsIDMatch, "include": i.Include, "page[size]": i.PageSize, "page[number]": i.PageNumber, From f135dfbcce054b0e160aad248fb5d293450dfe0a Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 08:22:25 -0800 Subject: [PATCH 53/58] go fmt --- fastly/custom_tls_certificate.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index d896b70d3..001d9c6dd 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -39,12 +39,12 @@ type ListCustomTLSCertificatesInput struct { func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ - "filter[not_after]": i.FilterNotAfter, + "filter[not_after]": i.FilterNotAfter, "filter[tls_domains.id]": i.FilterTLSDomainsIDMatch, - "include": i.Include, - "page[size]": i.PageSize, - "page[number]": i.PageNumber, - "sort": i.Sort, + "include": i.Include, + "page[size]": i.PageSize, + "page[number]": i.PageNumber, + "sort": i.Sort, } for key, value := range pairings { From f741b0d70e14e6bf2232920dcce6cf8678886b23 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 10:05:39 -0800 Subject: [PATCH 54/58] Update fastly/custom_tls_certificate.go Co-authored-by: Mark McDonnell --- fastly/custom_tls_certificate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 001d9c6dd..9b2c40d41 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -28,7 +28,7 @@ type CustomTLSCertificate struct { // ListCustomTLSCertificatesInput is used as input to the ListCustomTLSCertificatesInput function. type ListCustomTLSCertificatesInput struct { FilterNotAfter string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). - FilterTLSDomainsIDMatch string // Filter certificates by their matching, fully-qualified domain name. Returns all partial matches. Must provide a value longer than 3 characters. + FilterTLSDomainsID string // Limit the returned certificates to those that include the specific domain. Include string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. PageNumber int // The page index for pagination. PageSize int // The number of keys per page. From 272b8059ed2ca01e4f547effec2723df40b56e0e Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 10:06:18 -0800 Subject: [PATCH 55/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 4eeeaabc2..fcc189005 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -170,7 +170,7 @@ var ErrMissingCertBlob = errors.New("missing required field 'CertBlob'") var ErrMissingIntermediatesBlob = errors.New("missing required field 'IntermediatesBlob'") // ErrMissingTLSCertificate is an error that is returned from an input struct that requires -// a "TLSCertificate" struct, but one was not set. +// a "Certificate" field assigned a "TLSCertificate" struct, but one was not set. var ErrMissingTLSCertificate = errors.New("missing required field 'Certificate'") // ErrMissingTLSConfiguration is an error that is returned from an input struct that requires From 4e84200b11fa54553bd93c45f2b22fd0b8f16f70 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 10:06:34 -0800 Subject: [PATCH 56/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index fcc189005..6635fabeb 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -174,7 +174,7 @@ var ErrMissingIntermediatesBlob = errors.New("missing required field 'Intermedia var ErrMissingTLSCertificate = errors.New("missing required field 'Certificate'") // ErrMissingTLSConfiguration is an error that is returned from an input struct that requires -// a "TLSConfiguration" struct, but one was not set. +// a "Configuration" field assigned a "TLSConfiguration" struct, but one was not set. var ErrMissingTLSConfiguration = errors.New("missing required field 'Configuration'") // ErrMissingTLSDomain is an error that is returned from an input struct that requires From 91c7600a574021ac4d59eec1441450f6961e7873 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 10:06:52 -0800 Subject: [PATCH 57/58] Update fastly/errors.go Co-authored-by: Mark McDonnell --- fastly/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastly/errors.go b/fastly/errors.go index 6635fabeb..c426f768c 100644 --- a/fastly/errors.go +++ b/fastly/errors.go @@ -178,7 +178,7 @@ var ErrMissingTLSCertificate = errors.New("missing required field 'Certificate'" var ErrMissingTLSConfiguration = errors.New("missing required field 'Configuration'") // ErrMissingTLSDomain is an error that is returned from an input struct that requires -// a "TLSDomain" struct, but one was not set. +// a "Domain" field assigned a "TLSDomain" struct, but one was not set. var ErrMissingTLSDomain = errors.New("missing required field 'Domain'") // ErrStatusNotOk is an error that indicates that indicates that the response body returned From ba046de8235a7e5dacfb73428d3f98360a228cb8 Mon Sep 17 00:00:00 2001 From: Joel Guerra Date: Tue, 8 Dec 2020 10:20:29 -0800 Subject: [PATCH 58/58] pushing filter fix where GH "commit suggestion" didnt work --- fastly/custom_tls_certificate.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fastly/custom_tls_certificate.go b/fastly/custom_tls_certificate.go index 9b2c40d41..10d259e88 100644 --- a/fastly/custom_tls_certificate.go +++ b/fastly/custom_tls_certificate.go @@ -27,12 +27,12 @@ type CustomTLSCertificate struct { // ListCustomTLSCertificatesInput is used as input to the ListCustomTLSCertificatesInput function. type ListCustomTLSCertificatesInput struct { - FilterNotAfter string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). + FilterNotAfter string // Limit the returned certificates to those that expire prior to the specified date in UTC. Accepts parameters: lte (e.g., filter[not_after][lte]=2020-05-05). FilterTLSDomainsID string // Limit the returned certificates to those that include the specific domain. - Include string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. - PageNumber int // The page index for pagination. - PageSize int // The number of keys per page. - Sort string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. + Include string // Include related objects. Optional, comma-separated values. Permitted values: tls_activations. + PageNumber int // The page index for pagination. + PageSize int // The number of keys per page. + Sort string // The order in which to list certificates. Valid values are created_at, not_before, not_after. May precede any value with a - for descending. } // formatFilters converts user input into query parameters for filtering. @@ -40,7 +40,7 @@ func (i *ListCustomTLSCertificatesInput) formatFilters() map[string]string { result := map[string]string{} pairings := map[string]interface{}{ "filter[not_after]": i.FilterNotAfter, - "filter[tls_domains.id]": i.FilterTLSDomainsIDMatch, + "filter[tls_domains.id]": i.FilterTLSDomainsID, "include": i.Include, "page[size]": i.PageSize, "page[number]": i.PageNumber,