Example #1
0
        public ActionResult RemoveFromCart(Int32 cartItemID)
        {
            var importantCartUpdates = new List <String>();

            var user = _userService.Get(IdentityHelpers.GetUserId(this.User.Identity));

            var cartItems = _cartService.GetCart(user);

            if (cartItems.FirstOrDefault(ci => ci.CartItemID == cartItemID) != null)
            {
                _cartService.RemoveItemFromCart(user, cartItemID);

                _uow.Save();

                importantCartUpdates.Add("The item has been removed from your cart.");
            }
            else
            {
                return(new HttpUnauthorizedResult());
            }

            TempData.Add("ImportantCartUpdates", importantCartUpdates);

            return(RedirectToAction("Index"));
        }
Example #2
0
        //Get user profile date in terms of claims when calling /connect/userinfo
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            try
            {
                var email = context.Subject.Claims.FirstOrDefault(x => x.Type == "sub");

                if (email == null)
                {
                    _logger.LogError("No claim of type 'sub'");
                }
                else if (email.Value == null)
                {
                    _logger.LogError("email in 'sub' claim is empty");
                }
                else
                {
                    var user = await UserServices.FindAsync(email.Value);

                    if (user != null)
                    {
                        var claims = IdentityHelpers.GetUserClaims(user);
                        context.IssuedClaims = claims.Where(x => context.RequestedClaimTypes.Contains(x.Type)).ToList();
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("error happend while setting issued claims + \n" + ex.Message);
            }
        }
        protected void CodeSubmit_Click(object sender, EventArgs e)
        {
            bool rememberMe = false;

            bool.TryParse(Request.QueryString["RememberMe"], out rememberMe);

            var result = signinManager.TwoFactorSignIn <ApplicationUser, string>(HiddenField["Provider"].ToString(), Code.Text, isPersistent: rememberMe, rememberBrowser: RememberBrowser.Checked);

            switch (result)
            {
            case SignInStatus.Success:
                IdentityHelpers.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                break;

            case SignInStatus.LockedOut:
                Response.Redirect("/Account/Lockout.aspx");
                break;

            case SignInStatus.Failure:
            default:
                Code.ErrorText = "Invalid Code";
                Code.IsValid   = false;
                break;
            }
        }
Example #4
0
        public CohortBuilder()
        {
            var id = IdentityHelpers.GetNextCohortId();

            Messages = 1;

            //todo: most of this should be pushed into WithXXX methods
            _commitment = new Commitment
            {
                Id                         = id,
                Reference                  = HashingHelper.Encode(id),
                CommitmentStatus           = CommitmentStatus.Active,
                EditStatus                 = EditStatus.Employer,
                CreatedOn                  = System.DateTime.Now,
                LastAction                 = LastAction.None,
                TransferSenderId           = null,
                TransferSenderName         = "",
                TransferApprovalStatus     = null,
                LastUpdatedByEmployerName  = "",
                LastUpdatedByEmployerEmail = "",
                LastUpdatedByProviderName  = "",
                LastUpdatedByProviderEmail = ""
            };

            _apprenticeshipBuilders = new List <ApprenticeshipBuilder>();
        }
Example #5
0
        public static bool SignIn(string userName, string password, bool RememberMeCheckBox)
        {
            // Validate the user password
            var manager       = HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var signinManager = HttpContext.Current.GetOwinContext().GetUserManager <ApplicationSignInManager>();

            // This doen't count login failures towards account lockout
            // To enable password failures to trigger lockout, change to shouldLockout: true
            var result = signinManager.PasswordSignIn(userName, password, isPersistent: false, shouldLockout: true);

            switch (result)
            {
            case SignInStatus.Success:
                CustomSignIn(userName, password, RememberMeCheckBox);
                IdentityHelpers.RedirectToReturnUrl(HttpContext.Current.Request.QueryString["ReturnUrl"], HttpContext.Current.Response);
                break;

            case SignInStatus.LockedOut:
                HttpContext.Current.Response.Redirect("~/Account/Lockout.aspx");
                break;

            case SignInStatus.RequiresVerification:
                HttpContext.Current.Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn.aspx?ReturnUrl={0}&RememberMe={1}",
                                                                    HttpContext.Current.Request.QueryString["ReturnUrl"],
                                                                    false),
                                                      true);
                break;

            case SignInStatus.Failure:
            default:
                return(false);
            }
            return(true);
        }
