Skip to content

Commit 9181198

Browse files
author
Oliver Fletcher
authored
feat: Adding Cloudfront response headers policies (#1140)
1 parent 566bb86 commit 9181198

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package resources
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
"github.com/aws/aws-sdk-go/aws/session"
8+
"github.com/aws/aws-sdk-go/service/cloudfront"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
10+
)
11+
12+
type CloudFrontResponseHeadersPolicy struct {
13+
svc *cloudfront.CloudFront
14+
ID *string
15+
name *string
16+
}
17+
18+
func init() {
19+
register("CloudFrontResponseHeadersPolicy", ListCloudFrontResponseHeadersPolicies)
20+
}
21+
22+
func ListCloudFrontResponseHeadersPolicies(sess *session.Session) ([]Resource, error) {
23+
svc := cloudfront.New(sess)
24+
resources := []Resource{}
25+
params := &cloudfront.ListResponseHeadersPoliciesInput{}
26+
27+
for {
28+
resp, err := svc.ListResponseHeadersPolicies(params)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
for _, item := range resp.ResponseHeadersPolicyList.Items {
34+
resources = append(resources, &CloudFrontResponseHeadersPolicy{
35+
svc: svc,
36+
ID: item.ResponseHeadersPolicy.Id,
37+
name: item.ResponseHeadersPolicy.ResponseHeadersPolicyConfig.Name,
38+
})
39+
}
40+
41+
if resp.ResponseHeadersPolicyList.NextMarker == nil {
42+
break
43+
}
44+
45+
params.Marker = resp.ResponseHeadersPolicyList.NextMarker
46+
}
47+
48+
return resources, nil
49+
}
50+
51+
func (f *CloudFrontResponseHeadersPolicy) Filter() error {
52+
if strings.HasPrefix(*f.name, "Managed-") {
53+
return fmt.Errorf("Cannot delete default CloudFront Response headers policy")
54+
}
55+
return nil
56+
}
57+
58+
func (f *CloudFrontResponseHeadersPolicy) Remove() error {
59+
resp, err := f.svc.GetResponseHeadersPolicy(&cloudfront.GetResponseHeadersPolicyInput{
60+
Id: f.ID,
61+
})
62+
if err != nil {
63+
return err
64+
}
65+
66+
_, err = f.svc.DeleteResponseHeadersPolicy(&cloudfront.DeleteResponseHeadersPolicyInput{
67+
Id: f.ID,
68+
IfMatch: resp.ETag,
69+
})
70+
71+
return err
72+
}
73+
74+
func (f *CloudFrontResponseHeadersPolicy) String() string {
75+
return *f.name
76+
}
77+
78+
func (f *CloudFrontResponseHeadersPolicy) Properties() types.Properties {
79+
properties := types.NewProperties()
80+
properties.Set("ID", f.ID)
81+
properties.Set("Name", f.name)
82+
return properties
83+
}

0 commit comments

Comments
 (0)