Example #1
0
        public void GenerateHashStringTest()
        {
            string testStr    = "12345!";
            var    hashMethod = HashMD5Service.HashPassword(testStr).Result;

            Assert.IsNotNull(hashMethod);
        }
Example #2
0
        public void HashPasswordTest()
        {
            string hashString = "123456";
            var    isHash     = HashMD5Service.HashPassword(hashString);

            Assert.IsInstanceOfType(isHash.Result, typeof(String));
        }
Example #3
0
        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));
        }
Example #4
0
        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("Пользователь не найден");
        }
Example #5
0
        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());
        }
Example #6
0
        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());
            }
        }
Example #7
0
        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));
        }
Example #8
0
        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("Пользователь успешно зарегистрирован."));
        }
Example #9
0
        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));
        }