Example #6
0
        public ActionResult AddDetailsPost(AddDetailsViewModel model)
        {
            // Create a user too if missing
            var customer = _service.GetCustomer(model.UserName);

            if (customer == null)
            {
                var register = new RegisterInputModel()
                {
                    UserName  = model.UserName,
                    Email     = model.Email,
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    Gender    = model.Gender,
                    Avatar    = model.Avatar
                };
                _service.Register(register);
            }

            var identity = IdentityHelpers.Create(model.UserName, model.Email, model.Gender, model.Avatar);

            AuthenticationManager.SignIn(new AuthenticationProperties {
                IsPersistent = true
            }, identity);
            return(RedirectToLocal(model.ReturnUrl));
        }
Example #7
0
        public ActionResult AddToCart(Int32 productID, Int32 quantity = 1)
        {
            var product = _productService.Get(productID);

            if (product == null)
            {
                return(new HttpNotFoundResult("Product could not be found."));
            }

            var user = _userService.Get(IdentityHelpers.GetUserId(this.User.Identity));

            var cartItem = _cartService.GetCart(user).FirstOrDefault(ci => ci.ProductID == productID);

            if (cartItem != null)
            {
            }

            List <String> cartUpdates = _cartService.AddItemToCart(product, user, quantity);

            if (!cartUpdates.Any())
            {
                _uow.Save();
            }

            TempData.Add("ImportantCartUpdates", cartUpdates);

            return(RedirectToAction("Index"));
        }
        //UNDONE POST ONLY
        //
        // POST: /Checkout/Checkout
        //[ValidateAntiForgeryToken]
        public ActionResult Checkout()
        {
            //Get current cart items
            var currentCartItems = _shoppingCartService
                                   .GetCartWithAssociatedProducts(ShoppingCartHelpers.GetShoppingCartID(this.ControllerContext)).ToList();

            //If there are no cart items, redirect to the shoppingcart index
            if (!currentCartItems.Any())
            {
                return(RedirectToAction("Index", "ShoppingCart"));
            }

            //Construct the model that will be the container for the collected checkout information
            CheckoutViewModel checkoutModel = new CheckoutViewModel(currentCartItems, Guid.NewGuid().ToString("N"));

            //Cache the container model at a well known location unique to the user, sliding expiration of 10 minutes
            CacheHelpers.InsertCheckoutInstanceIntoCache(checkoutModel, this.ControllerContext);

            //Construct & hydrate the first step viewmodel
            var availableAddressesForUser = _userService.GetUserWithAddresses(IdentityHelpers.GetUserId(User.Identity)).Addresses.AsEnumerable();

            var model = checkoutModel.GetShippingViewModel(availableAddressesForUser);

            #region TestInformation
#if DEBUG
            model.Email       = "*****@*****.**";
            model.PhoneNumber = "1234567890";
#endif
            #endregion

            return(View("ShippingInformation", model));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsEditing())
            {
                ReportEditing();
                return;
            }
            if (NeedsConfig())
            {
                ReportNeedsConfiguration();
                return;
            }

            if ((!ParentWebPart.AllowAnonymousLaunch) && (!Request.IsAuthenticated))
            {
                throw new HttpException(403, "You must be signed in to continue.");
            }

            var actingUserName = Request.IsAuthenticated ?
                                 IdentityHelpers.GetUsedEmail(Page.User as IClaimsPrincipal) :
                                 "(anonymous)";

            SessionManager.SaveIntegrationSession(Session,
                                                  ParentWebPart.EndpointUri, ParentWebPart.ApiKey,
                                                  string.Empty, actingUserName);

            try {
                var client = new LabOnDemandApiClient(ParentWebPart.EndpointUri, ParentWebPart.ApiKey);

                var labProfileIds = ParentWebPart.LabProfileIds.Split(',');

                var labTable = new Table {
                    CssClass = "labTable"
                };
                AddHeader(labTable);
                var count = 0;
                foreach (var labProfileIdString in labProfileIds)
                {
                    AddComment(labProfileIdString);
                    int labProfileId;
                    if (!int.TryParse(labProfileIdString, out labProfileId))
                    {
                        AddComment("(skipped)");
                        continue;
                    }
                    count++;
                    var alternate  = (count % 2) == 0;
                    var labProfile = client.LabProfile(labProfileId);
                    labTable.Rows.Add(GetFirstRow(labProfile, alternate));
                    labTable.Rows.Add(GetSecondRow(labProfile, alternate));
                }
                Controls.Add(labTable);

                SessionManager.SessionAllowsAnonymous(Session, ParentWebPart.AllowAnonymousLaunch);
            }
            catch (Exception ex) {
                AddComment(ex.ToString());
                AddLiteral("An error occurred retrieving the requested lab information.");
            }
        }
