// Token: 0x060004C0 RID: 1216 RVA: 0x0001A2AC File Offset: 0x000184AC
        protected AnchorMailbox TryGetAnchorMailboxFromWsSecurityRequest()
        {
            if (!this.IsWsSecurityRequest)
            {
                return(null);
            }
            if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
            {
                ExTraceGlobals.VerboseTracer.TraceDebug <int>((long)this.GetHashCode(), "[BEServerCookieProxyRequestHandler::TryGetAnchorMailboxFromWsSecurityRequest]: Context {0}; WSSecurity request.", base.TraceContext);
            }
            WsSecurityParser @object = new WsSecurityParser(base.TraceContext);
            bool             flag    = false;
            string           address;

            if (base.ClientRequest.IsPartnerAuthRequest())
            {
                address = base.ParseClientRequest <string>(new Func <Stream, string>(@object.FindAddressFromPartnerAuthRequest), 73628);
            }
            else if (base.ClientRequest.IsX509CertAuthRequest())
            {
                address = base.ParseClientRequest <string>(new Func <Stream, string>(@object.FindAddressFromX509CertAuthRequest), 73628);
            }
            else
            {
                KeyValuePair <string, bool> keyValuePair = base.ParseClientRequest <KeyValuePair <string, bool> >(new Func <Stream, KeyValuePair <string, bool> >(@object.FindAddressFromWsSecurityRequest), 73628);
                flag    = keyValuePair.Value;
                address = keyValuePair.Key;
            }
            if (flag)
            {
                base.Logger.Set(3, "WSSecurityRequest-DelegationToken-Random");
                return(new AnonymousAnchorMailbox(this));
            }
            return(AnchorMailboxFactory.CreateFromSamlTokenAddress(address, this));
        }
예제 #2
0
        public static AnchorMailbox CreateFromCaller(IRequestContext requestContext)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            CommonAccessToken commonAccessToken = requestContext.HttpContext.Items["Item-CommonAccessToken"] as CommonAccessToken;

            if (commonAccessToken != null)
            {
                AnchorMailbox anchorMailbox = AnchorMailboxFactory.TryCreateFromCommonAccessToken(commonAccessToken, requestContext);
                if (anchorMailbox != null)
                {
                    return(anchorMailbox);
                }
            }
            if (requestContext.HttpContext.User == null || requestContext.HttpContext.User.Identity == null)
            {
                requestContext.Logger.SafeSet(HttpProxyMetadata.RoutingHint, "UnauthenticatedRequest-RandomBackEnd");
                return(new AnonymousAnchorMailbox(requestContext));
            }
            WindowsIdentity windowsIdentity = requestContext.HttpContext.User.Identity as WindowsIdentity;

            if (windowsIdentity != null && windowsIdentity.User == null)
            {
                requestContext.Logger.SafeSet(HttpProxyMetadata.RoutingHint, "AnonymousRequest-RandomBackEnd");
                return(new AnonymousAnchorMailbox(requestContext));
            }
            return(AnchorMailboxFactory.CreateFromLogonIdentity(requestContext));
        }
