コード例 #1
0
 public AuthorizationBehavior(IAuthorizationNode authorization, IFubuRequestContext context, IAuthorizationFailureHandler failureHandler, SecuritySettings settings)
 {
     _authorization = authorization;
     _context = context;
     _failureHandler = failureHandler;
     _settings = settings;
 }
コード例 #2
0
        public IMedia <T> SelectMedia(CurrentMimeType mimeTypes, IFubuRequestContext context)
        {
            foreach (var acceptType in mimeTypes.AcceptTypes)
            {
                var candidates = Media.Where(x => x.Mimetypes.Contains(acceptType));
                if (candidates.Any())
                {
                    var writer = candidates.FirstOrDefault(x => x.MatchesRequest(context));
                    if (writer != null)
                    {
                        context.Logger.DebugMessage(() => new WriterChoice(acceptType, writer, writer.Condition));
                        return(writer);
                    }

                    context.Logger.DebugMessage(() => NoWritersMatch.For(acceptType, candidates));
                }
            }

            if (mimeTypes.AcceptsAny())
            {
                var media = Media.FirstOrDefault(x => x.MatchesRequest(context));
                context.Logger.DebugMessage(() => new WriterChoice(MimeType.Any.Value, media, media.Condition));

                return(media);
            }

            return(null);
        }
コード例 #3
0
        public T Read(string mimeType, IFubuRequestContext context)
        {
            var json   = context.Services.GetInstance <NewtonSoftJsonReader>().GetInputText();
            var values = new JObjectValues(json);

            return((T)context.Services.GetInstance <IObjectResolver>().BindModel(typeof(T), values).Value);
        }
コード例 #4
0
 public AuthorizationBehavior(IAuthorizationNode authorization, IFubuRequestContext context,
     IAuthorizationFailureHandler failureHandler)
 {
     _authorization = authorization;
     _context = context;
     _failureHandler = failureHandler;
 }
コード例 #5
0
        public T Read <T>(IFubuRequestContext context)
        {
            var serializer = new XmlSerializer(typeof(T));
            var reader     = new StreamReader(context.Request.Input, true);

            return((T)serializer.Deserialize(reader));
        }
コード例 #6
0
 public AuthorizationBehavior(IAuthorizationNode authorization, IFubuRequestContext context, IAuthorizationFailureHandler failureHandler, SecuritySettings settings)
 {
     _authorization  = authorization;
     _context        = context;
     _failureHandler = failureHandler;
     _settings       = settings;
 }
コード例 #7
0
        public void Write(string mimeType, IFubuRequestContext context, T resource)
        {
            var serializer = context.Services.GetInstance <IJsonSerializer>();
            var json       = serializer.Serialize(resource.ToDictionary());

            context.Writer.Write(mimeType, json);
        }
コード例 #8
0
        protected static string serializeData <T>(IFubuRequestContext context, T target)
        {
            var serializer = context.Services.GetInstance <IJsonSerializer>();
            var text       = serializer.Serialize(target);

            return(text);
        }
コード例 #9
0
ファイル: JsonSerializer.cs プロジェクト: xeno3/fubumvc
        public T Read <T>(IFubuRequestContext context)
        {
            var serializer = new JavaScriptSerializer {
                MaxJsonLength = int.MaxValue
            };

            return(serializer.Deserialize <T>(context.Request.InputText()));
        }
コード例 #10
0
        public virtual AuthorizationRight IsAuthorized(IFubuRequestContext context,
            IEnumerable<IAuthorizationPolicy> policies)
        {
            var result = DetermineRights(context, policies);
            _logger.DebugMessage(() => new AuthorizationResult(result));

            return result;
        }
コード例 #11
0
        public Task <InputMessage> Read(string mimeType, IFubuRequestContext context)
        {
            // read the body of the http request from IHttpRequest
            // read header information and route information from
            // IHttpRequest

            return(new InputMessage().ToCompletionTask());
        }
コード例 #12
0
        public void Write(string mimeType, IFubuRequestContext context, T resource)
        {
            var view = BuildView(context);

            view.Page.ServiceLocator = context.Services;
            view.Page.As <IFubuPage <T> >().Model = resource;
            view.Render(context);
        }