Example #10
0
        protected void Reset_Click(object sender, EventArgs e)
        {
            string code = IdentityHelpers.GetCodeFromRequest(Request);

            if (code != null)
            {
                var manager = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();

                var user = manager.FindByEmail(Email.Text);
                if (user == null)
                {
                    ErrorMessage.Text = "No user found";
                    return;
                }
                var result = manager.ResetPassword(user.Id, code, Password.Text);
                if (result.Succeeded)
                {
                    Response.Redirect("~/Account/ResetPasswordConfirmation.aspx");
                    return;
                }
                ErrorMessage.Text = result.Errors.FirstOrDefault();
                return;
            }

            ErrorMessage.Text = "An error has occurred";
        }
Example #11
0
        protected void RegisterButton_Click(object sender, EventArgs e)
        {
            // DXCOMMENT: Your Registration logic

            ApplicationUserManager manager = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var signInManager = Context.GetOwinContext().Get <ApplicationSignInManager>();
            var user          = new ApplicationUser()
            {
                UserName = RegisterUserNameTextBox.Text,
                FullName = FullNameTextBox.Text,
                Email    = EmailTextBox.Text,
            };
            IdentityResult result = manager.Create(user, PasswordButtonEdit.Text);

            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                string code        = manager.GenerateEmailConfirmationToken(user.Id);
                string callbackUrl = IdentityHelpers.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

                AuthHelper.SignIn(user.UserName, PasswordButtonEdit.Text, false);
                IdentityHelpers.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
            else
            {
                ErrorMessage.Text = result.Errors.FirstOrDefault();
            }
        }
Example #12
0
    /// <summary>
    /// If Authentication is successful, JWT tokens are generated.
    /// </summary>
    public virtual IToken GenerateToken(string username, IList <string> roles, DateTime tokenExpiredDate)
    {
        var tokenHandler = new JwtSecurityTokenHandler();

        //Kullanıcıya ait roller Tokene Claim olarak ekleniyor
        var claimsIdentityList = new ClaimsIdentity(roles.Select(r => new Claim(ClaimTypes.Role, r)));

        //Kullanıcını UserName 'i tokena claim olarak ekleniyor
        claimsIdentityList.AddClaim(new Claim(ClaimTypes.Name, username));

        //Kullanıcını UserName 'i tokena claim olarak ekleniyor
        claimsIdentityList.AddClaim(new Claim(ClaimTypes.Expired, value: tokenExpiredDate.ToString()));

        //Token üretimi için gerekli bilgiler , _tokenManagement => appsettings.json dosyasını okur
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject            = claimsIdentityList,
            Issuer             = _tokenManagement.Issuer,
            Audience           = _tokenManagement.Audience,
            Expires            = tokenExpiredDate,
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_tokenManagement.Secret)), SecurityAlgorithms.HmacSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);//Token Ãœretimi

        return(new MilvaToken
        {
            AccessToken = tokenHandler.WriteToken(token),
            Expiration = tokenExpiredDate,
            RefreshToken = IdentityHelpers.CreateRefreshToken()
        });
    }
