1package network
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/autorest/validation"
25	"github.com/Azure/go-autorest/tracing"
26	"net/http"
27)
28
29// WebApplicationFirewallPoliciesClient is the network Client
30type WebApplicationFirewallPoliciesClient struct {
31	BaseClient
32}
33
34// NewWebApplicationFirewallPoliciesClient creates an instance of the WebApplicationFirewallPoliciesClient client.
35func NewWebApplicationFirewallPoliciesClient(subscriptionID string) WebApplicationFirewallPoliciesClient {
36	return NewWebApplicationFirewallPoliciesClientWithBaseURI(DefaultBaseURI, subscriptionID)
37}
38
39// NewWebApplicationFirewallPoliciesClientWithBaseURI creates an instance of the WebApplicationFirewallPoliciesClient
40// client.
41func NewWebApplicationFirewallPoliciesClientWithBaseURI(baseURI string, subscriptionID string) WebApplicationFirewallPoliciesClient {
42	return WebApplicationFirewallPoliciesClient{NewWithBaseURI(baseURI, subscriptionID)}
43}
44
45// CreateOrUpdate creates or update policy with specified rule set name within a resource group.
46// Parameters:
47// resourceGroupName - the name of the resource group.
48// policyName - the name of the policy.
49// parameters - policy to be created.
50func (client WebApplicationFirewallPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy) (result WebApplicationFirewallPolicy, err error) {
51	if tracing.IsEnabled() {
52		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.CreateOrUpdate")
53		defer func() {
54			sc := -1
55			if result.Response.Response != nil {
56				sc = result.Response.Response.StatusCode
57			}
58			tracing.EndSpan(ctx, sc, err)
59		}()
60	}
61	if err := validation.Validate([]validation.Validation{
62		{TargetValue: policyName,
63			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
64		return result, validation.NewError("network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", err.Error())
65	}
66
67	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, policyName, parameters)
68	if err != nil {
69		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
70		return
71	}
72
73	resp, err := client.CreateOrUpdateSender(req)
74	if err != nil {
75		result.Response = autorest.Response{Response: resp}
76		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", resp, "Failure sending request")
77		return
78	}
79
80	result, err = client.CreateOrUpdateResponder(resp)
81	if err != nil {
82		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", resp, "Failure responding to request")
83	}
84
85	return
86}
87
88// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
89func (client WebApplicationFirewallPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy) (*http.Request, error) {
90	pathParameters := map[string]interface{}{
91		"policyName":        autorest.Encode("path", policyName),
92		"resourceGroupName": autorest.Encode("path", resourceGroupName),
93		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
94	}
95
96	const APIVersion = "2019-07-01"
97	queryParameters := map[string]interface{}{
98		"api-version": APIVersion,
99	}
100
101	preparer := autorest.CreatePreparer(
102		autorest.AsContentType("application/json; charset=utf-8"),
103		autorest.AsPut(),
104		autorest.WithBaseURL(client.BaseURI),
105		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}", pathParameters),
106		autorest.WithJSON(parameters),
107		autorest.WithQueryParameters(queryParameters))
108	return preparer.Prepare((&http.Request{}).WithContext(ctx))
109}
110
111// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
112// http.Response Body if it receives an error.
113func (client WebApplicationFirewallPoliciesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
114	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
115	return autorest.SendWithSender(client, req, sd...)
116}
117
118// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
119// closes the http.Response Body.
120func (client WebApplicationFirewallPoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
121	err = autorest.Respond(
122		resp,
123		client.ByInspecting(),
124		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
125		autorest.ByUnmarshallingJSON(&result),
126		autorest.ByClosing())
127	result.Response = autorest.Response{Response: resp}
128	return
129}
130
131// Delete deletes Policy.
132// Parameters:
133// resourceGroupName - the name of the resource group.
134// policyName - the name of the policy.
135func (client WebApplicationFirewallPoliciesClient) Delete(ctx context.Context, resourceGroupName string, policyName string) (result WebApplicationFirewallPoliciesDeleteFuture, err error) {
136	if tracing.IsEnabled() {
137		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.Delete")
138		defer func() {
139			sc := -1
140			if result.Response() != nil {
141				sc = result.Response().StatusCode
142			}
143			tracing.EndSpan(ctx, sc, err)
144		}()
145	}
146	if err := validation.Validate([]validation.Validation{
147		{TargetValue: policyName,
148			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
149		return result, validation.NewError("network.WebApplicationFirewallPoliciesClient", "Delete", err.Error())
150	}
151
152	req, err := client.DeletePreparer(ctx, resourceGroupName, policyName)
153	if err != nil {
154		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Delete", nil, "Failure preparing request")
155		return
156	}
157
158	result, err = client.DeleteSender(req)
159	if err != nil {
160		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Delete", result.Response(), "Failure sending request")
161		return
162	}
163
164	return
165}
166
167// DeletePreparer prepares the Delete request.
168func (client WebApplicationFirewallPoliciesClient) DeletePreparer(ctx context.Context, resourceGroupName string, policyName string) (*http.Request, error) {
169	pathParameters := map[string]interface{}{
170		"policyName":        autorest.Encode("path", policyName),
171		"resourceGroupName": autorest.Encode("path", resourceGroupName),
172		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
173	}
174
175	const APIVersion = "2019-07-01"
176	queryParameters := map[string]interface{}{
177		"api-version": APIVersion,
178	}
179
180	preparer := autorest.CreatePreparer(
181		autorest.AsDelete(),
182		autorest.WithBaseURL(client.BaseURI),
183		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}", pathParameters),
184		autorest.WithQueryParameters(queryParameters))
185	return preparer.Prepare((&http.Request{}).WithContext(ctx))
186}
187
188// DeleteSender sends the Delete request. The method will close the
189// http.Response Body if it receives an error.
190func (client WebApplicationFirewallPoliciesClient) DeleteSender(req *http.Request) (future WebApplicationFirewallPoliciesDeleteFuture, err error) {
191	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
192	var resp *http.Response
193	resp, err = autorest.SendWithSender(client, req, sd...)
194	if err != nil {
195		return
196	}
197	future.Future, err = azure.NewFutureFromResponse(resp)
198	return
199}
200
201// DeleteResponder handles the response to the Delete request. The method always
202// closes the http.Response Body.
203func (client WebApplicationFirewallPoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
204	err = autorest.Respond(
205		resp,
206		client.ByInspecting(),
207		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
208		autorest.ByClosing())
209	result.Response = resp
210	return
211}
212
213// Get retrieve protection policy with specified name within a resource group.
214// Parameters:
215// resourceGroupName - the name of the resource group.
216// policyName - the name of the policy.
217func (client WebApplicationFirewallPoliciesClient) Get(ctx context.Context, resourceGroupName string, policyName string) (result WebApplicationFirewallPolicy, err error) {
218	if tracing.IsEnabled() {
219		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.Get")
220		defer func() {
221			sc := -1
222			if result.Response.Response != nil {
223				sc = result.Response.Response.StatusCode
224			}
225			tracing.EndSpan(ctx, sc, err)
226		}()
227	}
228	if err := validation.Validate([]validation.Validation{
229		{TargetValue: policyName,
230			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
231		return result, validation.NewError("network.WebApplicationFirewallPoliciesClient", "Get", err.Error())
232	}
233
234	req, err := client.GetPreparer(ctx, resourceGroupName, policyName)
235	if err != nil {
236		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", nil, "Failure preparing request")
237		return
238	}
239
240	resp, err := client.GetSender(req)
241	if err != nil {
242		result.Response = autorest.Response{Response: resp}
243		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", resp, "Failure sending request")
244		return
245	}
246
247	result, err = client.GetResponder(resp)
248	if err != nil {
249		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", resp, "Failure responding to request")
250	}
251
252	return
253}
254
255// GetPreparer prepares the Get request.
256func (client WebApplicationFirewallPoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, policyName string) (*http.Request, error) {
257	pathParameters := map[string]interface{}{
258		"policyName":        autorest.Encode("path", policyName),
259		"resourceGroupName": autorest.Encode("path", resourceGroupName),
260		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
261	}
262
263	const APIVersion = "2019-07-01"
264	queryParameters := map[string]interface{}{
265		"api-version": APIVersion,
266	}
267
268	preparer := autorest.CreatePreparer(
269		autorest.AsGet(),
270		autorest.WithBaseURL(client.BaseURI),
271		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}", pathParameters),
272		autorest.WithQueryParameters(queryParameters))
273	return preparer.Prepare((&http.Request{}).WithContext(ctx))
274}
275
276// GetSender sends the Get request. The method will close the
277// http.Response Body if it receives an error.
278func (client WebApplicationFirewallPoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
279	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
280	return autorest.SendWithSender(client, req, sd...)
281}
282
283// GetResponder handles the response to the Get request. The method always
284// closes the http.Response Body.
285func (client WebApplicationFirewallPoliciesClient) GetResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
286	err = autorest.Respond(
287		resp,
288		client.ByInspecting(),
289		azure.WithErrorUnlessStatusCode(http.StatusOK),
290		autorest.ByUnmarshallingJSON(&result),
291		autorest.ByClosing())
292	result.Response = autorest.Response{Response: resp}
293	return
294}
295
296// List lists all of the protection policies within a resource group.
297// Parameters:
298// resourceGroupName - the name of the resource group.
299func (client WebApplicationFirewallPoliciesClient) List(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListResultPage, err error) {
300	if tracing.IsEnabled() {
301		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.List")
302		defer func() {
303			sc := -1
304			if result.wafplr.Response.Response != nil {
305				sc = result.wafplr.Response.Response.StatusCode
306			}
307			tracing.EndSpan(ctx, sc, err)
308		}()
309	}
310	result.fn = client.listNextResults
311	req, err := client.ListPreparer(ctx, resourceGroupName)
312	if err != nil {
313		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", nil, "Failure preparing request")
314		return
315	}
316
317	resp, err := client.ListSender(req)
318	if err != nil {
319		result.wafplr.Response = autorest.Response{Response: resp}
320		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", resp, "Failure sending request")
321		return
322	}
323
324	result.wafplr, err = client.ListResponder(resp)
325	if err != nil {
326		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", resp, "Failure responding to request")
327	}
328
329	return
330}
331
332// ListPreparer prepares the List request.
333func (client WebApplicationFirewallPoliciesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
334	pathParameters := map[string]interface{}{
335		"resourceGroupName": autorest.Encode("path", resourceGroupName),
336		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
337	}
338
339	const APIVersion = "2019-07-01"
340	queryParameters := map[string]interface{}{
341		"api-version": APIVersion,
342	}
343
344	preparer := autorest.CreatePreparer(
345		autorest.AsGet(),
346		autorest.WithBaseURL(client.BaseURI),
347		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies", pathParameters),
348		autorest.WithQueryParameters(queryParameters))
349	return preparer.Prepare((&http.Request{}).WithContext(ctx))
350}
351
352// ListSender sends the List request. The method will close the
353// http.Response Body if it receives an error.
354func (client WebApplicationFirewallPoliciesClient) ListSender(req *http.Request) (*http.Response, error) {
355	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
356	return autorest.SendWithSender(client, req, sd...)
357}
358
359// ListResponder handles the response to the List request. The method always
360// closes the http.Response Body.
361func (client WebApplicationFirewallPoliciesClient) ListResponder(resp *http.Response) (result WebApplicationFirewallPolicyListResult, err error) {
362	err = autorest.Respond(
363		resp,
364		client.ByInspecting(),
365		azure.WithErrorUnlessStatusCode(http.StatusOK),
366		autorest.ByUnmarshallingJSON(&result),
367		autorest.ByClosing())
368	result.Response = autorest.Response{Response: resp}
369	return
370}
371
372// listNextResults retrieves the next set of results, if any.
373func (client WebApplicationFirewallPoliciesClient) listNextResults(ctx context.Context, lastResults WebApplicationFirewallPolicyListResult) (result WebApplicationFirewallPolicyListResult, err error) {
374	req, err := lastResults.webApplicationFirewallPolicyListResultPreparer(ctx)
375	if err != nil {
376		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", nil, "Failure preparing next results request")
377	}
378	if req == nil {
379		return
380	}
381	resp, err := client.ListSender(req)
382	if err != nil {
383		result.Response = autorest.Response{Response: resp}
384		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", resp, "Failure sending next results request")
385	}
386	result, err = client.ListResponder(resp)
387	if err != nil {
388		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", resp, "Failure responding to next results request")
389	}
390	return
391}
392
393// ListComplete enumerates all values, automatically crossing page boundaries as required.
394func (client WebApplicationFirewallPoliciesClient) ListComplete(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListResultIterator, err error) {
395	if tracing.IsEnabled() {
396		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.List")
397		defer func() {
398			sc := -1
399			if result.Response().Response.Response != nil {
400				sc = result.page.Response().Response.Response.StatusCode
401			}
402			tracing.EndSpan(ctx, sc, err)
403		}()
404	}
405	result.page, err = client.List(ctx, resourceGroupName)
406	return
407}
408
409// ListAll gets all the WAF policies in a subscription.
410func (client WebApplicationFirewallPoliciesClient) ListAll(ctx context.Context) (result WebApplicationFirewallPolicyListResultPage, err error) {
411	if tracing.IsEnabled() {
412		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.ListAll")
413		defer func() {
414			sc := -1
415			if result.wafplr.Response.Response != nil {
416				sc = result.wafplr.Response.Response.StatusCode
417			}
418			tracing.EndSpan(ctx, sc, err)
419		}()
420	}
421	result.fn = client.listAllNextResults
422	req, err := client.ListAllPreparer(ctx)
423	if err != nil {
424		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", nil, "Failure preparing request")
425		return
426	}
427
428	resp, err := client.ListAllSender(req)
429	if err != nil {
430		result.wafplr.Response = autorest.Response{Response: resp}
431		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", resp, "Failure sending request")
432		return
433	}
434
435	result.wafplr, err = client.ListAllResponder(resp)
436	if err != nil {
437		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", resp, "Failure responding to request")
438	}
439
440	return
441}
442
443// ListAllPreparer prepares the ListAll request.
444func (client WebApplicationFirewallPoliciesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) {
445	pathParameters := map[string]interface{}{
446		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
447	}
448
449	const APIVersion = "2019-07-01"
450	queryParameters := map[string]interface{}{
451		"api-version": APIVersion,
452	}
453
454	preparer := autorest.CreatePreparer(
455		autorest.AsGet(),
456		autorest.WithBaseURL(client.BaseURI),
457		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies", pathParameters),
458		autorest.WithQueryParameters(queryParameters))
459	return preparer.Prepare((&http.Request{}).WithContext(ctx))
460}
461
462// ListAllSender sends the ListAll request. The method will close the
463// http.Response Body if it receives an error.
464func (client WebApplicationFirewallPoliciesClient) ListAllSender(req *http.Request) (*http.Response, error) {
465	sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client))
466	return autorest.SendWithSender(client, req, sd...)
467}
468
469// ListAllResponder handles the response to the ListAll request. The method always
470// closes the http.Response Body.
471func (client WebApplicationFirewallPoliciesClient) ListAllResponder(resp *http.Response) (result WebApplicationFirewallPolicyListResult, err error) {
472	err = autorest.Respond(
473		resp,
474		client.ByInspecting(),
475		azure.WithErrorUnlessStatusCode(http.StatusOK),
476		autorest.ByUnmarshallingJSON(&result),
477		autorest.ByClosing())
478	result.Response = autorest.Response{Response: resp}
479	return
480}
481
482// listAllNextResults retrieves the next set of results, if any.
483func (client WebApplicationFirewallPoliciesClient) listAllNextResults(ctx context.Context, lastResults WebApplicationFirewallPolicyListResult) (result WebApplicationFirewallPolicyListResult, err error) {
484	req, err := lastResults.webApplicationFirewallPolicyListResultPreparer(ctx)
485	if err != nil {
486		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", nil, "Failure preparing next results request")
487	}
488	if req == nil {
489		return
490	}
491	resp, err := client.ListAllSender(req)
492	if err != nil {
493		result.Response = autorest.Response{Response: resp}
494		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", resp, "Failure sending next results request")
495	}
496	result, err = client.ListAllResponder(resp)
497	if err != nil {
498		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", resp, "Failure responding to next results request")
499	}
500	return
501}
502
503// ListAllComplete enumerates all values, automatically crossing page boundaries as required.
504func (client WebApplicationFirewallPoliciesClient) ListAllComplete(ctx context.Context) (result WebApplicationFirewallPolicyListResultIterator, err error) {
505	if tracing.IsEnabled() {
506		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.ListAll")
507		defer func() {
508			sc := -1
509			if result.Response().Response.Response != nil {
510				sc = result.page.Response().Response.Response.StatusCode
511			}
512			tracing.EndSpan(ctx, sc, err)
513		}()
514	}
515	result.page, err = client.ListAll(ctx)
516	return
517}
518