コード例 #1
0
        public ActionResult AddDeletedUrl(string oldUrl)
        {
            CheckAccess();


            // add redirect to dds with state "deleted"
            var redirect = new CustomRedirect();

            redirect.OldUrl = oldUrl;
            redirect.State  = Convert.ToInt32(DataStoreHandler.State.Deleted);
            DataStoreHandler dsHandler = new DataStoreHandler();

            dsHandler.SaveCustomRedirect(redirect);
            DataStoreEventHandlerHook.DataStoreUpdated();

            // delete rows from DB
            var dbAccess = DataAccessBaseEx.GetWorker();

            dbAccess.DeleteRowsForRequest(oldUrl);

            //
            List <CustomRedirect> customRedirectList = GetDeletedUrls();

            DataStoreEventHandlerHook.DataStoreUpdated();
            return(Deleted());
        }
コード例 #2
0
        public void UnignoreRedirect(string oldUrl, int siteId)
        {
            // Get hold of the datastore
            DynamicDataStore store = DataStoreFactory.GetStore(typeof(CustomRedirect));

            //find object with matching property "OldUrl"
            var urlEncode = HttpUtility.UrlEncode(oldUrl);

            if (urlEncode != null)
            {
                var savedUrl = urlEncode.ToLower().Replace("%2f", "/");
                var filters  = new Dictionary <string, object>
                {
                    { OldUrlPropertyName, savedUrl.ToLower() },
                    { SiteIdPropertyName, siteId }
                };
                CustomRedirect match = store.Find <CustomRedirect>(filters).SingleOrDefault();
                if (match != null)
                {
                    // log request to database - if logging is turned on.
                    if (Configuration.Configuration.Logging == LoggerMode.On)
                    {
                        store.Delete(match);
                        // Safe logging
                        RequestLogger.Instance.LogRequest(savedUrl, string.Empty, siteId);
                    }
                }
            }
        }
コード例 #3
0
ファイル: Suggestion.cs プロジェクト: stgaup/404handler
 public Suggestion(CustomRedirect customRedirect, int pageNumber, int pageSize, string searchWord)
 {
     CustomRedirect = customRedirect;
     PageNumber     = pageNumber;
     PageSize       = pageSize;
     SearchWord     = searchWord;
 }
コード例 #4
0
        public void SaveCustomRedirect(CustomRedirect currentCustomRedirect)
        {
            // Get hold of the datastore
            DynamicDataStore store = DataStoreFactory.GetStore(typeof(CustomRedirect));
            //check if there is an exisiting object with matching property "OldUrl"
            Dictionary <string, object> filter = new Dictionary <string, object>
            {
                { OldUrlPropertyName, currentCustomRedirect.OldUrl.ToLower() },
                { SiteIdPropertyName, currentCustomRedirect.SiteId }
            };
            CustomRedirect match = store.Find <CustomRedirect>(filter).SingleOrDefault();

            if (match == null)
            {
                //check if there is an exisiting object with "NewUrl" set to this property "OldUrl", and change that one instead
                filter = new Dictionary <string, object>
                {
                    { NewUrlPropertyName, currentCustomRedirect.OldUrl.ToLower() },
                    { SiteIdPropertyName, currentCustomRedirect.SiteId }
                };
                match = store.Find <CustomRedirect>(filter).SingleOrDefault();
            }

            //if there is a match, replace the value.
            if (match != null)
            {
                store.Save(currentCustomRedirect, match.Id);
            }
            else
            {
                store.Save(currentCustomRedirect);
            }
        }
コード例 #5
0
        private bool TryMatch(HttpProcessingContext context, CustomRedirect redirect, out string destinationUrl)
        {
            var originalUrl = context.Request.Url.ToString();

            destinationUrl = null;

            if (redirect.MatchByRegex)
            {
                if (Regex.IsMatch(originalUrl, redirect.From, RegexOptions.IgnoreCase))
                {
                    destinationUrl = Regex.Replace(originalUrl, redirect.From, redirect.To, RegexOptions.IgnoreCase);
                    return true;
                }
            }
            else
            {
                if (redirect.From.StartsWith("/"))
                {
                    originalUrl = context.Request.Url.PathAndQuery;
                }

                if (originalUrl.Equals(redirect.From, StringComparison.OrdinalIgnoreCase))
                {
                    destinationUrl = redirect.To;
                    return true;
                }
            }

            return false;
        }