Example #13
0
        public static async Task ValidateApiKey(ApiKeyValidateIdentityContext context, String schema = null)
        {
            var dbContext = ServiceLocator.Current.GetService <IDbContext>();
            var host      = ServiceLocator.Current.GetService <IApplicationHost>();

            schema = schema ?? "a2security";
            var findUsersql = $"[{schema}].[FindApiUserByApiKey]";
            var writeLogSql = $"[{schema}].[WriteLog]";

            var prms = new ExpandoObject();

            prms.Set("Host", context.Host);
            prms.Set("ApiKey", context.ApiKey);

            var user = await dbContext.LoadAsync <ApiAppUser>(host.CatalogDataSource, findUsersql, prms);

            if (user != null)
            {
                if (IdentityHelpers.IsValidIPAddress(user.AllowIP, context.Host))
                {
                    context.Claims      = CreateClaims(user);
                    context.IsValidated = true;
                }
                else
                {
                    var fo = new ExpandoObject();
                    fo.Set("UserId", user.Id);
                    fo.Set("SeverityChar", "W");
                    fo.Set("Code", 66 /*Api IP forbidden*/);
                    fo.Set("Message", $"expected: '{user.AllowIP}', actual:'{context.Host}'");
                    await dbContext.ExecuteExpandoAsync(host.CatalogDataSource, writeLogSql, fo);
                }
            }
        }
        private async Task <(Sensor, Sensor)> SeedDefaultCaseAsync()
        {
            var roleManager = IdentityHelpers.BuildRoleManager(ApplicationDbContextHelper.BuildTestDbContext());
            await roleManager.CreateAsync(new IdentityRole <long>("Admin"));

            foreach (var userName in new[] { "normal-user-1", "normal-user-2", "normal-user-3", "admin-user" })
            {
                await _userManager.CreateAsync(new User
                {
                    UserName           = userName,
                    NormalizedUserName = userName.ToUpperInvariant(),
                    SecurityStamp      = Guid.NewGuid().ToString()
                }, "normal-password");
            }
            var admin = await _userManager.FindByNameAsync("admin-user");

            await _userManager.AddToRoleAsync(admin, "Admin");

            var deviceName = "device";
            var device     = new Device {
                Name               = deviceName,
                NormalizedName     = deviceName.ToUpperInvariant(),
                AuthenticationType = DeviceAuthenticationType.PreSharedKey,
                PreSharedKey       = "key"
            };

            _dbContext.Devices.Add(device);

            var name1   = "sensor-1";
            var sensor1 = new Sensor {
                Name = name1, NormalizedName = name1.ToUpperInvariant(), Device = device
            };

            _dbContext.Sensors.Add(sensor1);
            var name2   = "sensor-2";
            var sensor2 = new Sensor {
                Name = name2, NormalizedName = name2.ToUpperInvariant(), Device = device
            };

            _dbContext.Sensors.Add(sensor2);

            var user1 = await _userManager.FindByNameAsync("normal-user-1");

            var user2 = await _userManager.FindByNameAsync("normal-user-2");

            _dbContext.UserSensors.Add(new UserSensor {
                UserId = user1.Id, Sensor = sensor1
            });
            _dbContext.UserSensors.Add(new UserSensor {
                UserId = user1.Id, Sensor = sensor2
            });
            _dbContext.UserSensors.Add(new UserSensor {
                UserId = user2.Id, Sensor = sensor1
            });

            await _dbContext.SaveChangesAsync();

            return(sensor1, sensor2);
        }
Example #15
0
 public ApprenticeshipBuilder(CohortBuilder cohortBuilder)
 {
     CohortBuilder = cohortBuilder;
     Id            = IdentityHelpers.GetNextApprenticeshipId();
     Started       = ApprenticeshipStartedOption.Random;
     Stopped       = ApprenticeshipStopOption.NotStopped;
     Cost          = 2000;
 }
Example #16
0
 protected void Application_Start()
 {
     AreaRegistration.RegisterAllAreas();
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);
     BundleConfig.RegisterBundles(BundleTable.Bundles);
     IdentityHelpers.SeedRolesAndUsers();
 }
Example #17
0
 public DashboardServiceTest()
 {
     _initial     = SystemClock.Instance.GetCurrentInstant();
     _dbContext   = ApplicationDbContextHelper.BuildTestDbContext();
     _userManager = IdentityHelpers.BuildUserManager(ApplicationDbContextHelper.BuildTestDbContext());
     _roleManager = IdentityHelpers.BuildRoleManager(ApplicationDbContextHelper.BuildTestDbContext());
     _service     = new DashboardService(_dbContext, _userManager);
 }
