상속: ICommunicationContext
예제 #1
0
        public IResponse ProcessRequest(IRequest request)
        {
            CheckNotDisposed();
            var ambientContext = new AmbientContext();
            var context        = new InMemoryCommunicationContext
            {
                ApplicationBaseUri = new Uri("http://localhost"),
                Request            = request,
                Response           = new InMemoryResponse()
            };

            try
            {
                using (new ContextScope(ambientContext))
                {
                    RaiseIncomingRequestReceived(context);
                }
            }
            finally
            {
                using (new ContextScope(ambientContext))
                {
                    RaiseIncomingRequestProcessed(context);
                }
            }
            return(context.Response);
        }
예제 #2
0
 public IResponse ProcessRequest(IRequest request)
 {
     CheckNotDisposed();
     var ambientContext = new AmbientContext();
     var context = new InMemoryCommunicationContext
     {
         ApplicationBaseUri = new Uri("http://localhost"), 
         Request = request, 
         Response = new InMemoryResponse()
     };
     try
     {
         using (new ContextScope(ambientContext))
         {
             RaiseIncomingRequestReceived(context);
         }
     }
     finally
     {
         using (new ContextScope(ambientContext))
         {
             RaiseIncomingRequestProcessed(context);
         }
     }
     return context.Response;
 }
        public void the_filter_doesnt_authorize_the_execution()
        {
            var context = new InMemoryCommunicationContext();
            var principal = new PrincipalAuthorizationAttribute { InRoles = new[] { "Administrators"}};

            principal.ExecuteBefore(context)
                .ShouldBe(PipelineContinuation.RenderNow);
        }
        public void the_filter_doesnt_authorize_the_execution()
        {
            var context = new InMemoryCommunicationContext();
            var principal = new PrincipalAuthorizationInterceptor(context) { InRoles = new[] { "Administrators"}};

            principal.BeforeExecute(new Mock<IOperation>().Object)
                .ShouldBe(true);
        }
        public void execution_is_denied()
        {
            var context = new InMemoryCommunicationContext();

            var authenticationInterceptor = new RequiresAuthenticationInterceptor(context);
            authenticationInterceptor.BeforeExecute(new Mock<IOperation>().Object)
                .ShouldBeFalse();
            context.OperationResult.ShouldBeOfType<OperationResult.Unauthorized>();
        }
        public void execution_is_allowed()
        {
            var context = new InMemoryCommunicationContext();
            context.User = new GenericPrincipal(new GenericIdentity("name"), null);

            var authenticationInterceptor = new RequiresAuthenticationInterceptor(context);

            authenticationInterceptor.BeforeExecute(new Mock<IOperation>().Object)
                .ShouldBeTrue();
        }
 public void execution_is_denied()
 {
     var context = new InMemoryCommunicationContext();
     const string REALM = "Test Realm";
     var authenticationInterceptor = new RequiresBasicAuthenticationInterceptor(context, REALM);
     authenticationInterceptor.BeforeExecute(new Mock<IOperation>().Object).ShouldBeFalse();
     context.OperationResult.ShouldBeOfType<OperationResult.Unauthorized>();
     var expectedHeader = String.Format("Basic realm=\"{0}\"", REALM);
     context.Response.Headers["WWW-Authenticate"].ShouldBe(expectedHeader);
 }
        public void the_username_is_matched_and_execution_continues()
        {
            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("johndoe"), new[] { "Administrator" });

            var rastaContext = new InMemoryCommunicationContext();
            var authorizer = new PrincipalAuthorizationAttribute() { Users = new[] { "johndoe" } };
            authorizer.ExecuteBefore(rastaContext)
                .ShouldBe(PipelineContinuation.Continue);

            rastaContext.OperationResult.ShouldBeNull();
        }
        public void the_username_is_matched_and_execution_continues()
        {
            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("johndoe"), new[] { "Administrator" });

            var rastaContext = new InMemoryCommunicationContext();
            var authorizer = new PrincipalAuthorizationInterceptor(rastaContext) { Users = new[] { "johndoe" } };
            authorizer.BeforeExecute(new Mock<IOperation>().Object)
              .ShouldBe(true);

            rastaContext.OperationResult.ShouldBeNull();
        }
        public void execution_is_not_allowed()
        {
            var context = new InMemoryCommunicationContext();
            context.User = new GenericPrincipal(new GenericIdentity("name"), new []{"Administrator"});

            var authenticationInterceptor = new RequiresRoleInterceptor(context) { Role = "SuperUser" };

            authenticationInterceptor.BeforeExecute(new Mock<IOperation>().Object)
                .ShouldBeFalse();
            context.OperationResult.ShouldBeOfType<OperationResult.Unauthorized>();

        }
