From 405bd9d8a6fc8a44247bc475410afc1abbc26519 Mon Sep 17 00:00:00 2001 From: James South Date: Sat, 30 Nov 2013 17:39:53 +0000 Subject: [PATCH] Adding extension-less remote url parsing. Former-commit-id: db9412b1317cc3476e08167f6bab6c7b8d97a45e --- .gitignore | 4 +-- .../NET45/Config/ImageProcessorConfig.cs | 18 +++++----- .../NET45/Config/ImageSecuritySection.cs | 21 ++++++++---- .../NET45/Helpers/RemoteFile.cs | 17 ++++++---- .../HttpModules/ImageProcessingModule.cs | 32 ++++++++---------- src/TestWebsites/NET4/Views/Home/Index.cshtml | 1 + src/TestWebsites/NET4/Web.config | 4 ++- .../5/2/51610039b57900ffa3b6444378a9c2a2.jpg | Bin 27264 -> 0 bytes src/TestWebsites/NET4/cache/cache.db | Bin 35840 -> 0 bytes .../Views/Home/Index.cshtml | 1 + .../NET45/Test_Website_NET45/Web.config | 1 + src/packages/repositories.config | 6 ++++ 12 files changed, 64 insertions(+), 41 deletions(-) delete mode 100644 src/TestWebsites/NET4/cache/5/2/51610039b57900ffa3b6444378a9c2a2.jpg delete mode 100644 src/TestWebsites/NET4/cache/cache.db create mode 100644 src/packages/repositories.config diff --git a/.gitignore b/.gitignore index a39e0d3a0..7ee5bda06 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,7 @@ local.properties **/*.dotCover ## TODO: If you have NuGet Package Restore enabled, uncomment this -src/packages/ +##**/packages # Visual C++ cache files ipch/ @@ -165,4 +165,4 @@ pip-log.txt # cached images -**/cache/* \ No newline at end of file +##**/cache \ No newline at end of file diff --git a/src/ImageProcessor.Web/NET45/Config/ImageProcessorConfig.cs b/src/ImageProcessor.Web/NET45/Config/ImageProcessorConfig.cs index 76082ab7d..141538767 100644 --- a/src/ImageProcessor.Web/NET45/Config/ImageProcessorConfig.cs +++ b/src/ImageProcessor.Web/NET45/Config/ImageProcessorConfig.cs @@ -1,9 +1,13 @@ -// ----------------------------------------------------------------------- +// -------------------------------------------------------------------------------------------------------------------- // -// Copyright (c) James South. -// Licensed under the Apache License, Version 2.0. +// Copyright (c) James South. +// Licensed under the Apache License, Version 2.0. // -// ----------------------------------------------------------------------- +// +// Encapsulates methods to allow the retrieval of ImageProcessor settings. +// +// +// -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web.Config { @@ -16,8 +20,6 @@ namespace ImageProcessor.Web.Config using System.Text; using ImageProcessor.Processors; - using ImageProcessor.Web.Helpers; - #endregion /// @@ -111,7 +113,7 @@ namespace ImageProcessor.Web.Config #region Security /// - /// Gets a list of whitelisted url[s] that images can be downloaded from. + /// Gets a list of white listed url[s] that images can be downloaded from. /// public Uri[] RemoteFileWhiteList { @@ -122,7 +124,7 @@ namespace ImageProcessor.Web.Config } /// - /// + /// Gets a list of image extensions for url[s] with no extension. /// public ImageSecuritySection.SafeUrl[] RemoteFileWhiteListExtensions { diff --git a/src/ImageProcessor.Web/NET45/Config/ImageSecuritySection.cs b/src/ImageProcessor.Web/NET45/Config/ImageSecuritySection.cs index 16ec62db7..dac3dd84e 100644 --- a/src/ImageProcessor.Web/NET45/Config/ImageSecuritySection.cs +++ b/src/ImageProcessor.Web/NET45/Config/ImageSecuritySection.cs @@ -1,9 +1,12 @@ -// ----------------------------------------------------------------------- +// -------------------------------------------------------------------------------------------------------------------- // -// Copyright (c) James South. -// Licensed under the Apache License, Version 2.0. +// Copyright (c) James South. +// Licensed under the Apache License, Version 2.0. // -// ----------------------------------------------------------------------- +// +// Represents an image security section within a configuration file. +// +// -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web.Config { @@ -168,9 +171,9 @@ namespace ImageProcessor.Web.Config public class SafeUrl : ConfigurationElement { /// - /// Gets or sets the url of the whitelisted file. + /// Gets or sets the url of the white listed file. /// - /// The url of the whitelisted file. + /// The url of the white listed file. [ConfigurationProperty("url", DefaultValue = "", IsRequired = true)] public Uri Url { @@ -179,6 +182,9 @@ namespace ImageProcessor.Web.Config set { this["url"] = value; } } + /// + /// Gets or sets a value indicating whether the white listed url is extension-less. + /// [ConfigurationProperty("extensionLess", DefaultValue = false, IsRequired = false)] public bool ExtensionLess { @@ -187,6 +193,9 @@ namespace ImageProcessor.Web.Config set { this["extensionLess"] = value; } } + /// + /// Gets or sets the image format for the extension-less url. + /// [ConfigurationProperty("imageFormat", DefaultValue = "", IsRequired = false)] public string ImageFormat { diff --git a/src/ImageProcessor.Web/NET45/Helpers/RemoteFile.cs b/src/ImageProcessor.Web/NET45/Helpers/RemoteFile.cs index bd6cdee9c..13ce1c637 100644 --- a/src/ImageProcessor.Web/NET45/Helpers/RemoteFile.cs +++ b/src/ImageProcessor.Web/NET45/Helpers/RemoteFile.cs @@ -1,9 +1,12 @@ -// ----------------------------------------------------------------------- +// -------------------------------------------------------------------------------------------------------------------- // -// Copyright (c) James South. -// Licensed under the Apache License, Version 2.0. +// Copyright (c) James South. +// Licensed under the Apache License, Version 2.0. // -// ----------------------------------------------------------------------- +// +// Encapsulates methods used to download files from a website address. +// +// -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web.Helpers { @@ -46,12 +49,12 @@ namespace ImageProcessor.Web.Helpers /// /// The white-list of url[s] from which to download remote files. /// - private static readonly Uri[] RemoteFileWhiteList = ImageProcessorConfig.Instance.RemoteFileWhiteList; + public static readonly ImageSecuritySection.SafeUrl[] RemoteFileWhiteListExtensions = ImageProcessorConfig.Instance.RemoteFileWhiteListExtensions; /// /// The white-list of url[s] from which to download remote files. /// - public static readonly ImageSecuritySection.SafeUrl[] RemoteFileWhiteListExtensions = ImageProcessorConfig.Instance.RemoteFileWhiteListExtensions; + private static readonly Uri[] RemoteFileWhiteList = ImageProcessorConfig.Instance.RemoteFileWhiteList; /// /// The length of time, in milliseconds, that a remote file download attempt can last before timing out. @@ -177,6 +180,7 @@ namespace ImageProcessor.Web.Helpers if (value < 0) { + // ReSharper disable once NotResolvedInText throw new ArgumentOutOfRangeException("TimeoutLength"); } @@ -212,6 +216,7 @@ namespace ImageProcessor.Web.Helpers if (value < 0) { + // ReSharper disable once NotResolvedInText throw new ArgumentOutOfRangeException("MaxDownloadSize"); } diff --git a/src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs index eaeaee427..e90b47221 100644 --- a/src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs @@ -8,16 +8,13 @@ // // -------------------------------------------------------------------------------------------------------------------- -using System.Linq; -using System.Security.Cryptography; -using System.Security.Policy; -using System.Text; - namespace ImageProcessor.Web.HttpModules { #region Using using System; + using System.Diagnostics.CodeAnalysis; using System.IO; + using System.Linq; using System.Net; using System.Reflection; using System.Security; @@ -176,6 +173,7 @@ namespace ImageProcessor.Web.HttpModules /// /// The . /// + [SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1122:UseStringEmptyForEmptyStrings", Justification = "Reviewed. Suppression is OK here.")] private async Task ProcessImageAsync(HttpContext context) { HttpRequest request = context.Request; @@ -206,6 +204,7 @@ namespace ImageProcessor.Web.HttpModules requestPath = paths[0]; + // Handle extension-less urls. if (paths.Count() > 2) { queryString = paths[2]; @@ -217,13 +216,12 @@ namespace ImageProcessor.Web.HttpModules } validExtensionLessUrl = RemoteFile.RemoteFileWhiteListExtensions.Any( - x => x.ExtensionLess == true && requestPath.StartsWith(x.Url.AbsoluteUri)); + x => x.ExtensionLess && requestPath.StartsWith(x.Url.AbsoluteUri)); if (validExtensionLessUrl) { extensionLessExtension = RemoteFile.RemoteFileWhiteListExtensions.First( - x => x.ExtensionLess == true && requestPath.StartsWith(x.Url.AbsoluteUri)).ImageFormat; - + x => x.ExtensionLess && requestPath.StartsWith(x.Url.AbsoluteUri)).ImageFormat; } } } @@ -234,7 +232,7 @@ namespace ImageProcessor.Web.HttpModules } // Only process requests that pass our sanitizing filter. - if ((ImageUtils.IsValidImageExtension(requestPath) || validExtensionLessUrl ) && !string.IsNullOrWhiteSpace(queryString)) + if ((ImageUtils.IsValidImageExtension(requestPath) || validExtensionLessUrl) && !string.IsNullOrWhiteSpace(queryString)) { string fullPath = string.Format("{0}?{1}", requestPath, queryString); string imageName = Path.GetFileName(requestPath); @@ -245,14 +243,11 @@ namespace ImageProcessor.Web.HttpModules if (!string.IsNullOrWhiteSpace(urlParameters)) { - //TODO: Add hash for querystring parameters - HashAlgorithm algorithm = MD5.Create(); // SHA1.Create() - var hashCode = algorithm.ComputeHash(Encoding.UTF8.GetBytes(urlParameters)); - StringBuilder sb = new StringBuilder(); - foreach (byte b in hashCode) - sb.Append(b.ToString("X2")); - imageName += sb.ToString(); - fullPath += sb.ToString(); + string hashedUrlParameters = urlParameters.ToMD5Fingerprint(); + + // TODO: Add hash for querystring parameters. + imageName += hashedUrlParameters; + fullPath += hashedUrlParameters; } imageName += "." + extensionLessExtension; @@ -360,7 +355,7 @@ namespace ImageProcessor.Web.HttpModules context.Response.AddHeader("Content-Length", "0"); context.Response.StatusCode = (int)HttpStatusCode.NotModified; context.Response.SuppressContent = true; - + context.Response.AddFileDependency(context.Server.MapPath(cache.GetVirtualCachedPath())); this.SetHeaders(context, (string)context.Items[CachedResponseTypeKey]); if (!isRemote) @@ -400,6 +395,7 @@ namespace ImageProcessor.Web.HttpModules HttpCachePolicy cache = response.Cache; cache.SetCacheability(HttpCacheability.Public); cache.VaryByHeaders["Accept-Encoding"] = true; + cache.SetLastModifiedFromFileDependencies(); int maxDays = DiskCache.MaxFileCachedDuration; diff --git a/src/TestWebsites/NET4/Views/Home/Index.cshtml b/src/TestWebsites/NET4/Views/Home/Index.cshtml index 2efa21511..c1da5a373 100644 --- a/src/TestWebsites/NET4/Views/Home/Index.cshtml +++ b/src/TestWebsites/NET4/Views/Home/Index.cshtml @@ -100,6 +100,7 @@