コード例 #13
0
ファイル: FormatterReader.cs プロジェクト: xeno3/fubumvc
        public T Read(string mimeType, IFubuRequestContext context)
        {
            var model = _formatter.Read <T>(context);

            context.Services.GetInstance <IBindingContext>().BindProperties(model);

            return(model);
        }
コード例 #14
0
        public async Task <T> Read(string mimeType, IFubuRequestContext context)
        {
            var model = await _formatter.Read <T>(context).ConfigureAwait(false);

            context.Services.GetInstance <IBindingContext>().BindProperties(model);

            return(model);
        }
コード例 #15
0
        public virtual AuthorizationRight IsAuthorized(IFubuRequestContext context,
                                                       IEnumerable <IAuthorizationPolicy> policies)
        {
            var result = DetermineRights(context, policies);

            _logger.DebugMessage(() => new AuthorizationResult(result));

            return(result);
        }
コード例 #16
0
ファイル: JsonSerializer.cs プロジェクト: xeno3/fubumvc
        public virtual void Write <T>(IFubuRequestContext context, T resource, string mimeType)
        {
            var serializer = new JavaScriptSerializer {
                MaxJsonLength = int.MaxValue
            };
            var text = serializer.Serialize(resource);

            context.Writer.Write(mimeType, text);
        }
コード例 #17
0
ファイル: AuthorizationNode.cs プロジェクト: xeno3/fubumvc
        public AuthorizationRight IsAuthorized(IFubuRequestContext context)
        {
            if (!_policies.Any())
            {
                return(AuthorizationRight.Allow);
            }

            return(AuthorizationRight.Combine(_policies.Select(x => x.RightsFor(context))));
        }
コード例 #18
0
ファイル: XmlFormatter.cs プロジェクト: zzekikaya/fubumvc
        public async Task <T> Read <T>(IFubuRequestContext context)
        {
            var serializer = new XmlSerializer(typeof(T));
            var reader     = new StreamReader(context.Request.Input, true);

            var xml = await reader.ReadToEndAsync().ConfigureAwait(false);

            return((T)serializer.Deserialize(new XmlTextReader(new StringReader(xml))));
        }
コード例 #19
0
        public Task Write(string mimeType, IFubuRequestContext context, T resource)
        {
            var stringWriter = new StringWriter();
            var writer       = new JsonTextWriter(stringWriter);

            _serializer.Serialize(writer, resource);

            return(context.Writer.Write(mimeType, stringWriter.ToString()));
        }
コード例 #20
0
        public IRenderableView BuildView(IFubuRequestContext context)
        {
            if (context.Request.IsAjaxRequest() || context.Services.GetInstance <ICurrentChain>().IsInPartial())
            {
                return(_view.GetPartialView());
            }

            return(_view.GetView());
        }
コード例 #21
0
        public ConditionalService(IServiceLocator services, IFubuRequestContext context)
        {
            _conditions = new Cache <Type, bool>(type =>
            {
                var condition = services.GetInstance(type).As <IConditional>();

                return(condition.ShouldExecute(context));
            });
        }
コード例 #22
0
 public void SetUp()
 {
     ClassUnderTest = new JsonSerializer();
     theFubuRequestContext = MockRepository.GenerateMock<IFubuRequestContext>();
     theHttpRequest = MockRepository.GenerateMock<IHttpRequest>();
     theOutputWriter = new InMemoryOutputWriter();
     theFubuRequestContext.Stub(x => x.Request).Return(theHttpRequest);
     theFubuRequestContext.Stub(x => x.Writer).Return(theOutputWriter);
 }
コード例 #23
0
 public void SetUp()
 {
     ClassUnderTest        = new JsonSerializer();
     theFubuRequestContext = MockRepository.GenerateMock <IFubuRequestContext>();
     theHttpRequest        = MockRepository.GenerateMock <IHttpRequest>();
     theOutputWriter       = new InMemoryOutputWriter();
     theFubuRequestContext.Stub(x => x.Request).Return(theHttpRequest);
     theFubuRequestContext.Stub(x => x.Writer).Return(theOutputWriter);
 }
コード例 #24
0
ファイル: Projection.cs プロジェクト: xeno3/fubumvc
        void IMediaWriter <T> .Write(string mimeType, IFubuRequestContext request, T resource)
        {
            var node    = new DictionaryMediaNode();
            var context = new ProjectionContext <T>(request.Services, new SimpleValues <T>(resource));

            write(context, node);

            request.Writer.Write(mimeType, JsonUtil.ToJson(node.Values));
        }
コード例 #25
0
        public async Task <T> Read <T>(IFubuRequestContext context)
        {
            var serializer = context.Services.GetInstance <IJsonSerializer>();

            var reader = new StreamReader(context.Request.Input);
            var json   = await reader.ReadToEndAsync().ConfigureAwait(false);

            return(serializer.Deserialize <T>(json));
        }
コード例 #26
0
        public ConditionalService(IServiceLocator services, IFubuRequestContext context)
        {
            _conditions = new Cache<Type, bool>(type =>
            {
                var condition = services.GetInstance(type).As<IConditional>();

                return condition.ShouldExecute(context);
            });
        }
コード例 #27
0
        public AggregatedQuery Read(string mimeType, IFubuRequestContext context)
        {
            var messageTypes = context.Service <IClientMessageCache>();
            var serializer   = context.Service <NewtonSoftJsonSerializer>().InnerSerializer();

            var json = context.Request.Input.ReadAllText();


            return(Read(serializer, messageTypes, json));
        }
コード例 #28
0
        public async Task <AggregatedQuery> Read(string mimeType, IFubuRequestContext context)
        {
            var messageTypes = context.Service <IClientMessageCache>();
            var serializer   = context.Service <NewtonSoftJsonSerializer>().InnerSerializer();

            var reader = new StreamReader(context.Request.Input);
            var json   = await reader.ReadToEndAsync().ConfigureAwait(false);

            return(Read(serializer, messageTypes, json));
        }
コード例 #29
0
        public AuthorizationRight RightsFor(IFubuRequestContext request)
        {
            var customerId = request.Models.Get<Customer>().Id;
            var productId = request.Models.Get<Product>().Id;

            var hasPurchasedProduct = request.Service<IRepository>().Get<IPurchaseHistory>(customerId)
                .Any(x => x.ContainsProduct(productId));

            return !hasPurchasedProduct ? AuthorizationRight.Deny : AuthorizationRight.Allow;
        }
コード例 #30
0
        public AuthorizationRight RightsFor(IFubuRequestContext request)
        {
            var customerId = request.Models.Get <Customer>().Id;
            var productId  = request.Models.Get <Product>().Id;

            var hasPurchasedProduct = request.Service <IRepository>().Get <IPurchaseHistory>(customerId)
                                      .Any(x => x.ContainsProduct(productId));

            return(!hasPurchasedProduct ? AuthorizationRight.Deny : AuthorizationRight.Allow);
        }
コード例 #31
0
        public async Task <T> Read(string mimeType, IFubuRequestContext context)
        {
            var json = await context.Services.GetInstance <NewtonSoftJsonReader>().GetInputText().ConfigureAwait(false);

            var values = new JObjectValues(json);

            var value = context.Services.GetInstance <IObjectResolver>().BindModel(typeof(T), values).Value.As <T>();

            return(value);
        }
コード例 #32
0
ファイル: ConnegSamples.cs プロジェクト: xeno3/fubumvc
 // This signature is necessary because we are assuming
 // that some Writer's will be able to produce representations
 // for multiple mimetype's
 public void Write(string mimeType, IFubuRequestContext context, SomeResource resource)
 {
     if (mimeType == "special/format")
     {
         writeSpecial(resource);
     }
     else
     {
         writeJson(resource);
     }
 }
コード例 #33
0
 // This signature is necessary because we are assuming
 // that some Writer's will be able to produce representations
 // for multiple mimetype's
 public Task Write(string mimeType, IFubuRequestContext context, SomeResource resource)
 {
     if (mimeType == "special/format")
     {
         return(writeSpecial(resource));
     }
     else
     {
         return(writeJson(resource));
     }
 }
コード例 #34
0
        Task IMediaWriter <T> .Write(string mimeType, IFubuRequestContext request, T resource)
        {
            var node    = new DictionaryMediaNode();
            var context = new ProjectionContext <T>(request.Services, new SimpleValues <T>(resource));

            write(context, node);

            var serializer = request.Services.GetInstance <IJsonSerializer>();

            return(request.Writer.Write(mimeType, serializer.Serialize(node.Values, false)));
        }
