Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfix/certificate_authorities: fixes for methods to interact with Hostname Associations API #3742

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading