internal static bool TryGetRedirectUri(Uri uri, string canonicalHostname, out Uri redirectUri, out bool isVanityDomainRedirect) { redirectUri = null; isVanityDomainRedirect = false; if (!HttpRedirectCommon.UriIsHttps(uri)) { UriBuilder uriBuilder = new UriBuilder(uri); uriBuilder.Scheme = "https"; uriBuilder.Port = 443; if (string.IsNullOrEmpty(uriBuilder.Path) || uriBuilder.Path == "/") { uriBuilder.Path = "/owa/"; } if (VanityDomainRedirectModule.IsMissingTrailingSlashRequired(uriBuilder.Path)) { UriBuilder uriBuilder2 = uriBuilder; uriBuilder2.Path += "/"; } if (VanityDomainRedirectModule.IsVanityDomain(uri, canonicalHostname)) { isVanityDomainRedirect = true; uriBuilder.Host = canonicalHostname; string text = null; string text2 = null; string host = uri.Host; int num = host.IndexOf('.'); if (num >= 0) { text2 = host.Substring(0, num); text = host.Substring(num + 1); } string text3 = null; if (!string.IsNullOrWhiteSpace(text) && !string.IsNullOrWhiteSpace(text2)) { text3 = "realm=" + text + "&vd=" + text2; } if (!string.IsNullOrEmpty(uriBuilder.Query)) { uriBuilder.Query = uriBuilder.Query.Substring(1) + "&" + text3; } else { uriBuilder.Query = text3; } } redirectUri = uriBuilder.Uri; return(true); } if (VanityDomainRedirectModule.IsMissingTrailingSlashRequired(uri.LocalPath)) { UriBuilder uriBuilder3 = new UriBuilder(uri); UriBuilder uriBuilder4 = uriBuilder3; uriBuilder4.Path += "/"; redirectUri = uriBuilder3.Uri; return(true); } return(false); }
private void OnBeginRequestInternal(HttpApplication httpApplication) { HttpContext context = httpApplication.Context; Uri url = context.Request.Url; Uri redirectUri = null; bool flag = false; if (VanityDomainRedirectModule.TryGetRedirectUri(url, VanityDomainRedirectModule.CanonicalHostNameSetting.Value, out redirectUri, out flag)) { HttpRedirectCommon.RedirectRequestToNewUri(httpApplication, HttpRedirectCommon.HttpRedirectType.Permanent, redirectUri, flag ? "VanityDomainRedirectUri=" : "HttpsRedirectUri="); } }