Пример #1
0
        public ActionResult Edit(UserAdminEdit userModel)
        {
            ViewData["Roles"] = _dbContext.Roles;

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

            // Get User
            var user = _dbContext.Users.Find(userModel.Id);

            // Hash new password, if there isn't one, use old pass
            userModel.Password = userModel.Password == "" ? user.Password : Pbkdf2Crypto.ComputeHash(userModel.Password);

            // Move VM into the User Model Object
            user.Username       = userModel.Username;
            user.Password       = userModel.Password;
            user.Email          = userModel.Email;
            user.RoleId         = userModel.RoleId;
            user.RegisterDate   = userModel.RegisterDate;
            user.LastSigninDate = userModel.LastSigninDate;

            // Save to DB
            _dbContext.Entry(user).State = EntityState.Modified;
            _dbContext.SaveChanges();

            return(RedirectToAction("Index", "Users"));
        }
Пример #2
0
        public ActionResult Add(UserAdminEdit userModel)
        {
            ViewData["Roles"] = _dbContext.Roles;

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

            // Validate Password
            if (userModel.Password == "")
            {
                ModelState.AddModelError("Password", "You must enter a password.");
                return(View(userModel));
            }
            // Move VM into the User Model Object
            var user = new User
            {
                Username       = userModel.Username,
                Password       = Pbkdf2Crypto.ComputeHash(userModel.Password),
                Email          = userModel.Email,
                RoleId         = userModel.RoleId,
                RegisterDate   = userModel.RegisterDate,
                LastSigninDate = userModel.LastSigninDate
            };

            // Save to DB
            _dbContext.Users.Add(user);
            _dbContext.SaveChanges();

            return(RedirectToAction("Index", "Users"));
        }
Пример #3
0
        public ActionResult Index(CreateIdentityViewModel viewModel)
        {
            using (var sqlStorage = new SqlStorage())
            {
                if (!ModelState.IsValid)
                {
                    return(View(viewModel));
                }

                // Trimmin'
                viewModel.Email          = viewModel.Email.Trim();
                viewModel.FullName       = viewModel.FullName.Trim();
                viewModel.Gamertag       = viewModel.Gamertag.Trim();
                viewModel.Username       = viewModel.Username.Trim();
                viewModel.InvitationCode = viewModel.InvitationCode.Trim();

                // Validate uniqueness of Username and Email
                var user = sqlStorage.BranchIdentities
                           .FirstOrDefault(i =>
                                           i.Username.ToLower() == viewModel.Username.ToLower() ||
                                           i.Email.ToLower() == viewModel.Email.ToLower());
                if (user != null)
                {
                    ModelState.AddModelError("Username", "Either this username has already been taken, or that email has already been used.");
                    ModelState.AddModelError("Email", "Either this username has already been taken, or that email has already been used.");
                }

                // Validate Invite Code
                var invite =
                    sqlStorage.BranchIdentityInvitations.FirstOrDefault(
                        i => i.InvitationCode.ToLower() == viewModel.InvitationCode.ToLower() && !i.Used);
                if (invite == null)
                {
                    ModelState.AddModelError("InvitationCode", "This invite code has either been used or isn't valid. Sorry bae.");
                }

                // Check Password is identical
                if (viewModel.Password != viewModel.PasswordConfirm)
                {
                    ModelState.AddModelError("Password", "Your password and confirmation do not match.");
                }

                // Check Password Complexity
                var complexity = 0;
                if (Regex.IsMatch(viewModel.Password, @"\d+"))
                {
                    complexity++;
                }
                if (Regex.IsMatch(viewModel.Password, @"[a-z]+"))
                {
                    complexity++;
                }
                if (Regex.IsMatch(viewModel.Password, @"[A-Z]+"))
                {
                    complexity++;
                }
                if (Regex.IsMatch(viewModel.Password, @"[^a-zA-Z\d]+"))
                {
                    complexity++;
                }

                if (complexity < 2)
                {
                    ModelState.AddModelError("Password", "Your password is not complex enough.");
                }

                if (!ModelState.IsValid)
                {
                    viewModel.Password = viewModel.PasswordConfirm = "";
                    return(View(viewModel));
                }

                // All gucci, create Branch Identity
                var password       = Pbkdf2Crypto.ComputeHash(viewModel.Password, new Random().Next(1000, 1200));
                var branchIdentity = new BranchIdentity
                {
                    BranchRole               = sqlStorage.BranchRoles.First(r => r.Type == RoleType.User),
                    Email                    = viewModel.Email,
                    FullName                 = viewModel.FullName,
                    Username                 = viewModel.Username,
                    PasswordHash             = password.Hash,
                    PasswordIterations       = password.Iterations,
                    PasswordSalt             = password.Salt,
                    BranchIdentityInvitation = invite
                };

                // Set invite as used
// ReSharper disable once PossibleNullReferenceException
                invite.Used = true;

                // Check gamer ids
                GlobalStorage.H4Manager.GetPlayerServiceRecord(viewModel.Gamertag, true);
                GlobalStorage.HReachManager.GetPlayerServiceRecord(viewModel.Gamertag, true);
                var gamerIdSafe = GamerIdentity.EscapeGamerId(viewModel.Gamertag);
                var gamerId     = sqlStorage.GamerIdentities.FirstOrDefault(g => g.GamerIdSafe == gamerIdSafe);
                if (gamerId != null)
                {
                    branchIdentity.GamerIdentity = gamerId;
                }
                sqlStorage.BranchIdentities.Add(branchIdentity);
                sqlStorage.SaveChanges();

                var ipAddress     = Request.ServerVariables.Get("HTTP_CF_CONNECTING_IP") ?? Request.UserHostAddress;
                var branchSession = BranchSession.Create(ipAddress, Request.UserAgent, branchIdentity, false);
                sqlStorage.BranchSessions.Add(branchSession);

                var cookie = new HttpCookie("SessionIdentifier", branchSession.Identifier.ToString())
                {
                    Expires = branchSession.ExpiresAt
                };
                Response.SetCookie(cookie);
                sqlStorage.SaveChanges();

                return(RedirectToRoute("BranchIdentityView", new { controller = "Home", action = "Index", slug = branchIdentity.Username }));
            }
        }