Пример #1
0
        private UrlRewritingResult TestUrlRewritingInternal(string uriString)
        {
            var rewritingResult = new UrlRewritingResult();

            try
            {
                var noneText = Localization.GetString("None", Localization.GlobalResourceFile);
                var uri      = new Uri(uriString);
                var provider = new AdvancedUrlRewriter();
                var result   = new UrlAction(uri.Scheme, uriString, Globals.ApplicationMapPath)
                {
                    RawUrl = uriString
                };
                var httpContext = new HttpContext(HttpContext.Current.Request, new HttpResponse(new StringWriter()));
                provider.ProcessTestRequestWithContext(httpContext, uri, true, result, new FriendlyUrlSettings(this.PortalId));
                rewritingResult.RewritingResult = string.IsNullOrEmpty(result.RewritePath) ? noneText : result.RewritePath;
                rewritingResult.Culture         = string.IsNullOrEmpty(result.CultureCode) ? noneText : result.CultureCode;
                var tab = TabController.Instance.GetTab(result.TabId, result.PortalId, false);
                rewritingResult.IdentifiedPage    = (tab != null ? tab.TabName : noneText);
                rewritingResult.RedirectionReason = Localization.GetString(result.Reason.ToString());
                rewritingResult.RedirectionResult = result.FinalUrl;
                var messages = new StringBuilder();
                foreach (var message in result.DebugMessages)
                {
                    messages.AppendLine(message);
                }
                rewritingResult.OperationMessages = messages.ToString();
            }
            catch (Exception ex)
            {
                rewritingResult.OperationMessages = ex.Message;
            }
            return(rewritingResult);
        }
Пример #2
0
        private void ProcessRequest(FriendlyUrlSettings settings, UrlTestHelper testHelper)
        {
            var provider = new AdvancedUrlRewriter();

            provider.ProcessTestRequestWithContext(HttpContext.Current,
                                                   HttpContext.Current.Request.Url,
                                                   true,
                                                   testHelper.Result,
                                                   settings);
            testHelper.Response = HttpContext.Current.Response;
        }
Пример #3
0
        /// <inheritdoc/>
        public void Init(HttpApplication application)
        {
            this._providerToUse = DotNetNuke.Common.Utilities.Config.GetFriendlyUrlProvider();

            // bind events depending on currently configured friendly url provider
            // note that the current configured friendly url provider determines what type
            // of url rewriting is required.
            switch (this._providerToUse)
            {
                case "advanced":
                    var advancedRewriter = new AdvancedUrlRewriter();
                    this._urlRewriter = advancedRewriter;

                    // bind the rewrite event to the begin request event
                    application.BeginRequest += this._urlRewriter.RewriteUrl;
                    break;
                default:
                    var basicRewriter = new BasicUrlRewriter();
                    this._urlRewriter = basicRewriter;
                    application.BeginRequest += this._urlRewriter.RewriteUrl;
                    break;
            }
        }
Пример #4
0
        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);
        }