private static bool IsRedirectAllowed(string url, HttpApplication app, PortalSettings portalSettings) { var urlAction = new UrlAction(app.Request); urlAction.SetRedirectAllowed(url, new FriendlyUrlSettings(portalSettings.PortalId)); return(urlAction.RedirectAllowed); }
public void CheckForRedirects_WithUmlautUrls_DontRedirectInfinitely() { // Arrange const string CheckForRedirectsMethodName = "CheckForRedirects"; const string HostSettingsTableName = "HostSettings"; const string PortalSettingsTableName = "PortalSettings"; const string LanguagesTableName = "Languages"; const string TabsTableName = "Tabs"; const string TabUrlsTableName = "TabUrls"; const string PortalsTableName = "Portals"; const string TabSettingsTableName = "TabSettings"; const string PortalAliasTableName = "PortalAlias"; const string ExtensionUrlProviderTableName = "ExtensionUrlProvider"; const string HttpScheme = "http"; const string HttpsScheme = "https"; const string UriUrl = HttpScheme + "://" + GenericHost + "/über-uns/ctl/module/moduleid/466?returnurl=/über-uns"; const string FullUrl = HttpScheme + "://" + GenericHost + "/%C3%BCber-uns/ctl/module/moduleid/466?returnurl=/%C3%BCber-uns"; const string RewritePath = "Default.aspx?TabId=1&ctl=module&moduleid=466&returnurl=/%C3%BCber-uns&language=en-US"; const string SampleHttpsUrl = HttpsScheme + "://google.com"; const string PortalSettingsControllerRegistrationName = "PortalSettingsController"; const string DNNPlatformText = "DNN Platform"; const string WebsiteText = "Website"; const string ApplicationPath = "/"; const string UrlRewriteItemName = "UrlRewrite:OriginalUrl"; ComponentFactory.Container = null; PortalController.ClearInstance(); Host.PerformanceSetting = Globals.PerformanceSettings.ModerateCaching; var uri = new Uri(Assembly.GetExecutingAssembly().CodeBase); var path = HttpUtility.UrlDecode(Path.GetFullPath(uri.AbsolutePath)); var websiteRootPath = path.Substring(0, path.IndexOf(DNNPlatformText, StringComparison.Ordinal)); var physicalAppPath = Path.Combine(websiteRootPath, WebsiteText); var simulator = new HttpSimulator(ApplicationPath, physicalAppPath); simulator.SimulateRequest(new Uri(SampleHttpsUrl)); HttpContext.Current.Items.Add(UrlRewriteItemName, FullUrl); var serviceCollection = new ServiceCollection(); serviceCollection.AddTransient(container => Mock.Of <IHostSettingsService>()); serviceCollection.AddTransient(container => Mock.Of <IApplicationStatusInfo>()); serviceCollection.AddTransient(container => Mock.Of <INavigationManager>()); serviceCollection.AddTransient(container => Mock.Of <IPortalAliasService>()); MockComponentProvider.CreateNew <CachingProvider>(); MockComponentProvider.CreateNew <DataProvider>(); MockComponentProvider.CreateNew <LoggingProvider>(); MockComponentProvider.CreateNew <PortalSettingsController>(PortalSettingsControllerRegistrationName); var dataProvider = MockComponentProvider.CreateDataProvider(); var hostSettingsTable = new DataTable(HostSettingsTableName); dataProvider .Setup(s => s.GetHostSettings()) .Returns(() => hostSettingsTable.CreateDataReader()); var portalSettingsTable = new DataTable(PortalSettingsTableName); dataProvider .Setup(s => s.GetPortalSettings( It.IsAny <int>(), It.IsAny <string>())) .Returns(() => portalSettingsTable.CreateDataReader()); var languagesTable = new DataTable(LanguagesTableName); dataProvider .Setup(s => s.GetLanguagesByPortal(It.IsAny <int>())) .Returns(() => languagesTable.CreateDataReader()); var tabsTable = new DataTable(TabsTableName); FillTabsTable(tabsTable); dataProvider .Setup(s => s.GetTabs(It.IsAny <int>())) .Returns(() => tabsTable.CreateDataReader()); dataProvider .Setup(s => s.GetTabCustomAliases(It.IsAny <int>())) .Returns(() => tabsTable.CreateDataReader()); var tabUrlsTable = new DataTable(TabUrlsTableName); dataProvider .Setup(s => s.GetTabPaths( It.IsAny <int>(), It.IsAny <string>())) .Returns(() => tabUrlsTable.CreateDataReader()); dataProvider .Setup(s => s.GetTabUrls(It.IsAny <int>())) .Returns(() => tabUrlsTable.CreateDataReader()); var tabSettingsTable = new DataTable(TabSettingsTableName); dataProvider .Setup(s => s.GetTabSettings(It.IsAny <int>())) .Returns(() => tabSettingsTable.CreateDataReader()); var portalsTable = new DataTable(PortalsTableName); FillPortalsTable(portalsTable); dataProvider .Setup(s => s.GetPortals(It.IsAny <string>())) .Returns(() => portalsTable.CreateDataReader()); var extensionUrlProviderTable = new DataTable(ExtensionUrlProviderTableName); dataProvider .Setup(s => s.GetExtensionUrlProviders(It.IsAny <int>())) .Returns(() => extensionUrlProviderTable.CreateDataReader()); var portalAliasTable = new DataTable(PortalAliasTableName); FillPortalAliasTable(portalAliasTable); dataProvider .Setup(s => s.GetPortalAliases()) .Returns(() => portalAliasTable.CreateDataReader()); Globals.DependencyProvider = serviceCollection.BuildServiceProvider(); var urlRewriter = new AdvancedUrlRewriter(); var checkForRedirectsMethod = typeof(AdvancedUrlRewriter) .GetMethod( CheckForRedirectsMethodName, BindingFlags.Static | BindingFlags.NonPublic); var requestUri = new Uri(UriUrl); var queryStringCollection = new NameValueCollection(); var friendlyUrlSettings = new FriendlyUrlSettings(GenericPortalId); var urlAction = new UrlAction( HttpScheme, string.Empty, string.Empty) { TabId = GenericTabId, Action = ActionType.CheckFor301, PortalId = GenericPortalId, IsSSLOffloaded = true, PortalAlias = new PortalAliasInfo { HTTPAlias = GenericHost, }, DoRewrite = true, RewritePath = RewritePath }; urlAction.SetRedirectAllowed(string.Empty, friendlyUrlSettings); var requestType = string.Empty; var portalHomeTabId = GenericTabId; // Act var isRedirected = checkForRedirectsMethod.Invoke( urlRewriter, new object[] { requestUri, FullUrl, queryStringCollection, urlAction, requestType, friendlyUrlSettings, portalHomeTabId }); // Assert Assert.AreEqual(false, isRedirected); }