Remote

@**@ + diff --git a/src/TestWebsites/NET4/Web.config b/src/TestWebsites/NET4/Web.config index 1335fd3b2..fbc37ab45 100644 --- a/src/TestWebsites/NET4/Web.config +++ b/src/TestWebsites/NET4/Web.config @@ -71,7 +71,9 @@ - + + + diff --git a/src/TestWebsites/NET4/cache/5/2/51610039b57900ffa3b6444378a9c2a2.jpg b/src/TestWebsites/NET4/cache/5/2/51610039b57900ffa3b6444378a9c2a2.jpg deleted file mode 100644 index ead6f1731dcb8ad36c4dedab0468c87a06391151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27264 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
P@q?Jc&iZjzWIxPwrAO+#0D?rQPNZS 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 diff --git a/src/TestWebsites/NET4/cache/cache.db b/src/TestWebsites/NET4/cache/cache.db deleted file mode 100644 index c1e11601ebaf1488e90cd881e0f36c93dc88e57e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35840 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 @**@ + diff --git a/src/TestWebsites/NET45/Test_Website_NET45/Web.config b/src/TestWebsites/NET45/Test_Website_NET45/Web.config index c2a70cb67..1a9c7f035 100644 --- a/src/TestWebsites/NET45/Test_Website_NET45/Web.config +++ b/src/TestWebsites/NET45/Test_Website_NET45/Web.config @@ -67,6 +67,7 @@ + diff --git a/src/packages/repositories.config b/src/packages/repositories.config new file mode 100644 index 000000000..eefad5d30 --- /dev/null +++ b/src/packages/repositories.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file