private void InitModuleFromConfig(HttpApplication app, SessionStateSection config)
        {
            if (config.Mode == SessionStateMode.Off)
            {
                return;
            }

            app.AddOnAcquireRequestStateAsync(BeginAcquireState, EndAcquireState);
            app.AddOnReleaseRequestStateAsync(BeginOnReleaseState, EndOnReleaseState);
            app.AddOnEndRequestAsync(BeginOnEndRequest, EndOnEndRequest);

            if (config.Mode == SessionStateMode.Custom)
            {
                _store = InitCustomStore(config);
            }
            else if (config.Mode == SessionStateMode.InProc)
            {
                _store = new InProcSessionStateStoreAsync();
                _store.Initialize(null, null);
            }
            else
            {
                throw new ConfigurationErrorsException(SR.Not_Support_SessionState_Mode);
            }

            _idManager = InitSessionIDManager(config);
        }
        public void Initialize(HttpApplication application)
        {
            for (IntegratedPipelineBlueprintStage stage = _blueprint.FirstStage; stage != null; stage = stage.NextStage)
            {
                var segment = new IntegratedPipelineContextStage(this, stage);
                switch (stage.Name)
                {
                case Constants.StageAuthenticate:
                    application.AddOnAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAuthenticate:
                    application.AddOnPostAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageAuthorize:
                    application.AddOnAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAuthorize:
                    application.AddOnPostAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageResolveCache:
                    application.AddOnResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostResolveCache:
                    application.AddOnPostResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageMapHandler:
                    application.AddOnMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostMapHandler:
                    application.AddOnPostMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageAcquireState:
                    application.AddOnAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAcquireState:
                    application.AddOnPostAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePreHandlerExecute:
                    application.AddOnPreRequestHandlerExecuteAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                default:
                    throw new NotSupportedException(
                              string.Format(CultureInfo.InvariantCulture, Resources.Exception_UnsupportedPipelineStage, stage.Name));
                }
            }
            // application.PreSendRequestHeaders += PreSendRequestHeaders; // Null refs for async un-buffered requests with bodies.
            application.AddOnEndRequestAsync(BeginFinalWork, EndFinalWork);
        }
        private void InitModuleFromConfig(HttpApplication app, SessionStateSection config)
        {
            if (config.Mode != SessionStateMode.Off)
            {
                app.AddOnAcquireRequestStateAsync(new BeginEventHandler(this.BeginAcquireState), new EndEventHandler(this.EndAcquireState));
                app.ReleaseRequestState += new EventHandler(this.OnReleaseState);
                app.EndRequest          += new EventHandler(this.OnEndRequest);
                this._partitionResolver  = this.InitPartitionResolver(config);
                switch (config.Mode)
                {
                case SessionStateMode.InProc:
                    if (HttpRuntime.UseIntegratedPipeline)
                    {
                        s_canSkipEndRequestCall = true;
                    }
                    this._store = new InProcSessionStateStore();
                    this._store.Initialize(null, null);
                    break;

                case SessionStateMode.StateServer:
                    if (HttpRuntime.UseIntegratedPipeline)
                    {
                        s_canSkipEndRequestCall = true;
                    }
                    this._store = new OutOfProcSessionStateStore();
                    ((OutOfProcSessionStateStore)this._store).Initialize(null, null, this._partitionResolver);
                    break;

                case SessionStateMode.SQLServer:
                    this._store = new SqlSessionStateStore();
                    ((SqlSessionStateStore)this._store).Initialize(null, null, this._partitionResolver);
                    break;

                case SessionStateMode.Custom:
                    this._store = this.InitCustomStore(config);
                    break;
                }
                this._idManager = this.InitSessionIDManager(config);
                if (((config.Mode == SessionStateMode.InProc) || (config.Mode == SessionStateMode.StateServer)) && this._usingAspnetSessionIdManager)
                {
                    this._ignoreImpersonation = true;
                }
            }
        }
