1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package armnetwork 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 15 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 16 "net/http" 17 "net/url" 18 "strings" 19 "time" 20) 21 22// WebApplicationFirewallPoliciesClient contains the methods for the WebApplicationFirewallPolicies group. 23// Don't use this type directly, use NewWebApplicationFirewallPoliciesClient() instead. 24type WebApplicationFirewallPoliciesClient struct { 25 con *armcore.Connection 26 subscriptionID string 27} 28 29// NewWebApplicationFirewallPoliciesClient creates a new instance of WebApplicationFirewallPoliciesClient with the specified values. 30func NewWebApplicationFirewallPoliciesClient(con *armcore.Connection, subscriptionID string) *WebApplicationFirewallPoliciesClient { 31 return &WebApplicationFirewallPoliciesClient{con: con, subscriptionID: subscriptionID} 32} 33 34// CreateOrUpdate - Creates or update policy with specified rule set name within a resource group. 35// If the operation fails it returns the *CloudError error type. 36func (client *WebApplicationFirewallPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy, options *WebApplicationFirewallPoliciesCreateOrUpdateOptions) (WebApplicationFirewallPolicyResponse, error) { 37 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, policyName, parameters, options) 38 if err != nil { 39 return WebApplicationFirewallPolicyResponse{}, err 40 } 41 resp, err := client.con.Pipeline().Do(req) 42 if err != nil { 43 return WebApplicationFirewallPolicyResponse{}, err 44 } 45 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 46 return WebApplicationFirewallPolicyResponse{}, client.createOrUpdateHandleError(resp) 47 } 48 return client.createOrUpdateHandleResponse(resp) 49} 50 51// createOrUpdateCreateRequest creates the CreateOrUpdate request. 52func (client *WebApplicationFirewallPoliciesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy, options *WebApplicationFirewallPoliciesCreateOrUpdateOptions) (*azcore.Request, error) { 53 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}" 54 if resourceGroupName == "" { 55 return nil, errors.New("parameter resourceGroupName cannot be empty") 56 } 57 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 58 if policyName == "" { 59 return nil, errors.New("parameter policyName cannot be empty") 60 } 61 urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName)) 62 if client.subscriptionID == "" { 63 return nil, errors.New("parameter client.subscriptionID cannot be empty") 64 } 65 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 66 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 67 if err != nil { 68 return nil, err 69 } 70 req.Telemetry(telemetryInfo) 71 reqQP := req.URL.Query() 72 reqQP.Set("api-version", "2021-02-01") 73 req.URL.RawQuery = reqQP.Encode() 74 req.Header.Set("Accept", "application/json") 75 return req, req.MarshalAsJSON(parameters) 76} 77 78// createOrUpdateHandleResponse handles the CreateOrUpdate response. 79func (client *WebApplicationFirewallPoliciesClient) createOrUpdateHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyResponse, error) { 80 var val *WebApplicationFirewallPolicy 81 if err := resp.UnmarshalAsJSON(&val); err != nil { 82 return WebApplicationFirewallPolicyResponse{}, err 83 } 84 return WebApplicationFirewallPolicyResponse{RawResponse: resp.Response, WebApplicationFirewallPolicy: val}, nil 85} 86 87// createOrUpdateHandleError handles the CreateOrUpdate error response. 88func (client *WebApplicationFirewallPoliciesClient) createOrUpdateHandleError(resp *azcore.Response) error { 89 body, err := resp.Payload() 90 if err != nil { 91 return azcore.NewResponseError(err, resp.Response) 92 } 93 errType := CloudError{raw: string(body)} 94 if err := resp.UnmarshalAsJSON(&errType); err != nil { 95 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 96 } 97 return azcore.NewResponseError(&errType, resp.Response) 98} 99 100// BeginDelete - Deletes Policy. 101// If the operation fails it returns the *CloudError error type. 102func (client *WebApplicationFirewallPoliciesClient) BeginDelete(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (HTTPPollerResponse, error) { 103 resp, err := client.deleteOperation(ctx, resourceGroupName, policyName, options) 104 if err != nil { 105 return HTTPPollerResponse{}, err 106 } 107 result := HTTPPollerResponse{ 108 RawResponse: resp.Response, 109 } 110 pt, err := armcore.NewLROPoller("WebApplicationFirewallPoliciesClient.Delete", "location", resp, client.con.Pipeline(), client.deleteHandleError) 111 if err != nil { 112 return HTTPPollerResponse{}, err 113 } 114 poller := &httpPoller{ 115 pt: pt, 116 } 117 result.Poller = poller 118 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 119 return poller.pollUntilDone(ctx, frequency) 120 } 121 return result, nil 122} 123 124// ResumeDelete creates a new HTTPPoller from the specified resume token. 125// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 126func (client *WebApplicationFirewallPoliciesClient) ResumeDelete(ctx context.Context, token string) (HTTPPollerResponse, error) { 127 pt, err := armcore.NewLROPollerFromResumeToken("WebApplicationFirewallPoliciesClient.Delete", token, client.con.Pipeline(), client.deleteHandleError) 128 if err != nil { 129 return HTTPPollerResponse{}, err 130 } 131 poller := &httpPoller{ 132 pt: pt, 133 } 134 resp, err := poller.Poll(ctx) 135 if err != nil { 136 return HTTPPollerResponse{}, err 137 } 138 result := HTTPPollerResponse{ 139 RawResponse: resp, 140 } 141 result.Poller = poller 142 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 143 return poller.pollUntilDone(ctx, frequency) 144 } 145 return result, nil 146} 147 148// Delete - Deletes Policy. 149// If the operation fails it returns the *CloudError error type. 150func (client *WebApplicationFirewallPoliciesClient) deleteOperation(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (*azcore.Response, error) { 151 req, err := client.deleteCreateRequest(ctx, resourceGroupName, policyName, options) 152 if err != nil { 153 return nil, err 154 } 155 resp, err := client.con.Pipeline().Do(req) 156 if err != nil { 157 return nil, err 158 } 159 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 160 return nil, client.deleteHandleError(resp) 161 } 162 return resp, nil 163} 164 165// deleteCreateRequest creates the Delete request. 166func (client *WebApplicationFirewallPoliciesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (*azcore.Request, error) { 167 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}" 168 if resourceGroupName == "" { 169 return nil, errors.New("parameter resourceGroupName cannot be empty") 170 } 171 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 172 if policyName == "" { 173 return nil, errors.New("parameter policyName cannot be empty") 174 } 175 urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName)) 176 if client.subscriptionID == "" { 177 return nil, errors.New("parameter client.subscriptionID cannot be empty") 178 } 179 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 180 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 181 if err != nil { 182 return nil, err 183 } 184 req.Telemetry(telemetryInfo) 185 reqQP := req.URL.Query() 186 reqQP.Set("api-version", "2021-02-01") 187 req.URL.RawQuery = reqQP.Encode() 188 req.Header.Set("Accept", "application/json") 189 return req, nil 190} 191 192// deleteHandleError handles the Delete error response. 193func (client *WebApplicationFirewallPoliciesClient) deleteHandleError(resp *azcore.Response) error { 194 body, err := resp.Payload() 195 if err != nil { 196 return azcore.NewResponseError(err, resp.Response) 197 } 198 errType := CloudError{raw: string(body)} 199 if err := resp.UnmarshalAsJSON(&errType); err != nil { 200 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 201 } 202 return azcore.NewResponseError(&errType, resp.Response) 203} 204 205// Get - Retrieve protection policy with specified name within a resource group. 206// If the operation fails it returns the *CloudError error type. 207func (client *WebApplicationFirewallPoliciesClient) Get(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesGetOptions) (WebApplicationFirewallPolicyResponse, error) { 208 req, err := client.getCreateRequest(ctx, resourceGroupName, policyName, options) 209 if err != nil { 210 return WebApplicationFirewallPolicyResponse{}, err 211 } 212 resp, err := client.con.Pipeline().Do(req) 213 if err != nil { 214 return WebApplicationFirewallPolicyResponse{}, err 215 } 216 if !resp.HasStatusCode(http.StatusOK) { 217 return WebApplicationFirewallPolicyResponse{}, client.getHandleError(resp) 218 } 219 return client.getHandleResponse(resp) 220} 221 222// getCreateRequest creates the Get request. 223func (client *WebApplicationFirewallPoliciesClient) getCreateRequest(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesGetOptions) (*azcore.Request, error) { 224 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}" 225 if resourceGroupName == "" { 226 return nil, errors.New("parameter resourceGroupName cannot be empty") 227 } 228 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 229 if policyName == "" { 230 return nil, errors.New("parameter policyName cannot be empty") 231 } 232 urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName)) 233 if client.subscriptionID == "" { 234 return nil, errors.New("parameter client.subscriptionID cannot be empty") 235 } 236 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 237 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 238 if err != nil { 239 return nil, err 240 } 241 req.Telemetry(telemetryInfo) 242 reqQP := req.URL.Query() 243 reqQP.Set("api-version", "2021-02-01") 244 req.URL.RawQuery = reqQP.Encode() 245 req.Header.Set("Accept", "application/json") 246 return req, nil 247} 248 249// getHandleResponse handles the Get response. 250func (client *WebApplicationFirewallPoliciesClient) getHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyResponse, error) { 251 var val *WebApplicationFirewallPolicy 252 if err := resp.UnmarshalAsJSON(&val); err != nil { 253 return WebApplicationFirewallPolicyResponse{}, err 254 } 255 return WebApplicationFirewallPolicyResponse{RawResponse: resp.Response, WebApplicationFirewallPolicy: val}, nil 256} 257 258// getHandleError handles the Get error response. 259func (client *WebApplicationFirewallPoliciesClient) getHandleError(resp *azcore.Response) error { 260 body, err := resp.Payload() 261 if err != nil { 262 return azcore.NewResponseError(err, resp.Response) 263 } 264 errType := CloudError{raw: string(body)} 265 if err := resp.UnmarshalAsJSON(&errType); err != nil { 266 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 267 } 268 return azcore.NewResponseError(&errType, resp.Response) 269} 270 271// List - Lists all of the protection policies within a resource group. 272// If the operation fails it returns the *CloudError error type. 273func (client *WebApplicationFirewallPoliciesClient) List(resourceGroupName string, options *WebApplicationFirewallPoliciesListOptions) WebApplicationFirewallPolicyListResultPager { 274 return &webApplicationFirewallPolicyListResultPager{ 275 pipeline: client.con.Pipeline(), 276 requester: func(ctx context.Context) (*azcore.Request, error) { 277 return client.listCreateRequest(ctx, resourceGroupName, options) 278 }, 279 responder: client.listHandleResponse, 280 errorer: client.listHandleError, 281 advancer: func(ctx context.Context, resp WebApplicationFirewallPolicyListResultResponse) (*azcore.Request, error) { 282 return azcore.NewRequest(ctx, http.MethodGet, *resp.WebApplicationFirewallPolicyListResult.NextLink) 283 }, 284 statusCodes: []int{http.StatusOK}, 285 } 286} 287 288// listCreateRequest creates the List request. 289func (client *WebApplicationFirewallPoliciesClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *WebApplicationFirewallPoliciesListOptions) (*azcore.Request, error) { 290 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies" 291 if resourceGroupName == "" { 292 return nil, errors.New("parameter resourceGroupName cannot be empty") 293 } 294 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 295 if client.subscriptionID == "" { 296 return nil, errors.New("parameter client.subscriptionID cannot be empty") 297 } 298 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 299 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 300 if err != nil { 301 return nil, err 302 } 303 req.Telemetry(telemetryInfo) 304 reqQP := req.URL.Query() 305 reqQP.Set("api-version", "2021-02-01") 306 req.URL.RawQuery = reqQP.Encode() 307 req.Header.Set("Accept", "application/json") 308 return req, nil 309} 310 311// listHandleResponse handles the List response. 312func (client *WebApplicationFirewallPoliciesClient) listHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyListResultResponse, error) { 313 var val *WebApplicationFirewallPolicyListResult 314 if err := resp.UnmarshalAsJSON(&val); err != nil { 315 return WebApplicationFirewallPolicyListResultResponse{}, err 316 } 317 return WebApplicationFirewallPolicyListResultResponse{RawResponse: resp.Response, WebApplicationFirewallPolicyListResult: val}, nil 318} 319 320// listHandleError handles the List error response. 321func (client *WebApplicationFirewallPoliciesClient) listHandleError(resp *azcore.Response) error { 322 body, err := resp.Payload() 323 if err != nil { 324 return azcore.NewResponseError(err, resp.Response) 325 } 326 errType := CloudError{raw: string(body)} 327 if err := resp.UnmarshalAsJSON(&errType); err != nil { 328 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 329 } 330 return azcore.NewResponseError(&errType, resp.Response) 331} 332 333// ListAll - Gets all the WAF policies in a subscription. 334// If the operation fails it returns the *CloudError error type. 335func (client *WebApplicationFirewallPoliciesClient) ListAll(options *WebApplicationFirewallPoliciesListAllOptions) WebApplicationFirewallPolicyListResultPager { 336 return &webApplicationFirewallPolicyListResultPager{ 337 pipeline: client.con.Pipeline(), 338 requester: func(ctx context.Context) (*azcore.Request, error) { 339 return client.listAllCreateRequest(ctx, options) 340 }, 341 responder: client.listAllHandleResponse, 342 errorer: client.listAllHandleError, 343 advancer: func(ctx context.Context, resp WebApplicationFirewallPolicyListResultResponse) (*azcore.Request, error) { 344 return azcore.NewRequest(ctx, http.MethodGet, *resp.WebApplicationFirewallPolicyListResult.NextLink) 345 }, 346 statusCodes: []int{http.StatusOK}, 347 } 348} 349 350// listAllCreateRequest creates the ListAll request. 351func (client *WebApplicationFirewallPoliciesClient) listAllCreateRequest(ctx context.Context, options *WebApplicationFirewallPoliciesListAllOptions) (*azcore.Request, error) { 352 urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies" 353 if client.subscriptionID == "" { 354 return nil, errors.New("parameter client.subscriptionID cannot be empty") 355 } 356 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 357 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 358 if err != nil { 359 return nil, err 360 } 361 req.Telemetry(telemetryInfo) 362 reqQP := req.URL.Query() 363 reqQP.Set("api-version", "2021-02-01") 364 req.URL.RawQuery = reqQP.Encode() 365 req.Header.Set("Accept", "application/json") 366 return req, nil 367} 368 369// listAllHandleResponse handles the ListAll response. 370func (client *WebApplicationFirewallPoliciesClient) listAllHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyListResultResponse, error) { 371 var val *WebApplicationFirewallPolicyListResult 372 if err := resp.UnmarshalAsJSON(&val); err != nil { 373 return WebApplicationFirewallPolicyListResultResponse{}, err 374 } 375 return WebApplicationFirewallPolicyListResultResponse{RawResponse: resp.Response, WebApplicationFirewallPolicyListResult: val}, nil 376} 377 378// listAllHandleError handles the ListAll error response. 379func (client *WebApplicationFirewallPoliciesClient) listAllHandleError(resp *azcore.Response) error { 380 body, err := resp.Payload() 381 if err != nil { 382 return azcore.NewResponseError(err, resp.Response) 383 } 384 errType := CloudError{raw: string(body)} 385 if err := resp.UnmarshalAsJSON(&errType); err != nil { 386 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 387 } 388 return azcore.NewResponseError(&errType, resp.Response) 389} 390