コード例 #1
0
ファイル: PWContext.cs プロジェクト: TrefilovaElena/PW
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            byte[] passwordHash, passwordSalt;
            PasswordHasher.CreatePasswordHash("1", out passwordHash, out passwordSalt);
            modelBuilder.Entity <User>().HasData(new User {
                Id           = 1,
                UserName     = "******",
                Email        = "*****@*****.**",
                Type         = UserType.System,
                PasswordHash = passwordHash,
                PasswordSalt = passwordSalt
            });
            modelBuilder.Entity <Account>().HasData(new Account  {
                Id      = 1,
                UserId  = 1,
                Balance = 0
            });

            base.OnModelCreating(modelBuilder);

            foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.Restrict;
            }
        }
コード例 #2
0
        public async Task UserSignUp(SignUpViewModel signUpViewModel)
        {
            if (String.IsNullOrEmpty(signUpViewModel.Username) || String.IsNullOrEmpty(signUpViewModel.Password) || String.IsNullOrEmpty(signUpViewModel.ConfirmPassword))
            {
                throw new Exception(ApplicationVariable.RequiredFieldsMessage);
            }

            if (!signUpViewModel.Password.Equals(signUpViewModel.ConfirmPassword))
            {
                throw new Exception(ApplicationVariable.PasswordDoesNotMatch);
            }

            var account = await _accountRepository.Find(x => x.Username.ToLower() == signUpViewModel.Username);

            if (account.Count > 0)
            {
                throw new Exception(ApplicationVariable.UserAlreadyExist);
            }

            var accountModel = new AccountModel {
                Username = signUpViewModel.Username, Name = signUpViewModel.Name
            };

            PasswordHasher.CreatePasswordHash(signUpViewModel.Password, out var passwordHash, out var passwordSalt);
            accountModel.PasswordHash = passwordHash;
            accountModel.PasswordSalt = passwordSalt;
            await _accountRepository.Insert(accountModel);
        }
コード例 #3
0
        public User ResetPassword(int id, string password, string validationToken)
        {
            var entity = _context.User.FirstOrDefault(e => e.Id == id);

            if (entity != null)
            {
                if (entity.ResetPasswordToken == validationToken)
                {
                    byte[] passwordHash, passwordSalt;
                    PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

                    entity.PasswordHash       = passwordHash;
                    entity.PasswordSalt       = passwordSalt;
                    entity.ResetPasswordToken = null;

                    _context.SaveChanges();

                    return(entity);
                }

                throw new UnauthorizedAccessException();
            }

            throw new ArgumentNullException();
        }
コード例 #4
0
        private async Task <ServiceOperationResult> ValidateAndStoreUserAsync(User user, string password)
        {
            if (string.IsNullOrEmpty(user.Username) || string.IsNullOrEmpty(password))
            {
                return(ServiceOperationResult.BadRequest("Email and password cannot be empty!"));
            }

            var userExists = _unitOfWork.Users
                             .GetAsQueryable()
                             .Any(au => au.Username == user.Username);

            if (userExists)
            {
                return(ServiceOperationResult.Conflict($"User {user.Username} already exists"));
            }

            PasswordHasher.CreatePasswordHash(password, out var passwordHash, out var passwordSalt);

            user.PasswordHash = passwordHash;
            user.PasswordSalt = passwordSalt;

            _unitOfWork.Users.Add(user);
            await _unitOfWork.SaveAsync();

            return(ServiceOperationResult.Ok());
        }
コード例 #5
0
ファイル: UserService.cs プロジェクト: TrefilovaElena/PW
        public (User, string) Create(User user, string password)
        {
            if (string.IsNullOrWhiteSpace(password))
            {
                return(null, "Password is required");
            }
            ;
            User entity = db.Users.FirstOrDefault(o => o.Email == user.Email);

            if (entity == null)
            {
                byte[] passwordHash, passwordSalt;
                PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);
                user.PasswordHash = passwordHash;
                user.PasswordSalt = passwordSalt;

                user.Type = UserType.Client;

                string message = _accountService.OpenNewAccount(user);

                message += AddFirstSumOnBalance(user);
                return(user, "Your account is created." + message);
            }
            else
            {
                return(null, "The email is already exist. Choose another one.");
            }
        }
コード例 #6
0
        public void CreatePasswordHash_NullPassword_ShouldThrow()
        {
            PasswordHasher hasher = new PasswordHasher();

            string msg = Assert.Throws <NullReferenceException>(() => hasher.CreatePasswordHash(null))
                         .Message;

            Assert.Equal("password cannot be null or empty", msg);
        }