Esempio n. 4
0
        public void Events_Deny_Unrestricted()
        {
            HttpApplication app = new HttpApplication();

            app.Disposed += new EventHandler(Handler);
            app.Error    += new EventHandler(Handler);
            app.PreSendRequestContent     += new EventHandler(Handler);
            app.PreSendRequestHeaders     += new EventHandler(Handler);
            app.AcquireRequestState       += new EventHandler(Handler);
            app.AuthenticateRequest       += new EventHandler(Handler);
            app.AuthorizeRequest          += new EventHandler(Handler);
            app.BeginRequest              += new EventHandler(Handler);
            app.EndRequest                += new EventHandler(Handler);
            app.PostRequestHandlerExecute += new EventHandler(Handler);
            app.PreRequestHandlerExecute  += new EventHandler(Handler);
            app.ReleaseRequestState       += new EventHandler(Handler);
            app.ResolveRequestCache       += new EventHandler(Handler);
            app.UpdateRequestCache        += new EventHandler(Handler);

            app.AddOnAcquireRequestStateAsync(null, null);
            app.AddOnAuthenticateRequestAsync(null, null);
            app.AddOnAuthorizeRequestAsync(null, null);
            app.AddOnBeginRequestAsync(null, null);
            app.AddOnEndRequestAsync(null, null);
            app.AddOnPostRequestHandlerExecuteAsync(null, null);
            app.AddOnPreRequestHandlerExecuteAsync(null, null);
            app.AddOnReleaseRequestStateAsync(null, null);
            app.AddOnResolveRequestCacheAsync(null, null);
            app.AddOnUpdateRequestCacheAsync(null, null);

            app.Disposed -= new EventHandler(Handler);
            app.Error    -= new EventHandler(Handler);
            app.PreSendRequestContent     -= new EventHandler(Handler);
            app.PreSendRequestHeaders     -= new EventHandler(Handler);
            app.AcquireRequestState       -= new EventHandler(Handler);
            app.AuthenticateRequest       -= new EventHandler(Handler);
            app.AuthorizeRequest          -= new EventHandler(Handler);
            app.BeginRequest              -= new EventHandler(Handler);
            app.EndRequest                -= new EventHandler(Handler);
            app.PostRequestHandlerExecute -= new EventHandler(Handler);
            app.PreRequestHandlerExecute  -= new EventHandler(Handler);
            app.ReleaseRequestState       -= new EventHandler(Handler);
            app.ResolveRequestCache       -= new EventHandler(Handler);
            app.UpdateRequestCache        -= new EventHandler(Handler);
#if NET_2_0
            app.PostAuthenticateRequest += new EventHandler(Handler);
            app.PostAuthorizeRequest    += new EventHandler(Handler);
            app.PostResolveRequestCache += new EventHandler(Handler);
            app.PostMapRequestHandler   += new EventHandler(Handler);
            app.PostAcquireRequestState += new EventHandler(Handler);
            app.PostReleaseRequestState += new EventHandler(Handler);
            app.PostUpdateRequestCache  += new EventHandler(Handler);

            app.AddOnPostAuthenticateRequestAsync(null, null);
            app.AddOnPostAuthenticateRequestAsync(null, null, null);
            app.AddOnPostAuthorizeRequestAsync(null, null);
            app.AddOnPostAuthorizeRequestAsync(null, null, null);
            app.AddOnPostResolveRequestCacheAsync(null, null);
            app.AddOnPostResolveRequestCacheAsync(null, null, null);
            app.AddOnPostMapRequestHandlerAsync(null, null);
            app.AddOnPostMapRequestHandlerAsync(null, null, null);
            app.AddOnPostAcquireRequestStateAsync(null, null);
            app.AddOnPostAcquireRequestStateAsync(null, null, null);
            app.AddOnPostReleaseRequestStateAsync(null, null);
            app.AddOnPostReleaseRequestStateAsync(null, null, null);
            app.AddOnPostUpdateRequestCacheAsync(null, null);
            app.AddOnPostUpdateRequestCacheAsync(null, null, null);

            app.AddOnAcquireRequestStateAsync(null, null, null);
            app.AddOnAuthenticateRequestAsync(null, null, null);
            app.AddOnAuthorizeRequestAsync(null, null, null);
            app.AddOnBeginRequestAsync(null, null, null);
            app.AddOnEndRequestAsync(null, null, null);
            app.AddOnPostRequestHandlerExecuteAsync(null, null, null);
            app.AddOnPreRequestHandlerExecuteAsync(null, null, null);
            app.AddOnReleaseRequestStateAsync(null, null, null);
            app.AddOnResolveRequestCacheAsync(null, null, null);
            app.AddOnUpdateRequestCacheAsync(null, null, null);

            app.PostAuthenticateRequest -= new EventHandler(Handler);
            app.PostAuthorizeRequest    -= new EventHandler(Handler);
            app.PostResolveRequestCache -= new EventHandler(Handler);
            app.PostMapRequestHandler   -= new EventHandler(Handler);
            app.PostAcquireRequestState -= new EventHandler(Handler);
            app.PostReleaseRequestState -= new EventHandler(Handler);
            app.PostUpdateRequestCache  -= new EventHandler(Handler);
#endif
        }
