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	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
13	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
14	"net/http"
15	"net/url"
16	"strings"
17	"time"
18)
19
20// WebApplicationFirewallPoliciesClient contains the methods for the WebApplicationFirewallPolicies group.
21// Don't use this type directly, use NewWebApplicationFirewallPoliciesClient() instead.
22type WebApplicationFirewallPoliciesClient struct {
23	con            *armcore.Connection
24	subscriptionID string
25}
26
27// NewWebApplicationFirewallPoliciesClient creates a new instance of WebApplicationFirewallPoliciesClient with the specified values.
28func NewWebApplicationFirewallPoliciesClient(con *armcore.Connection, subscriptionID string) *WebApplicationFirewallPoliciesClient {
29	return &WebApplicationFirewallPoliciesClient{con: con, subscriptionID: subscriptionID}
30}
31
32// CreateOrUpdate - Creates or update policy with specified rule set name within a resource group.
33func (client *WebApplicationFirewallPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy, options *WebApplicationFirewallPoliciesCreateOrUpdateOptions) (WebApplicationFirewallPolicyResponse, error) {
34	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, policyName, parameters, options)
35	if err != nil {
36		return WebApplicationFirewallPolicyResponse{}, err
37	}
38	resp, err := client.con.Pipeline().Do(req)
39	if err != nil {
40		return WebApplicationFirewallPolicyResponse{}, err
41	}
42	if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) {
43		return WebApplicationFirewallPolicyResponse{}, client.createOrUpdateHandleError(resp)
44	}
45	return client.createOrUpdateHandleResponse(resp)
46}
47
48// createOrUpdateCreateRequest creates the CreateOrUpdate request.
49func (client *WebApplicationFirewallPoliciesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy, options *WebApplicationFirewallPoliciesCreateOrUpdateOptions) (*azcore.Request, error) {
50	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}"
51	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
52	urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName))
53	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
54	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
55	if err != nil {
56		return nil, err
57	}
58	req.Telemetry(telemetryInfo)
59	query := req.URL.Query()
60	query.Set("api-version", "2020-07-01")
61	req.URL.RawQuery = query.Encode()
62	req.Header.Set("Accept", "application/json")
63	return req, req.MarshalAsJSON(parameters)
64}
65
66// createOrUpdateHandleResponse handles the CreateOrUpdate response.
67func (client *WebApplicationFirewallPoliciesClient) createOrUpdateHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyResponse, error) {
68	var val *WebApplicationFirewallPolicy
69	if err := resp.UnmarshalAsJSON(&val); err != nil {
70		return WebApplicationFirewallPolicyResponse{}, err
71	}
72	return WebApplicationFirewallPolicyResponse{RawResponse: resp.Response, WebApplicationFirewallPolicy: val}, nil
73}
74
75// createOrUpdateHandleError handles the CreateOrUpdate error response.
76func (client *WebApplicationFirewallPoliciesClient) createOrUpdateHandleError(resp *azcore.Response) error {
77	var err CloudError
78	if err := resp.UnmarshalAsJSON(&err); err != nil {
79		return err
80	}
81	return azcore.NewResponseError(&err, resp.Response)
82}
83
84// BeginDelete - Deletes Policy.
85func (client *WebApplicationFirewallPoliciesClient) BeginDelete(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (HTTPPollerResponse, error) {
86	resp, err := client.delete(ctx, resourceGroupName, policyName, options)
87	if err != nil {
88		return HTTPPollerResponse{}, err
89	}
90	result := HTTPPollerResponse{
91		RawResponse: resp.Response,
92	}
93	pt, err := armcore.NewPoller("WebApplicationFirewallPoliciesClient.Delete", "location", resp, client.deleteHandleError)
94	if err != nil {
95		return HTTPPollerResponse{}, err
96	}
97	poller := &httpPoller{
98		pt:       pt,
99		pipeline: client.con.Pipeline(),
100	}
101	result.Poller = poller
102	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
103		return poller.pollUntilDone(ctx, frequency)
104	}
105	return result, nil
106}
107
108// ResumeDelete creates a new HTTPPoller from the specified resume token.
109// token - The value must come from a previous call to HTTPPoller.ResumeToken().
110func (client *WebApplicationFirewallPoliciesClient) ResumeDelete(token string) (HTTPPoller, error) {
111	pt, err := armcore.NewPollerFromResumeToken("WebApplicationFirewallPoliciesClient.Delete", token, client.deleteHandleError)
112	if err != nil {
113		return nil, err
114	}
115	return &httpPoller{
116		pipeline: client.con.Pipeline(),
117		pt:       pt,
118	}, nil
119}
120
121// Delete - Deletes Policy.
122func (client *WebApplicationFirewallPoliciesClient) delete(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (*azcore.Response, error) {
123	req, err := client.deleteCreateRequest(ctx, resourceGroupName, policyName, options)
124	if err != nil {
125		return nil, err
126	}
127	resp, err := client.con.Pipeline().Do(req)
128	if err != nil {
129		return nil, err
130	}
131	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
132		return nil, client.deleteHandleError(resp)
133	}
134	return resp, nil
135}
136
137// deleteCreateRequest creates the Delete request.
138func (client *WebApplicationFirewallPoliciesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesBeginDeleteOptions) (*azcore.Request, error) {
139	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}"
140	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
141	urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName))
142	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
143	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
144	if err != nil {
145		return nil, err
146	}
147	req.Telemetry(telemetryInfo)
148	query := req.URL.Query()
149	query.Set("api-version", "2020-07-01")
150	req.URL.RawQuery = query.Encode()
151	req.Header.Set("Accept", "application/json")
152	return req, nil
153}
154
155// deleteHandleError handles the Delete error response.
156func (client *WebApplicationFirewallPoliciesClient) deleteHandleError(resp *azcore.Response) error {
157	var err CloudError
158	if err := resp.UnmarshalAsJSON(&err); err != nil {
159		return err
160	}
161	return azcore.NewResponseError(&err, resp.Response)
162}
163
164// Get - Retrieve protection policy with specified name within a resource group.
165func (client *WebApplicationFirewallPoliciesClient) Get(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesGetOptions) (WebApplicationFirewallPolicyResponse, error) {
166	req, err := client.getCreateRequest(ctx, resourceGroupName, policyName, options)
167	if err != nil {
168		return WebApplicationFirewallPolicyResponse{}, err
169	}
170	resp, err := client.con.Pipeline().Do(req)
171	if err != nil {
172		return WebApplicationFirewallPolicyResponse{}, err
173	}
174	if !resp.HasStatusCode(http.StatusOK) {
175		return WebApplicationFirewallPolicyResponse{}, client.getHandleError(resp)
176	}
177	return client.getHandleResponse(resp)
178}
179
180// getCreateRequest creates the Get request.
181func (client *WebApplicationFirewallPoliciesClient) getCreateRequest(ctx context.Context, resourceGroupName string, policyName string, options *WebApplicationFirewallPoliciesGetOptions) (*azcore.Request, error) {
182	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}"
183	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
184	urlPath = strings.ReplaceAll(urlPath, "{policyName}", url.PathEscape(policyName))
185	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
186	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
187	if err != nil {
188		return nil, err
189	}
190	req.Telemetry(telemetryInfo)
191	query := req.URL.Query()
192	query.Set("api-version", "2020-07-01")
193	req.URL.RawQuery = query.Encode()
194	req.Header.Set("Accept", "application/json")
195	return req, nil
196}
197
198// getHandleResponse handles the Get response.
199func (client *WebApplicationFirewallPoliciesClient) getHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyResponse, error) {
200	var val *WebApplicationFirewallPolicy
201	if err := resp.UnmarshalAsJSON(&val); err != nil {
202		return WebApplicationFirewallPolicyResponse{}, err
203	}
204	return WebApplicationFirewallPolicyResponse{RawResponse: resp.Response, WebApplicationFirewallPolicy: val}, nil
205}
206
207// getHandleError handles the Get error response.
208func (client *WebApplicationFirewallPoliciesClient) getHandleError(resp *azcore.Response) error {
209	var err CloudError
210	if err := resp.UnmarshalAsJSON(&err); err != nil {
211		return err
212	}
213	return azcore.NewResponseError(&err, resp.Response)
214}
215
216// List - Lists all of the protection policies within a resource group.
217func (client *WebApplicationFirewallPoliciesClient) List(resourceGroupName string, options *WebApplicationFirewallPoliciesListOptions) WebApplicationFirewallPolicyListResultPager {
218	return &webApplicationFirewallPolicyListResultPager{
219		pipeline: client.con.Pipeline(),
220		requester: func(ctx context.Context) (*azcore.Request, error) {
221			return client.listCreateRequest(ctx, resourceGroupName, options)
222		},
223		responder: client.listHandleResponse,
224		errorer:   client.listHandleError,
225		advancer: func(ctx context.Context, resp WebApplicationFirewallPolicyListResultResponse) (*azcore.Request, error) {
226			return azcore.NewRequest(ctx, http.MethodGet, *resp.WebApplicationFirewallPolicyListResult.NextLink)
227		},
228		statusCodes: []int{http.StatusOK},
229	}
230}
231
232// listCreateRequest creates the List request.
233func (client *WebApplicationFirewallPoliciesClient) listCreateRequest(ctx context.Context, resourceGroupName string, options *WebApplicationFirewallPoliciesListOptions) (*azcore.Request, error) {
234	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies"
235	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
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	query := req.URL.Query()
243	query.Set("api-version", "2020-07-01")
244	req.URL.RawQuery = query.Encode()
245	req.Header.Set("Accept", "application/json")
246	return req, nil
247}
248
249// listHandleResponse handles the List response.
250func (client *WebApplicationFirewallPoliciesClient) listHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyListResultResponse, error) {
251	var val *WebApplicationFirewallPolicyListResult
252	if err := resp.UnmarshalAsJSON(&val); err != nil {
253		return WebApplicationFirewallPolicyListResultResponse{}, err
254	}
255	return WebApplicationFirewallPolicyListResultResponse{RawResponse: resp.Response, WebApplicationFirewallPolicyListResult: val}, nil
256}
257
258// listHandleError handles the List error response.
259func (client *WebApplicationFirewallPoliciesClient) listHandleError(resp *azcore.Response) error {
260	var err CloudError
261	if err := resp.UnmarshalAsJSON(&err); err != nil {
262		return err
263	}
264	return azcore.NewResponseError(&err, resp.Response)
265}
266
267// ListAll - Gets all the WAF policies in a subscription.
268func (client *WebApplicationFirewallPoliciesClient) ListAll(options *WebApplicationFirewallPoliciesListAllOptions) WebApplicationFirewallPolicyListResultPager {
269	return &webApplicationFirewallPolicyListResultPager{
270		pipeline: client.con.Pipeline(),
271		requester: func(ctx context.Context) (*azcore.Request, error) {
272			return client.listAllCreateRequest(ctx, options)
273		},
274		responder: client.listAllHandleResponse,
275		errorer:   client.listAllHandleError,
276		advancer: func(ctx context.Context, resp WebApplicationFirewallPolicyListResultResponse) (*azcore.Request, error) {
277			return azcore.NewRequest(ctx, http.MethodGet, *resp.WebApplicationFirewallPolicyListResult.NextLink)
278		},
279		statusCodes: []int{http.StatusOK},
280	}
281}
282
283// listAllCreateRequest creates the ListAll request.
284func (client *WebApplicationFirewallPoliciesClient) listAllCreateRequest(ctx context.Context, options *WebApplicationFirewallPoliciesListAllOptions) (*azcore.Request, error) {
285	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies"
286	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
287	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
288	if err != nil {
289		return nil, err
290	}
291	req.Telemetry(telemetryInfo)
292	query := req.URL.Query()
293	query.Set("api-version", "2020-07-01")
294	req.URL.RawQuery = query.Encode()
295	req.Header.Set("Accept", "application/json")
296	return req, nil
297}
298
299// listAllHandleResponse handles the ListAll response.
300func (client *WebApplicationFirewallPoliciesClient) listAllHandleResponse(resp *azcore.Response) (WebApplicationFirewallPolicyListResultResponse, error) {
301	var val *WebApplicationFirewallPolicyListResult
302	if err := resp.UnmarshalAsJSON(&val); err != nil {
303		return WebApplicationFirewallPolicyListResultResponse{}, err
304	}
305	return WebApplicationFirewallPolicyListResultResponse{RawResponse: resp.Response, WebApplicationFirewallPolicyListResult: val}, nil
306}
307
308// listAllHandleError handles the ListAll error response.
309func (client *WebApplicationFirewallPoliciesClient) listAllHandleError(resp *azcore.Response) error {
310	var err CloudError
311	if err := resp.UnmarshalAsJSON(&err); err != nil {
312		return err
313	}
314	return azcore.NewResponseError(&err, resp.Response)
315}
316