예제 #3
0
        public static bool TryCreateFromMailboxGuid(IRequestContext requestContext, string anchorMailboxAddress, out AnchorMailbox anchorMailbox)
        {
            anchorMailbox = null;
            Guid   mailboxGuid;
            string domain;

            if (AnchorMailboxFactory.TryGetMailboxGuid(anchorMailboxAddress, out mailboxGuid, out domain, requestContext))
            {
                requestContext.Logger.SafeSet(HttpProxyMetadata.RoutingHint, "URL-MailboxGuidWithDomain");
                anchorMailbox = new MailboxGuidAnchorMailbox(mailboxGuid, domain, requestContext);
                return(true);
            }
            return(false);
        }
        // Token: 0x0600073B RID: 1851 RVA: 0x0002A6F4 File Offset: 0x000288F4
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
            {
                ExTraceGlobals.VerboseTracer.TraceDebug <string, Uri>((long)this.GetHashCode(), "[SiteMailboxCreatingProxyRequestHandler::ResolveAnchorMailbox]: Method {0}; Url {1};", base.ClientRequest.HttpMethod, base.ClientRequest.Url);
            }
            if (!Utilities.IsPartnerHostedOnly && !GlobalConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).MultiTenancy.Enabled)
            {
                base.Logger.Set(3, "SiteMailboxCreating-ServerVersion");
                return(new ServerVersionAnchorMailbox <EcpService>(new ServerVersion(Server.E15MinVersion), 0, this));
            }
            AnchorMailbox anchorMailbox = AnchorMailboxFactory.CreateFromCaller(this);

            if (anchorMailbox is AnonymousAnchorMailbox)
            {
                return(anchorMailbox);
            }
            if (anchorMailbox is DomainAnchorMailbox || anchorMailbox is OrganizationAnchorMailbox)
            {
                return(anchorMailbox);
            }
            SidAnchorMailbox sidAnchorMailbox = anchorMailbox as SidAnchorMailbox;

            if (sidAnchorMailbox != null)
            {
                if (sidAnchorMailbox.OrganizationId == null)
                {
                    throw new InvalidOperationException(string.Format("OrganizationId is null for site mailbox proxy {0}.", anchorMailbox.ToString()));
                }
                base.Logger.Set(3, "SiteMailboxCreating-Organization");
                return(new OrganizationAnchorMailbox(sidAnchorMailbox.OrganizationId, this));
            }
            else
            {
                UserBasedAnchorMailbox userBasedAnchorMailbox = anchorMailbox as UserBasedAnchorMailbox;
                if (userBasedAnchorMailbox == null)
                {
                    throw new InvalidOperationException(string.Format("Unknown site mailbox proxy {0}.", anchorMailbox.ToString()));
                }
                OrganizationId organizationId = (OrganizationId)userBasedAnchorMailbox.GetADRawEntry()[ADObjectSchema.OrganizationId];
                if (organizationId == null)
                {
                    throw new InvalidOperationException(string.Format("OrganizationId is null for site mailbox proxy {0}.", anchorMailbox.ToString()));
                }
                base.Logger.Set(3, "SiteMailboxCreating-Organization");
                return(new OrganizationAnchorMailbox(organizationId, this));
            }
        }
 // Token: 0x0600051C RID: 1308 RVA: 0x0001C7CC File Offset: 0x0001A9CC
 protected override AnchorMailbox ResolveAnchorMailbox()
 {
     if (this.skipTargetBackEndCalculation)
     {
         base.Logger.Set(3, "OrgRelationship-Anonymous");
         return(new AnonymousAnchorMailbox(this));
     }
     if (base.UseRoutingHintForAnchorMailbox)
     {
         string text;
         if (RequestPathParser.IsAutodiscoverV2PreviewRequest(base.ClientRequest.Url.AbsolutePath))
         {
             text = base.ClientRequest.Params["Email"];
         }
         else if (RequestPathParser.IsAutodiscoverV2Version1Request(base.ClientRequest.Url.AbsolutePath))
         {
             int num = base.ClientRequest.Url.AbsolutePath.LastIndexOf('/');
             text = base.ClientRequest.Url.AbsolutePath.Substring(num + 1);
         }
         else
         {
             text = this.TryGetExplicitLogonNode(0);
         }
         string text2;
         if (ExplicitLogonParser.TryGetNormalizedExplicitLogonAddress(text, ref text2) && SmtpAddress.IsValidSmtpAddress(text2))
         {
             this.isExplicitLogonRequest = true;
             this.explicitLogonAddress   = text;
             if (HttpProxySettings.NoMailboxFallbackRoutingEnabled.Value)
             {
                 base.IsAnchorMailboxFromRoutingHint = true;
             }
             bool failOnDomainNotFound = !RequestPathParser.IsAutodiscoverV2Request(base.ClientRequest.Url.AbsolutePath);
             if (this.preferAnchorMailboxHeader)
             {
                 string text3 = base.ClientRequest.Headers[Constants.AnchorMailboxHeaderName];
                 if (!string.IsNullOrEmpty(text3) && !StringComparer.OrdinalIgnoreCase.Equals(text3, text2) && SmtpAddress.IsValidSmtpAddress(text3))
                 {
                     return(AnchorMailboxFactory.ParseAnchorMailboxFromSmtp(this, text3, "AnchorMailboxHeader", failOnDomainNotFound));
                 }
             }
             return(AnchorMailboxFactory.ParseAnchorMailboxFromSmtp(this, text2, "ExplicitLogon", failOnDomainNotFound));
         }
     }
     return(base.ResolveAnchorMailbox());
 }
