using System; using System.IO; using System.Linq; namespace ServiceClientGenerator.DefaultConfiguration { /// public interface IDefaultConfigurationController { /// /// Fully loads and populates by parsing the /// sdk-default-configurations.json file from disk. Also adds the 'Legacy' /// with the correct defaults. /// /// /// Full path to the root directory, ie contains the 'sdk' directory. /// /// /// The sdk-default-configuration.json file is placed into the /// repository by an upstream process in ServiceBuildAutomation. /// DefaultConfigurationModel LoadDefaultConfiguration(string repositoryRootDirectoryPath); } /// public class DefaultConfigurationController : IDefaultConfigurationController { private readonly IFileReader _fileReader; private readonly IDefaultConfigurationParser _defaultConfigurationParser; public DefaultConfigurationController( IFileReader fileReader, IDefaultConfigurationParser defaultConfigurationParser) { _fileReader = fileReader; _defaultConfigurationParser = defaultConfigurationParser; } /// public DefaultConfigurationModel LoadDefaultConfiguration(string repositoryRootDirectoryPath) { var filePath = Utils.PathCombineAlt(repositoryRootDirectoryPath, "sdk","src","Core","sdk-default-configuration.json"); string json; try { json = _fileReader.ReadAllText(filePath); } catch (Exception e) { throw new Exception($"Error reading Json from [{filePath}]: {e.Message}", e); } var parsedModel = _defaultConfigurationParser.Parse(json); EnrichLegacyMode(parsedModel); return parsedModel; } private void EnrichLegacyMode(DefaultConfigurationModel parsedModel) { var legacyMode = parsedModel .Modes .FirstOrDefault(x => string.Equals(x.Name, "Legacy", StringComparison.OrdinalIgnoreCase)); if (legacyMode == null) throw new Exception( "Did not find required Default Configuration mode 'Legacy'. " + $"Found: {string.Join(",", parsedModel.Modes.Select(x => x.Name))}"); legacyMode.RetryMode = RequestRetryMode.Legacy; legacyMode.S3UsEast1RegionalEndpoint = S3UsEast1RegionalEndpointValue.Legacy; legacyMode.StsRegionalEndpoints = StsRegionalEndpointsValue.Legacy; // default to null for timeouts - this preserves the ServiceConfig // behavior of defaulting configurable timeouts to null legacyMode.TimeToFirstByteTimeout = null; legacyMode.ConnectTimeout = null; legacyMode.HttpRequestTimeout = null; legacyMode.TlsNegotiationTimeout = null; } } }