/// <summary>
        /// Gets the <see cref="FileTypeSettings"/> from attributes of the <see cref="BinaryFileType"/> associated with a file.
        /// </summary>
        /// <param name="binaryFile">The <see cref="BinaryFile"/>.</param>
        /// <returns></returns>
        private FileTypeSettings GetSettingsFromFileType(BinaryFile binaryFile)
        {
            var settings = new FileTypeSettings();

            if (binaryFile == null || !binaryFile.BinaryFileTypeId.HasValue)
            {
                return(settings);
            }

            var binaryFileType = binaryFile.BinaryFileType;

            if (binaryFileType == null && binaryFile.BinaryFileTypeId.HasValue)
            {
                binaryFileType = new BinaryFileTypeService(new RockContext()).Get(binaryFile.BinaryFileTypeId.Value);
            }
            if (binaryFileType == null)
            {
                return(settings);
            }

            if (binaryFileType.Attributes == null)
            {
                binaryFileType.LoadAttributes();
            }

            settings.ContainerName = binaryFileType.GetAttributeValue("AzureBlobContainerName");
            settings.Folder        = (binaryFileType.GetAttributeValue("AzureBlobContainerFolderPath") ?? string.Empty)
                                     .Replace(@"\", "/")
                                     .TrimEnd("/".ToCharArray());

            return(settings);
        }
        /// <summary>
        /// Get the Blob Client.
        /// </summary>
        /// <param name="binaryFile">The <see cref="BinaryFile"/>.</param>
        /// <returns></returns>
        private BlobClient GetBlobClient(BinaryFile binaryFile)
        {
            if (binaryFile == null)
            {
                return(null);
            }

            FileTypeSettings settings;

            if (binaryFile.StorageSettings != null && binaryFile.StorageSettings.ContainsKey("AzureBlobContainerName") && binaryFile.StorageSettings.ContainsKey("AzureBlobContainerFolderPath"))
            {
                settings = new FileTypeSettings
                {
                    ContainerName = binaryFile.StorageSettings["AzureBlobContainerName"],
                    Folder        = binaryFile.StorageSettings["AzureBlobContainerFolderPath"]
                };
            }
            else
            {
                settings = GetSettingsFromFileType(binaryFile);
            }

            string rawGuid  = binaryFile.Guid.ToString().Replace("-", "");
            string fileName = $"{rawGuid}_{binaryFile.FileName}";
            string blobName = string.IsNullOrWhiteSpace(settings.Folder) ? fileName : $"{settings.Folder}/{fileName}";

            var accountName   = GetAttributeValue(AttributeKey.AccountName);
            var accountKey    = GetAttributeValue(AttributeKey.AccountKey);
            var customDomain  = GetAttributeValue(AttributeKey.CustomDomain);
            var containerName = settings.ContainerName.IsNotNullOrWhiteSpace() ? settings.ContainerName : GetAttributeValue(AttributeKey.DefaultContainerName);

            return(AzureBlobStorageClient.Instance.GetBlobClient(accountName, accountKey, customDomain, containerName, blobName));
        }
        public ConfigService(ILogger <ConfigService> logger, IDataService dataService, IFolderService folderService, IMemoryCache memoryCache) : base(logger, dataService, memoryCache)
        {
            fileTypeSettings = new FileTypeSettings();

            this.folderService = folderService;
        }