예제 #6
0
 private void RedirectIfNeeded()
 {
     if (!this.IsSecurityTokenPresent())
     {
         UserBasedAnchorMailbox userBasedAnchorMailbox = AnchorMailboxFactory.CreateFromCaller(this) as UserBasedAnchorMailbox;
         if (userBasedAnchorMailbox != null)
         {
             ADRawEntry adrawEntry = userBasedAnchorMailbox.GetADRawEntry();
             ExTraceGlobals.VerboseTracer.TraceDebug <UserBasedAnchorMailbox, ExchangeObjectVersion>((long)this.GetHashCode(), "[RemotePowerShellProxyRequestHandler::RedirectIfNeeded] Redirect if the user is in E14 forest. User: {0}; ExchangeVersion: {1}", userBasedAnchorMailbox, adrawEntry.ExchangeVersion);
             if (adrawEntry.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2012))
             {
                 base.Logger.AppendGenericInfo("RedirectReason", "NoSecurityTokenAndOlderThanE15");
                 base.DatacenterRedirectStrategy.RedirectMailbox(userBasedAnchorMailbox);
             }
         }
     }
 }
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            string text = base.HttpContext.Items["destination"] as string;
            Uri    uri;

            if (!Uri.TryCreate(text, UriKind.Absolute, out uri))
            {
                throw new HttpException(400, "destination value is not valid");
            }
            string text2 = null;
            bool   flag2;
            string text3;
            bool   flag = FbaFormPostProxyRequestHandler.IsExplicitLogon(HttpRuntime.AppDomainAppVirtualPath, uri.PathAndQuery, uri.OriginalString, out flag2, out text2, out text3);

            if (flag)
            {
                this.explicitLogonUser = text2;
            }
            AnchorMailbox anchorMailbox;

            if (!string.IsNullOrEmpty(this.explicitLogonUser))
            {
                anchorMailbox = new SmtpAnchorMailbox(this.explicitLogonUser, this);
            }
            else
            {
                anchorMailbox = AnchorMailboxFactory.CreateFromCaller(this);
            }
            UserBasedAnchorMailbox userBasedAnchorMailbox = anchorMailbox as UserBasedAnchorMailbox;

            if (userBasedAnchorMailbox != null)
            {
                if (UrlUtilities.IsEacUrl(text))
                {
                    userBasedAnchorMailbox.CacheKeyPostfix = "_EAC";
                }
                else
                {
                    userBasedAnchorMailbox.MissingDatabaseHandler = new Func <ADRawEntry, ADObjectId>(base.ResolveMailboxDatabase);
                }
            }
            return(anchorMailbox);
        }
        // Token: 0x0600073D RID: 1853 RVA: 0x0002A870 File Offset: 0x00028A70
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            string mailboxId = WopiRequestPathHandler.GetMailboxId(base.ClientRequest);

            if (!string.IsNullOrEmpty(mailboxId))
            {
                this.targetMailboxId = mailboxId;
                AnchorMailbox result;
                if (AnchorMailboxFactory.TryCreateFromMailboxGuid(this, mailboxId, out result))
                {
                    return(result);
                }
                if (SmtpAddress.IsValidSmtpAddress(mailboxId))
                {
                    base.Logger.Set(3, "Url-SMTP");
                    return(new SmtpAnchorMailbox(mailboxId, this));
                }
            }
            return(base.ResolveAnchorMailbox());
        }
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            UriBuilder uriBuilder = new UriBuilder(base.ClientRequest.Url);

            uriBuilder.Scheme = "https";
            uriBuilder.Port   = 444;
            string userEmailAddress = WopiRequestPathHandler.GetUserEmailAddress(base.ClientRequest);

            if (string.IsNullOrEmpty(userEmailAddress))
            {
                return(base.ResolveAnchorMailbox());
            }
            this.targetMailboxId = userEmailAddress;
            AnchorMailbox result;

            if (AnchorMailboxFactory.TryCreateFromMailboxGuid(this, userEmailAddress, out result))
            {
                return(result);
            }
            base.Logger.Set(HttpProxyMetadata.RoutingHint, "Url-SMTP");
            return(new SmtpAnchorMailbox(userEmailAddress, this));
        }
