public void Aggregate_argument_null_exception()
 {
     //ARRANGE
     //ACT
     //ASSERT
     Assert.Throws <ArgumentNullException>(() => EnumerableExtensions.Aggregate(null));
 }
        public void Aggregate_strings_to_a_single_string()
        {
            //ARRANGE
            var expected = "1\r\n2";
            var source   = new[] { "1", "2" };
            //ACT
            var result = EnumerableExtensions.Aggregate(source);

            //ASSERT
            Assert.AreEqual(expected, result);
        }
예제 #3
0
        /// <summary>
        /// Gets the aggragated message.
        /// </summary>
        /// <returns></returns>
        public string GetAggragatedMessage()
        {
            if (ResponseMessages == null)
            {
                return(string.Empty);
            }

            var messages = ResponseMessages.Select(m => m.Message);

            return(EnumerableExtensions.Aggregate(messages));
        }
예제 #4
0
        public async Task Handle(HttpPostResponseInboundContext context)
        {
            try
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }

                var responseStatus = await this._responseParser.Parse(context);

                var samlResponse = responseStatus.StatusResponse as TokenResponse;

                var hasToken = (samlResponse != null && samlResponse.Assertions != null && samlResponse.Assertions.Length == 1);
                context.HasSecurityToken = hasToken;
                this._logProvider.LogMessage(String.Format("Response is{0} a security token carrier.", hasToken ? String.Empty : " not"));
                if (hasToken)
                {
                    var token          = samlResponse.Assertions[0];
                    var handlerContext = new HandleTokenContext(token, responseStatus.FederationPartyId, context.AuthenticationMethod, responseStatus.SamlInboundMessage.RelayState);
                    var response       = await this._tokenHandler.HandleToken(handlerContext);

                    if (!response.IsValid)
                    {
                        throw new Exception(EnumerableExtensions.Aggregate(response.ValidationResults.Select(x => x.ErrorMessage)));
                    }
                    context.Identity = response.Identity;
                    if (response.Token != null)
                    {
                        context.Properties.Add("ValidFrom", response.Token.ValidFrom);
                        context.Properties.Add("ValidTo", response.Token.ValidTo);
                    }
                }
            }
            catch (Exception ex)
            {
                Exception innerEx;
                this._logProvider.TryLogException(ex, out innerEx);
                if (innerEx != null)
                {
                    throw innerEx;
                }
            }
        }
        public async Task ValidateIRequest(SamlInboundRequestContext request)
        {
            this._logProvider.LogMessage("Validating saml response.");
            var validationContext = new SamlRequestValidationContext(request);
            var rules             = this._ruleFactory.GetValidationRules();
            var seed = new Func <ValidationContext, Task>(c =>
            {
                if (!c.IsValid)
                {
                    throw new Exception(EnumerableExtensions.Aggregate(validationContext.ValidationResult.Select(x => x.ErrorMessage)));
                }
                return(Task.CompletedTask);
            });
            var del = rules
                      .Reverse()
                      .Aggregate(seed, (next, r) => new Func <ValidationContext, Task>(ctx => r.Validate(ctx, next)));

            await del(validationContext);
        }
예제 #6
0
        public async Task <ClaimsIdentity> Handle(HttpPostResponseContext context)
        {
            try
            {
                //ToDo handle this properly, response handling, token validation, claims generation etc
                var elements       = context.Form;
                var responseBase64 = elements[HttpRedirectBindingConstants.SamlResponse];
                var responseBytes  = Convert.FromBase64String(responseBase64);
                var responseText   = Encoding.UTF8.GetString(responseBytes);

                var relayState = await this._relayStateHandler.GetRelayStateFromFormData(elements);

                this._logProvider.LogMessage(String.Format("Response recieved:\r\n {0}", responseText));
                var responseStatus = ResponseHelper.ParseResponseStatus(responseText, this._logProvider);
                ResponseHelper.EnsureSuccessAndThrow(responseStatus);

                using (var reader = new StringReader(responseText))
                {
                    using (var xmlReader = XmlReader.Create(reader))
                    {
                        var handlerContext = new HandleTokenContext(xmlReader, relayState, context.AuthenticationMethod);
                        var response       = await this._tokenHandler.HandleToken(handlerContext);

                        if (!response.IsValid)
                        {
                            throw new Exception(EnumerableExtensions.Aggregate(response.ValidationResults.Select(x => x.ErrorMessage)));
                        }
                        return(response.Identity);
                    }
                }
            }
            catch (Exception ex)
            {
                Exception innerEx;
                this._logProvider.TryLogException(ex, out innerEx);
                if (innerEx != null)
                {
                    throw innerEx;
                }
            }
            return(null);
        }
        public async Task ValidateResponse(SamlInboundResponseContext response)
        {
            this._logProvider.LogMessage("Validating saml response.");
            var context = new SamlResponseValidationContext(response);
            var rules   = this._ruleFactory.GetValidationRules(r => r.Scope == (response.IsIdpInitiated ? RuleScope.IdpInitiated : RuleScope.SPInitiated));
            var seed    = new Func <ValidationContext, Task>(c =>
            {
                if (!c.IsValid)
                {
                    throw new Exception(EnumerableExtensions.Aggregate(context.ValidationResult.Select(x => x.ErrorMessage)));
                }
                context.ResponseContext.Validated();
                return(Task.CompletedTask);
            });
            var del = rules
                      .Reverse()
                      .Aggregate(seed, (next, r) => new Func <ValidationContext, Task>(ctx => r.Validate(ctx, next)));

            await del(context);
        }