/// <summary>
        /// Transforms the given model to its endpoints acceptable structure and sends it to the endpoint
        /// </summary>
        public void SetVulnerabilityAssessmentRuleBaseline(VulnerabilityAssessmentRuleBaselineModel model, string workspaceName, string sqlPoolName, ApplyToType applyToType)
        {
            var ruleBaseline = new SqlPoolVulnerabilityAssessmentRuleBaseline()
            {
                BaselineResults = new List <SqlPoolVulnerabilityAssessmentRuleBaselineItem>()
            };

            foreach (var baselineResult in model.BaselineResult)
            {
                var ruleBaselineItem = new SqlPoolVulnerabilityAssessmentRuleBaselineItem()
                {
                    Result = baselineResult.Result
                };

                ruleBaseline.BaselineResults.Add(ruleBaselineItem);
            }

            if (applyToType == ApplyToType.SqlPool)
            {
                VulnerabilityAssessmentCommunicator.SetSqlPoolVulnerabilityAssessmentRuleBaseline(model.ResourceGroupName, workspaceName,
                                                                                                  sqlPoolName, model.RuleId, model.RuleAppliesToMaster, ruleBaseline);
            }
            else
            {
                throw new NotSupportedException(Resources.VulnerabilityAssessmentTypeNotSupported);
            }
        }
 /// <summary>
 /// Creates or updates a Sql pool's vulnerability assessment rule baseline.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='workspaceName'>
 /// The name of the workspace.
 /// </param>
 /// <param name='sqlPoolName'>
 /// SQL pool name
 /// </param>
 /// <param name='ruleId'>
 /// The vulnerability assessment rule ID.
 /// </param>
 /// <param name='baselineName'>
 /// The name of the vulnerability assessment rule baseline (default implies a
 /// baseline on a Sql pool level rule and master for workspace level rule).
 /// Possible values include: 'master', 'default'
 /// </param>
 /// <param name='parameters'>
 /// The requested rule baseline resource.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <SqlPoolVulnerabilityAssessmentRuleBaseline> CreateOrUpdateAsync(this ISqlPoolVulnerabilityAssessmentRuleBaselinesOperations operations, string resourceGroupName, string workspaceName, string sqlPoolName, string ruleId, VulnerabilityAssessmentPolicyBaselineName baselineName, SqlPoolVulnerabilityAssessmentRuleBaseline parameters, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, workspaceName, sqlPoolName, ruleId, baselineName, parameters, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 /// <summary>
 /// Creates or updates a Sql pool's vulnerability assessment rule baseline.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='workspaceName'>
 /// The name of the workspace.
 /// </param>
 /// <param name='sqlPoolName'>
 /// SQL pool name
 /// </param>
 /// <param name='ruleId'>
 /// The vulnerability assessment rule ID.
 /// </param>
 /// <param name='baselineName'>
 /// The name of the vulnerability assessment rule baseline (default implies a
 /// baseline on a Sql pool level rule and master for workspace level rule).
 /// Possible values include: 'master', 'default'
 /// </param>
 /// <param name='parameters'>
 /// The requested rule baseline resource.
 /// </param>
 public static SqlPoolVulnerabilityAssessmentRuleBaseline CreateOrUpdate(this ISqlPoolVulnerabilityAssessmentRuleBaselinesOperations operations, string resourceGroupName, string workspaceName, string sqlPoolName, string ruleId, VulnerabilityAssessmentPolicyBaselineName baselineName, SqlPoolVulnerabilityAssessmentRuleBaseline parameters)
 {
     return(operations.CreateOrUpdateAsync(resourceGroupName, workspaceName, sqlPoolName, ruleId, baselineName, parameters).GetAwaiter().GetResult());
 }
 /// <summary>
 /// Calls the set Vulnerability Assessment APIs for the SQL pool Vulnerability Assessment rule baseline for the given rule in the given SQL pool in the given workspace in the given resource group
 /// </summary>
 public void SetSqlPoolVulnerabilityAssessmentRuleBaseline(string resourceGroupName, string workspaceName, string sqlPoolName, string ruleId,
                                                           bool ruleAppliesToMaster, SqlPoolVulnerabilityAssessmentRuleBaseline parameters)
 {
     GetCurrentSynapseClient().SqlPoolVulnerabilityAssessmentRuleBaselines.CreateOrUpdate(resourceGroupName, workspaceName, sqlPoolName, ruleId,
                                                                                          ruleAppliesToMaster ? VulnerabilityAssessmentPolicyBaselineName.Master : VulnerabilityAssessmentPolicyBaselineName.Default, parameters);
 }
