Exemplo n.º 1
0
 public void SaveRedirect(string oldUrl, string newUrl, string skipWildCardAppend)
 {
     Logger.Debug("Adding redirect: '{0}' -> '{1}'", oldUrl, newUrl);
     // Get hold of the datastore
     _redirectsService.AddOrUpdate(new CustomRedirect(oldUrl.Trim(), newUrl.Trim(), skipWildCardAppend == null ? false : true));
     CustomRedirectHandler.ClearCache();
 }
        public ActionResult Index(int?pageNumber, string searchWord, int?pageSize, bool?isSuggestions, bool?showRedirects)
        {
            CheckAccess();
            CustomRedirectHandler.ReloadCustomRedirectHandler();
            if (!string.IsNullOrEmpty(CustomRedirectHandler.CustomRedirectHandlerException))
            {
                return(Content("An error has occured in the dynamic data store: " + CustomRedirectHandler.CustomRedirectHandlerException));
            }
            var suggestion = false;;
            List <CustomRedirect> customRedirectList;

            if (isSuggestions.HasValue && isSuggestions.Value)
            {
                customRedirectList = GetSuggestions(searchWord);

                suggestion = true;
                var viewData = GetRedirectIndexViewData(pageNumber, customRedirectList, GetSearchResultInfo(searchWord, customRedirectList.Count, suggestion), searchWord, pageSize, suggestion, showRedirects);
                if (customRedirectList != null && customRedirectList.Count > 0)
                {
                    viewData.HighestSuggestionValue = customRedirectList.First().NotfoundErrorCount;
                    viewData.LowestSuggestionValue  = customRedirectList.Last().NotfoundErrorCount;
                }
                return(View("Index", viewData));
            }
            else
            {
                if (!(showRedirects.HasValue && showRedirects.Value))
                {
                    customRedirectList = new List <CustomRedirect>();
                    return(View("Index", GetRedirectIndexViewData(pageNumber, customRedirectList, LocalizationService.Current.GetString("/gadget/redirects/inactiveredirects"), searchWord, pageSize, suggestion, showRedirects)));
                }
                customRedirectList = GetData(searchWord);
            }
            return(View("Index", GetRedirectIndexViewData(pageNumber, customRedirectList, GetSearchResultInfo(searchWord, customRedirectList.Count, suggestion), searchWord, pageSize, suggestion, showRedirects)));
        }
Exemplo n.º 3
0
        public ActionResult MigrateDdsToSql()
        {
            CheckAccess();

            var ddsRequests = _ddsRedirectRepository.GetAll().ToList();
            var count       = ddsRequests.Count;

            foreach (var ddsRequest in ddsRequests)
            {
                _redirectsService.AddOrUpdate(new CustomRedirect
                {
                    State              = ddsRequest.State,
                    NewUrl             = ddsRequest.NewUrl,
                    OldUrl             = ddsRequest.OldUrl,
                    WildCardSkipAppend = ddsRequest.WildCardSkipAppend
                });

                _ddsRedirectRepository.Delete(ddsRequest);
            }

            ViewData["information"] = $"Migrated {count} redirects from DDS to SQL";

            CustomRedirectHandler.ClearCache();
            return(View("Administer"));
        }
Exemplo n.º 4
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));
        }
Exemplo n.º 5
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());
        }
Exemplo n.º 6
0
        public FileUploadJsonResult ImportRedirects(HttpPostedFileBase xmlfile)
        {
            CheckAccess();

            if (!IsXml(xmlfile))
            {
                return(new FileUploadJsonResult
                {
                    Data = new { message = LocalizationService.Current.GetString("/gadget/redirects/invalidxmlfile") }
                });
            }

            // Read all redirects from xml file
            RedirectsXmlParser parser = new RedirectsXmlParser(xmlfile.InputStream);
            // Save all redirects from xml file
            CustomRedirectCollection redirects = parser.Load();
            string message;

            if (redirects != null || redirects.Count() != 0)
            {
                _redirectsService.AddOrUpdate(redirects);
                CustomRedirectHandler.ClearCache();
                message = string.Format(LocalizationService.Current.GetString("/gadget/redirects/importsuccess"), redirects.Count());
            }
            else
            {
                message = LocalizationService.Current.GetString("/gadget/redirects/importnone");
            }
            return(new FileUploadJsonResult {
                Data = new { message = message }
            });
        }
        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);
            CustomRedirectHandler.ClearCache();

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

            dbAccess.DeleteRowsForRequest(oldUrl);

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

            CustomRedirectHandler.ClearCache();
            return(Deleted());
        }
