diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..9c577d2 --- /dev/null +++ b/fly.toml @@ -0,0 +1,38 @@ +# fly.toml file generated for tp-blog-2 on 2022-08-26T12:21:08-04:00 + +app = "tp-blog-2" +kill_signal = "SIGINT" +kill_timeout = 5 +processes = [] + +[env] + +[experimental] + allowed_public_ports = [] + auto_rollback = true + +[[services]] + http_checks = [] + internal_port = 80 + processes = ["app"] + protocol = "tcp" + script_checks = [] + [services.concurrency] + hard_limit = 25 + soft_limit = 20 + type = "connections" + + [[services.ports]] + force_https = true + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "1s" + interval = "15s" + restart_limit = 0 + timeout = "2s" diff --git a/src/TerribleDev.Blog.Web/Controllers/HomeController.cs b/src/TerribleDev.Blog.Web/Controllers/HomeController.cs index c10e9be..a3b0903 100644 --- a/src/TerribleDev.Blog.Web/Controllers/HomeController.cs +++ b/src/TerribleDev.Blog.Web/Controllers/HomeController.cs @@ -73,10 +73,16 @@ namespace TerribleDev.Blog.Web.Controllers { return this.RedirectPermanent($"/{postUrl}"); } + // case sensitive lookup if(postCache.UrlToPost.TryGetValue(postUrl, out var currentPost)) { return View("Post", model: new PostViewModel() { Post = currentPost }); } + // case insensitive lookup on post + if(postCache.CaseInsensitiveUrlToPost.TryGetValue(postUrl, out var caseInsensitivePost)) + { + return View("Post", model: new PostViewModel() { Post = caseInsensitivePost }); + } if(postCache.LandingPagesUrl.TryGetValue(postUrl, out var landingPage)) { return View("Post", model: new PostViewModel() { Post = landingPage }); diff --git a/src/TerribleDev.Blog.Web/Factories/BlogCacheFactory.cs b/src/TerribleDev.Blog.Web/Factories/BlogCacheFactory.cs index 5c6fec6..3b9ef39 100644 --- a/src/TerribleDev.Blog.Web/Factories/BlogCacheFactory.cs +++ b/src/TerribleDev.Blog.Web/Factories/BlogCacheFactory.cs @@ -18,6 +18,7 @@ namespace TerribleDev.Blog.Web.Factories var orderedPosts = rawPosts.OrderByDescending(a => a.PublishDate); var posts = new List(orderedPosts); var urlToPosts = new Dictionary(); + var caseInsensitiveUrlToPost = new Dictionary(StringComparer.OrdinalIgnoreCase); var tagsToPost = new Dictionary>(); var postsByPage = new Dictionary>(); var syndicationPosts = new List(); @@ -30,6 +31,7 @@ namespace TerribleDev.Blog.Web.Factories { var castedPost = post as Post; urlToPosts.Add(post.UrlWithoutPath, castedPost); + caseInsensitiveUrlToPost.Add(post.UrlWithoutPath.ToLower(), castedPost); syndicationPosts.Add(castedPost.ToSyndicationItem()); blogPostsLD.Add(post.Content.JsonLD); foreach (var tag in castedPost.ToNormalizedTagList()) @@ -122,8 +124,8 @@ namespace TerribleDev.Blog.Web.Factories BlogLD = ld, SiteLD = website, BlogLDString = ld.ToHtmlEscapedString().Replace("https://schema.org", "https://schema.org/true"), - SiteLDString = website.ToHtmlEscapedString().Replace("https://schema.org", "https://schema.org/true") - + SiteLDString = website.ToHtmlEscapedString().Replace("https://schema.org", "https://schema.org/true"), + CaseInsensitiveUrlToPost = caseInsensitiveUrlToPost }; } } diff --git a/src/TerribleDev.Blog.Web/Models/PostCache.cs b/src/TerribleDev.Blog.Web/Models/PostCache.cs index 7fa647f..f32d720 100644 --- a/src/TerribleDev.Blog.Web/Models/PostCache.cs +++ b/src/TerribleDev.Blog.Web/Models/PostCache.cs @@ -8,6 +8,7 @@ namespace TerribleDev.Blog.Web.Models public IList PostsAsLists { get; set;} public IDictionary> TagsToPosts { get; set; } public IDictionary UrlToPost { get; set; } + public IDictionary CaseInsensitiveUrlToPost { get; set; } public IDictionary> PostsByPage { get; set; } public IList PostsAsSyndication { get; set; }