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