Exemplo n.º 8
0
 private static void dataStoreInvalidationEvent_Raised(object sender, EventNotificationEventArgs e)
 {
     _log.Debug("dataStoreInvalidationEvent '{2}' handled - raised by '{0}' on '{1}'", e.RaiserId, Environment.MachineName, e.EventId);
     _log.Debug("Begin: Clearing cache on '{0}'", Environment.MachineName);
     CustomRedirectHandler.ClearCache();
     _log.Debug("End: Clearing cache on '{0}'", Environment.MachineName);
 }
Exemplo n.º 9
0
 public ActionResult DeleteAllRedirects()
 {
     CheckAccess();
     _redirectsService.DeleteAll();
     CustomRedirectHandler.ClearCache();
     ViewData["information"] = LocalizationService.Current.GetString("/gadget/redirects/redirectsdeleted");
     return(View("Administer"));
 }
        public void SaveRedirect(string oldUrl, string newUrl, string skipWildCardAppend)
        {
            Logger.Debug("Adding redirect: '{0}' -> '{1}'", oldUrl, newUrl);
            // Get hold of the datastore
            DataStoreHandler dsHandler = new DataStoreHandler();

            dsHandler.SaveCustomRedirect(new CustomRedirect(oldUrl.Trim(), newUrl.Trim(), skipWildCardAppend == null ? false : true));
            CustomRedirectHandler.ClearCache();
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        public ActionResult Delete(string oldUrl, int?pageNumber, string searchWord, int?pageSize)
        {
            CheckAccess();

            Logger.Debug("Deleting redirect: '{0}'", oldUrl);

            _redirectsService.DeleteByOldUrl(oldUrl);
            CustomRedirectHandler.ClearCache();
            List <CustomRedirect> customRedirectList = GetData(searchWord);

            //Make sure that the searchinfo is contained after an item has been deleted - if there is any.
            return(View("Index", GetRedirectIndexViewData(pageNumber, customRedirectList, GetSearchResultInfo(searchWord, customRedirectList.Count, false), searchWord, pageSize, false, true)));
        }
Exemplo n.º 13
0
        public FileUploadJsonResult ImportDeleted(HttpPostedFileBase txtFile)
        {
            CheckAccess();

            if (!IsTxt(txtFile))
            {
                return(new FileUploadJsonResult
                {
                    Data = new { message = LocalizationService.Current.GetString("/gadget/redirects/invalidtxtfile") }
                });
            }

            var redirects = new CustomRedirectCollection();

            using (var streamReader = new StreamReader(txtFile.InputStream))
            {
                while (streamReader.Peek() >= 0)
                {
                    var url = streamReader.ReadLine();
                    if (!string.IsNullOrEmpty(url))
                    {
                        redirects.Add(new CustomRedirect
                        {
                            OldUrl = url,
                            NewUrl = string.Empty,
                            State  = (int)RedirectState.Deleted
                        });
                    }
                }
            }
            string message;

            if (redirects.Count() != 0)
            {
                _redirectsService.AddOrUpdate(redirects);
                CustomRedirectHandler.ClearCache();
                message = string.Format(LocalizationService.Current.GetString("/gadget/redirects/importdeletedsuccess"), redirects.Count());
            }
            else
            {
                message = LocalizationService.Current.GetString("/gadget/redirects/importnone");
            }
            return(new FileUploadJsonResult {
                Data = new { message = message }
            });
        }
        public void Initialize(InitializationEngine context)
        {
            _log.Debug("Initializing 404 handler version check");
            DataAccessBaseEx dba = DataAccessBaseEx.GetWorker();
            int version          = dba.Check404Version();

            if (version != Configuration.Configuration.CURRENT_VERSION)
            {
                _log.Debug("Older version found. Version nr. :" + version);
                Upgrader.Start(version);
            }
            else
            {
                Upgrader.Valid = true;
            }

            // Load all custom redirects into memory
            CustomRedirectHandler handler = CustomRedirectHandler.Current;
        }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var referer     = NotFoundPageUtil.GetReferer(filterContext.HttpContext);
            var urlNotFound = NotFoundPageUtil.GetUrlNotFound(filterContext.HttpContext);

            if (urlNotFound == null)
            {
                return;
            }

            if (Log.IsDebugEnabled)
            {
                Log.DebugFormat("Trying to handle 404 for \"{0}\" (Referrer: \"{1}\")", urlNotFound, referer);
            }

            CustomRedirectHandler current  = CustomRedirectHandler.Current;
            CustomRedirect        redirect = current.CustomRedirects.Find(HttpUtility.HtmlEncode(urlNotFound.AbsoluteUri));
            string oldUrl = HttpUtility.HtmlEncode(urlNotFound.PathAndQuery);

            if (redirect == null)
            {
                redirect = current.CustomRedirects.Find(oldUrl);
            }

            if (redirect != null)
            {
                if (redirect.State.Equals(0) && (string.Compare(redirect.NewUrl, oldUrl, StringComparison.InvariantCultureIgnoreCase) != 0))
                {
                    Log.Info(string.Format("404 Custom Redirect: To: '{0}' (from: '{1}')", redirect.NewUrl, oldUrl));
                    filterContext.Result = new RedirectResult(redirect.NewUrl, true);
                    return;
                }
            }
            else if ((Configuration.Configuration.Logging == LoggerMode.On) && Upgrader.Valid)
            {
                Logger.LogRequest(oldUrl, referer);
            }

            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            filterContext.HttpContext.Response.StatusCode             = 0x194;
            filterContext.HttpContext.Response.Status = "404 File not found";
        }
