示例#1
0
        internal static ISettings GetSettings(IConfiguration configuration)
        {
            string sourceRoot          = configuration.GetValue <string>("SourceRoot");
            string destinationRootUrl  = configuration.GetValue <string>("DestinationRootUrl");
            string destinationRootPath = configuration.GetValue <string>("DestinationRootPath");

            ILocation destinationRoot = new Location(new Uri(destinationRootUrl), destinationRootPath);

            IConfigurationSection rateLimiterConfig   = configuration.GetSection("RateLimiter");
            IRateLimiterSettings  rateLimiterSettings = new RateLimiterSettings
            {
                Enabled                 = rateLimiterConfig.GetValue("Enabled", false),
                TimeWindowInMinutes     = rateLimiterConfig.GetValue("TimeWindowInMinutes", 10),
                MaxRequestsInTimeWindow = rateLimiterConfig.GetValue("MaxRequestsInTimeWindow", 100),
                MaxBytesInTimeWindow    = rateLimiterConfig.GetValue("MaxBytesInTimeWindow", 1024 * 1024 * 50),
                Whitelist               = rateLimiterConfig.GetSection("Whitelist").GetChildren().ToList().Select(x => x.Value).ToArray(),
                Blacklist               = rateLimiterConfig.GetSection("Blacklist").GetChildren().ToList().Select(x => x.Value).ToArray()
            };

            IConfigurationSection loggerConfig   = configuration.GetSection("Logger");
            ILoggerSettings       loggerSettings = new LoggerSettings
            {
                WriteInfo     = loggerConfig.GetValue("WriteInfo", false),
                WriteWarnings = loggerConfig.GetValue("WriteWarnings", false),
                WriteErrors   = loggerConfig.GetValue("WriteErrors", false),
                ToConsole     = loggerConfig.GetValue("ToConsole", false),
                ToFile        = loggerConfig.GetValue("ToFile", false),
                Directory     = loggerConfig.GetValue("Directory", string.Empty)
            };

            IConfigurationSection gifConfig   = configuration.GetSection("GifSettings");
            IGifSettings          gifSettings = new GifSettings
            {
                PostProcessorEnabled = gifConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = gifConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            IConfigurationSection jpegConfig   = configuration.GetSection("JpegSettings");
            IJpegSettings         jpegSettings = new JpegSettings
            {
                Quality = jpegConfig.GetValue("Quality", 75),
                PostProcessorEnabled = jpegConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = jpegConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            IConfigurationSection pngConfig   = configuration.GetSection("PngSettings");
            IPngSettings          pngSettings = new PngSettings
            {
                CompressionLevel     = pngConfig.GetValue("CompressionLevel", 6),
                PostProcessorEnabled = pngConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = pngConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            Settings settings = new Settings(sourceRoot, destinationRoot, rateLimiterSettings, loggerSettings, gifSettings, jpegSettings, pngSettings);

            return(settings);
        }
示例#2
0
        public void TestFullConfiguration()
        {
            string   sourceRoot      = "source/root";
            Location destinationRoot = new Location(new Uri("http://site.com/images"), "/var/www/site.com/images");

            RateLimiterSettings rateLimiterSettings = new RateLimiterSettings();

            rateLimiterSettings.Enabled                 = true;
            rateLimiterSettings.TimeWindowInMinutes     = 42;
            rateLimiterSettings.MaxRequestsInTimeWindow = 1337;
            rateLimiterSettings.MaxBytesInTimeWindow    = 1000000;
            rateLimiterSettings.Whitelist               = new string[] { "1.3.3.7" };
            rateLimiterSettings.Blacklist               = new string[] { "6.6.6.666", "666.666.666.666" };

            LoggerSettings loggerSettings = new LoggerSettings();

            loggerSettings.WriteInfo     = true;
            loggerSettings.WriteWarnings = true;
            loggerSettings.WriteErrors   = true;
            loggerSettings.ToConsole     = true;
            loggerSettings.ToFile        = true;
            loggerSettings.Directory     = "path/to/log";

            GifSettings gifSettings = new GifSettings();

            gifSettings.PostProcessorEnabled = true;
            gifSettings.PostProcessorCommand = "path/to/gifsicle some gifsicle args";

            JpegSettings jpegSettings = new JpegSettings();

            jpegSettings.Quality = 50;
            jpegSettings.PostProcessorEnabled = true;
            jpegSettings.PostProcessorCommand = "path/to/jpegtran some jpegtran args";

            PngSettings pngSettings = new PngSettings();

            pngSettings.CompressionLevel     = 3;
            pngSettings.PostProcessorEnabled = true;
            pngSettings.PostProcessorCommand = "path/to/optipng some optipng args";

            Settings settings = new Settings(sourceRoot, destinationRoot, rateLimiterSettings, loggerSettings, gifSettings, jpegSettings, pngSettings);

            Assert.True(settings.SourceRoot == sourceRoot);
            Assert.True(settings.DestinationRoot.AbsoluteUrl == destinationRoot.AbsoluteUrl);
            Assert.True(settings.DestinationRoot.AbsolutePath == destinationRoot.AbsolutePath);

            Assert.True(settings.RateLimiterSettings.Enabled == true);
            Assert.True(settings.RateLimiterSettings.TimeWindowInMinutes == 42);
            Assert.True(settings.RateLimiterSettings.MaxRequestsInTimeWindow == 1337);
            Assert.True(settings.RateLimiterSettings.MaxBytesInTimeWindow == 1000000);
            Assert.True(settings.RateLimiterSettings.Whitelist.Length == 1 && settings.RateLimiterSettings.Whitelist[0] == "1.3.3.7");
            Assert.True(settings.RateLimiterSettings.Blacklist.Length == 2 && settings.RateLimiterSettings.Blacklist[0] == "6.6.6.666" && settings.RateLimiterSettings.Blacklist[1] == "666.666.666.666");

            Assert.True(settings.LoggerSettings.WriteInfo == true);
            Assert.True(settings.LoggerSettings.WriteWarnings == true);
            Assert.True(settings.LoggerSettings.WriteErrors == true);
            Assert.True(settings.LoggerSettings.ToConsole == true);
            Assert.True(settings.LoggerSettings.ToFile == true);
            Assert.True(settings.LoggerSettings.Directory == "path/to/log");

            Assert.True(settings.GifSettings.PostProcessorEnabled);
            Assert.True(settings.GifSettings.PostProcessorCommand == "path/to/gifsicle some gifsicle args");

            Assert.True(settings.JpegSettings.Quality == 50);
            Assert.True(settings.JpegSettings.PostProcessorEnabled);
            Assert.True(settings.JpegSettings.PostProcessorCommand == "path/to/jpegtran some jpegtran args");

            Assert.True(settings.PngSettings.CompressionLevel == 3);
            Assert.True(settings.PngSettings.PostProcessorEnabled);
            Assert.True(settings.PngSettings.PostProcessorCommand == "path/to/optipng some optipng args");
        }