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// RegulatoryComplianceAssessmentsClient is the API spec for Microsoft.Security (Azure Security Center) resource
19// provider
20type RegulatoryComplianceAssessmentsClient struct {
21	BaseClient
22}
23
24// NewRegulatoryComplianceAssessmentsClient creates an instance of the RegulatoryComplianceAssessmentsClient client.
25func NewRegulatoryComplianceAssessmentsClient(subscriptionID string, ascLocation string) RegulatoryComplianceAssessmentsClient {
26	return NewRegulatoryComplianceAssessmentsClientWithBaseURI(DefaultBaseURI, subscriptionID, ascLocation)
27}
28
29// NewRegulatoryComplianceAssessmentsClientWithBaseURI creates an instance of the RegulatoryComplianceAssessmentsClient
30// client using a custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI
31// (sovereign clouds, Azure stack).
32func NewRegulatoryComplianceAssessmentsClientWithBaseURI(baseURI string, subscriptionID string, ascLocation string) RegulatoryComplianceAssessmentsClient {
33	return RegulatoryComplianceAssessmentsClient{NewWithBaseURI(baseURI, subscriptionID, ascLocation)}
34}
35
36// Get supported regulatory compliance details and state for selected assessment
37// Parameters:
38// regulatoryComplianceStandardName - name of the regulatory compliance standard object
39// regulatoryComplianceControlName - name of the regulatory compliance control object
40// regulatoryComplianceAssessmentName - name of the regulatory compliance assessment object
41func (client RegulatoryComplianceAssessmentsClient) Get(ctx context.Context, regulatoryComplianceStandardName string, regulatoryComplianceControlName string, regulatoryComplianceAssessmentName string) (result RegulatoryComplianceAssessment, err error) {
42	if tracing.IsEnabled() {
43		ctx = tracing.StartSpan(ctx, fqdn+"/RegulatoryComplianceAssessmentsClient.Get")
44		defer func() {
45			sc := -1
46			if result.Response.Response != nil {
47				sc = result.Response.Response.StatusCode
48			}
49			tracing.EndSpan(ctx, sc, err)
50		}()
51	}
52	if err := validation.Validate([]validation.Validation{
53		{TargetValue: client.SubscriptionID,
54			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 {
55		return result, validation.NewError("security.RegulatoryComplianceAssessmentsClient", "Get", err.Error())
56	}
57
58	req, err := client.GetPreparer(ctx, regulatoryComplianceStandardName, regulatoryComplianceControlName, regulatoryComplianceAssessmentName)
59	if err != nil {
60		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "Get", nil, "Failure preparing request")
61		return
62	}
63
64	resp, err := client.GetSender(req)
65	if err != nil {
66		result.Response = autorest.Response{Response: resp}
67		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "Get", resp, "Failure sending request")
68		return
69	}
70
71	result, err = client.GetResponder(resp)
72	if err != nil {
73		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "Get", resp, "Failure responding to request")
74		return
75	}
76
77	return
78}
79
80// GetPreparer prepares the Get request.
81func (client RegulatoryComplianceAssessmentsClient) GetPreparer(ctx context.Context, regulatoryComplianceStandardName string, regulatoryComplianceControlName string, regulatoryComplianceAssessmentName string) (*http.Request, error) {
82	pathParameters := map[string]interface{}{
83		"regulatoryComplianceAssessmentName": autorest.Encode("path", regulatoryComplianceAssessmentName),
84		"regulatoryComplianceControlName":    autorest.Encode("path", regulatoryComplianceControlName),
85		"regulatoryComplianceStandardName":   autorest.Encode("path", regulatoryComplianceStandardName),
86		"subscriptionId":                     autorest.Encode("path", client.SubscriptionID),
87	}
88
89	const APIVersion = "2019-01-01-preview"
90	queryParameters := map[string]interface{}{
91		"api-version": APIVersion,
92	}
93
94	preparer := autorest.CreatePreparer(
95		autorest.AsGet(),
96		autorest.WithBaseURL(client.BaseURI),
97		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments/{regulatoryComplianceAssessmentName}", pathParameters),
98		autorest.WithQueryParameters(queryParameters))
99	return preparer.Prepare((&http.Request{}).WithContext(ctx))
100}
101
102// GetSender sends the Get request. The method will close the
103// http.Response Body if it receives an error.
104func (client RegulatoryComplianceAssessmentsClient) GetSender(req *http.Request) (*http.Response, error) {
105	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
106}
107
108// GetResponder handles the response to the Get request. The method always
109// closes the http.Response Body.
110func (client RegulatoryComplianceAssessmentsClient) GetResponder(resp *http.Response) (result RegulatoryComplianceAssessment, err error) {
111	err = autorest.Respond(
112		resp,
113		azure.WithErrorUnlessStatusCode(http.StatusOK),
114		autorest.ByUnmarshallingJSON(&result),
115		autorest.ByClosing())
116	result.Response = autorest.Response{Response: resp}
117	return
118}
119
120// List details and state of assessments mapped to selected regulatory compliance control
121// Parameters:
122// regulatoryComplianceStandardName - name of the regulatory compliance standard object
123// regulatoryComplianceControlName - name of the regulatory compliance control object
124// filter - oData filter. Optional.
125func (client RegulatoryComplianceAssessmentsClient) List(ctx context.Context, regulatoryComplianceStandardName string, regulatoryComplianceControlName string, filter string) (result RegulatoryComplianceAssessmentListPage, err error) {
126	if tracing.IsEnabled() {
127		ctx = tracing.StartSpan(ctx, fqdn+"/RegulatoryComplianceAssessmentsClient.List")
128		defer func() {
129			sc := -1
130			if result.rcal.Response.Response != nil {
131				sc = result.rcal.Response.Response.StatusCode
132			}
133			tracing.EndSpan(ctx, sc, err)
134		}()
135	}
136	if err := validation.Validate([]validation.Validation{
137		{TargetValue: client.SubscriptionID,
138			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 {
139		return result, validation.NewError("security.RegulatoryComplianceAssessmentsClient", "List", err.Error())
140	}
141
142	result.fn = client.listNextResults
143	req, err := client.ListPreparer(ctx, regulatoryComplianceStandardName, regulatoryComplianceControlName, filter)
144	if err != nil {
145		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "List", nil, "Failure preparing request")
146		return
147	}
148
149	resp, err := client.ListSender(req)
150	if err != nil {
151		result.rcal.Response = autorest.Response{Response: resp}
152		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "List", resp, "Failure sending request")
153		return
154	}
155
156	result.rcal, err = client.ListResponder(resp)
157	if err != nil {
158		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "List", resp, "Failure responding to request")
159		return
160	}
161	if result.rcal.hasNextLink() && result.rcal.IsEmpty() {
162		err = result.NextWithContext(ctx)
163		return
164	}
165
166	return
167}
168
169// ListPreparer prepares the List request.
170func (client RegulatoryComplianceAssessmentsClient) ListPreparer(ctx context.Context, regulatoryComplianceStandardName string, regulatoryComplianceControlName string, filter string) (*http.Request, error) {
171	pathParameters := map[string]interface{}{
172		"regulatoryComplianceControlName":  autorest.Encode("path", regulatoryComplianceControlName),
173		"regulatoryComplianceStandardName": autorest.Encode("path", regulatoryComplianceStandardName),
174		"subscriptionId":                   autorest.Encode("path", client.SubscriptionID),
175	}
176
177	const APIVersion = "2019-01-01-preview"
178	queryParameters := map[string]interface{}{
179		"api-version": APIVersion,
180	}
181	if len(filter) > 0 {
182		queryParameters["$filter"] = autorest.Encode("query", filter)
183	}
184
185	preparer := autorest.CreatePreparer(
186		autorest.AsGet(),
187		autorest.WithBaseURL(client.BaseURI),
188		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments", pathParameters),
189		autorest.WithQueryParameters(queryParameters))
190	return preparer.Prepare((&http.Request{}).WithContext(ctx))
191}
192
193// ListSender sends the List request. The method will close the
194// http.Response Body if it receives an error.
195func (client RegulatoryComplianceAssessmentsClient) ListSender(req *http.Request) (*http.Response, error) {
196	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
197}
198
199// ListResponder handles the response to the List request. The method always
200// closes the http.Response Body.
201func (client RegulatoryComplianceAssessmentsClient) ListResponder(resp *http.Response) (result RegulatoryComplianceAssessmentList, err error) {
202	err = autorest.Respond(
203		resp,
204		azure.WithErrorUnlessStatusCode(http.StatusOK),
205		autorest.ByUnmarshallingJSON(&result),
206		autorest.ByClosing())
207	result.Response = autorest.Response{Response: resp}
208	return
209}
210
211// listNextResults retrieves the next set of results, if any.
212func (client RegulatoryComplianceAssessmentsClient) listNextResults(ctx context.Context, lastResults RegulatoryComplianceAssessmentList) (result RegulatoryComplianceAssessmentList, err error) {
213	req, err := lastResults.regulatoryComplianceAssessmentListPreparer(ctx)
214	if err != nil {
215		return result, autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "listNextResults", nil, "Failure preparing next results request")
216	}
217	if req == nil {
218		return
219	}
220	resp, err := client.ListSender(req)
221	if err != nil {
222		result.Response = autorest.Response{Response: resp}
223		return result, autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "listNextResults", resp, "Failure sending next results request")
224	}
225	result, err = client.ListResponder(resp)
226	if err != nil {
227		err = autorest.NewErrorWithError(err, "security.RegulatoryComplianceAssessmentsClient", "listNextResults", resp, "Failure responding to next results request")
228	}
229	return
230}
231
232// ListComplete enumerates all values, automatically crossing page boundaries as required.
233func (client RegulatoryComplianceAssessmentsClient) ListComplete(ctx context.Context, regulatoryComplianceStandardName string, regulatoryComplianceControlName string, filter string) (result RegulatoryComplianceAssessmentListIterator, err error) {
234	if tracing.IsEnabled() {
235		ctx = tracing.StartSpan(ctx, fqdn+"/RegulatoryComplianceAssessmentsClient.List")
236		defer func() {
237			sc := -1
238			if result.Response().Response.Response != nil {
239				sc = result.page.Response().Response.Response.StatusCode
240			}
241			tracing.EndSpan(ctx, sc, err)
242		}()
243	}
244	result.page, err = client.List(ctx, regulatoryComplianceStandardName, regulatoryComplianceControlName, filter)
245	return
246}
247