Exemplo n.º 16
0
        /// <summary>
        /// Copied from BVNetwork.FileNotFound.NotFoundPageUtil.HandleOnLoad(Page page, Uri urlNotFound, string referer)
        /// </summary>
        /// <param name="context"></param>
        /// <param name="urlNotFound"></param>
        /// <param name="referer"></param>
        protected void HandleOnLoad(HttpContextBase context, Uri urlNotFound, Uri referer)
        {
            // TODO: This copy should be removed. The 404 should be extended to work without
            // a Page object.

            if (_log.IsDebugEnabled())
            {
                _log.Debug("Trying to handle 404 for \"{0}\" (Referrer: \"{1}\")", urlNotFound, referer);
            }
            CustomRedirectHandler current        = CustomRedirectHandler.Current;
            CustomRedirect        customRedirect = current.CustomRedirects.Find(new Uri(urlNotFound.AbsoluteUri));
            string str = HttpUtility.HtmlEncode(urlNotFound.PathAndQuery);

            if (customRedirect == null)
            {
                // Check relative uri
                customRedirect = current.CustomRedirects.Find(urlNotFound);
            }
            if (customRedirect != null)
            {
                if (customRedirect.State.Equals(0) && string.Compare(customRedirect.NewUrl, str, StringComparison.InvariantCultureIgnoreCase) != 0)
                {
                    _log.Information(string.Format("404 Custom Redirect: To: '{0}' (from: '{1}')", customRedirect.NewUrl, str));
                    context.Response.Clear();
                    context.Response.StatusCode        = 301;
                    context.Response.StatusDescription = "Moved Permanently";
                    context.Response.RedirectLocation  = customRedirect.NewUrl;
                    context.Response.End();
                    return;
                }
            }
            else if (Configuration.Logging == LoggerMode.On && Upgrader.Valid)
            {
                Logger.LogRequest(str, referer == null ? string.Empty : referer.ToString());
            }
            context.Response.TrySkipIisCustomErrors = true;
            context.Response.StatusCode             = 404;
            context.Response.Status = "404 File not found";
        }
Exemplo n.º 17
0
        public ActionResult SaveSuggestion(string oldUrl, string newUrl, string skipWildCardAppend, int?pageNumber, int?pageSize)
        {
            CheckAccess();
            SaveRedirect(oldUrl, newUrl, skipWildCardAppend);

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

            dbAccess.DeleteRowsForRequest(oldUrl);

            //
            List <CustomRedirect> customRedirectList = GetSuggestions(null);
            string actionInfo = string.Format(LocalizationService.Current.GetString("/gadget/redirects/saveredirect"), oldUrl, newUrl);

            CustomRedirectHandler.ClearCache();
            var viewData = GetRedirectIndexViewData(pageNumber, customRedirectList, actionInfo, null, pageSize, true, true);

            if (customRedirectList.Count > 0)
            {
                viewData.HighestSuggestionValue = customRedirectList.First().NotfoundErrorCount;
                viewData.LowestSuggestionValue  = customRedirectList.Last().NotfoundErrorCount;
            }
            return(View("Index", viewData));
        }