コード例 #35
0
        public void Write <T>(IFubuRequestContext context, T target, string mimeType)
        {
            var serializer = new XmlSerializer(typeof(T));

            context.Writer.Write(mimeType, stream => {
                var xmlWriter = new XmlTextWriter(stream, Encoding.Unicode)
                {
                    Formatting = Formatting.None
                };

                serializer.Serialize(xmlWriter, target);
            });
        }
コード例 #36
0
        public AuthorizationRight DetermineRights(IFubuRequestContext context, IEnumerable<IAuthorizationPolicy> policies)
        {
            // Check every authorization policy for this endpoint
            var rights = policies.Select(policy => {
                var policyRights = policy.RightsFor(context);

                _logger.DebugMessage(() => new AuthorizationPolicyResult(policy, policyRights));

                return policyRights;
            });

            // Combine the results
            var result = AuthorizationRight.Combine(rights);
            return result;
        }
コード例 #37
0
        public AuthorizationRight DetermineRights(IFubuRequestContext context, IEnumerable <IAuthorizationPolicy> policies)
        {
            // Check every authorization policy for this endpoint
            var rights = policies.Select(policy => {
                var policyRights = policy.RightsFor(context);

                _logger.DebugMessage(() => new AuthorizationPolicyResult(policy, policyRights));

                return(policyRights);
            });

            // Combine the results
            var result = AuthorizationRight.Combine(rights);

            return(result);
        }
        public AuthorizationRight RightsFor(IFubuRequestContext request)
        {
            var currentSdkUser = request.Service<ICurrentSDKUser>();
            var tokenRepository = request.Service<IAuthenticationTokenRepository>();
            var logger = request.Service<ILogger>();
            var authToken = request.Models.Get<AuthenticationTokenRequest>();

            //Workaround: RightsFor is getting called multiple times because of a Fubu bug
            if (request.Models.Has<IAuthenticationToken>()) return AuthorizationRight.Allow;

            var token = authToken.authToken;

            if (token.IsEmpty())
            {
                if (currentSdkUser.IsAuthenticated)
                {
                    logger.LogDebug("No AuthToken was found in this request but a user is already authenticated. Using the current user's credentials.");
                    return AuthorizationRight.Allow;
                }

                return AuthorizationRight.Deny;
            }

            logger.LogDebug("Authentication token {0} found.", token);

            var authenticationToken = tokenRepository.RetrieveByToken(token);
            if (authenticationToken == null)
            {
                return AuthorizationRight.Deny;

            }

            logger.LogDebug("Authentication token {0} found and validated for user {1}.", authenticationToken, authenticationToken);
            request.Models.Set(authenticationToken);

            currentSdkUser.SetUser(authenticationToken.Username);

            return AuthorizationRight.Allow;
        }
コード例 #39
0
 public bool ShouldExecute(IFubuRequestContext context)
 {
     throw new NotImplementedException();
 }
コード例 #40
0
ファイル: Always.cs プロジェクト: kingreatwill/fubumvc
 public bool ShouldExecute(IFubuRequestContext context)
 {
     return true;
 }
コード例 #41
0
 public AuthorizationRight RightsFor(IFubuRequestContext request)
 {
     var principal = Thread.CurrentPrincipal;
     return DetermineRights(principal);
 }
コード例 #42
0
 public AuthorizationRight RightsFor(IFubuRequestContext request)
 {
     return PrincipalRoles.IsInRole(_role) ? AuthorizationRight.Allow : AuthorizationRight.None;
 }
コード例 #43
0
 public bool ShouldExecute(IFubuRequestContext context)
 {
     return _condition();
 }
コード例 #44
0
 public ChainAuthorizor(IFubuRequestContext context, ITypeResolver types)
 {
     _context = context;
     _types = types;
 }
コード例 #45
0
 public AuthorizationRight RightsFor(IFubuRequestContext request)
 {
     return AuthorizationRight.Deny;
 }
コード例 #46
0
 public AuthorizationRight RightsFor(IFubuRequestContext request)
 {
     throw new NotImplementedException();
 }
コード例 #47
0
 public AuthorizationRight RightsFor(IFubuRequestContext request)
 {
     return AuthorizationCheck.IsAuthorized ? AuthorizationRight.Allow : AuthorizationRight.Deny;
 }