예제 #10
0
        // Token: 0x060000E5 RID: 229 RVA: 0x000055DC File Offset: 0x000037DC
        public static AnchorMailbox CreateFromCaller(IRequestContext requestContext)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            CommonAccessToken commonAccessToken = requestContext.HttpContext.Items["Item-CommonAccessToken"] as CommonAccessToken;

            if (commonAccessToken != null)
            {
                AnchorMailbox anchorMailbox = AnchorMailboxFactory.TryCreateFromCommonAccessToken(commonAccessToken, requestContext);
                if (anchorMailbox != null)
                {
                    return(anchorMailbox);
                }
            }
            if (requestContext.HttpContext.User == null || requestContext.HttpContext.User.Identity == null)
            {
                requestContext.Logger.SafeSet(3, "UnauthenticatedRequest-RandomBackEnd");
                return(new AnonymousAnchorMailbox(requestContext));
            }
            if (HttpProxySettings.IdentityIndependentAuthBehaviorEnabled.Value && requestContext.AuthBehavior.AuthState != AuthState.FrontEndFullAuth)
            {
                AnchorMailbox anchorMailbox2 = requestContext.AuthBehavior.CreateAuthModuleSpecificAnchorMailbox(requestContext);
                if (anchorMailbox2 != null)
                {
                    return(anchorMailbox2);
                }
            }
            WindowsIdentity windowsIdentity = requestContext.HttpContext.User.Identity as WindowsIdentity;

            if (windowsIdentity != null && windowsIdentity.User == null)
            {
                requestContext.Logger.SafeSet(3, "AnonymousRequest-RandomBackEnd");
                return(new AnonymousAnchorMailbox(requestContext));
            }
            return(AnchorMailboxFactory.CreateFromLogonIdentity(requestContext));
        }
        // Token: 0x06000539 RID: 1337 RVA: 0x0001CFAC File Offset: 0x0001B1AC
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            UriBuilder uriBuilder = new UriBuilder(base.ClientRequest.Url);

            uriBuilder.Scheme = "https";
            uriBuilder.Port   = 444;
            string mailboxId = AuthenticatedWopiRequestPathHandler.GetMailboxId(base.ClientRequest);

            if (!string.IsNullOrEmpty(mailboxId))
            {
                this.targetMailboxId = mailboxId;
                AnchorMailbox result;
                if (AnchorMailboxFactory.TryCreateFromMailboxGuid(this, mailboxId, out result))
                {
                    return(result);
                }
                if (SmtpAddress.IsValidSmtpAddress(mailboxId))
                {
                    base.Logger.Set(3, "Url-SMTP");
                    return(new SmtpAnchorMailbox(mailboxId, this));
                }
            }
            return(base.ResolveAnchorMailbox());
        }
        // Token: 0x060004BD RID: 1213 RVA: 0x0001A12C File Offset: 0x0001832C
        protected override AnchorMailbox ResolveAnchorMailbox()
        {
            AnchorMailbox anchorMailbox = null;

            if (!base.HasPreemptivelyCheckedForRoutingHint)
            {
                anchorMailbox = base.CreateAnchorMailboxFromRoutingHint();
            }
            if (anchorMailbox != null)
            {
                return(anchorMailbox);
            }
            anchorMailbox = this.TryGetAnchorMailboxFromWsSecurityRequest();
            if (anchorMailbox != null)
            {
                return(anchorMailbox);
            }
            anchorMailbox = this.TryGetAnchorMailboxFromDomainBasedRequest();
            if (anchorMailbox != null)
            {
                return(anchorMailbox);
            }
            return(AnchorMailboxFactory.CreateFromCaller(this));
        }