コード例 #6
0
        public ActionResult AddDeletedUrl(string oldUrl, int siteId = 0)
        {
            CheckAccess();
            if (siteId <= 0)
            {
                siteId = DataHandler.GetCurrentSiteId();
            }

            // add redirect to dds with state "deleted"
            var redirect = new CustomRedirect
            {
                OldUrl = oldUrl,
                SiteId = siteId,
                State  = Convert.ToInt32(DataStoreHandler.State.Deleted)
            };
            DataStoreHandler dsHandler = new DataStoreHandler();

            dsHandler.SaveCustomRedirect(redirect);
            DataStoreEventHandlerHook.DataStoreUpdated();

            // delete rows from DB
            var dbAccess = DataAccessBaseEx.GetWorker();

            dbAccess.DeleteRowsForRequest(oldUrl, siteId);

            //TODO why this?
            List <CustomRedirect> customRedirectList = GetDeletedUrls(siteId);

            DataStoreEventHandlerHook.DataStoreUpdated();
            return(Deleted(siteId));
        }
コード例 #7
0
        public ActionResult IgnoreRedirect(string oldUrl, int pageNumber, string searchWord, int pageSize)
        {
            CheckAccess();
            // delete rows from DB
            var dbAccess = DataAccessBaseEx.GetWorker();

            dbAccess.DeleteRowsForRequest(oldUrl);

            // add redirect to dds with state "ignored"
            var redirect = new CustomRedirect
            {
                OldUrl = oldUrl,
                NewUrl = string.Empty,
                State  = Convert.ToInt32(RedirectState.Ignored)
            };

            _redirectsService.AddOrUpdate(redirect);
            CustomRedirectHandler.ClearCache();

            List <CustomRedirect> customRedirectList = GetSuggestions(searchWord);
            string actionInfo = string.Format(LocalizationService.Current.GetString("/gadget/redirects/ignoreredirect"), oldUrl);
            RedirectIndexViewData viewData = GetRedirectIndexViewData(pageNumber, customRedirectList, actionInfo, searchWord, pageSize, true, true);

            if (customRedirectList.Count > 0)
            {
                viewData.HighestSuggestionValue = customRedirectList.First().NotfoundErrorCount;
                viewData.LowestSuggestionValue  = customRedirectList.Last().NotfoundErrorCount;
            }
            return(View("Index", viewData));
        }
コード例 #8
0
        public ActionResult AddDeletedUrl(string oldUrl)
        {
            CheckAccess();

            // add redirect to dds with state "deleted"
            var redirect = new CustomRedirect
            {
                OldUrl = oldUrl,
                NewUrl = string.Empty,
                State  = Convert.ToInt32(RedirectState.Deleted)
            };

            _redirectsService.AddOrUpdate(redirect);
            CustomRedirectHandler.ClearCache();

            // delete rows from DB
            var dbAccess = DataAccessBaseEx.GetWorker();

            dbAccess.DeleteRowsForRequest(oldUrl);

            //
            List <CustomRedirect> customRedirectList = GetDeletedUrls();

            CustomRedirectHandler.ClearCache();
            return(Deleted());
        }
コード例 #9
0
        public ActionResult IgnoreRedirect(string oldUrl, int pageNumber, string searchWord, int pageSize)
        {
            CheckAccess();
            // delete rows from DB
            var dbAccess = DataAccessBaseEx.GetWorker();

            dbAccess.DeleteRowsForRequest(oldUrl);

            // add redirect to dds with state "ignored"
            var redirect = new CustomRedirect();

            redirect.OldUrl = oldUrl;
            redirect.State  = Convert.ToInt32(DataStoreHandler.State.Ignored);
            DataStoreHandler dsHandler = new DataStoreHandler();

            dsHandler.SaveCustomRedirect(redirect);
            DataStoreEventHandlerHook.DataStoreUpdated();

            List <CustomRedirect> customRedirectList = GetSuggestions(searchWord);
            string actionInfo = string.Format(LocalizationService.Current.GetString("/gadget/redirects/ignoreredirect"), oldUrl);
            RedirectIndexViewData viewData = GetRedirectIndexViewData(pageNumber, customRedirectList, actionInfo, searchWord, pageSize, true, true);

            viewData.HighestSuggestionValue = customRedirectList.First().NotfoundErrorCount;
            viewData.LowestSuggestionValue  = customRedirectList.Last().NotfoundErrorCount;
            return(View("Index", viewData));
        }
