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 using a custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI
41// (sovereign clouds, Azure stack).
42func NewWebApplicationFirewallPoliciesClientWithBaseURI(baseURI string, subscriptionID string) WebApplicationFirewallPoliciesClient {
43	return WebApplicationFirewallPoliciesClient{NewWithBaseURI(baseURI, subscriptionID)}
44}
45
46// CreateOrUpdate creates or update policy with specified rule set name within a resource group.
47// Parameters:
48// resourceGroupName - the name of the resource group.
49// policyName - the name of the policy.
50// parameters - policy to be created.
51func (client WebApplicationFirewallPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy) (result WebApplicationFirewallPolicy, err error) {
52	if tracing.IsEnabled() {
53		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.CreateOrUpdate")
54		defer func() {
55			sc := -1
56			if result.Response.Response != nil {
57				sc = result.Response.Response.StatusCode
58			}
59			tracing.EndSpan(ctx, sc, err)
60		}()
61	}
62	if err := validation.Validate([]validation.Validation{
63		{TargetValue: policyName,
64			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
65		return result, validation.NewError("network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", err.Error())
66	}
67
68	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, policyName, parameters)
69	if err != nil {
70		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
71		return
72	}
73
74	resp, err := client.CreateOrUpdateSender(req)
75	if err != nil {
76		result.Response = autorest.Response{Response: resp}
77		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", resp, "Failure sending request")
78		return
79	}
80
81	result, err = client.CreateOrUpdateResponder(resp)
82	if err != nil {
83		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "CreateOrUpdate", resp, "Failure responding to request")
84		return
85	}
86
87	return
88}
89
90// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
91func (client WebApplicationFirewallPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, policyName string, parameters WebApplicationFirewallPolicy) (*http.Request, error) {
92	pathParameters := map[string]interface{}{
93		"policyName":        autorest.Encode("path", policyName),
94		"resourceGroupName": autorest.Encode("path", resourceGroupName),
95		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
96	}
97
98	const APIVersion = "2019-06-01"
99	queryParameters := map[string]interface{}{
100		"api-version": APIVersion,
101	}
102
103	preparer := autorest.CreatePreparer(
104		autorest.AsContentType("application/json; charset=utf-8"),
105		autorest.AsPut(),
106		autorest.WithBaseURL(client.BaseURI),
107		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}", pathParameters),
108		autorest.WithJSON(parameters),
109		autorest.WithQueryParameters(queryParameters))
110	return preparer.Prepare((&http.Request{}).WithContext(ctx))
111}
112
113// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
114// http.Response Body if it receives an error.
115func (client WebApplicationFirewallPoliciesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
116	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
117}
118
119// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
120// closes the http.Response Body.
121func (client WebApplicationFirewallPoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
122	err = autorest.Respond(
123		resp,
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.FutureAPI != nil && result.FutureAPI.Response() != nil {
141				sc = result.FutureAPI.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", nil, "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-06-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	var resp *http.Response
192	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
193	if err != nil {
194		return
195	}
196	var azf azure.Future
197	azf, err = azure.NewFutureFromResponse(resp)
198	future.FutureAPI = &azf
199	future.Result = func(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
200		var done bool
201		done, err = future.DoneWithContext(context.Background(), client)
202		if err != nil {
203			err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
204			return
205		}
206		if !done {
207			err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
208			return
209		}
210		ar.Response = future.Response()
211		return
212	}
213	return
214}
215
216// DeleteResponder handles the response to the Delete request. The method always
217// closes the http.Response Body.
218func (client WebApplicationFirewallPoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
219	err = autorest.Respond(
220		resp,
221		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
222		autorest.ByClosing())
223	result.Response = resp
224	return
225}
226
227// Get retrieve protection policy with specified name within a resource group.
228// Parameters:
229// resourceGroupName - the name of the resource group.
230// policyName - the name of the policy.
231func (client WebApplicationFirewallPoliciesClient) Get(ctx context.Context, resourceGroupName string, policyName string) (result WebApplicationFirewallPolicy, err error) {
232	if tracing.IsEnabled() {
233		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.Get")
234		defer func() {
235			sc := -1
236			if result.Response.Response != nil {
237				sc = result.Response.Response.StatusCode
238			}
239			tracing.EndSpan(ctx, sc, err)
240		}()
241	}
242	if err := validation.Validate([]validation.Validation{
243		{TargetValue: policyName,
244			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
245		return result, validation.NewError("network.WebApplicationFirewallPoliciesClient", "Get", err.Error())
246	}
247
248	req, err := client.GetPreparer(ctx, resourceGroupName, policyName)
249	if err != nil {
250		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", nil, "Failure preparing request")
251		return
252	}
253
254	resp, err := client.GetSender(req)
255	if err != nil {
256		result.Response = autorest.Response{Response: resp}
257		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", resp, "Failure sending request")
258		return
259	}
260
261	result, err = client.GetResponder(resp)
262	if err != nil {
263		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "Get", resp, "Failure responding to request")
264		return
265	}
266
267	return
268}
269
270// GetPreparer prepares the Get request.
271func (client WebApplicationFirewallPoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, policyName string) (*http.Request, error) {
272	pathParameters := map[string]interface{}{
273		"policyName":        autorest.Encode("path", policyName),
274		"resourceGroupName": autorest.Encode("path", resourceGroupName),
275		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
276	}
277
278	const APIVersion = "2019-06-01"
279	queryParameters := map[string]interface{}{
280		"api-version": APIVersion,
281	}
282
283	preparer := autorest.CreatePreparer(
284		autorest.AsGet(),
285		autorest.WithBaseURL(client.BaseURI),
286		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/{policyName}", pathParameters),
287		autorest.WithQueryParameters(queryParameters))
288	return preparer.Prepare((&http.Request{}).WithContext(ctx))
289}
290
291// GetSender sends the Get request. The method will close the
292// http.Response Body if it receives an error.
293func (client WebApplicationFirewallPoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
294	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
295}
296
297// GetResponder handles the response to the Get request. The method always
298// closes the http.Response Body.
299func (client WebApplicationFirewallPoliciesClient) GetResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
300	err = autorest.Respond(
301		resp,
302		azure.WithErrorUnlessStatusCode(http.StatusOK),
303		autorest.ByUnmarshallingJSON(&result),
304		autorest.ByClosing())
305	result.Response = autorest.Response{Response: resp}
306	return
307}
308
309// List lists all of the protection policies within a resource group.
310// Parameters:
311// resourceGroupName - the name of the resource group.
312func (client WebApplicationFirewallPoliciesClient) List(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListResultPage, err error) {
313	if tracing.IsEnabled() {
314		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.List")
315		defer func() {
316			sc := -1
317			if result.wafplr.Response.Response != nil {
318				sc = result.wafplr.Response.Response.StatusCode
319			}
320			tracing.EndSpan(ctx, sc, err)
321		}()
322	}
323	result.fn = client.listNextResults
324	req, err := client.ListPreparer(ctx, resourceGroupName)
325	if err != nil {
326		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", nil, "Failure preparing request")
327		return
328	}
329
330	resp, err := client.ListSender(req)
331	if err != nil {
332		result.wafplr.Response = autorest.Response{Response: resp}
333		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", resp, "Failure sending request")
334		return
335	}
336
337	result.wafplr, err = client.ListResponder(resp)
338	if err != nil {
339		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "List", resp, "Failure responding to request")
340		return
341	}
342	if result.wafplr.hasNextLink() && result.wafplr.IsEmpty() {
343		err = result.NextWithContext(ctx)
344		return
345	}
346
347	return
348}
349
350// ListPreparer prepares the List request.
351func (client WebApplicationFirewallPoliciesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
352	pathParameters := map[string]interface{}{
353		"resourceGroupName": autorest.Encode("path", resourceGroupName),
354		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
355	}
356
357	const APIVersion = "2019-06-01"
358	queryParameters := map[string]interface{}{
359		"api-version": APIVersion,
360	}
361
362	preparer := autorest.CreatePreparer(
363		autorest.AsGet(),
364		autorest.WithBaseURL(client.BaseURI),
365		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies", pathParameters),
366		autorest.WithQueryParameters(queryParameters))
367	return preparer.Prepare((&http.Request{}).WithContext(ctx))
368}
369
370// ListSender sends the List request. The method will close the
371// http.Response Body if it receives an error.
372func (client WebApplicationFirewallPoliciesClient) ListSender(req *http.Request) (*http.Response, error) {
373	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
374}
375
376// ListResponder handles the response to the List request. The method always
377// closes the http.Response Body.
378func (client WebApplicationFirewallPoliciesClient) ListResponder(resp *http.Response) (result WebApplicationFirewallPolicyListResult, err error) {
379	err = autorest.Respond(
380		resp,
381		azure.WithErrorUnlessStatusCode(http.StatusOK),
382		autorest.ByUnmarshallingJSON(&result),
383		autorest.ByClosing())
384	result.Response = autorest.Response{Response: resp}
385	return
386}
387
388// listNextResults retrieves the next set of results, if any.
389func (client WebApplicationFirewallPoliciesClient) listNextResults(ctx context.Context, lastResults WebApplicationFirewallPolicyListResult) (result WebApplicationFirewallPolicyListResult, err error) {
390	req, err := lastResults.webApplicationFirewallPolicyListResultPreparer(ctx)
391	if err != nil {
392		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", nil, "Failure preparing next results request")
393	}
394	if req == nil {
395		return
396	}
397	resp, err := client.ListSender(req)
398	if err != nil {
399		result.Response = autorest.Response{Response: resp}
400		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", resp, "Failure sending next results request")
401	}
402	result, err = client.ListResponder(resp)
403	if err != nil {
404		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listNextResults", resp, "Failure responding to next results request")
405	}
406	return
407}
408
409// ListComplete enumerates all values, automatically crossing page boundaries as required.
410func (client WebApplicationFirewallPoliciesClient) ListComplete(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListResultIterator, err error) {
411	if tracing.IsEnabled() {
412		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.List")
413		defer func() {
414			sc := -1
415			if result.Response().Response.Response != nil {
416				sc = result.page.Response().Response.Response.StatusCode
417			}
418			tracing.EndSpan(ctx, sc, err)
419		}()
420	}
421	result.page, err = client.List(ctx, resourceGroupName)
422	return
423}
424
425// ListAll gets all the WAF policies in a subscription.
426func (client WebApplicationFirewallPoliciesClient) ListAll(ctx context.Context) (result WebApplicationFirewallPolicyListResultPage, err error) {
427	if tracing.IsEnabled() {
428		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.ListAll")
429		defer func() {
430			sc := -1
431			if result.wafplr.Response.Response != nil {
432				sc = result.wafplr.Response.Response.StatusCode
433			}
434			tracing.EndSpan(ctx, sc, err)
435		}()
436	}
437	result.fn = client.listAllNextResults
438	req, err := client.ListAllPreparer(ctx)
439	if err != nil {
440		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", nil, "Failure preparing request")
441		return
442	}
443
444	resp, err := client.ListAllSender(req)
445	if err != nil {
446		result.wafplr.Response = autorest.Response{Response: resp}
447		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", resp, "Failure sending request")
448		return
449	}
450
451	result.wafplr, err = client.ListAllResponder(resp)
452	if err != nil {
453		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "ListAll", resp, "Failure responding to request")
454		return
455	}
456	if result.wafplr.hasNextLink() && result.wafplr.IsEmpty() {
457		err = result.NextWithContext(ctx)
458		return
459	}
460
461	return
462}
463
464// ListAllPreparer prepares the ListAll request.
465func (client WebApplicationFirewallPoliciesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) {
466	pathParameters := map[string]interface{}{
467		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
468	}
469
470	const APIVersion = "2019-06-01"
471	queryParameters := map[string]interface{}{
472		"api-version": APIVersion,
473	}
474
475	preparer := autorest.CreatePreparer(
476		autorest.AsGet(),
477		autorest.WithBaseURL(client.BaseURI),
478		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies", pathParameters),
479		autorest.WithQueryParameters(queryParameters))
480	return preparer.Prepare((&http.Request{}).WithContext(ctx))
481}
482
483// ListAllSender sends the ListAll request. The method will close the
484// http.Response Body if it receives an error.
485func (client WebApplicationFirewallPoliciesClient) ListAllSender(req *http.Request) (*http.Response, error) {
486	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
487}
488
489// ListAllResponder handles the response to the ListAll request. The method always
490// closes the http.Response Body.
491func (client WebApplicationFirewallPoliciesClient) ListAllResponder(resp *http.Response) (result WebApplicationFirewallPolicyListResult, err error) {
492	err = autorest.Respond(
493		resp,
494		azure.WithErrorUnlessStatusCode(http.StatusOK),
495		autorest.ByUnmarshallingJSON(&result),
496		autorest.ByClosing())
497	result.Response = autorest.Response{Response: resp}
498	return
499}
500
501// listAllNextResults retrieves the next set of results, if any.
502func (client WebApplicationFirewallPoliciesClient) listAllNextResults(ctx context.Context, lastResults WebApplicationFirewallPolicyListResult) (result WebApplicationFirewallPolicyListResult, err error) {
503	req, err := lastResults.webApplicationFirewallPolicyListResultPreparer(ctx)
504	if err != nil {
505		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", nil, "Failure preparing next results request")
506	}
507	if req == nil {
508		return
509	}
510	resp, err := client.ListAllSender(req)
511	if err != nil {
512		result.Response = autorest.Response{Response: resp}
513		return result, autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", resp, "Failure sending next results request")
514	}
515	result, err = client.ListAllResponder(resp)
516	if err != nil {
517		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesClient", "listAllNextResults", resp, "Failure responding to next results request")
518	}
519	return
520}
521
522// ListAllComplete enumerates all values, automatically crossing page boundaries as required.
523func (client WebApplicationFirewallPoliciesClient) ListAllComplete(ctx context.Context) (result WebApplicationFirewallPolicyListResultIterator, err error) {
524	if tracing.IsEnabled() {
525		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPoliciesClient.ListAll")
526		defer func() {
527			sc := -1
528			if result.Response().Response.Response != nil {
529				sc = result.page.Response().Response.Response.StatusCode
530			}
531			tracing.EndSpan(ctx, sc, err)
532		}()
533	}
534	result.page, err = client.ListAll(ctx)
535	return
536}
537