예제 #1
0
 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);
 }
예제 #2
0
        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=");
            }
        }