Ejemplo n.º 1
0
        public virtual ActionResult Post(SignOnForm model)
        {
            if (model == null)
            {
                return(HttpNotFound());
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // get the establishment for this email address
            var establishment = _services.QueryProcessor.Execute(
                new GetEstablishmentByEmailQuery(model.EmailAddress)
            {
                EagerLoad = new Expression <Func <Establishment, object> >[]
                {
                    e => e.SamlSignOn,
                }
            }
                );

            PushToSamlSso(establishment, model.ReturnUrl);

            // wait for the authn response
            return(new EmptyResult());
        }
Ejemplo n.º 2
0
            public void ReturnsView_WhenModelState_IsInvalid()
            {
                var services   = CreateSignOnServices();
                var controller = new SignOnController(services);

                controller.ModelState.AddModelError("SomeProperty", "SomeMessage");
                var model = new SignOnForm {
                    EmailAddress = "invalid email"
                };

                var result = controller.Post(model);

                result.ShouldNotBeNull();
                result.ShouldBeType <ViewResult>();
                var viewResult = (ViewResult)result;

                viewResult.ViewName.ShouldEqual(string.Empty);
                viewResult.Model.ShouldNotBeNull();
                viewResult.Model.ShouldBeType <SignOnForm>();
                var form = (SignOnForm)viewResult.Model;

                form.ShouldEqual(model);
                form.EmailAddress.ShouldEqual(model.EmailAddress);
                form.ReturnUrl.ShouldEqual(model.ReturnUrl);
            }
Ejemplo n.º 3
0
        public virtual ActionResult Get(string returnUrl)
        {
            // detect SAML SSO from skin cookie
            var skin = HttpContext.SkinCookie();
            if (!string.IsNullOrWhiteSpace(skin))
            {
                // get the establishment for this skin
                var establishment = _services.QueryProcessor.Execute(
                    new GetEstablishmentByUrlQuery(skin)
                    {
                        EagerLoad = new Expression<Func<Establishment, object>>[]
                        {
                            e => e.SamlSignOn,
                        }
                    }
                );
                if (establishment != null && establishment.HasSamlSignOn())
                {
                    PushToSamlSso(establishment, returnUrl);

                    // wait for the authn response
                    return new EmptyResult();
                }
            }

            var model = new SignOnForm(HttpContext, returnUrl);
            return View(model);
        }
Ejemplo n.º 4
0
        public virtual ActionResult Get(string returnUrl)
        {
            // detect SAML SSO from skin cookie
            var skin = HttpContext.SkinCookie();

            if (!string.IsNullOrWhiteSpace(skin))
            {
                // get the establishment for this skin
                var establishment = _services.QueryProcessor.Execute(
                    new GetEstablishmentByUrlQuery(skin)
                {
                    EagerLoad = new Expression <Func <Establishment, object> >[]
                    {
                        e => e.SamlSignOn,
                    }
                }
                    );
                if (establishment != null && establishment.HasSamlSignOn())
                {
                    PushToSamlSso(establishment, returnUrl);

                    // wait for the authn response
                    return(new EmptyResult());
                }
            }

            var model = new SignOnForm(HttpContext, returnUrl);

            return(View(model));
        }
Ejemplo n.º 5
0
 public void IsInvalidWhen_IsWhiteSpace()
 {
     var validator = new SignOnValidator(null);
     var model = new SignOnForm { EmailAddress = " \t " };
     var results = validator.Validate(model);
     results.IsValid.ShouldBeFalse();
     results.Errors.Count.ShouldBeInRange(1, int.MaxValue);
     var error = results.Errors.SingleOrDefault(e => e.PropertyName == PropertyName);
     error.ShouldNotBeNull();
     // ReSharper disable PossibleNullReferenceException
     error.ErrorMessage.ShouldEqual(
         SignOnValidator.FailedBecauseEmailAddressWasEmpty);
     // ReSharper restore PossibleNullReferenceException
 }
Ejemplo n.º 6
0
        public virtual ActionResult Post(SignOnForm model)
        {
            if (model == null) return HttpNotFound();

            if (!ModelState.IsValid) return View(model);

            // get the establishment for this email address
            var establishment = _services.QueryProcessor.Execute(
                new GetEstablishmentByEmailQuery(model.EmailAddress)
                {
                    EagerLoad = new Expression<Func<Establishment, object>>[]
                    {
                        e => e.SamlSignOn,
                    }
                }
            );

            // update the provider metadata
            _services.CommandHandler.Handle(
                new UpdateSamlSignOnMetadataCommand
                {
                    SamlSignOn = establishment.SamlSignOn,
                }
            );

            // clear the email from temp data
            TempData.SigningEmailAddress(null);

            // send the authn request
            _services.SamlServiceProvider.SendAuthnRequest(
                establishment.SamlSignOn.SsoLocation,
                establishment.SamlSignOn.SsoBinding.AsSaml2SsoBinding(),
                _services.ConfigurationManager.SamlRealServiceProviderEntityId,
                model.ReturnUrl ?? Url.Action(MVC.Identity.MyHome.Get()),
                HttpContext
            );

            // wait for the authn response
            return new EmptyResult();
        }
Ejemplo n.º 7
0
 public void ThenIShouldSeeTheSignonWindow()
 {
     signOnForm = new SignOnForm();
 }
Ejemplo n.º 8
0
 public virtual ActionResult Get(string returnUrl)
 {
     var model = new SignOnForm(HttpContext, returnUrl);
     return View(model);
 }
Ejemplo n.º 9
0
            public void ReturnsView_WhenModelState_IsInvalid()
            {
                var services = CreateSignOnServices();
                var controller = new SignOnController(services);
                controller.ModelState.AddModelError("SomeProperty", "SomeMessage");
                var model = new SignOnForm { EmailAddress = "invalid email" };

                var result = controller.Post(model);

                result.ShouldNotBeNull();
                result.ShouldBeType<ViewResult>();
                var viewResult = (ViewResult)result;
                viewResult.ViewName.ShouldEqual(string.Empty);
                viewResult.Model.ShouldNotBeNull();
                viewResult.Model.ShouldBeType<SignOnForm>();
                var form = (SignOnForm)viewResult.Model;
                form.ShouldEqual(model);
                form.EmailAddress.ShouldEqual(model.EmailAddress);
                form.ReturnUrl.ShouldEqual(model.ReturnUrl);
            }
Ejemplo n.º 10
0
 public void Implements_IReturnUrl()
 {
     var model = new SignOnForm();
     model.ShouldImplement<IReturnUrl>();
 }
Ejemplo n.º 11
0
        public virtual ActionResult Post(SignOnForm model)
        {
            if (model == null) return HttpNotFound();

            if (!ModelState.IsValid) return View(model);

            // get the establishment for this email address
            var establishment = _services.QueryProcessor.Execute(
                new GetEstablishmentByEmailQuery(model.EmailAddress)
                {
                    EagerLoad = new Expression<Func<Establishment, object>>[]
                    {
                        e => e.SamlSignOn,
                    }
                }
            );

            PushToSamlSso(establishment, model.ReturnUrl);

            // wait for the authn response
            return new EmptyResult();
        }
Ejemplo n.º 12
0
 public virtual JsonResult ValidateEmailAddress(
     [CustomizeValidator(Properties = SignOnForm.EmailAddressPropertyName)] SignOnForm model)
 {
     // form is valid unless email address is eligible
     return(ValidateRemote(SignOnForm.EmailAddressPropertyName));
 }
Ejemplo n.º 13
0
 public void IsValidWhen_IsValidEmailAddress_AndBelongsToMemberEstablishment()
 {
     var establishment = new Establishment
     {
         IsMember = true,
         EmailDomains = new[] { new EstablishmentEmailDomain { Value = "@domain.tld", } }
     };
     var entities = new Mock<IQueryEntities>(MockBehavior.Strict).Initialize();
     entities.Setup(m => m.Query<Establishment>()).Returns(new[] { establishment }.AsQueryable);
     var validator = new SignOnValidator(entities.Object);
     var model = new SignOnForm { EmailAddress = "*****@*****.**" };
     var results = validator.Validate(model);
     var error = results.Errors.SingleOrDefault(e => e.PropertyName == PropertyName);
     error.ShouldBeNull();
 }
Ejemplo n.º 14
0
 public void IsInvalidWhen_MatchingEstablishment_IsNotMember()
 {
     const string emailAddress = "*****@*****.**";
     var establishment = new Establishment
     {
         IsMember = false,
         EmailDomains = new[] { new EstablishmentEmailDomain { Value = "@domain.tld", } }
     };
     var entities = new Mock<IQueryEntities>(MockBehavior.Strict).Initialize();
     entities.Setup(m => m.Query<Establishment>()).Returns(new[] { establishment }.AsQueryable);
     var validator = new SignOnValidator(entities.Object);
     var model = new SignOnForm { EmailAddress = emailAddress };
     var results = validator.Validate(model);
     results.IsValid.ShouldBeFalse();
     results.Errors.Count.ShouldBeInRange(1, int.MaxValue);
     var error = results.Errors.SingleOrDefault(e => e.PropertyName == PropertyName);
     error.ShouldNotBeNull();
     // ReSharper disable PossibleNullReferenceException
     error.ErrorMessage.ShouldEqual(string.Format(
         SignOnValidator.FailedBecauseEstablishmentIsNotEligible, emailAddress));
     // ReSharper restore PossibleNullReferenceException
 }