1package security
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//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// JitNetworkAccessPoliciesClient is the API spec for Microsoft.Security (Azure Security Center) resource provider
19type JitNetworkAccessPoliciesClient struct {
20	BaseClient
21}
22
23// NewJitNetworkAccessPoliciesClient creates an instance of the JitNetworkAccessPoliciesClient client.
24func NewJitNetworkAccessPoliciesClient(subscriptionID string, ascLocation string) JitNetworkAccessPoliciesClient {
25	return NewJitNetworkAccessPoliciesClientWithBaseURI(DefaultBaseURI, subscriptionID, ascLocation)
26}
27
28// NewJitNetworkAccessPoliciesClientWithBaseURI creates an instance of the JitNetworkAccessPoliciesClient client using
29// a custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign
30// clouds, Azure stack).
31func NewJitNetworkAccessPoliciesClientWithBaseURI(baseURI string, subscriptionID string, ascLocation string) JitNetworkAccessPoliciesClient {
32	return JitNetworkAccessPoliciesClient{NewWithBaseURI(baseURI, subscriptionID, ascLocation)}
33}
34
35// CreateOrUpdate create a policy for protecting resources using Just-in-Time access control
36// Parameters:
37// resourceGroupName - the name of the resource group within the user's subscription. The name is case
38// insensitive.
39// jitNetworkAccessPolicyName - name of a Just-in-Time access configuration policy.
40func (client JitNetworkAccessPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string, body JitNetworkAccessPolicy) (result JitNetworkAccessPolicy, err error) {
41	if tracing.IsEnabled() {
42		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.CreateOrUpdate")
43		defer func() {
44			sc := -1
45			if result.Response.Response != nil {
46				sc = result.Response.Response.StatusCode
47			}
48			tracing.EndSpan(ctx, sc, err)
49		}()
50	}
51	if err := validation.Validate([]validation.Validation{
52		{TargetValue: client.SubscriptionID,
53			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
54		{TargetValue: resourceGroupName,
55			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
56				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
57				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
58		{TargetValue: body,
59			Constraints: []validation.Constraint{{Target: "body.JitNetworkAccessPolicyProperties", Name: validation.Null, Rule: true,
60				Chain: []validation.Constraint{{Target: "body.JitNetworkAccessPolicyProperties.VirtualMachines", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil {
61		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "CreateOrUpdate", err.Error())
62	}
63
64	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, jitNetworkAccessPolicyName, body)
65	if err != nil {
66		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
67		return
68	}
69
70	resp, err := client.CreateOrUpdateSender(req)
71	if err != nil {
72		result.Response = autorest.Response{Response: resp}
73		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "CreateOrUpdate", resp, "Failure sending request")
74		return
75	}
76
77	result, err = client.CreateOrUpdateResponder(resp)
78	if err != nil {
79		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "CreateOrUpdate", resp, "Failure responding to request")
80		return
81	}
82
83	return
84}
85
86// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
87func (client JitNetworkAccessPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string, body JitNetworkAccessPolicy) (*http.Request, error) {
88	pathParameters := map[string]interface{}{
89		"ascLocation":                autorest.Encode("path", client.AscLocation),
90		"jitNetworkAccessPolicyName": autorest.Encode("path", jitNetworkAccessPolicyName),
91		"resourceGroupName":          autorest.Encode("path", resourceGroupName),
92		"subscriptionId":             autorest.Encode("path", client.SubscriptionID),
93	}
94
95	const APIVersion = "2020-01-01"
96	queryParameters := map[string]interface{}{
97		"api-version": APIVersion,
98	}
99
100	body.ID = nil
101	body.Name = nil
102	body.Type = nil
103	body.Location = nil
104	preparer := autorest.CreatePreparer(
105		autorest.AsContentType("application/json; charset=utf-8"),
106		autorest.AsPut(),
107		autorest.WithBaseURL(client.BaseURI),
108		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", pathParameters),
109		autorest.WithJSON(body),
110		autorest.WithQueryParameters(queryParameters))
111	return preparer.Prepare((&http.Request{}).WithContext(ctx))
112}
113
114// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
115// http.Response Body if it receives an error.
116func (client JitNetworkAccessPoliciesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
117	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
118}
119
120// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
121// closes the http.Response Body.
122func (client JitNetworkAccessPoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result JitNetworkAccessPolicy, err error) {
123	err = autorest.Respond(
124		resp,
125		azure.WithErrorUnlessStatusCode(http.StatusOK),
126		autorest.ByUnmarshallingJSON(&result),
127		autorest.ByClosing())
128	result.Response = autorest.Response{Response: resp}
129	return
130}
131
132// Delete delete a Just-in-Time access control policy.
133// Parameters:
134// resourceGroupName - the name of the resource group within the user's subscription. The name is case
135// insensitive.
136// jitNetworkAccessPolicyName - name of a Just-in-Time access configuration policy.
137func (client JitNetworkAccessPoliciesClient) Delete(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string) (result autorest.Response, err error) {
138	if tracing.IsEnabled() {
139		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.Delete")
140		defer func() {
141			sc := -1
142			if result.Response != nil {
143				sc = result.Response.StatusCode
144			}
145			tracing.EndSpan(ctx, sc, err)
146		}()
147	}
148	if err := validation.Validate([]validation.Validation{
149		{TargetValue: client.SubscriptionID,
150			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
151		{TargetValue: resourceGroupName,
152			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
153				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
154				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
155		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "Delete", err.Error())
156	}
157
158	req, err := client.DeletePreparer(ctx, resourceGroupName, jitNetworkAccessPolicyName)
159	if err != nil {
160		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Delete", nil, "Failure preparing request")
161		return
162	}
163
164	resp, err := client.DeleteSender(req)
165	if err != nil {
166		result.Response = resp
167		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Delete", resp, "Failure sending request")
168		return
169	}
170
171	result, err = client.DeleteResponder(resp)
172	if err != nil {
173		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Delete", resp, "Failure responding to request")
174		return
175	}
176
177	return
178}
179
180// DeletePreparer prepares the Delete request.
181func (client JitNetworkAccessPoliciesClient) DeletePreparer(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string) (*http.Request, error) {
182	pathParameters := map[string]interface{}{
183		"ascLocation":                autorest.Encode("path", client.AscLocation),
184		"jitNetworkAccessPolicyName": autorest.Encode("path", jitNetworkAccessPolicyName),
185		"resourceGroupName":          autorest.Encode("path", resourceGroupName),
186		"subscriptionId":             autorest.Encode("path", client.SubscriptionID),
187	}
188
189	const APIVersion = "2020-01-01"
190	queryParameters := map[string]interface{}{
191		"api-version": APIVersion,
192	}
193
194	preparer := autorest.CreatePreparer(
195		autorest.AsDelete(),
196		autorest.WithBaseURL(client.BaseURI),
197		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", pathParameters),
198		autorest.WithQueryParameters(queryParameters))
199	return preparer.Prepare((&http.Request{}).WithContext(ctx))
200}
201
202// DeleteSender sends the Delete request. The method will close the
203// http.Response Body if it receives an error.
204func (client JitNetworkAccessPoliciesClient) DeleteSender(req *http.Request) (*http.Response, error) {
205	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
206}
207
208// DeleteResponder handles the response to the Delete request. The method always
209// closes the http.Response Body.
210func (client JitNetworkAccessPoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
211	err = autorest.Respond(
212		resp,
213		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
214		autorest.ByClosing())
215	result.Response = resp
216	return
217}
218
219// Get policies for protecting resources using Just-in-Time access control for the subscription, location
220// Parameters:
221// resourceGroupName - the name of the resource group within the user's subscription. The name is case
222// insensitive.
223// jitNetworkAccessPolicyName - name of a Just-in-Time access configuration policy.
224func (client JitNetworkAccessPoliciesClient) Get(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string) (result JitNetworkAccessPolicy, err error) {
225	if tracing.IsEnabled() {
226		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.Get")
227		defer func() {
228			sc := -1
229			if result.Response.Response != nil {
230				sc = result.Response.Response.StatusCode
231			}
232			tracing.EndSpan(ctx, sc, err)
233		}()
234	}
235	if err := validation.Validate([]validation.Validation{
236		{TargetValue: client.SubscriptionID,
237			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
238		{TargetValue: resourceGroupName,
239			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
240				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
241				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
242		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "Get", err.Error())
243	}
244
245	req, err := client.GetPreparer(ctx, resourceGroupName, jitNetworkAccessPolicyName)
246	if err != nil {
247		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Get", nil, "Failure preparing request")
248		return
249	}
250
251	resp, err := client.GetSender(req)
252	if err != nil {
253		result.Response = autorest.Response{Response: resp}
254		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Get", resp, "Failure sending request")
255		return
256	}
257
258	result, err = client.GetResponder(resp)
259	if err != nil {
260		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Get", resp, "Failure responding to request")
261		return
262	}
263
264	return
265}
266
267// GetPreparer prepares the Get request.
268func (client JitNetworkAccessPoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string) (*http.Request, error) {
269	pathParameters := map[string]interface{}{
270		"ascLocation":                autorest.Encode("path", client.AscLocation),
271		"jitNetworkAccessPolicyName": autorest.Encode("path", jitNetworkAccessPolicyName),
272		"resourceGroupName":          autorest.Encode("path", resourceGroupName),
273		"subscriptionId":             autorest.Encode("path", client.SubscriptionID),
274	}
275
276	const APIVersion = "2020-01-01"
277	queryParameters := map[string]interface{}{
278		"api-version": APIVersion,
279	}
280
281	preparer := autorest.CreatePreparer(
282		autorest.AsGet(),
283		autorest.WithBaseURL(client.BaseURI),
284		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", pathParameters),
285		autorest.WithQueryParameters(queryParameters))
286	return preparer.Prepare((&http.Request{}).WithContext(ctx))
287}
288
289// GetSender sends the Get request. The method will close the
290// http.Response Body if it receives an error.
291func (client JitNetworkAccessPoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
292	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
293}
294
295// GetResponder handles the response to the Get request. The method always
296// closes the http.Response Body.
297func (client JitNetworkAccessPoliciesClient) GetResponder(resp *http.Response) (result JitNetworkAccessPolicy, err error) {
298	err = autorest.Respond(
299		resp,
300		azure.WithErrorUnlessStatusCode(http.StatusOK),
301		autorest.ByUnmarshallingJSON(&result),
302		autorest.ByClosing())
303	result.Response = autorest.Response{Response: resp}
304	return
305}
306
307// Initiate initiate a JIT access from a specific Just-in-Time policy configuration.
308// Parameters:
309// resourceGroupName - the name of the resource group within the user's subscription. The name is case
310// insensitive.
311// jitNetworkAccessPolicyName - name of a Just-in-Time access configuration policy.
312func (client JitNetworkAccessPoliciesClient) Initiate(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string, body JitNetworkAccessPolicyInitiateRequest) (result JitNetworkAccessRequest, err error) {
313	if tracing.IsEnabled() {
314		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.Initiate")
315		defer func() {
316			sc := -1
317			if result.Response.Response != nil {
318				sc = result.Response.Response.StatusCode
319			}
320			tracing.EndSpan(ctx, sc, err)
321		}()
322	}
323	if err := validation.Validate([]validation.Validation{
324		{TargetValue: client.SubscriptionID,
325			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
326		{TargetValue: resourceGroupName,
327			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
328				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
329				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
330		{TargetValue: body,
331			Constraints: []validation.Constraint{{Target: "body.VirtualMachines", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
332		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "Initiate", err.Error())
333	}
334
335	req, err := client.InitiatePreparer(ctx, resourceGroupName, jitNetworkAccessPolicyName, body)
336	if err != nil {
337		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Initiate", nil, "Failure preparing request")
338		return
339	}
340
341	resp, err := client.InitiateSender(req)
342	if err != nil {
343		result.Response = autorest.Response{Response: resp}
344		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Initiate", resp, "Failure sending request")
345		return
346	}
347
348	result, err = client.InitiateResponder(resp)
349	if err != nil {
350		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "Initiate", resp, "Failure responding to request")
351		return
352	}
353
354	return
355}
356
357// InitiatePreparer prepares the Initiate request.
358func (client JitNetworkAccessPoliciesClient) InitiatePreparer(ctx context.Context, resourceGroupName string, jitNetworkAccessPolicyName string, body JitNetworkAccessPolicyInitiateRequest) (*http.Request, error) {
359	pathParameters := map[string]interface{}{
360		"ascLocation":                        autorest.Encode("path", client.AscLocation),
361		"jitNetworkAccessPolicyInitiateType": autorest.Encode("path", "initiate"),
362		"jitNetworkAccessPolicyName":         autorest.Encode("path", jitNetworkAccessPolicyName),
363		"resourceGroupName":                  autorest.Encode("path", resourceGroupName),
364		"subscriptionId":                     autorest.Encode("path", client.SubscriptionID),
365	}
366
367	const APIVersion = "2020-01-01"
368	queryParameters := map[string]interface{}{
369		"api-version": APIVersion,
370	}
371
372	preparer := autorest.CreatePreparer(
373		autorest.AsContentType("application/json; charset=utf-8"),
374		autorest.AsPost(),
375		autorest.WithBaseURL(client.BaseURI),
376		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}/{jitNetworkAccessPolicyInitiateType}", pathParameters),
377		autorest.WithJSON(body),
378		autorest.WithQueryParameters(queryParameters))
379	return preparer.Prepare((&http.Request{}).WithContext(ctx))
380}
381
382// InitiateSender sends the Initiate request. The method will close the
383// http.Response Body if it receives an error.
384func (client JitNetworkAccessPoliciesClient) InitiateSender(req *http.Request) (*http.Response, error) {
385	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
386}
387
388// InitiateResponder handles the response to the Initiate request. The method always
389// closes the http.Response Body.
390func (client JitNetworkAccessPoliciesClient) InitiateResponder(resp *http.Response) (result JitNetworkAccessRequest, err error) {
391	err = autorest.Respond(
392		resp,
393		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
394		autorest.ByUnmarshallingJSON(&result),
395		autorest.ByClosing())
396	result.Response = autorest.Response{Response: resp}
397	return
398}
399
400// List policies for protecting resources using Just-in-Time access control.
401func (client JitNetworkAccessPoliciesClient) List(ctx context.Context) (result JitNetworkAccessPoliciesListPage, err error) {
402	if tracing.IsEnabled() {
403		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.List")
404		defer func() {
405			sc := -1
406			if result.jnapl.Response.Response != nil {
407				sc = result.jnapl.Response.Response.StatusCode
408			}
409			tracing.EndSpan(ctx, sc, err)
410		}()
411	}
412	if err := validation.Validate([]validation.Validation{
413		{TargetValue: client.SubscriptionID,
414			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}}}); err != nil {
415		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "List", err.Error())
416	}
417
418	result.fn = client.listNextResults
419	req, err := client.ListPreparer(ctx)
420	if err != nil {
421		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "List", nil, "Failure preparing request")
422		return
423	}
424
425	resp, err := client.ListSender(req)
426	if err != nil {
427		result.jnapl.Response = autorest.Response{Response: resp}
428		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "List", resp, "Failure sending request")
429		return
430	}
431
432	result.jnapl, err = client.ListResponder(resp)
433	if err != nil {
434		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "List", resp, "Failure responding to request")
435		return
436	}
437	if result.jnapl.hasNextLink() && result.jnapl.IsEmpty() {
438		err = result.NextWithContext(ctx)
439		return
440	}
441
442	return
443}
444
445// ListPreparer prepares the List request.
446func (client JitNetworkAccessPoliciesClient) ListPreparer(ctx context.Context) (*http.Request, error) {
447	pathParameters := map[string]interface{}{
448		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
449	}
450
451	const APIVersion = "2020-01-01"
452	queryParameters := map[string]interface{}{
453		"api-version": APIVersion,
454	}
455
456	preparer := autorest.CreatePreparer(
457		autorest.AsGet(),
458		autorest.WithBaseURL(client.BaseURI),
459		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Security/jitNetworkAccessPolicies", pathParameters),
460		autorest.WithQueryParameters(queryParameters))
461	return preparer.Prepare((&http.Request{}).WithContext(ctx))
462}
463
464// ListSender sends the List request. The method will close the
465// http.Response Body if it receives an error.
466func (client JitNetworkAccessPoliciesClient) ListSender(req *http.Request) (*http.Response, error) {
467	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
468}
469
470// ListResponder handles the response to the List request. The method always
471// closes the http.Response Body.
472func (client JitNetworkAccessPoliciesClient) ListResponder(resp *http.Response) (result JitNetworkAccessPoliciesList, err error) {
473	err = autorest.Respond(
474		resp,
475		azure.WithErrorUnlessStatusCode(http.StatusOK),
476		autorest.ByUnmarshallingJSON(&result),
477		autorest.ByClosing())
478	result.Response = autorest.Response{Response: resp}
479	return
480}
481
482// listNextResults retrieves the next set of results, if any.
483func (client JitNetworkAccessPoliciesClient) listNextResults(ctx context.Context, lastResults JitNetworkAccessPoliciesList) (result JitNetworkAccessPoliciesList, err error) {
484	req, err := lastResults.jitNetworkAccessPoliciesListPreparer(ctx)
485	if err != nil {
486		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listNextResults", nil, "Failure preparing next results request")
487	}
488	if req == nil {
489		return
490	}
491	resp, err := client.ListSender(req)
492	if err != nil {
493		result.Response = autorest.Response{Response: resp}
494		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listNextResults", resp, "Failure sending next results request")
495	}
496	result, err = client.ListResponder(resp)
497	if err != nil {
498		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listNextResults", resp, "Failure responding to next results request")
499	}
500	return
501}
502
503// ListComplete enumerates all values, automatically crossing page boundaries as required.
504func (client JitNetworkAccessPoliciesClient) ListComplete(ctx context.Context) (result JitNetworkAccessPoliciesListIterator, err error) {
505	if tracing.IsEnabled() {
506		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.List")
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.List(ctx)
516	return
517}
518
519// ListByRegion policies for protecting resources using Just-in-Time access control for the subscription, location
520func (client JitNetworkAccessPoliciesClient) ListByRegion(ctx context.Context) (result JitNetworkAccessPoliciesListPage, err error) {
521	if tracing.IsEnabled() {
522		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByRegion")
523		defer func() {
524			sc := -1
525			if result.jnapl.Response.Response != nil {
526				sc = result.jnapl.Response.Response.StatusCode
527			}
528			tracing.EndSpan(ctx, sc, err)
529		}()
530	}
531	if err := validation.Validate([]validation.Validation{
532		{TargetValue: client.SubscriptionID,
533			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}}}); err != nil {
534		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "ListByRegion", err.Error())
535	}
536
537	result.fn = client.listByRegionNextResults
538	req, err := client.ListByRegionPreparer(ctx)
539	if err != nil {
540		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByRegion", nil, "Failure preparing request")
541		return
542	}
543
544	resp, err := client.ListByRegionSender(req)
545	if err != nil {
546		result.jnapl.Response = autorest.Response{Response: resp}
547		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByRegion", resp, "Failure sending request")
548		return
549	}
550
551	result.jnapl, err = client.ListByRegionResponder(resp)
552	if err != nil {
553		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByRegion", resp, "Failure responding to request")
554		return
555	}
556	if result.jnapl.hasNextLink() && result.jnapl.IsEmpty() {
557		err = result.NextWithContext(ctx)
558		return
559	}
560
561	return
562}
563
564// ListByRegionPreparer prepares the ListByRegion request.
565func (client JitNetworkAccessPoliciesClient) ListByRegionPreparer(ctx context.Context) (*http.Request, error) {
566	pathParameters := map[string]interface{}{
567		"ascLocation":    autorest.Encode("path", client.AscLocation),
568		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
569	}
570
571	const APIVersion = "2020-01-01"
572	queryParameters := map[string]interface{}{
573		"api-version": APIVersion,
574	}
575
576	preparer := autorest.CreatePreparer(
577		autorest.AsGet(),
578		autorest.WithBaseURL(client.BaseURI),
579		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies", pathParameters),
580		autorest.WithQueryParameters(queryParameters))
581	return preparer.Prepare((&http.Request{}).WithContext(ctx))
582}
583
584// ListByRegionSender sends the ListByRegion request. The method will close the
585// http.Response Body if it receives an error.
586func (client JitNetworkAccessPoliciesClient) ListByRegionSender(req *http.Request) (*http.Response, error) {
587	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
588}
589
590// ListByRegionResponder handles the response to the ListByRegion request. The method always
591// closes the http.Response Body.
592func (client JitNetworkAccessPoliciesClient) ListByRegionResponder(resp *http.Response) (result JitNetworkAccessPoliciesList, err error) {
593	err = autorest.Respond(
594		resp,
595		azure.WithErrorUnlessStatusCode(http.StatusOK),
596		autorest.ByUnmarshallingJSON(&result),
597		autorest.ByClosing())
598	result.Response = autorest.Response{Response: resp}
599	return
600}
601
602// listByRegionNextResults retrieves the next set of results, if any.
603func (client JitNetworkAccessPoliciesClient) listByRegionNextResults(ctx context.Context, lastResults JitNetworkAccessPoliciesList) (result JitNetworkAccessPoliciesList, err error) {
604	req, err := lastResults.jitNetworkAccessPoliciesListPreparer(ctx)
605	if err != nil {
606		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByRegionNextResults", nil, "Failure preparing next results request")
607	}
608	if req == nil {
609		return
610	}
611	resp, err := client.ListByRegionSender(req)
612	if err != nil {
613		result.Response = autorest.Response{Response: resp}
614		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByRegionNextResults", resp, "Failure sending next results request")
615	}
616	result, err = client.ListByRegionResponder(resp)
617	if err != nil {
618		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByRegionNextResults", resp, "Failure responding to next results request")
619	}
620	return
621}
622
623// ListByRegionComplete enumerates all values, automatically crossing page boundaries as required.
624func (client JitNetworkAccessPoliciesClient) ListByRegionComplete(ctx context.Context) (result JitNetworkAccessPoliciesListIterator, err error) {
625	if tracing.IsEnabled() {
626		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByRegion")
627		defer func() {
628			sc := -1
629			if result.Response().Response.Response != nil {
630				sc = result.page.Response().Response.Response.StatusCode
631			}
632			tracing.EndSpan(ctx, sc, err)
633		}()
634	}
635	result.page, err = client.ListByRegion(ctx)
636	return
637}
638
639// ListByResourceGroup policies for protecting resources using Just-in-Time access control for the subscription,
640// location
641// Parameters:
642// resourceGroupName - the name of the resource group within the user's subscription. The name is case
643// insensitive.
644func (client JitNetworkAccessPoliciesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result JitNetworkAccessPoliciesListPage, err error) {
645	if tracing.IsEnabled() {
646		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByResourceGroup")
647		defer func() {
648			sc := -1
649			if result.jnapl.Response.Response != nil {
650				sc = result.jnapl.Response.Response.StatusCode
651			}
652			tracing.EndSpan(ctx, sc, err)
653		}()
654	}
655	if err := validation.Validate([]validation.Validation{
656		{TargetValue: client.SubscriptionID,
657			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
658		{TargetValue: resourceGroupName,
659			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
660				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
661				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
662		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "ListByResourceGroup", err.Error())
663	}
664
665	result.fn = client.listByResourceGroupNextResults
666	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
667	if err != nil {
668		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroup", nil, "Failure preparing request")
669		return
670	}
671
672	resp, err := client.ListByResourceGroupSender(req)
673	if err != nil {
674		result.jnapl.Response = autorest.Response{Response: resp}
675		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroup", resp, "Failure sending request")
676		return
677	}
678
679	result.jnapl, err = client.ListByResourceGroupResponder(resp)
680	if err != nil {
681		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroup", resp, "Failure responding to request")
682		return
683	}
684	if result.jnapl.hasNextLink() && result.jnapl.IsEmpty() {
685		err = result.NextWithContext(ctx)
686		return
687	}
688
689	return
690}
691
692// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
693func (client JitNetworkAccessPoliciesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
694	pathParameters := map[string]interface{}{
695		"resourceGroupName": autorest.Encode("path", resourceGroupName),
696		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
697	}
698
699	const APIVersion = "2020-01-01"
700	queryParameters := map[string]interface{}{
701		"api-version": APIVersion,
702	}
703
704	preparer := autorest.CreatePreparer(
705		autorest.AsGet(),
706		autorest.WithBaseURL(client.BaseURI),
707		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/jitNetworkAccessPolicies", pathParameters),
708		autorest.WithQueryParameters(queryParameters))
709	return preparer.Prepare((&http.Request{}).WithContext(ctx))
710}
711
712// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
713// http.Response Body if it receives an error.
714func (client JitNetworkAccessPoliciesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
715	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
716}
717
718// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
719// closes the http.Response Body.
720func (client JitNetworkAccessPoliciesClient) ListByResourceGroupResponder(resp *http.Response) (result JitNetworkAccessPoliciesList, err error) {
721	err = autorest.Respond(
722		resp,
723		azure.WithErrorUnlessStatusCode(http.StatusOK),
724		autorest.ByUnmarshallingJSON(&result),
725		autorest.ByClosing())
726	result.Response = autorest.Response{Response: resp}
727	return
728}
729
730// listByResourceGroupNextResults retrieves the next set of results, if any.
731func (client JitNetworkAccessPoliciesClient) listByResourceGroupNextResults(ctx context.Context, lastResults JitNetworkAccessPoliciesList) (result JitNetworkAccessPoliciesList, err error) {
732	req, err := lastResults.jitNetworkAccessPoliciesListPreparer(ctx)
733	if err != nil {
734		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
735	}
736	if req == nil {
737		return
738	}
739	resp, err := client.ListByResourceGroupSender(req)
740	if err != nil {
741		result.Response = autorest.Response{Response: resp}
742		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
743	}
744	result, err = client.ListByResourceGroupResponder(resp)
745	if err != nil {
746		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
747	}
748	return
749}
750
751// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
752func (client JitNetworkAccessPoliciesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result JitNetworkAccessPoliciesListIterator, err error) {
753	if tracing.IsEnabled() {
754		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByResourceGroup")
755		defer func() {
756			sc := -1
757			if result.Response().Response.Response != nil {
758				sc = result.page.Response().Response.Response.StatusCode
759			}
760			tracing.EndSpan(ctx, sc, err)
761		}()
762	}
763	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
764	return
765}
766
767// ListByResourceGroupAndRegion policies for protecting resources using Just-in-Time access control for the
768// subscription, location
769// Parameters:
770// resourceGroupName - the name of the resource group within the user's subscription. The name is case
771// insensitive.
772func (client JitNetworkAccessPoliciesClient) ListByResourceGroupAndRegion(ctx context.Context, resourceGroupName string) (result JitNetworkAccessPoliciesListPage, err error) {
773	if tracing.IsEnabled() {
774		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByResourceGroupAndRegion")
775		defer func() {
776			sc := -1
777			if result.jnapl.Response.Response != nil {
778				sc = result.jnapl.Response.Response.StatusCode
779			}
780			tracing.EndSpan(ctx, sc, err)
781		}()
782	}
783	if err := validation.Validate([]validation.Validation{
784		{TargetValue: client.SubscriptionID,
785			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.Pattern, Rule: `^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$`, Chain: nil}}},
786		{TargetValue: resourceGroupName,
787			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
788				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
789				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
790		return result, validation.NewError("security.JitNetworkAccessPoliciesClient", "ListByResourceGroupAndRegion", err.Error())
791	}
792
793	result.fn = client.listByResourceGroupAndRegionNextResults
794	req, err := client.ListByResourceGroupAndRegionPreparer(ctx, resourceGroupName)
795	if err != nil {
796		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroupAndRegion", nil, "Failure preparing request")
797		return
798	}
799
800	resp, err := client.ListByResourceGroupAndRegionSender(req)
801	if err != nil {
802		result.jnapl.Response = autorest.Response{Response: resp}
803		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroupAndRegion", resp, "Failure sending request")
804		return
805	}
806
807	result.jnapl, err = client.ListByResourceGroupAndRegionResponder(resp)
808	if err != nil {
809		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "ListByResourceGroupAndRegion", resp, "Failure responding to request")
810		return
811	}
812	if result.jnapl.hasNextLink() && result.jnapl.IsEmpty() {
813		err = result.NextWithContext(ctx)
814		return
815	}
816
817	return
818}
819
820// ListByResourceGroupAndRegionPreparer prepares the ListByResourceGroupAndRegion request.
821func (client JitNetworkAccessPoliciesClient) ListByResourceGroupAndRegionPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
822	pathParameters := map[string]interface{}{
823		"ascLocation":       autorest.Encode("path", client.AscLocation),
824		"resourceGroupName": autorest.Encode("path", resourceGroupName),
825		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
826	}
827
828	const APIVersion = "2020-01-01"
829	queryParameters := map[string]interface{}{
830		"api-version": APIVersion,
831	}
832
833	preparer := autorest.CreatePreparer(
834		autorest.AsGet(),
835		autorest.WithBaseURL(client.BaseURI),
836		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies", pathParameters),
837		autorest.WithQueryParameters(queryParameters))
838	return preparer.Prepare((&http.Request{}).WithContext(ctx))
839}
840
841// ListByResourceGroupAndRegionSender sends the ListByResourceGroupAndRegion request. The method will close the
842// http.Response Body if it receives an error.
843func (client JitNetworkAccessPoliciesClient) ListByResourceGroupAndRegionSender(req *http.Request) (*http.Response, error) {
844	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
845}
846
847// ListByResourceGroupAndRegionResponder handles the response to the ListByResourceGroupAndRegion request. The method always
848// closes the http.Response Body.
849func (client JitNetworkAccessPoliciesClient) ListByResourceGroupAndRegionResponder(resp *http.Response) (result JitNetworkAccessPoliciesList, err error) {
850	err = autorest.Respond(
851		resp,
852		azure.WithErrorUnlessStatusCode(http.StatusOK),
853		autorest.ByUnmarshallingJSON(&result),
854		autorest.ByClosing())
855	result.Response = autorest.Response{Response: resp}
856	return
857}
858
859// listByResourceGroupAndRegionNextResults retrieves the next set of results, if any.
860func (client JitNetworkAccessPoliciesClient) listByResourceGroupAndRegionNextResults(ctx context.Context, lastResults JitNetworkAccessPoliciesList) (result JitNetworkAccessPoliciesList, err error) {
861	req, err := lastResults.jitNetworkAccessPoliciesListPreparer(ctx)
862	if err != nil {
863		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupAndRegionNextResults", nil, "Failure preparing next results request")
864	}
865	if req == nil {
866		return
867	}
868	resp, err := client.ListByResourceGroupAndRegionSender(req)
869	if err != nil {
870		result.Response = autorest.Response{Response: resp}
871		return result, autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupAndRegionNextResults", resp, "Failure sending next results request")
872	}
873	result, err = client.ListByResourceGroupAndRegionResponder(resp)
874	if err != nil {
875		err = autorest.NewErrorWithError(err, "security.JitNetworkAccessPoliciesClient", "listByResourceGroupAndRegionNextResults", resp, "Failure responding to next results request")
876	}
877	return
878}
879
880// ListByResourceGroupAndRegionComplete enumerates all values, automatically crossing page boundaries as required.
881func (client JitNetworkAccessPoliciesClient) ListByResourceGroupAndRegionComplete(ctx context.Context, resourceGroupName string) (result JitNetworkAccessPoliciesListIterator, err error) {
882	if tracing.IsEnabled() {
883		ctx = tracing.StartSpan(ctx, fqdn+"/JitNetworkAccessPoliciesClient.ListByResourceGroupAndRegion")
884		defer func() {
885			sc := -1
886			if result.Response().Response.Response != nil {
887				sc = result.page.Response().Response.Response.StatusCode
888			}
889			tracing.EndSpan(ctx, sc, err)
890		}()
891	}
892	result.page, err = client.ListByResourceGroupAndRegion(ctx, resourceGroupName)
893	return
894}
895