Esempio n. 5
0
        void InitModuleFromConfig(HttpApplication app, SessionStateSection config) {
            if (config.Mode == SessionStateMode.Off) {
                return;
            }

            app.AddOnAcquireRequestStateAsync(
                    new BeginEventHandler(this.BeginAcquireState),
                    new EndEventHandler(this.EndAcquireState));

            app.ReleaseRequestState += new EventHandler(this.OnReleaseState);
            app.EndRequest += new EventHandler(this.OnEndRequest);

            _partitionResolver = InitPartitionResolver(config);

            switch (config.Mode) {
                case SessionStateMode.InProc:
                    if (HttpRuntime.UseIntegratedPipeline) {
                        s_canSkipEndRequestCall = true;
                    }
                    _store = new InProcSessionStateStore();
                    _store.Initialize(null, null);
                    break;

#if !FEATURE_PAL // FEATURE_PAL does not enable out of proc session state
                case SessionStateMode.StateServer:
                    if (HttpRuntime.UseIntegratedPipeline) {
                        s_canSkipEndRequestCall = true;
                    }
                    _store = new OutOfProcSessionStateStore();
                    ((OutOfProcSessionStateStore)_store).Initialize(null, null, _partitionResolver);
                    break;

                case SessionStateMode.SQLServer:
                    _store = new SqlSessionStateStore();
                    ((SqlSessionStateStore)_store).Initialize(null, null, _partitionResolver);
#if DBG
                    ((SqlSessionStateStore)_store).SetModule(this);
#endif
                    break;
#else // !FEATURE_PAL
                case SessionStateMode.StateServer:
                    throw new NotImplementedException("ROTORTODO");
                    break;

                case SessionStateMode.SQLServer:
                    throw new NotImplementedException("ROTORTODO");
                    break;
#endif // !FEATURE_PAL

                case SessionStateMode.Custom:
                    _store = InitCustomStore(config);
                    break;

                default:
                    break;
            }

            // We depend on SessionIDManager to manage session id
            _idManager = InitSessionIDManager(config);

            if ((config.Mode == SessionStateMode.InProc || config.Mode == SessionStateMode.StateServer) &&
                _usingAspnetSessionIdManager) {
                // If we're using InProc mode or StateServer mode, and also using our own session id module,
                // we know we don't care about impersonation in our all session state store read/write
                // and session id read/write.
                _ignoreImpersonation = true;
            }

        }
Esempio n. 6
0
        public void Init(HttpApplication application)
        {
            application.BeginRequest            += new EventHandler(application_BeginRequest);
            application.PostResolveRequestCache += new EventHandler(this.OnApplicationPostResolveRequestCache);
            application.PostMapRequestHandler   += new EventHandler(this.OnApplicationPostMapRequestHandler);
            application.AuthenticateRequest     += new EventHandler(OnAuthenticateRequest);
            application.AddOnAcquireRequestStateAsync(new BeginEventHandler(this.BeginAcquireState), new EndEventHandler(this.EndAcquireState));
            application.ReleaseRequestState += new EventHandler(this.OnReleaseState);
            application.EndRequest          += new EventHandler(this.OnEndRequest);
            HttpModuleCollection modules = null;
            var moduleCollectionField    = typeof(HttpApplication).GetField("_moduleCollection", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

            if (moduleCollectionField != null)
            {
                try
                {
                    modules = (HttpModuleCollection)moduleCollectionField.GetValue(application);
                }
                catch (System.Reflection.TargetInvocationException ex)
                {
                    if (ex.InnerException != null)
                    {
                        throw ex.InnerException;
                    }
                    throw;
                }
            }
            else
            {
                modules = application.Modules;
            }
            var sessionModule = modules["Session"] as SessionStateModule;

            if (sessionModule != null)
            {
                var mBeginAcquireState = typeof(SessionStateModule).GetMethod("BeginAcquireState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                var mEndAcquireState   = typeof(SessionStateModule).GetMethod("EndAcquireState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                var mReleaseState      = typeof(SessionStateModule).GetMethod("OnReleaseState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                var mEndRequest        = typeof(SessionStateModule).GetMethod("OnEndRequest", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                _beginEventHandler      = (BeginEventHandler)Delegate.CreateDelegate(typeof(BeginEventHandler), sessionModule, mBeginAcquireState);
                _sessionEndEventHandler = (EndEventHandler)Delegate.CreateDelegate(typeof(EndEventHandler), sessionModule, mEndAcquireState);
                _sessionOnReleaseState  = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), sessionModule, mReleaseState);
                _sessionOnEndRequest    = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), sessionModule, mEndRequest);
            }
            var formsAuthModule = modules["FormsAuthentication"] as FormsAuthenticationModule;

            if (formsAuthModule != null)
            {
                var mOnEnter = typeof(FormsAuthenticationModule).GetMethod("OnEnter", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                var mOnLeave = typeof(FormsAuthenticationModule).GetMethod("OnLeave", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                _formsAuthOnEnter = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), formsAuthModule, mOnEnter);
                _formsAuthOnLeave = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), formsAuthModule, mOnLeave);
            }
            var windowsAuthModule = modules["WindowsAuthentication"] as WindowsAuthenticationModule;

            if (formsAuthModule != null)
            {
                var mOnEnter = typeof(WindowsAuthenticationModule).GetMethod("OnEnter", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                _windowsAuthOnEnter = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), windowsAuthModule, mOnEnter);
            }
        }