예제 #11
0
        // TODO: Need to be moved to the core framework.
        public static void RenderResource(this IXhtmlAnchor anchor, Uri resource)
        {
            var context = new InMemoryCommunicationContext
                {
                    Request = new InMemoryRequest
                        {
                            HttpMethod = "GET",
                            Uri = resource,
                            Entity = new HttpEntity
                                {
                                    ContentLength = 0
                                }
                        }
                };
            context.Request.Headers["Accept"] = MediaType.XhtmlFragment.ToString();
            var textWriterProvider = anchor.AmbientWriter as ISupportsTextWriter;

            StringBuilder inMemoryRendering = null;

            if (textWriterProvider != null && textWriterProvider.TextWriter != null)
                context.Response = new InMemoryResponse
                    {
                        Entity = new TextWriterEnabledEntity(textWriterProvider.TextWriter)
                    };
            else
            {
                inMemoryRendering = new StringBuilder();
                var writer = new StringWriter(inMemoryRendering);
                context.Response = new InMemoryResponse { Entity = new TextWriterEnabledEntity(writer) };
            }

            anchor.Resolver.Resolve<IPipeline>().Run(context);

            if (context.Response.Entity.Stream.Length > 0)
            {
                context.Response.Entity.Stream.Position = 0;
                var
                    destinationEncoding =
                        Encoding.GetEncoding(context.Response.Entity.ContentType.CharSet ?? "UTF8");

                var reader = new StreamReader(context.Response.Entity.Stream, destinationEncoding);
                anchor.AmbientWriter.WriteUnencodedString(reader.ReadToEnd());
            }
            else if (inMemoryRendering != null && inMemoryRendering.Length > 0)
            {
                anchor.AmbientWriter.WriteUnencodedString(inMemoryRendering.ToString());
            }
        }
예제 #12
0
        public void Should_not_throw_exception_if_multiple_threads_inject_conext_into_singleton_dependency_resolver()
        {
            var container = new Container();
                container.Configure(c => c.Scan(s => {
                    s.AssemblyContainingType(GetType());
                    s.LookForRegistries();
                    s.WithDefaultConventions();
                }));

                _resolver = new StructureMapDependencyResolver(container);

                _resolver.AddDependency(typeof(IDependencyResolver),
                                        typeof(StructureMapDependencyResolver),
                                        DependencyLifetime.Singleton);
                _resolver.AddDependency(typeof(IPipeline), typeof(PipelineRunner),
                                        DependencyLifetime.Singleton);
                _resolver.AddDependency(typeof(ILogger), typeof(NullLogger),
                                        DependencyLifetime.Singleton);

                for (int i = 0; i < 200; i++) {
                    int errorCount = 0;
                    new Thread(() => {

                        try {
                            var context = new InMemoryCommunicationContext();
                            _resolver.AddDependencyInstance<ICommunicationContext>(context,DependencyLifetime.PerRequest);
                            _resolver.AddDependencyInstance<IRequest>(context.Request,DependencyLifetime.PerRequest);
                            _resolver.AddDependencyInstance<IResponse>(context.Response,DependencyLifetime.PerRequest);
                            _resolver.AddDependencyInstance<IHost>(new InMemoryHost(new ConfigurationSource()), DependencyLifetime.PerRequest);

                            _resolver.Resolve<ICommunicationContext>();

                        } catch (Exception) {
                            errorCount = errorCount +1 ;
                            throw;
                        }

                    }).Start();
                    Assert.That(errorCount, Is.EqualTo(0), "Some of the requests threw errors meaning that the dependencyresolver is not threadsafe ");
                }
        }