コード例 #7
0
        public void CreatePasswordHash_ShouldCreate()
        {
            PasswordHasher hasher = new PasswordHasher();

            string password = "******";

            PasswordHashModel model = hasher.CreatePasswordHash(password);

            Assert.NotNull(model);
            Assert.NotNull(model.PasswordHash);
            Assert.NotNull(model.PasswordSalt);
        }
コード例 #8
0
        public void VerifyPasswordHash_CorrectHash_ShouldReturnTrue()
        {
            PasswordHasher hasher = new PasswordHasher();

            string password = "******";

            var model = hasher.CreatePasswordHash(password);

            bool isCorrect = hasher.VerifyPasswordHash(password, model.PasswordHash, model.PasswordSalt);

            Assert.True(isCorrect);
        }
コード例 #9
0
 private AccountModel GetAdminAccount()
 {
     PasswordHasher.CreatePasswordHash("admin", out var passwordHash, out var passwordSalt);
     return(new AccountModel
     {
         Id = 1,
         Username = "******",
         PasswordSalt = passwordSalt,
         PasswordHash = passwordHash,
         UpdateDate = DateTime.UtcNow
     });
 }
コード例 #10
0
 private static void InitializeUser()
 {
     if (!db.Users.Any())
     {
         byte[] passwordHash, passwordSalt;
         PasswordHasher.CreatePasswordHash("1", out passwordHash, out passwordSalt);
         db.Users.Add(new User {
             Username = "******", FirstName = "1", LastName = "1", Status = SystemRoles.Administrator, PasswordHash = passwordHash, PasswordSalt = passwordSalt
         });
         db.SaveChanges();
     }
 }
コード例 #11
0
ファイル: SystemAccount.cs プロジェクト: TrefilovaElena/PW
        public SystemAccount()
        {
            byte[] passwordHash, passwordSalt;
            PasswordHasher.CreatePasswordHash("1", out passwordHash, out passwordSalt);
            User systemUser = new User {
                Id = 1, UserName = "******", Email = "*****@*****.**", Type = UserType.System, PasswordHash = passwordHash, PasswordSalt = passwordSalt
            };

            Id      = 1;
            UserId  = 1;
            User    = systemUser;
            Balance = 0;
        }
コード例 #12
0
        public void VerifyPasswordHash_WrongHash_ShouldReturnFalse()
        {
            PasswordHasher hasher = new PasswordHasher();

            string password = "******";

            var model = hasher.CreatePasswordHash(password);

            string wrongPassword = "******";

            bool isCorrect = hasher.VerifyPasswordHash(wrongPassword, model.PasswordHash, model.PasswordSalt);

            Assert.False(isCorrect);
        }
コード例 #13
0
        public User Update(User obj, string password)
        {
            var entity = _context.User.FirstOrDefault(e => e.Id == obj.Id);

            if (entity != null)
            {
                if (obj.Username != entity.Username)
                {
                    if (_context.User.Any(x => x.Username == obj.Username))
                    {
                        throw new ApplicationException();
                    }
                }

                entity.FirstName      = obj.FirstName;
                entity.LastName       = obj.LastName;
                entity.Username       = obj.Username;
                entity.Email          = obj.Email;
                entity.EmailConfirmed = obj.EmailConfirmed;
                entity.Token          = obj.Token;
                entity.State          = obj.State;


                if (!string.IsNullOrWhiteSpace(password))
                {
                    byte[] passwordHash, passwordSalt;
                    PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

                    entity.PasswordHash = passwordHash;
                    entity.PasswordSalt = passwordSalt;
                }

                _context.User.Update(entity);
                _context.SaveChanges();

                return(entity);
            }
            else
            {
                throw new ArgumentNullException();
            }
        }
コード例 #14
0
        public User Create(User obj, string password)
        {
            obj.Id          = 0;
            obj.CreatedDate = DateTime.Now;
            obj.State       = Enums.EntityState.Active;

            if (string.IsNullOrWhiteSpace(password))
            {
                throw new ArgumentException();
            }

            if (_context.User.Any(x => x.Username == obj.Username))
            {
                throw new ApplicationException();
            }

            if (_context.User.Any(x => x.Email == obj.Email))
            {
                throw new ApplicationException();
            }

            byte[] passwordHash, passwordSalt;
            PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

            obj.PasswordHash = passwordHash;
            obj.PasswordSalt = passwordSalt;

            _context.User.Add(obj);
            _context.SaveChanges();

            var entity = _context.User.FirstOrDefault(e => e.Id == obj.Id);

            if (entity != null)
            {
                return(entity);
            }

            throw new ArgumentNullException();
        }
