github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/selected_hostname.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 ) 10 11 type ( 12 // The SelectedHostname interface supports retrieving and modifying the list of hostnames protected under 13 // a configuration. 14 // 15 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#selectedhostnames 16 // Deprecated: this interface will be removed in a future release. Use the WAPSelectedHostnames interface instead. 17 SelectedHostname interface { 18 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#getselectedhostnames 19 // Deprecated: this method will be removed in a future release. Use the GetWAPSelectedHostnames method of the WAPSelectedHostnames interface instead. 20 GetSelectedHostnames(ctx context.Context, params GetSelectedHostnamesRequest) (*GetSelectedHostnamesResponse, error) 21 22 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#getselectedhostnames 23 // Deprecated: this method will be removed in a future release. Use the GetWAPSelectedHostnames method of the WAPSelectedHostnames interface instead. 24 GetSelectedHostname(ctx context.Context, params GetSelectedHostnameRequest) (*GetSelectedHostnameResponse, error) 25 26 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#putselectedhostnames 27 // Deprecated: this method will be removed in a future release. Use the UpdateWAPSelectedHostnames method of the WAPSelectedHostnames interface instead. 28 UpdateSelectedHostname(ctx context.Context, params UpdateSelectedHostnameRequest) (*UpdateSelectedHostnameResponse, error) 29 30 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#putselectedhostnames 31 // Deprecated: this method will be removed in a future release. Use the UpdateWAPSelectedHostnames method of the WAPSelectedHostnames interface instead. 32 UpdateSelectedHostnames(ctx context.Context, params UpdateSelectedHostnamesRequest) (*UpdateSelectedHostnamesResponse, error) 33 } 34 35 // GetSelectedHostnamesRequest is used to retrieve the selected hostnames for a configuration. 36 GetSelectedHostnamesRequest struct { 37 ConfigID int `json:"configId"` 38 Version int `json:"version"` 39 HostnameList []Hostname `json:"hostnameList"` 40 } 41 42 // GetSelectedHostnamesResponse is returned from a call to GetSelectedHostnames. 43 GetSelectedHostnamesResponse struct { 44 HostnameList []Hostname `json:"hostnameList,omitempty"` 45 } 46 47 // GetSelectedHostnameRequest is used to retrieve the selected hostnames for a configuration. 48 // Deprecated: this struct will be removed in a future release. 49 GetSelectedHostnameRequest struct { 50 ConfigID int `json:"configId"` 51 Version int `json:"version"` 52 HostnameList []Hostname `json:"hostnameList"` 53 } 54 55 // GetSelectedHostnameResponse is returned from a call to GetSelectedHostname. 56 // Deprecated: this struct will be removed in a future release. 57 GetSelectedHostnameResponse struct { 58 HostnameList []Hostname `json:"hostnameList"` 59 } 60 61 // UpdateSelectedHostnamesRequest is used to modify the selected hostnames for a configuration. 62 UpdateSelectedHostnamesRequest struct { 63 ConfigID int `json:"configId"` 64 Version int `json:"version"` 65 HostnameList []Hostname `json:"hostnameList"` 66 } 67 68 // UpdateSelectedHostnamesResponse is returned from a call to UpdateSelectedHostnames. 69 UpdateSelectedHostnamesResponse struct { 70 HostnameList []Hostname `json:"hostnameList"` 71 } 72 73 // UpdateSelectedHostnameRequest is used to modify the selected hostnames for a configuration. 74 // Deprecated: this struct will be removed in a future release. 75 UpdateSelectedHostnameRequest struct { 76 ConfigID int `json:"configId"` 77 Version int `json:"version"` 78 HostnameList []Hostname `json:"hostnameList"` 79 } 80 81 // UpdateSelectedHostnameResponse is returned from a call to UpdateSelectedHostname. 82 // Deprecated: this struct will be removed in a future release. 83 UpdateSelectedHostnameResponse struct { 84 HostnameList []Hostname `json:"hostnameList"` 85 } 86 87 // Hostname describes a hostname that may be protected. 88 Hostname struct { 89 Hostname string `json:"hostname"` 90 } 91 ) 92 93 // Validate validates a GetSelectedHostnameRequest. 94 // Deprecated: this method will be removed in a future release. 95 func (v GetSelectedHostnameRequest) Validate() error { 96 return validation.Errors{ 97 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 98 "Version": validation.Validate(v.Version, validation.Required), 99 }.Filter() 100 } 101 102 // Validate validates a GetSelectedHostnamesRequest. 103 func (v GetSelectedHostnamesRequest) Validate() error { 104 return validation.Errors{ 105 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 106 "Version": validation.Validate(v.Version, validation.Required), 107 }.Filter() 108 } 109 110 // Validate validates an UpdateSelectedHostnamesRequest. 111 func (v UpdateSelectedHostnamesRequest) Validate() error { 112 return validation.Errors{ 113 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 114 "Version": validation.Validate(v.Version, validation.Required), 115 }.Filter() 116 } 117 118 // Validate validates an UpdateSelectedHostnameRequest. 119 // Deprecated: this method will be removed in a future release. 120 func (v UpdateSelectedHostnameRequest) Validate() error { 121 return validation.Errors{ 122 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 123 "Version": validation.Validate(v.Version, validation.Required), 124 }.Filter() 125 } 126 127 // Deprecated: this method will be removed in a future release. 128 func (p *appsec) GetSelectedHostname(ctx context.Context, params GetSelectedHostnameRequest) (*GetSelectedHostnameResponse, error) { 129 logger := p.Log(ctx) 130 logger.Debug("GetSelectedHostname") 131 132 if err := params.Validate(); err != nil { 133 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 134 } 135 136 uri := fmt.Sprintf( 137 "/appsec/v1/configs/%d/versions/%d/selected-hostnames", 138 params.ConfigID, 139 params.Version) 140 141 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 142 if err != nil { 143 return nil, fmt.Errorf("failed to create GetSelectedHostname request: %w", err) 144 } 145 146 var result GetSelectedHostnameResponse 147 resp, err := p.Exec(req, &result) 148 if err != nil { 149 return nil, fmt.Errorf("get selected hostname request failed: %w", err) 150 } 151 if resp.StatusCode != http.StatusOK { 152 return nil, p.Error(resp) 153 } 154 155 return &result, nil 156 } 157 158 func (p *appsec) GetSelectedHostnames(ctx context.Context, params GetSelectedHostnamesRequest) (*GetSelectedHostnamesResponse, error) { 159 logger := p.Log(ctx) 160 logger.Debug("GetSelectedHostnames") 161 162 if err := params.Validate(); err != nil { 163 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 164 } 165 166 uri := fmt.Sprintf( 167 "/appsec/v1/configs/%d/versions/%d/selected-hostnames", 168 params.ConfigID, 169 params.Version) 170 171 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 172 if err != nil { 173 return nil, fmt.Errorf("failed to create GetSelectedHostnames request: %w", err) 174 } 175 176 var result GetSelectedHostnamesResponse 177 resp, err := p.Exec(req, &result) 178 if err != nil { 179 return nil, fmt.Errorf("get selected hostnames request failed: %w", err) 180 } 181 if resp.StatusCode != http.StatusOK { 182 return nil, p.Error(resp) 183 } 184 185 return &result, nil 186 } 187 188 func (p *appsec) UpdateSelectedHostnames(ctx context.Context, params UpdateSelectedHostnamesRequest) (*UpdateSelectedHostnamesResponse, error) { 189 logger := p.Log(ctx) 190 logger.Debug("UpdateSelectedHostnames") 191 192 if err := params.Validate(); err != nil { 193 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 194 } 195 196 uri := fmt.Sprintf( 197 "/appsec/v1/configs/%d/versions/%d/selected-hostnames", 198 params.ConfigID, 199 params.Version, 200 ) 201 202 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 203 if err != nil { 204 return nil, fmt.Errorf("failed to create UpdateSelectedHostnames request: %w", err) 205 } 206 207 var result UpdateSelectedHostnamesResponse 208 resp, err := p.Exec(req, &result, params) 209 if err != nil { 210 return nil, fmt.Errorf("update selected hostnames request failed: %w", err) 211 } 212 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 213 return nil, p.Error(resp) 214 } 215 216 return &result, nil 217 } 218 219 // Deprecated: this method will be removed in a future release. 220 func (p *appsec) UpdateSelectedHostname(ctx context.Context, params UpdateSelectedHostnameRequest) (*UpdateSelectedHostnameResponse, error) { 221 logger := p.Log(ctx) 222 logger.Debug("UpdateSelectedHostname") 223 224 if err := params.Validate(); err != nil { 225 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 226 } 227 228 uri := fmt.Sprintf( 229 "/appsec/v1/configs/%d/versions/%d/selected-hostnames", 230 params.ConfigID, 231 params.Version, 232 ) 233 234 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 235 if err != nil { 236 return nil, fmt.Errorf("failed to create UpdateSelectedHostname request: %w", err) 237 } 238 239 var result UpdateSelectedHostnameResponse 240 resp, err := p.Exec(req, &result, params) 241 if err != nil { 242 return nil, fmt.Errorf("update selected hostname request failed: %w", err) 243 } 244 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 245 return nil, p.Error(resp) 246 } 247 248 return &result, nil 249 }