Skip to content

Commit

Permalink
Merge pull request #3742 from ebisso/bugfix/certificate-authorities-p…
Browse files Browse the repository at this point in the history
…aram

Bugfix/certificate_authorities: fixes for methods to interact with Hostname Associations API
  • Loading branch information
jacobbednarz authored Dec 18, 2024
2 parents 8d86952 + e830fd4 commit f2d8cac
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 21 deletions.
3 changes: 3 additions & 0 deletions .changelog/3742.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
certificate_authorities: fixes for methods to interact with Certificate Authorities Hostname Associations API
```
34 changes: 21 additions & 13 deletions certificate_authorities.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,18 @@ type UpdateCertificateAuthoritiesHostnameAssociationsParams struct {
MTLSCertificateID string `json:"mtls_certificate_id,omitempty"`
}

type HostnameAssociationsUpdateRequest struct {
Hostnames []HostnameAssociation `json:"hostnames,omitempty"`
MTLSCertificateID string `json:"mtls_certificate_id,omitempty"`
}

type HostnameAssociationsResponse struct {
Response
Result []HostnameAssociation `json:"result"`
Result HostnameAssociations `json:"result"`
}

type HostnameAssociations struct {
Hostnames []HostnameAssociation `json:"hostnames"`
}

type HostnameAssociation = string
Expand All @@ -28,12 +37,11 @@ type HostnameAssociation = string
//
// API Reference: https://developers.cloudflare.com/api/resources/certificate_authorities/subresources/hostname_associations/methods/get/
func (api *API) ListCertificateAuthoritiesHostnameAssociations(ctx context.Context, rc *ResourceContainer, params ListCertificateAuthoritiesHostnameAssociationsParams) ([]HostnameAssociation, error) {
if rc.Level != ZoneRouteLevel {
return []HostnameAssociation{}, ErrRequiredZoneLevelResourceContainer
}

uri := fmt.Sprintf(
"/%s/%s/certificate_authorities/hostname_associations",
rc.Level,
rc.Identifier,
)
uri := buildURI(fmt.Sprintf("/zones/%s/certificate_authorities/hostname_associations", rc.Identifier), params)

res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
if err != nil {
Expand All @@ -46,18 +54,18 @@ func (api *API) ListCertificateAuthoritiesHostnameAssociations(ctx context.Conte
return []HostnameAssociation{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
}

return hostnameAssociationsResponse.Result, nil
return hostnameAssociationsResponse.Result.Hostnames, nil
}

// Replace Hostname Associations
//
// API Reference: https://developers.cloudflare.com/api/resources/certificate_authorities/subresources/hostname_associations/methods/update/
func (api *API) UpdateCertificateAuthoritiesHostnameAssociations(ctx context.Context, rc *ResourceContainer, params UpdateCertificateAuthoritiesHostnameAssociationsParams) ([]HostnameAssociation, error) {
uri := fmt.Sprintf(
"/%s/%s/certificate_authorities/hostname_associations",
rc.Level,
rc.Identifier,
)
if rc.Level != ZoneRouteLevel {
return []HostnameAssociation{}, ErrRequiredZoneLevelResourceContainer
}

uri := fmt.Sprintf("/zones/%s/certificate_authorities/hostname_associations", rc.Identifier)

res, err := api.makeRequestContext(ctx, http.MethodPut, uri, params)
if err != nil {
Expand All @@ -70,5 +78,5 @@ func (api *API) UpdateCertificateAuthoritiesHostnameAssociations(ctx context.Con
return []HostnameAssociation{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
}

return hostnameAssociationsResponse.Result, nil
return hostnameAssociationsResponse.Result.Hostnames, nil
}
33 changes: 25 additions & 8 deletions certificate_authorities_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"net/http"
"testing"

"github.com/goccy/go-json"
"github.com/stretchr/testify/assert"
)

Expand All @@ -15,15 +16,18 @@ func TestListCertificateAuthoritiesHostnameAssociations(t *testing.T) {

handler := func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
assert.Equal(t, "72ef4d06-4752-4493-a60a-7421470fd585", r.URL.Query().Get("mtls_certificate_id"))
w.Header().Set("content-type", "application/json")
fmt.Fprintf(w, `{
"success": true,
"errors": [],
"messages": [],
"result": [
"admin.example.com",
"foobar.example.com"
]
"result": {
"hostnames": [
"admin.example.com",
"foobar.example.com"
]
}
}`)
}

Expand Down Expand Up @@ -51,19 +55,32 @@ func TestUpdateCertificateAuthoritiesHostnameAssociations(t *testing.T) {

handler := func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)

wantReqHostnames := []HostnameAssociation{
"admin.example.com",
"foobar.example.com",
}
var req HostnameAssociationsUpdateRequest
assert.NoError(t, json.NewDecoder(r.Body).Decode(&req))
assert.Equal(t, "72ef4d06-4752-4493-a60a-7421470fd585", req.MTLSCertificateID)
assert.Equal(t, wantReqHostnames, req.Hostnames)

w.Header().Set("content-type", "application/json")
fmt.Fprintf(w, `{
"success": true,
"errors": [],
"messages": [],
"result": [
"admin.example.com",
"foobar.example.com"
]
"result": {
"hostnames": [
"admin.example.com",
"foobar.example.com"
]
}
}`)
}

hostnameAssociations := UpdateCertificateAuthoritiesHostnameAssociationsParams{
MTLSCertificateID: "72ef4d06-4752-4493-a60a-7421470fd585",
Hostnames: []HostnameAssociation{
"admin.example.com",
"foobar.example.com",
Expand Down

0 comments on commit f2d8cac

Please sign in to comment.