コード例 #10
0
 public void InitView(CustomRedirect entity)
 {
     RedirectMode.SelectedValue = entity.RedirectMode.ToString();
     From.Text = entity.From;
     To.Text = entity.To;
     MatchByRegex.Checked = entity.MatchByRegex;
     Priority.Text = entity.Priority.ToString();
     IsEnabled.Checked = entity.IsEnabled;
 }
コード例 #11
0
 public void UpdateObject(CustomRedirect entity)
 {
     entity.RedirectMode = (RedirectMode)Enum.Parse(typeof(RedirectMode), RedirectMode.SelectedValue);
     entity.From = From.Text.Trim();
     entity.To = To.Text.Trim();
     entity.MatchByRegex = MatchByRegex.Checked;
     entity.Priority = Convert.ToInt32(Priority.Text.Trim());
     entity.IsEnabled = IsEnabled.Checked;
 }
コード例 #12
0
        public void Find_should_not_cause_redirect_loop(string fromUrl, string toUrl, string notFoundUrl)
        {
            var redirect = new CustomRedirect(fromUrl, toUrl);

            _sut.Add(redirect);

            var actual = _sut.Find(notFoundUrl.ToUri());

            Assert.Null(actual);
        }
コード例 #13
0
        public void Find_should_append_sub_segment(string fromUrl, string toUrl, string notFoundUrl, string expected)
        {
            var redirect = new CustomRedirect(fromUrl, toUrl);

            _sut.Add(redirect);

            var actual = _sut.Find(notFoundUrl.ToUri());

            Assert.Equal(expected, actual.NewUrl);
        }
コード例 #14
0
        public void HandleRequest_returns_redirect_when_redirect_found_with_saved_state()
        {
            var redirect = new CustomRedirect("http://example.com/found", (int)DataStoreHandler.State.Saved, 1);

            WhenRedirectFound(redirect);

            _sut.HandleRequest(DefaultOldUri, new Uri("http://example.com/path"), out var actual);

            Assert.Equal(redirect.OldUrl, actual.OldUrl);
        }
コード例 #15
0
        public void HandleRequest_returns_redirect_when_redirect_found_with_deleted_state()
        {
            var redirect = new CustomRedirect("http://example.com/missing", (int)RedirectState.Deleted, 1);

            WhenRedirectFound(redirect);

            _sut.HandleRequest(DefaultOldUri, new Uri("http://example.com/path"), out var actual);

            Assert.Equal(redirect.OldUrl, actual.OldUrl);
        }
コード例 #16
0
        public void HandleRequest_returns_true_when_redirect_found_with_deleted_state()
        {
            var redirect = new CustomRedirect("http://example.com/missing", (int)DataStoreHandler.State.Deleted, 1);

            WhenRedirectFound(redirect);

            var actual = _sut.HandleRequest(DefaultOldUri, new Uri("http://example.com/path"), out var _);

            Assert.True(actual);
        }
コード例 #17
0
        public void Find_finds_redirect(string storedUrl, string notFoundUrl)
        {
            var redirect = new CustomRedirect(storedUrl, DefaultNewUri.ToString());

            _sut.Add(redirect);

            var actual = _sut.Find(notFoundUrl.ToUri());

            Assert.Equal(redirect.NewUrl, actual.NewUrl);
        }
コード例 #18
0
        public void HandleRequest_returns_true_when_redirect_found_with_saved_state()
        {
            var redirect = new CustomRedirect("http://example.com/found", (int)RedirectState.Saved, 1);

            WhenRedirectFound(redirect);

            var actual = _sut.HandleRequest(DefaultOldUri, new Uri("http://example.com/path"), out var _);

            Assert.True(actual);
        }