Example #18
0
 public UserManagementServiceTest()
 {
     _clock       = new FakeClock(SystemClock.Instance.GetCurrentInstant());
     _dbContext   = ApplicationDbContextHelper.BuildTestDbContext(_clock);
     _userManager = IdentityHelpers.BuildUserManager(ApplicationDbContextHelper.BuildTestDbContext(_clock));
     _roleManager = IdentityHelpers.BuildRoleManager(ApplicationDbContextHelper.BuildTestDbContext(_clock));
     _service     = new UserManagementService(_dbContext, _userManager, _roleManager, new NullLogger <UserManagementService>(), _clock);
 }
        public ActionResult DisassociateAddress(Int32 addressId, String diff = "")
        {
            _userService.DisassociateAddress(IdentityHelpers.GetUserId(User.Identity), addressId);

            _uow.Save();

            return(RedirectToAction("EditAddresses", "Account"));
        }
        //
        // GET: /Account/EditProfile
        public ActionResult EditProfile()
        {
            var user = _userService.GetUserWithProfile(IdentityHelpers.GetUserId(User.Identity));

            var model = Mapper.Map <UserProfileViewModel>(user.UserProfile);

            return(View(model));
        }
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            ApplicationDbContext context = new ApplicationDbContext();

            IdentityHelpers.SeedIdentities(context);
        }
        //
        // GET: /Account/EditEmail
        public ActionResult EditEmail()
        {
            var user = _userService.Get(IdentityHelpers.GetUserId(User.Identity));

            var model = new EditEmailViewModel()
            {
                CurrentEmailAddress = user.Email
            };

            return(View(model));
        }
        private void SignIn(User user, bool isPersistent)
        {
            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);

            var identity = IdentityHelpers.CreateIdentity(user);

            AuthenticationManager.SignIn(new AuthenticationProperties()
            {
                IsPersistent = isPersistent
            }, identity);
        }
        public void CreateRole_ReturnsViewResult()
        {
            var mockRoleManager = IdentityHelpers.MockRoleManager <IdentityRole>();
            var mockUserManager = IdentityHelpers.MockUserManager <IdentityUser>();
            var controller      = new RolesController(mockRoleManager.Object, mockUserManager.Object);

            var result = controller.Create();

            var viewResult = Assert.IsType <ViewResult>(result);

            Assert.IsAssignableFrom <CreateRoleViewModel>(viewResult.ViewData.Model);
        }
Example #25
0
        protected void Page_Load()
        {
            // Process the result from an auth provider in the request
            ProviderName = IdentityHelpers.GetProviderNameFromRequest(Request);
            if (String.IsNullOrEmpty(ProviderName))
            {
                RedirectOnFail();
                return;
            }
            if (!IsPostBack)
            {
                var manager       = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();
                var signInManager = Context.GetOwinContext().Get <ApplicationSignInManager>();
                var loginInfo     = Context.GetOwinContext().Authentication.GetExternalLoginInfo();
                if (loginInfo == null)
                {
                    RedirectOnFail();
                    return;
                }
                var user = manager.Find(loginInfo.Login);
                if (user != null)
                {
                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
                    IdentityHelpers.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                }
                else if (User.Identity.IsAuthenticated)
                {
                    // Apply Xsrf check when linking
                    var verifiedloginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo(IdentityHelpers.XsrfKey, User.Identity.GetUserId());
                    if (verifiedloginInfo == null)
                    {
                        RedirectOnFail();
                        return;
                    }

                    var result = manager.AddLogin(User.Identity.GetUserId(), verifiedloginInfo.Login);
                    if (result.Succeeded)
                    {
                        IdentityHelpers.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                    }
                    else
                    {
                        AddErrors(result);
                        return;
                    }
                }
                else
                {
                    email.Text = loginInfo.Email;
                }
            }
        }
        //
        // GET: /Account/DisassociateAddress/?addressId=
        public ActionResult DisassociateAddress(Int32 addressId)
        {
            var user = _userService.GetUserWithAddresses(IdentityHelpers.GetUserId(User.Identity));

            var add = user.Addresses.FirstOrDefault(a => a.AddressID == addressId);

            if (add != null)
            {
                return(View(add));
            }

            throw new HttpException(Convert.ToInt32(HttpStatusCode.NotFound), "Attempt to disassosciate non existing address.");
        }
        public async Task Setup()
        {
            ConfigurationHelper.Initialise(TestContext.CurrentContext.TestDirectory);
            DbHelper.ClearDb();
            IdentityHelpers.ClearAll();

            //todo: allow other actors (types of provider)
            //var providerActor = (ProviderActor)TestContext.CurrentContext.Test.Arguments.GetValue(0);
            var provider = Actors.Provider.Create();


            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            var launchOptions = new LaunchOptions
            {
                Headless          = false,
                IgnoreHTTPSErrors = true,
                //SlowMo = 10
            };

            Console.WriteLine("Launching browser...");

            Browser = await Puppeteer.LaunchAsync(launchOptions);

            var context = Browser.DefaultContext;

            Page = await context.NewPageAsync();

            var url = LaunchPage.Url.Replace("{providerId}", provider.ProviderId.ToString());

            Console.WriteLine($"Opening {url}");
            var response = await Page.GoToAsync(url);

            //Realm selection
            await Page.ClickOn(LaunchPage.Realm);

            await Page.WaitForNavigationAsync();

            await Page.TypeInputAsync(LaunchPage.Username, provider.Username);

            await Page.TypeInputAsync(LaunchPage.Password, provider.Password);

            Console.Write("Signing in... ");
            await Page.Keyboard.DownAsync("Enter"); //hit enter, rather than click button

            await Page.WaitForSelectorAsync(".govuk-header");

            //await Page.WaitForNavigationAsync();
            Console.WriteLine("Complete");
        }