コード例 #15
0
ファイル: UserDataAccess.cs プロジェクト: PJsky/ChessLogic
        public User AddUser(User user, string password)
        {
            if (string.IsNullOrWhiteSpace(password))
            {
                throw new Exception("Password cannot be null or whitespace only");
            }
            if (context.Users.Any(u => u.Name == user.Name))
            {
                throw new Exception("Username already taken");
            }

            byte[] passwordHash, passwordSalt;
            pHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

            user.PasswordHash = passwordHash;
            user.PasswordSalt = passwordSalt;

            context.Users.Add(user);
            context.SaveChanges();

            return(user);
        }
コード例 #16
0
        public static async void OnEnterRegisterData(CustomPlayer player, Dictionary <string, string> registerData)
        {
            if (player.LoggedIn)
            {
                return;
            }
            var pData = new AccountData();

            pData.Email = registerData["email"];
            pData.Login = registerData["login"];
            var passAndSalt = PasswordHasher.CreatePasswordHash(registerData["password"]);

            pData.Password = passAndSalt.Item1;
            pData.Salt     = passAndSalt.Item2;
            try
            {
                pData.Save();
            }
            catch (MongoWriteException e)
            {
                Alt.Log(e.ToString());
                if (e.WriteError.Code == 11000)
                {
                    player.Emit("auth:registerFailed", 0, "Player with such email or login already exists!");
                }
                else
                {
                    player.Emit("auth:registerFailed", 1, e.Message);
                }
                return;
            }
            player.LoggedIn = true;
            player.Data     = pData;
            player.Emit("auth:registerSuccess");

            player.Model = (uint)PedModel.FreemodeMale01;
            spawnPlayer(player, 0);
        }
コード例 #17
0
        public void SeedDatabase()
        {
            var pendingMigrations = _context.Database.GetPendingMigrations();

            if (pendingMigrations.Count() == 0)
            {
                byte[] passwordHash, passwordSalt;
                PasswordHasher.CreatePasswordHash("12345", out passwordHash, out passwordSalt);

                var user = new User
                {
                    Id                 = 0,
                    Username           = "******",
                    FirstName          = "test",
                    LastName           = "user",
                    PasswordHash       = passwordHash,
                    PasswordSalt       = passwordSalt,
                    CreatedDate        = DateTime.Now,
                    Email              = "*****@*****.**",
                    EmailConfirmed     = true,
                    ResetPasswordToken = null,
                    State              = Enums.EntityState.Active
                };

                if (!_context.User.Any())
                {
                    _context.User.Add(user);

                    _context.SaveChanges();
                }
            }
            else
            {
                Migrate();
                SeedDatabase();
            }
        }
コード例 #18
0
        public User Create(User user, string password)
        {
            // validation
            if (string.IsNullOrWhiteSpace(password))
            {
                throw new AppException("Password is required");
            }

            if (db.Users.Any(x => x.Username == user.Username))
            {
                throw new AppException("Username " + user.Username + " is already taken");
            }

            byte[] passwordHash, passwordSalt;
            PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

            user.PasswordHash = passwordHash;
            user.PasswordSalt = passwordSalt;

            db.Users.Add(user);
            db.SaveChanges();

            return(user);
        }
コード例 #19
0
        public void Update(User userParam, string password = null)
        {
            var user = db.Users.Find(userParam.Id);

            if (user == null)
            {
                throw new AppException("User not found");
            }

            if (userParam.Username != user.Username)
            {
                // username has changed so check if the new username is already taken
                if (db.Users.Any(x => x.Username == userParam.Username))
                {
                    throw new AppException("Username " + userParam.Username + " is already taken");
                }
            }

            // update user properties
            user.FirstName = userParam.FirstName;
            user.LastName  = userParam.LastName;
            user.Username  = userParam.Username;

            // update password if it was entered
            if (!string.IsNullOrWhiteSpace(password))
            {
                byte[] passwordHash, passwordSalt;
                PasswordHasher.CreatePasswordHash(password, out passwordHash, out passwordSalt);

                user.PasswordHash = passwordHash;
                user.PasswordSalt = passwordSalt;
            }

            db.Users.Update(user);
            db.SaveChanges();
        }
コード例 #20
0
 private void AddPassword(string password, UserEntity userEntity)
 {
     _passwordHasher.CreatePasswordHash(password, out byte[] passwordHash, out byte[] passwordSalt);
     userEntity.PasswordHash = passwordHash;
     userEntity.PasswordSalt = passwordSalt;
 }