public void GenerateHashStringTest() { string testStr = "12345!"; var hashMethod = HashMD5Service.HashPassword(testStr).Result; Assert.IsNotNull(hashMethod); }
public void HashPasswordTest() { string hashString = "123456"; var isHash = HashMD5Service.HashPassword(hashString); Assert.IsInstanceOfType(isHash.Result, typeof(String)); }
public async Task <IActionResult> GetUserFromDb([FromBody] UserSignIn user) { User userobj = new User(); if (user.Login == null || user.Password == null) { throw new ArgumentNullException(); } // Хэширует пароль для сравнения зашифрованных паролей string checkHashString = await HashMD5Service.HashPassword(user.Password); // Сравнивает хэши var isEqual = await EqualsHash(user.Login); if (isEqual != checkHashString) { return(ErrorViewModel.ErrorEqualHash()); } // Проверяет, есть ли пользователь в БД var identity = await GetIdentity(user.Login, isEqual); // Если пользователь найден, то получаем его ID if (identity != null) { userobj = db.Users.FirstOrDefault(x => x.Login == user.Login); } var now = DateTime.UtcNow; if (identity == null) { return(ErrorViewModel.ErrorToken()); } // Создание JWT-токена var jwt = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, notBefore: now, claims: identity.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)), signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); // Объект анонимного типа с токеном, который отсылается на фронт var response = new { access_token = encodedJwt, userName = identity.Name, id = userobj.Id }; return(Json(response)); }
public async Task <IActionResult> SignIn([FromBody] User user) { if (string.IsNullOrEmpty(user.Login) || string.IsNullOrEmpty(user.Password)) { throw new ArgumentException("Параметры не могут быть пустыми"); } // Хэширует пароль для сравнения. var hashPassword = await HashMD5Service.HashPassword(user.Password); // Выбирает пароль пользователя из БД. bool getIdentityPassword = await _user.GetUserPassword(hashPassword); // Если пароль не совпадает с тем что в БД. if (!getIdentityPassword) { throw new ArgumentException("Пароль не верен"); } var isUser = await _user.GetIdentity(user.Login); if (isUser != null) { var now = DateTime.UtcNow; var jwt = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, notBefore: now, claims: isUser.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)), signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); // Выбирает роли пользователя. var isMemberRole = await _user.TakeUserRole(user.Login); var response = new { access_token = encodedJwt, username = isUser.Name, role = isMemberRole }; return(Ok(response)); } throw new ArgumentNullException("Пользователь не найден"); }
public async Task <IActionResult> ChangePassword(string login, string password) { if (login != "" && password != "") { // Находит пользователя с таким логином var user = await db.Users.FirstOrDefaultAsync(u => u.Login == login); // Хэширует новый пароль var hashPassword = HashMD5Service.HashPassword(password); // Изменяет пароль в модели пользователя user.Password = await hashPassword; await db.SaveChangesAsync(); return(Ok()); } return(ErrorViewModel.ErrorChangePassword()); }
public async Task <IActionResult> CheckIn([FromBody] User user) { if (string.IsNullOrEmpty(user.Login) || string.IsNullOrEmpty(user.Password) || string.IsNullOrEmpty(user.Email)) { throw new ArgumentNullException(); } try { // Проверяет, есть ли пользователь с таким логином. await _user.GetIdentityLogin(user.Login); // Проверяет, есть ли пользователь с таким email. await _user.GetIdentityEmail(user.Email); string sPassword = user.Password; // Хэширует пароль в MD5. var hashPassword = await HashMD5Service.HashPassword(sPassword); user.Password = hashPassword; // Добавляет нового пользователя в БД. await _user.Create(user); // Оповещает о регистрации нового пользователя. Notification notification = new Notification() { Message = $"Зарегистрирован новый пользователь: {user.Login}", Category = NotificationType.Registry.ToString(), Module = ModuleType.CheckIn.ToString() }; await _user.NotificationCheckIn(notification); return(Ok("Пользователь успешно зарегистрирован")); } catch (ArgumentNullException ex) { throw new ArgumentNullException("Входные параметры не заполнены", ex.Message.ToString()); } }
public async Task <IActionResult> CreateUser([FromBody] User user) { if (user.Login == null || user.Password == null || user.Email == null) { throw new ArgumentNullException(); } // Хэширует пароль var hashString = await HashMD5Service.HashPassword(user.Password); // Подтверждение по почте await EmailService.SendToEmail(user); // Добавляет нового пользователя User regUser = new User { Login = user.Login, Email = user.Email, Password = hashString }; db.Users.AddRange(regUser); // Сохраняет изменения в БД await db.SaveChangesAsync(); return(Ok(regUser)); }
public async Task <IActionResult> CheckIn([FromBody] User user) { if (string.IsNullOrEmpty(user.Login) || string.IsNullOrEmpty(user.Password) || string.IsNullOrEmpty(user.Email)) { throw new ArgumentNullException("Параметры не должны быть пустыми."); } // Проверяет, есть ли пользователь с таким логином. await GetIdentityLogin(user.Login); // Проверяет, есть ли пользователь с таким email. await GetIdentityEmail(user.Email); string sPassword = user.Password; // Хэширует пароль в MD5. var hashPassword = await HashMD5Service.HashPassword(sPassword); user.Password = hashPassword; UserDetail detail = new UserDetail() { Login = user.Login, Email = user.Email }; // Добавляет нового пользователя в БД. await db.Users.AddRangeAsync(user); // Добавляет детали пользователя. await db.UserDetails.AddRangeAsync(detail); await db.SaveChangesAsync(); return(Ok("Пользователь успешно зарегистрирован.")); }
public async Task <IActionResult> SignIn([FromBody] UserSignIn user) { User userobj = new User(); if (user.LoginOrEmail == null || user.Password == null) { throw new ArgumentNullException("Параметры авторизации не заполнены."); } // Хэширует пароль для сравнения зашифрованных паролей string checkHashString = await HashMD5Service.HashPassword(user.Password); // Сравнивает хэши var isEqual = await EqualsHash(user.LoginOrEmail); if (!isEqual.Equals(checkHashString)) { throw new ArgumentException("Не верный пароль."); } // Проверяет, есть ли пользователь в БД var identity = await GetIdentity(user.LoginOrEmail, isEqual); // Если пользователь найден, то получаем его ID if (identity != null) { bool isEmail = identity.Name.Contains("@"); // Проверяет логин передан или email. if (isEmail) { userobj = await db.Users.FirstOrDefaultAsync(u => u.Email == user.LoginOrEmail); } else { userobj = await db.Users.FirstOrDefaultAsync(u => u.Login == user.LoginOrEmail); } } var now = DateTime.UtcNow; if (identity == null) { throw new ArgumentException("У пользователя отсутствует токен доступа."); } // Создание JWT-токена var jwt = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, notBefore: now, claims: identity.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)), signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); // Объект анонимного типа с токеном, который отсылается на фронт var response = new { access_token = encodedJwt, user_data = userobj }; return(Json(response)); }