private void rewritePathIfShortcutUrl() { var ewfResolvers = new[] { new ShortcutUrlResolver( "ewf", ConnectionSecurity.SecureIfPossible, () => { var page = MetaLogicFactory.CreateBasicTestsPageInfo(); return(page.UserCanAccessResource ? page : null); }), new ShortcutUrlResolver( "ewf/impersonate", ConnectionSecurity.SecureIfPossible, () => { if (!UserManagementStatics.UserManagementEnabled) { return(null); } var page = MetaLogicFactory.CreateSelectUserPageInfo(""); return(page.UserCanAccessResource ? page : null); }) }; var url = GetRequestAppRelativeUrl(Request); foreach (var resolver in ewfResolvers.Concat(GetShortcutUrlResolvers())) { if (resolver.ShortcutUrl.ToLower() != url.ToLower()) { continue; } // Redirect to the same shortcut URL to fix the connection security, normalize the base URL, normalize the shortcut URL casing, or any combination of // these. var canonicalAbsoluteUrl = GetDefaultBaseUrl(resolver.ConnectionSecurity.ShouldBeSecureGivenCurrentRequest(false)) + resolver.ShortcutUrl.PrependDelimiter("/"); if (canonicalAbsoluteUrl != RequestState.Url) { NetTools.Redirect(canonicalAbsoluteUrl); } if (ConfigurationStatics.IsIntermediateInstallation && !RequestState.IntermediateUserExists) { throw new AccessDeniedException(true, null); } var resource = resolver.Function(); if (resource == null) { throw new AccessDeniedException(false, resolver.LogInPageGetter?.Invoke()); } if (resource is ExternalResourceInfo) { NetTools.Redirect(resource.GetUrl()); } HttpContext.Current.RewritePath(getTransferPath(resource), false); break; } }
private void rewritePathIfShortcutUrl() { var ewfResolvers = new[] { new ShortcutUrlResolver( "ewf", ConnectionSecurity.SecureIfPossible, () => { var page = MetaLogicFactory.CreateBasicTestsPageInfo(); return(page.UserCanAccessResource ? page : null); }), new ShortcutUrlResolver( "ewf/impersonate", ConnectionSecurity.SecureIfPossible, () => { if (!UserManagementStatics.UserManagementEnabled) { return(null); } var page = MetaLogicFactory.CreateSelectUserPageInfo(""); return(page.UserCanAccessResource ? page : null); }) }; var url = GetRequestAppRelativeUrl(Request); foreach (var resolver in ewfResolvers.Concat(GetShortcutUrlResolvers())) { if (resolver.ShortcutUrl.ToLower() != url.ToLower()) { continue; } // Redirect to the same shortcut URL to fix the connection security, normalize the base URL, normalize the shortcut URL casing, or any combination of // these. var canonicalAbsoluteUrl = GetDefaultBaseUrl(resolver.ConnectionSecurity.ShouldBeSecureGivenCurrentRequest(false)) + resolver.ShortcutUrl.PrependDelimiter("/"); if (canonicalAbsoluteUrl != RequestState.Url) { NetTools.Redirect(canonicalAbsoluteUrl); } if (ConfigurationStatics.IsIntermediateInstallation && !RequestState.IntermediateUserExists) { throw new AccessDeniedException(true, null); } var resource = resolver.Function(); if (resource == null) { throw new AccessDeniedException(false, resolver.LogInPageGetter?.Invoke()); } if (resource is ExternalResourceInfo) { NetTools.Redirect(resource.GetUrl()); } HttpContext.Current.RewritePath(getTransferPath(resource), false); return; } // ACME challenge response; see https://tools.ietf.org/html/rfc8555#section-8.3 var absoluteUrl = new Uri(RequestState.Url); if (absoluteUrl.Scheme == "http" && absoluteUrl.Port == 80 && absoluteUrl.AbsolutePath.StartsWith("/.well-known/acme-challenge/")) { var systemManager = ConfigurationStatics.MachineConfiguration?.SystemManager; if (systemManager != null) { NetTools.Redirect( systemManager.HttpBaseUrl.Replace("https://", "http://") + "/Pages/Public/AcmeChallengeResponse.aspx?Token={0}".FormatWith(HttpUtility.UrlEncode(absoluteUrl.Segments.Last()))); } } }