The base class that defines the core properties of an auditing policy
Inheritance: AuditingPolicyModel
 /// <summary>
 /// Extracts the storage account name from the given model
 /// </summary>
 private static string ExtractStorageAccountName(BaseBlobAuditingPolicyModel model, string endpointSuffix)
 {
     return string.Format("https://{0}.blob.{1}", model.StorageAccountName, endpointSuffix);
 }
 private static IList<string> ExtractAuditActionsAndGroups(BaseBlobAuditingPolicyModel model)
 {
     var actionsAndGroups = new List<string>(model.AuditAction);
     model.AuditActionGroup.ToList().ForEach(aag => actionsAndGroups.Add(aag.ToString()));
     if (actionsAndGroups.Count == 0) // default audit actions and groups in case nothing was defined by the user
     {
         actionsAndGroups.Add("SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP");
         actionsAndGroups.Add("FAILED_DATABASE_AUTHENTICATION_GROUP");
         actionsAndGroups.Add("BATCH_COMPLETED_GROUP");
     }
     return actionsAndGroups;
 }
        /// <summary>
        /// Takes the cmdlets model object and transform it to the policy as expected by the endpoint
        /// </summary>
        /// <param name="model">The AuditingPolicy model object</param>
        /// <param name="storageEndpointSuffix">The suffix of the storage endpoint</param>
        /// <returns>The communication model object</returns>
        private BlobAuditingCreateOrUpdateParameters PolicizeBlobAuditingModel(BaseBlobAuditingPolicyModel model, string storageEndpointSuffix)
        {
            var updateParameters = new BlobAuditingCreateOrUpdateParameters();
            var properties = new BlobAuditingProperties();
            updateParameters.Properties = properties;
            properties.State = model.AuditState.ToString();
            if (!IgnoreStorage)
            {
                properties.StorageEndpoint = ExtractStorageAccountName(model, storageEndpointSuffix);
                properties.StorageAccountAccessKey = ExtractStorageAccountKey(model.StorageAccountName);
            }
            properties.AuditActionsAndGroups = ExtractAuditActionsAndGroups(model);
            properties.RetentionDays = (int) model.RetentionInDays;

            return updateParameters;
        }
 private static void ModelizeStorageInfo(BaseBlobAuditingPolicyModel model, string storageEndpoint)
 {
     if (string.IsNullOrEmpty(storageEndpoint))
     {
         return;
     }
     var accountNameStartIndex = storageEndpoint.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase)? 8 : 7; // https:// or http://
     var accountNameEndIndex = storageEndpoint.IndexOf(".blob", StringComparison.InvariantCultureIgnoreCase);
     model.StorageAccountName = storageEndpoint.Substring(accountNameStartIndex, accountNameEndIndex- accountNameStartIndex);
 }
 private void ModelizeRetentionInfo(BaseBlobAuditingPolicyModel model, int retentionDays)
 {
     model.RetentionInDays = Convert.ToUInt32(retentionDays);
 }
 private void ModelizeAuditActionsAndGroupsInfo(BaseBlobAuditingPolicyModel dbPolicyModel, IEnumerable<string> auditActionsAndGroups)
 {
     var groups = new List<AuditActionGroups>();
     var actions = new List<string>();
     auditActionsAndGroups.ForEach(item =>
     {
         AuditActionGroups group;
         if (Enum.TryParse(item, true, out group))
         {
             groups.Add(group);
         }
         else
         {
             actions.Add(item);
         }
     });
     dbPolicyModel.AuditActionGroup = groups.ToArray();
     dbPolicyModel.AuditAction = actions.ToArray();
 }