Beispiel #5
0
        /// <summary>
        /// Creates or updates a Sql pool's vulnerability assessment rule baseline.
        /// </summary>
        /// <param name='resourceGroupName'>
        /// The name of the resource group. The name is case insensitive.
        /// </param>
        /// <param name='workspaceName'>
        /// The name of the workspace
        /// </param>
        /// <param name='sqlPoolName'>
        /// SQL pool name
        /// </param>
        /// <param name='ruleId'>
        /// The vulnerability assessment rule ID.
        /// </param>
        /// <param name='baselineName'>
        /// The name of the vulnerability assessment rule baseline (default implies a
        /// baseline on a Sql pool level rule and master for workspace level rule).
        /// Possible values include: 'master', 'default'
        /// </param>
        /// <param name='parameters'>
        /// The requested rule baseline resource.
        /// </param>
        /// <param name='customHeaders'>
        /// Headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="CloudException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <return>
        /// A response object containing the response body and response headers.
        /// </return>
        public async Task <AzureOperationResponse <SqlPoolVulnerabilityAssessmentRuleBaseline> > CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string workspaceName, string sqlPoolName, string ruleId, VulnerabilityAssessmentPolicyBaselineName baselineName, SqlPoolVulnerabilityAssessmentRuleBaseline parameters, Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (Client.ApiVersion == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion");
            }
            if (Client.ApiVersion != null)
            {
                if (Client.ApiVersion.Length < 1)
                {
                    throw new ValidationException(ValidationRules.MinLength, "Client.ApiVersion", 1);
                }
            }
            if (Client.SubscriptionId == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId");
            }
            if (Client.SubscriptionId != null)
            {
                if (Client.SubscriptionId.Length < 1)
                {
                    throw new ValidationException(ValidationRules.MinLength, "Client.SubscriptionId", 1);
                }
            }
            if (resourceGroupName == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName");
            }
            if (resourceGroupName != null)
            {
                if (resourceGroupName.Length > 90)
                {
                    throw new ValidationException(ValidationRules.MaxLength, "resourceGroupName", 90);
                }
                if (resourceGroupName.Length < 1)
                {
                    throw new ValidationException(ValidationRules.MinLength, "resourceGroupName", 1);
                }
            }
            if (workspaceName == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "workspaceName");
            }
            if (sqlPoolName == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "sqlPoolName");
            }
            if (ruleId == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "ruleId");
            }
            if (parameters == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "parameters");
            }
            if (parameters != null)
            {
                parameters.Validate();
            }
            string vulnerabilityAssessmentName = "default";
            // Tracing
            bool   _shouldTrace  = ServiceClientTracing.IsEnabled;
            string _invocationId = null;

            if (_shouldTrace)
            {
                _invocationId = ServiceClientTracing.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("resourceGroupName", resourceGroupName);
                tracingParameters.Add("workspaceName", workspaceName);
                tracingParameters.Add("sqlPoolName", sqlPoolName);
                tracingParameters.Add("vulnerabilityAssessmentName", vulnerabilityAssessmentName);
                tracingParameters.Add("ruleId", ruleId);
                tracingParameters.Add("baselineName", baselineName);
                tracingParameters.Add("parameters", parameters);
                tracingParameters.Add("cancellationToken", cancellationToken);
                ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters);
            }
            // Construct URL
            var _baseUrl = Client.BaseUri.AbsoluteUri;
            var _url     = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}/sqlPools/{sqlPoolName}/vulnerabilityAssessments/{vulnerabilityAssessmentName}/rules/{ruleId}/baselines/{baselineName}").ToString();

            _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId));
            _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName));
            _url = _url.Replace("{workspaceName}", System.Uri.EscapeDataString(workspaceName));
            _url = _url.Replace("{sqlPoolName}", System.Uri.EscapeDataString(sqlPoolName));
            _url = _url.Replace("{vulnerabilityAssessmentName}", System.Uri.EscapeDataString(vulnerabilityAssessmentName));
            _url = _url.Replace("{ruleId}", System.Uri.EscapeDataString(ruleId));
            _url = _url.Replace("{baselineName}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(baselineName, Client.SerializationSettings).Trim('"')));
            List <string> _queryParameters = new List <string>();

            if (Client.ApiVersion != null)
            {
                _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion)));
            }
            if (_queryParameters.Count > 0)
            {
                _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters);
            }
            // Create HTTP transport objects
            var _httpRequest = new HttpRequestMessage();
            HttpResponseMessage _httpResponse = null;

            _httpRequest.Method     = new HttpMethod("PUT");
            _httpRequest.RequestUri = new System.Uri(_url);
            // Set Headers
            if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value)
            {
                _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString());
            }
            if (Client.AcceptLanguage != null)
            {
                if (_httpRequest.Headers.Contains("accept-language"))
                {
                    _httpRequest.Headers.Remove("accept-language");
                }
                _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage);
            }


            if (customHeaders != null)
            {
                foreach (var _header in customHeaders)
                {
                    if (_httpRequest.Headers.Contains(_header.Key))
                    {
                        _httpRequest.Headers.Remove(_header.Key);
                    }
                    _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
                }
            }

            // Serialize Request
            string _requestContent = null;

            if (parameters != null)
            {
                _requestContent      = Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, Client.SerializationSettings);
                _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8);
                _httpRequest.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
            }
            // Set Credentials
            if (Client.Credentials != null)
            {
                cancellationToken.ThrowIfCancellationRequested();
                await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
            }
            // Send Request
            if (_shouldTrace)
            {
                ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
            }
            cancellationToken.ThrowIfCancellationRequested();
            _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);

            if (_shouldTrace)
            {
                ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
            }
            HttpStatusCode _statusCode = _httpResponse.StatusCode;

            cancellationToken.ThrowIfCancellationRequested();
            string _responseContent = null;

            if ((int)_statusCode != 200)
            {
                var ex = new CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
                try
                {
                    _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                    CloudError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject <CloudError>(_responseContent, Client.DeserializationSettings);
                    if (_errorBody != null)
                    {
                        ex      = new CloudException(_errorBody.Message);
                        ex.Body = _errorBody;
                    }
                }
                catch (JsonException)
                {
                    // Ignore the exception
                }
                ex.Request  = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
                ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
                if (_httpResponse.Headers.Contains("x-ms-request-id"))
                {
                    ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
                }
                if (_shouldTrace)
                {
                    ServiceClientTracing.Error(_invocationId, ex);
                }
                _httpRequest.Dispose();
                if (_httpResponse != null)
                {
                    _httpResponse.Dispose();
                }
                throw ex;
            }
            // Create Result
            var _result = new AzureOperationResponse <SqlPoolVulnerabilityAssessmentRuleBaseline>();

            _result.Request  = _httpRequest;
            _result.Response = _httpResponse;
            if (_httpResponse.Headers.Contains("x-ms-request-id"))
            {
                _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault();
            }
            // Deserialize Response
            if ((int)_statusCode == 200)
            {
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                try
                {
                    _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject <SqlPoolVulnerabilityAssessmentRuleBaseline>(_responseContent, Client.DeserializationSettings);
                }
                catch (JsonException ex)
                {
                    _httpRequest.Dispose();
                    if (_httpResponse != null)
                    {
                        _httpResponse.Dispose();
                    }
                    throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
                }
            }
            if (_shouldTrace)
            {
                ServiceClientTracing.Exit(_invocationId, _result);
            }
            return(_result);
        }