Esempio n. 1
0
        protected override MailboxSession CreateMailboxSession()
        {
            if (base.IsDisposed || this.isInProcessOfDisposing)
            {
                string message = string.Format(CultureInfo.InvariantCulture, "Cannot call UserContext.CreateMailboxSession when object is disposed. isDisposed={0}, isInProcessOfDisposing={1}.", new object[]
                {
                    base.IsDisposed,
                    this.isInProcessOfDisposing
                });
                throw new ObjectDisposedException("UserContext", message);
            }
            if (base.LogonIdentity == null)
            {
                throw new OwaInvalidOperationException("Cannot call CreateMailboxSession when logonIdentity is null");
            }
            MailboxSession result;

            try
            {
                if (base.ExchangePrincipal.RecipientTypeDetails == RecipientTypeDetails.TeamMailbox)
                {
                    Exception ex = null;
                    ExTraceGlobals.UserContextTracer.TraceDebug(0L, "Creating Mailbox session for TeamMailbox");
                    SharepointAccessManager.Instance.UpdateAccessTokenIfNeeded(base.ExchangePrincipal, OauthUtils.GetOauthCredential(base.LogonIdentity.GetOWAMiniRecipient()), base.LogonIdentity.ClientSecurityContext, out ex, false);
                    if (ex != null)
                    {
                        ExTraceGlobals.UserContextTracer.TraceDebug <Exception>(0L, "CreateMailboxSession for TeamMailbox hit exception while updating AccessToken: {0}", ex);
                    }
                }
                CultureInfo    cultureInfo = Culture.GetPreferredCultureInfo(base.ExchangePrincipal) ?? Thread.CurrentThread.CurrentCulture;
                MailboxSession mailboxSession;
                if (base.ExchangePrincipal.RecipientTypeDetails == RecipientTypeDetails.GroupMailbox)
                {
                    mailboxSession = base.LogonIdentity.CreateDelegateMailboxSession(base.ExchangePrincipal, cultureInfo);
                }
                else
                {
                    mailboxSession = base.LogonIdentity.CreateMailboxSession(base.ExchangePrincipal, cultureInfo);
                }
                if (mailboxSession == null)
                {
                    throw new OwaInvalidOperationException("CreateMailboxSession cannot create a mailbox session");
                }
                result = mailboxSession;
            }
            catch (AccessDeniedException innerException)
            {
                throw new OwaExplicitLogonException("user has no access rights to the mailbox", "errorexplicitlogonaccessdenied", innerException);
            }
            return(result);
        }
        private static DispatchStepResult ValidateAndSetThreadCulture(RequestContext requestContext)
        {
            ExTraceGlobals.CoreCallTracer.TraceDebug(0L, "[RequestDispatcher::ValidateAndSetThreadCulture] entry.");
            CultureInfo     cultureInfo     = null;
            EcpUserSettings ecpUserSettings = (EcpUserSettings)0U;
            UserContext     userContext     = requestContext.UserContext as UserContext;

            if (requestContext.UserContext != null && userContext == null)
            {
                throw new OwaInvalidOperationException(string.Format("Context was expected to be of type UserContext, but it is of type {0}", requestContext.UserContext.GetType()));
            }
            if (RequestDispatcherUtilities.TryReadUpdatedUserSettingsCookie(requestContext, out ecpUserSettings))
            {
                cultureInfo = RequestDispatcherUtilities.GetUserCultureFromEcpCookie(requestContext, ecpUserSettings);
                if (userContext != null)
                {
                    userContext.RefreshUserSettings(cultureInfo, ecpUserSettings);
                }
                RequestDispatcherUtilities.DeleteUserSettingsCookie(requestContext);
            }
            if (cultureInfo == null)
            {
                bool flag = requestContext.RequestType == OwaRequestType.SuiteServiceProxyPage;
                if (requestContext.LanguagePostUserCulture != null)
                {
                    cultureInfo = requestContext.LanguagePostUserCulture;
                }
                else if (userContext != null && !flag)
                {
                    cultureInfo = Culture.GetPreferredCultureInfo(userContext.ExchangePrincipal);
                    if (cultureInfo == null && userContext.IsExplicitLogon)
                    {
                        cultureInfo             = ClientCultures.GetPreferredCultureInfo(userContext.LogonIdentity.GetOWAMiniRecipient().Languages);
                        userContext.UserCulture = cultureInfo;
                    }
                    if (cultureInfo == null)
                    {
                        if (string.IsNullOrEmpty(requestContext.DestinationUrlQueryString))
                        {
                            requestContext.DestinationUrlQueryString = requestContext.HttpContext.Request.QueryString.ToString();
                        }
                        bool        flag2 = string.IsNullOrEmpty(requestContext.HttpContext.Request.Headers["X-SuiteServiceProxyOrigin"]);
                        CultureInfo culture;
                        string      timeZoneKeyName;
                        if (OfflineClientRequestUtilities.IsRequestFromMOWAClient(requestContext.HttpContext.Request, requestContext.HttpContext.Request.UserAgent) && RequestDispatcherUtilities.TryReadMowaGlobalizationSettings(requestContext, out culture, out timeZoneKeyName))
                        {
                            return(RequestDispatcher.HandleLanguagePost(requestContext, culture, timeZoneKeyName, false, requestContext.DestinationUrl));
                        }
                        if (flag2)
                        {
                            requestContext.DestinationUrl = RequestDispatcherUtilities.GetDestinationForRedirectToLanguagePage(requestContext);
                            requestContext.HttpContext.Response.AppendHeader("X-OWA-Version", Globals.ApplicationVersion);
                            requestContext.HttpContext.Response.AppendToLog("&redir=lang");
                            return(DispatchStepResult.RedirectToUrl);
                        }
                        requestContext.HttpContext.Response.Headers["X-OWA-Error"] = "OwaInvalidUserLanguageException";
                        requestContext.HttpStatusCode = HttpStatusCode.NoContent;
                        return(DispatchStepResult.EndResponse);
                    }
                    else if (userContext.IsUserCultureExplicitlySet)
                    {
                        cultureInfo = userContext.UserCulture;
                    }
                }
            }
            if (cultureInfo != null)
            {
                Culture.InternalSetThreadPreferredCulture(cultureInfo);
            }
            else
            {
                Culture.InternalSetThreadPreferredCulture();
            }
            return(DispatchStepResult.Continue);
        }
        public static bool IsDownLevelClient(HttpContext httpContext, bool avoidUserContextAccess = false)
        {
            if (httpContext == null)
            {
                throw new ArgumentNullException("httpContext cannot be null");
            }
            HttpCookie httpCookie = httpContext.Request.Cookies["PALEnabled"];

            if (httpCookie != null && !string.IsNullOrEmpty(httpCookie.Value))
            {
                return(false);
            }
            if (httpContext.Items.Contains("IsDownLevelClient"))
            {
                return((bool)httpContext.Items["IsDownLevelClient"]);
            }
            if (Utility.IsResourceRequest(httpContext.Request.Url.LocalPath))
            {
                avoidUserContextAccess = true;
            }
            bool flag  = false;
            bool flag2 = false;
            bool flag3 = true;
            bool isAndroidPremiumEnabled = false;

            if (httpContext.User != null && httpContext.User.Identity.IsAuthenticated && !avoidUserContextAccess)
            {
                UserContext userContext = UserContextManager.GetMailboxContext(httpContext, null, true) as UserContext;
                if (userContext != null)
                {
                    bool flag4 = Culture.GetPreferredCultureInfo(userContext.ExchangePrincipal) != null;
                    if (flag4)
                    {
                        ConfigurationContext configurationContext = new ConfigurationContext(userContext);
                        flag3 = configurationContext.IsFeatureEnabled(Feature.RichClient);
                        flag2 = userContext.IsOptimizedForAccessibility;
                        flag  = true;
                        ExTraceGlobals.CoreCallTracer.TraceDebug(0L, string.Format("isOptimizedForAccessibility: {0}, isRichClientFeatureEnabled: {1}", flag2, flag3));
                    }
                    if (userContext.FeaturesManager.ServerSettings.AndroidPremium.Enabled)
                    {
                        isAndroidPremiumEnabled = true;
                    }
                }
                else
                {
                    ExTraceGlobals.CoreCallTracer.TraceDebug(0L, "userContext is null when process IsDownLevelClient");
                }
            }
            bool flag5 = RequestDispatcherUtilities.IsDownLevelClient(httpContext.Request, flag2, flag3, isAndroidPremiumEnabled);

            if (flag)
            {
                httpContext.Items["IsDownLevelClient"] = flag5;
                ExTraceGlobals.CoreCallTracer.TraceDebug(0L, string.Format("Cache result '{0}' for IsDownLevelClient", flag5));
            }
            else
            {
                ExTraceGlobals.CoreCallTracer.TraceDebug(0L, string.Format("Result '{0}' for IsDownLevelClient is not cached.", flag5));
            }
            return(flag5);
        }
Esempio n. 4
0
 // Token: 0x06000974 RID: 2420 RVA: 0x000209E4 File Offset: 0x0001EBE4
 internal static void InternalSetThreadPreferredCulture(IExchangePrincipal exchangePrincipal)
 {
     Culture.InternalSetThreadPreferredCulture(Culture.GetPreferredCultureInfo(exchangePrincipal));
 }