コード例 #19
0
ファイル: Custom404Handler.cs プロジェクト: gr3p/404handler
        public static bool HandleRequest(string referer, Uri urlNotFound, out CustomRedirect foundRedirect)
        {
            string pathAndQuery = urlNotFound.PathAndQuery;
            int    siteId       = DataHandler.GetSiteIdFromUrl(urlNotFound.Host);

            foundRedirect = null;

            if (siteId == -1)
            {
                Logger.Error("siteId is -1; couldn't find ");
                return(false);
            }

            // Try to match the requested url by matching it
            // to the static list of custom redirects
            CustomRedirectHandler fnfHandler = CustomRedirectHandler.Current;
            CustomRedirect        redirect   = fnfHandler.CustomRedirects.Find(urlNotFound);


            if (redirect == null)
            {
                redirect = fnfHandler.CustomRedirects.FindInProviders(urlNotFound.AbsoluteUri);
            }

            if (redirect != null)
            {
                // Url has been deleted from this site
                if (redirect.State.Equals((int)DataStoreHandler.State.Deleted))
                {
                    foundRedirect = redirect;
                    return(true);
                }

                if (redirect.State.Equals((int)DataStoreHandler.State.Saved))
                {
                    // Found it, however, we need to make sure we're not running in an
                    // infinite loop. The new url must not be the referrer to this page
                    if (string.Compare(redirect.NewUrl, pathAndQuery, StringComparison.InvariantCultureIgnoreCase) != 0)
                    {
                        foundRedirect = redirect;
                        return(true);
                    }
                }
            }
            else
            {
                // log request to database - if logging is turned on.
                if (Configuration.Configuration.Logging == LoggerMode.On)
                {
                    // Safe logging
                    RequestLogger.Instance.LogRequest(pathAndQuery, referer, siteId);
                }
            }
            return(false);
        }
コード例 #20
0
        public void Add_allows_similar_culture_specific_urls()
        {
            var first = new CustomRedirect("/digtalpaent", "/");

            _sut.Add(first);
            var second = new CustomRedirect("/digtalpænt", "/");

            var ex = Record.Exception(() => _sut.Add(second));

            Assert.Null(ex);
        }
コード例 #21
0
        public void Find_should_not_cause_redirect_loop(string notFoundUrl)
        {
            var redirect = new CustomRedirect("/en/about-us/", "/en/about-us/news-events");

            _sut.Add(redirect);

            var first  = _sut.Find(notFoundUrl.ToUri(), DefaultReferrer);
            var second = _sut.Find(first.NewUrl.ToUri(), notFoundUrl.ToUri());

            Assert.Null(second);
        }
コード例 #22
0
        public void Find_does_not_add_trailing_slash()
        {
            var expected = "https://domain.mydomain.dk/thisismypdf.pdf";
            var redirect = new CustomRedirect("/something", expected);

            _sut.Add(redirect);

            var actual = _sut.Find(redirect.OldUrl.ToUri());

            Assert.Equal(expected, actual.NewUrl);
        }
コード例 #23
0
        public void Find_should_find_redirect_with_special_chars()
        {
            var requestUrl = "/old/noël";
            var newUrl     = "/new/noël";
            var redirect   = new CustomRedirect(requestUrl, newUrl);

            _sut.Add(redirect);

            var actual = _sut.Find(requestUrl.ToUri());

            Assert.Equal(redirect.NewUrl, actual.NewUrl);
        }
コード例 #24
0
        public void Find_finds_redirect_and_appends_relative_path_when_not_found_url_starts_with_stored_url()
        {
            var storedUrl = "/old";
            var redirect  = new CustomRedirect(storedUrl, DefaultNewUri.PathAndQuery);
            var newRedirectUrlWithPath = $"{redirect.NewUrl}/page";

            _sut.Add(redirect);

            var actual = _sut.Find($"{storedUrl}/page".ToUri());

            Assert.Equal(newRedirectUrlWithPath, actual.NewUrl);
        }
コード例 #25
0
        public void Find_should_not_throw_on_query_string_prefix_for_same_segment()
        {
            var requestUrl = "/old/?param1=value1&param2=value2";
            var storedUrl  = "/old/?param1=value1";
            var redirect   = new CustomRedirect(storedUrl, DefaultNewUri.PathAndQuery);

            _sut.Add(redirect);

            var actual = _sut.Find(requestUrl.ToUri());

            Assert.NotNull(actual);
        }
