// Token: 0x06000033 RID: 51 RVA: 0x000034F8 File Offset: 0x000016F8 internal static Uri GetRedirectUrlForTenantSite(string organization, string redirectTemplate, Uri originalUrl, ExEventLog eventLogger) { if (organization == null) { return(null); } ADSessionSettings sessionSettings; try { Guid externalDirectoryOrganizationId; sessionSettings = (Guid.TryParse(organization, out externalDirectoryOrganizationId) ? ADSessionSettings.FromExternalDirectoryOrganizationId(externalDirectoryOrganizationId) : ADSessionSettings.FromTenantCUName(organization)); } catch (CannotResolveTenantNameException) { return(null); } catch (CannotResolveExternalDirectoryOrganizationIdException) { return(null); } ITenantConfigurationSession session = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 180, "GetRedirectUrlForTenantSite", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\RedirectionModule\\RedirectionHelper.cs"); ExchangeConfigurationUnit exchangeConfigurationUnit = RedirectionHelper.ResolveConfigurationUnitByName(organization, session); if (exchangeConfigurationUnit == null || exchangeConfigurationUnit.ManagementSiteLink == null) { return(null); } ADSite localSite = LocalSiteCache.LocalSite; ADObjectId adobjectId = ADObjectIdResolutionHelper.ResolveDN(exchangeConfigurationUnit.ManagementSiteLink); Logger.LogEvent(eventLogger, TaskEventLogConstants.Tuple_LiveIdRedirection_UsingManagementSiteLink, organization, new object[] { organization, exchangeConfigurationUnit.AdminDisplayVersion, exchangeConfigurationUnit.ManagementSiteLink }); if (adobjectId.Equals(localSite.Id)) { return(null); } foreach (ADObjectId adobjectId2 in localSite.ResponsibleForSites) { if (adobjectId2.Equals(adobjectId)) { Logger.LogEvent(eventLogger, TaskEventLogConstants.Tuple_LiveIdRedirection_TargetSitePresentOnResponsibleForSite, organization, new object[] { organization, adobjectId, adobjectId2 }); return(null); } } return(RedirectionHelper.GetRedirectUrlForTenantSite(adobjectId, redirectTemplate, originalUrl)); }
// Token: 0x06000032 RID: 50 RVA: 0x000034EC File Offset: 0x000016EC internal static Uri GetRedirectUrlForTenantSite(string domainName, string redirectTemplate, Uri originalUrl) { return(RedirectionHelper.GetRedirectUrlForTenantSite(domainName, redirectTemplate, originalUrl, null)); }
// Token: 0x06000014 RID: 20 RVA: 0x00002B48 File Offset: 0x00000D48 private static void OnPostAuthenticateRequest(object source, EventArgs args) { HttpApplication httpApplication = (HttpApplication)source; HttpContext context = httpApplication.Context; Logger.EnterFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); if (!context.Request.IsAuthenticated) { Logger.LogWarning(LiveIdRedirectionModule.traceSrc, "OnPostAuthenticateRequest was called on a not Authenticated Request!"); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } if (!RedirectionHelper.ShouldProcessLiveIdRedirection(context)) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Redirection Logic skipped for user '{0}'.", new object[] { context.User.ToString() }); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } bool flag = true; string text = null; string text2 = (string)HttpContext.Current.Items["WLID-MemberName"]; if (RedirectionHelper.IsUserTenantOnCurrentSiteCache(text2)) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Redirection Logic skipped, user '{0}' is present on the current site cache.", new object[] { text2 }); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } if (context.Request.LogonUserIdentity.IsSystem && !(context.User.Identity is GenericSidIdentity) && !string.IsNullOrEmpty(text2)) { flag = false; if (!SmtpAddress.IsValidSmtpAddress(text2)) { Logger.LogWarning(LiveIdRedirectionModule.traceSrc, "Cannot convert memberName to SMTP address. No redirection available."); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } text = SmtpAddress.Parse(text2).Domain; } else { if (!LiveIdRedirectionModule.TryResolveCurrentUserInLocalForest(context.User, LiveIdRedirectionModule.traceSrc, out text)) { Logger.LogWarning(LiveIdRedirectionModule.traceSrc, "Cannot resolve the current request user account in local forest."); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } if (string.IsNullOrEmpty(text)) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Tenant Name cannot be resolved from the Url."); Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); return; } } TenantMonitor.LogActivity(CounterType.HomeSiteLocationAttempts, text); Uri originalUrl = RedirectionHelper.RemovePropertiesFromOriginalUri(context.Request.Url, RedirectionConfig.RedirectionUriFilterProperties); if (!flag) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Current request user is external to local AD."); Uri redirectUrlForTenantForest = RedirectionHelper.GetRedirectUrlForTenantForest(text, RedirectionConfig.PodRedirectTemplate, originalUrl, RedirectionConfig.PodSiteStartRange, RedirectionConfig.PodSiteEndRange); if (null != redirectUrlForTenantForest) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Redirecting user to {0}.", new object[] { redirectUrlForTenantForest }); context.Response.Redirect(redirectUrlForTenantForest.ToString()); TenantMonitor.LogActivity(CounterType.HomeSiteLocationSuccesses, text); } else { Logger.LogEvent(LiveIdRedirectionModule.eventLogger, TaskEventLogConstants.Tuple_LiveIdRedirection_FailedToResolveForestRedirection, text2, new object[] { text, text2 }); } } else { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Current request user is present in AD."); Uri uri = null; Exception ex = null; try { uri = RedirectionHelper.GetRedirectUrlForTenantSite(text, RedirectionConfig.SiteRedirectTemplate, originalUrl, LiveIdRedirectionModule.eventLogger); TenantMonitor.LogActivity(CounterType.HomeSiteLocationSuccesses, text); } catch (RedirectionLogicException ex2) { ex = ex2; } catch (DataSourceOperationException ex3) { ex = ex3; } catch (TransientException ex4) { ex = ex4; } catch (DataValidationException ex5) { ex = ex5; } if (ex != null) { Logger.GenerateErrorMessage(context.Response, LiveIdRedirectionModule.eventLogger, TaskEventLogConstants.Tuple_LiveIdRedirection_ServerError, ex, text); } else if (null != uri) { Logger.LogVerbose(LiveIdRedirectionModule.traceSrc, "Redirecting user to {0}.", new object[] { uri }); context.Response.Redirect(uri.ToString()); } else { RedirectionHelper.AddTenantToCurrentSiteCache(text); } } Logger.ExitFunction(ExTraceGlobals.RedirectionTracer, "LiveIdRedirectionModule.OnPostAuthenticateRequest"); }