Example #28
0
        public JsonResult GetRecipeCommentsForUser(int recipeId)
        {
            var recipe = unitOfWork.RecipeRepository.GetById(recipeId);

            if (recipe != null)
            {
                var comments     = recipe.Comments;
                var commentsJson = comments.Select(comment => new CommentJsonViewModel
                {
                    UserId = comment.UserId, UserName = IdentityHelpers.GetUserName(comment.UserId), CommentText = comment.CommentText, CreateDateTime = String.Format("{0:r}", comment.CreateDateTime)
                }).ToList();
                return(Json(commentsJson));
            }
            return(null);
        }
Example #29
0
        public ActionResult Register(RegisterInputModel model)
        {
            // Add customer and sign in
            var succeeded = _service.Register(model);

            if (succeeded)
            {
                var identity = IdentityHelpers.Create(model.UserName, model.Email, model.Gender);
                AuthenticationManager.SignIn(new AuthenticationProperties {
                    IsPersistent = true
                }, identity);
                return(RedirectToAction("Index", "Home"));
            }

            ModelState.AddModelError("failed", "Oh snap! Change a few things up and try again!");
            return(View(model));
        }
        static void Main(string[] args)
        {
            ConfigurationHelper.Initialise(Directory.GetCurrentDirectory());

            System.Console.ForegroundColor = ConsoleColor.Cyan;
            System.Console.WriteLine("Commitments Test Data Generator");
            System.Console.WriteLine();
            System.Console.ForegroundColor = ConsoleColor.White;

            var scenarios = Scenarios.GetScenarios();

            while (true)
            {
                var count = 0;
                foreach (var scenario in scenarios)
                {
                    System.Console.WriteLine($"{count}: {scenario.Title}");
                    count++;
                }

                System.Console.WriteLine();
                System.Console.Write("Select scenario (enter quits): ");

                var stringInput = System.Console.ReadLine();
                if (string.IsNullOrWhiteSpace(stringInput))
                {
                    break;
                }

                var input = Convert.ToInt32(stringInput);

                var selected = scenarios[input];

                DbHelper.ClearDb();
                IdentityHelpers.ClearAll();
                selected.Action.Invoke();

                System.Console.ForegroundColor = ConsoleColor.Green;
                System.Console.WriteLine("Scenario created");
                System.Console.WriteLine();
                System.Console.ForegroundColor = ConsoleColor.White;
                System.Console.WriteLine("Press a key...");
                System.Console.ReadKey();
                System.Console.WriteLine();
            }
        }