コード例 #26
0
        public void Find_finds_redirect_with_sub_segment_ignoring_query_string()
        {
            var requestUrl = "/old/segment/?param1=value1&param2=value2";
            var storedUrl  = "/old/";
            var redirect   = new CustomRedirect(storedUrl, DefaultNewUri.PathAndQuery);

            _sut.Add(redirect);

            var actual = _sut.Find(requestUrl.ToUri());

            Assert.NotNull(actual);
        }
コード例 #27
0
        public void Find_gives_nullreferenceexception_with_partial_deleted_hit()
        {
            var storedUrl   = "/contentassets";
            var requesttUrl = "/contentassets/moreurl";
            var redirect    = new CustomRedirect(storedUrl, (int)RedirectState.Deleted, 1);

            _sut.Add(redirect);

            var actual = _sut.Find(requesttUrl.ToUri());

            Assert.NotNull(actual);
        }
コード例 #28
0
        /// <summary>
        /// Delete CustomObject object from Data Store that has given "OldUrl" property
        /// </summary>
        /// <param name="currentCustomRedirect"></param>
        public void DeleteCustomRedirect(string oldUrl)
        {
            // Get hold of the datastore
            DynamicDataStore store = DataStoreFactory.GetStore(typeof(CustomRedirect));

            //find object with matching property "OldUrl"
            CustomRedirect match = store.Find <CustomRedirect>(OLD_URL_PROPERTY_NAME, oldUrl.ToLower()).SingleOrDefault();

            if (match != null)
            {
                store.Delete(match);
            }
        }
コード例 #29
0
        public void Handle_redirects_when_redirect_url_found()
        {
            var redirect = new CustomRedirect("http://example.com/missing", (int)DataStoreHandler.State.Saved, 1)
            {
                NewUrl = "http://example.com/page"
            };

            WhenRedirectUrlFound(redirect);

            _sut.Handle(_httpContext);

            AssertRedirected(_httpContext, redirect);
        }
コード例 #30
0
        public void HandleRequest_returns_false_when_redirect_is_same_as_not_found()
        {
            var sameUri  = new Uri("http://example.com/same");
            var redirect = new CustomRedirect(sameUri.ToString(), (int)DataStoreHandler.State.Saved, 1)
            {
                NewUrl = sameUri.PathAndQuery
            };

            WhenRedirectFound(redirect);

            var actual = _sut.HandleRequest(DefaultOldUri, sameUri, out var _);

            Assert.False(actual);
        }
コード例 #31
0
        public void Add_updates_already_added_redirect()
        {
            var redirect = new CustomRedirect(DefaultOldUri.PathAndQuery, DefaultNewUri.ToString());

            _sut.Add(redirect);
            var updatedUrl      = "http://example.com/expected";
            var updatedRedirect = new CustomRedirect(DefaultOldUri.PathAndQuery, updatedUrl);

            _sut.Add(updatedRedirect);

            var actual = _sut.Find(DefaultOldUri);

            Assert.Equal(updatedUrl, actual.NewUrl);
        }
コード例 #32
0
        public void Find_finds_redirect_when_not_found_url_starts_with_stored_url_and_WildCardSkipAppend_enabled()
        {
            var storedUrl = "/old";
            var redirect  = new CustomRedirect(storedUrl, DefaultNewUri.PathAndQuery)
            {
                WildCardSkipAppend = true
            };

            _sut.Add(redirect);

            var actual = _sut.Find($"{storedUrl}/page".ToUri());

            Assert.Equal(redirect.NewUrl, actual.NewUrl);
        }
コード例 #33
0
        public void Find_doesnt_find_redirect_when_not_found_url_starts_with_stored_url_and_redirect_is_ignored()
        {
            var storedUrl = "/old";
            var redirect  = new CustomRedirect(storedUrl, DefaultNewUri.PathAndQuery)
            {
                State = (int)RedirectState.Ignored
            };

            _sut.Add(redirect);

            var actual = _sut.Find($"{storedUrl}/page".ToUri());

            Assert.Null(actual);
        }
コード例 #34
0
        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            if (RedirectId > 0)
            {
                var redirect = NhSession.Get<CustomRedirect>(RedirectId);
                UpdateObject(redirect);
            }
            else
            {
                var redirect = new CustomRedirect();
                UpdateObject(redirect);
                NhSession.Save(redirect);
            }

            NhSession.Commit();

            Response.Redirect("CustomRedirectList.aspx");
        }