Exemple #1
0
        public async Task <UserModelItem> GetUserByIdAsync(long id)
        {
            var user = await _userRepository.FindByIdAsync(id);

            var userModel = new UserModelItem();

            if (user == null)
            {
                userModel.Errors.Add(Constants.Errors.UserNotExistsError);
                return(userModel);
            }

            if (user.LockoutEnabled)
            {
                userModel.Errors.Add(Constants.Errors.UserLockError);
                return(userModel);
            }

            userModel      = user.MapToModel();
            userModel.Role = await _userRepository.GetUserRolesAsync(user.Id);

            if (userModel.Role == null)
            {
                userModel.Errors.Add(Constants.Errors.UserNotInAnyRoleError);
            }

            return(userModel);
        }
Exemple #2
0
        public async Task <UserModelItem> CreateAsync(RegistrationModel createModel)
        {
            var resultModel  = new UserModelItem();
            var existingUser = await _userRepository.FindByEmailAsync(createModel.Email);

            if (existingUser != null)
            {
                resultModel.Errors.Add(UserIsExist);
                return(resultModel);
            }
            var user   = _mapper.RegisterModelToEntity(createModel);
            var result = await _userRepository.CreateAsync(user, createModel.Password);

            if (!result)
            {
                resultModel.Errors.Add(UserCantBeRegistered);
                return(resultModel);
            }

            result = await _userRepository.AddToRoleAsync(user, RoleUser);

            if (!result)
            {
                resultModel.Errors.Add(UserCantBeAddedToRole);
            }
            resultModel.Id = user.Id;
            return(resultModel);
        }
Exemple #3
0
        public async Task <BaseModel> UpdateAsync(UserModelItem userModel)
        {
            var resultModel = new BaseModel();

            if (userModel == null)
            {
                resultModel.Errors.Add(ModelIsNotValid);
            }

            var user = _mapper.ModelItemToEntity(userModel);

            if (user == null)
            {
                resultModel.Errors.Add(UserIsExist);
                return(resultModel);
            }
            if (!string.IsNullOrWhiteSpace(userModel.Pasword))
            {
                await _userRepository.ResetPasswordAsync(user, userModel.Pasword);
            }

            var result = await _userRepository.UpdateAsync(user);

            if (!result)
            {
                resultModel.Errors.Add(FailedToUpdateUser);
            }

            return(resultModel);
        }
Exemple #4
0
        public async Task <TokenModel> GenerateTokenModel(UserModelItem user)
        {
            if (user == null)
            {
                return(null);
            }

            var claimsAccess = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Role, user.Role),
                new Claim(ClaimTypes.Name, user.UserName),
            };

            var claimsRefresh = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
            };

            var accessToken = await GenerateToken(claimsAccess, 1);

            var refreshToken = await GenerateToken(claimsRefresh, 60);

            return(new TokenModel
            {
                AccessToken = new JwtSecurityTokenHandler().WriteToken(accessToken),
                RefreshToken = new JwtSecurityTokenHandler().WriteToken(refreshToken)
            });
        }
        public ApplicationUser ModelItemToEntity(UserModelItem userModel)
        {
            var user = new ApplicationUser();

            user.Id        = userModel.Id;
            user.FirstName = userModel.FirstName;
            user.LastName  = userModel.LastName;
            return(user);
        }
Exemple #6
0
        private List <Claim> GenerateAccessClaims(UserModelItem model)
        {
            var claims = GenerateClaims(model.Id);

            claims.Add(new Claim(ClaimTypes.Role, model.Role));
            claims.Add(new Claim(ClaimTypes.Name, model.Email.ToString()));


            return(claims);
        }
Exemple #7
0
        public UserModelItem EntityToModelITem(ApplicationUser user)
        {
            var modelItem = new UserModelItem();

            modelItem.Email     = user.Email;
            modelItem.Id        = user.Id;
            modelItem.FirstName = user.FirstName;
            modelItem.LastName  = user.LastName;
            return(modelItem);
        }
Exemple #8
0
        public async Task <IActionResult> EditProfileAsync(UserModelItem model)
        {
            var token = HttpContext.Request.Headers
                        .Where(x => x.Key == JwtConstants.RefreshToken)
                        .Select(x => x.Value).FirstOrDefault();
            var adminId = _jwtHelper.GetIdFromToken(token);

            var result = await _userService.EditAsync(model, adminId);

            return(Ok(result));
        }
Exemple #9
0
        public async Task <UserModelItem> FindByEmailAsync(string email)
        {
            var resultModel = new UserModelItem();
            var user        = await _userRepository.FindByEmailAsync(email);

            if (user == null)
            {
                resultModel.Errors.Add(EmailConstants.ErrorConstants.UserNotFoundError);
            }
            return(user.Mapping());
        }
Exemple #10
0
        public async Task <UserModelItem> GetByIdAsync(long id)
        {
            var response        = new UserModelItem();
            var applicationUser = await _userRepository.GetByIdAsync(id);

            if (applicationUser == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            return(UserMapper.MapEntityToModel(applicationUser));
        }
Exemple #11
0
        public async Task <IActionResult> SetPhotoAsync(UserModelItem model)
        {
            var token = HttpContext.Request.Headers
                        .Where(x => x.Key == JwtConstants.RefreshToken)
                        .Select(x => x.Value).FirstOrDefault();
            var userId = _jwtHelper.GetIdFromToken(token);

            model.Id = userId;
            var result = await _userService.SetPhotoAsync(model);

            return(Ok((UserModelItem)result));
        }
Exemple #12
0
        private ICollection <Claim> GetRefreshClaims(UserModelItem userModel)
        {
            var claims = new List <Claim>();

            var claim = new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString());

            claims.Add(claim);

            claim = new Claim(ClaimTypes.NameIdentifier, userModel.Id.ToString());
            claims.Add(claim);

            return(claims);
        }
Exemple #13
0
        private ICollection <Claim> GetAccessClaims(UserModelItem userModel)
        {
            var claims = GetRefreshClaims(userModel);

            var claim = new Claim(ClaimTypes.Email, userModel.Email);

            claims.Add(claim);

            claim = new Claim(ClaimTypes.Role, userModel.Role);
            claims.Add(claim);

            return(claims);
        }
Exemple #14
0
        public async Task <BaseModel> SetPhotoAsync(UserModelItem model)
        {
            var user = await _userRepository.GetByIdAsync(model.Id);

            user.Avatar = model.Avatar;
            var result = await _userRepository.UpdateAsync(user);

            if (!result)
            {
                model.Errors.Add(ErrorConstants.ImpossibleToSetPhoto);
            }
            return(model);
        }
Exemple #15
0
        public static UserModelItem MapResponseModelToModelItem(UserResponseModel responseModel)
        {
            var modelItem = new UserModelItem()
            {
                Email          = responseModel.User.Email,
                FirstName      = responseModel.User.FirstName,
                LastName       = responseModel.User.LastName,
                Id             = responseModel.User.Id,
                EmailConfirmed = responseModel.User.EmailConfirmed
            };

            return(modelItem);
        }
Exemple #16
0
        public async Task <UserModelItem> GetUserByIdAsync(long id)
        {
            var response     = new UserModelItem();
            var existingUser = await _userRepository.GetByIdAsync(id);

            if (existingUser == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            var userModel = await MapUserAndGetRoleAsync(id);

            return(userModel);
        }
Exemple #17
0
        public static UserModelItem MapEntityToModel(ApplicationUser applicationUser)
        {
            var model = new UserModelItem()
            {
                Avatar         = applicationUser.Avatar,
                Email          = applicationUser.Email,
                Id             = applicationUser.Id,
                EmailConfirmed = applicationUser.EmailConfirmed,
                FirstName      = applicationUser.FirstName,
                LastName       = applicationUser.LastName
            };

            return(model);
        }
Exemple #18
0
        public async Task <BaseModel> SetLockingStatus(string email, bool enabled)
        {
            var result = enabled
                ? await _userRepository.LockAsync(email)
                : await _userRepository.UnlockAsync(email);

            var userModel = new UserModelItem();

            if (!result)
            {
                userModel.Errors.Add(Constants.Errors.UnlockUserError);
            }

            return(userModel);
        }
Exemple #19
0
        public static UserModelItem MapToModel(this DataAccess.Entities.User entity)
        {
            var model = new UserModelItem();

            model.Id        = entity.Id;
            model.FirstName = entity.FirstName;
            model.LastName  = entity.LastName;
            model.Email     = entity.Email;
            model.IsLocked  = entity.LockoutEnabled;
            model.Avatar    = string.IsNullOrWhiteSpace(entity.Avatar)
                ? Constants.Constants.Images.DefaultUserAvatar
                : entity.Avatar;

            return(model);
        }
Exemple #20
0
        public async Task <BaseModel> EditAsync(UserModelItem model, long adminId)
        {
            var response     = new BaseModel();
            var existingUser = await _userRepository.GetByIdAsync(model.Id);

            if (existingUser == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            var admin = await _userRepository.GetByIdAsync(adminId);

            if (admin == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            var adminRole = await _userRepository.GetRoleAsync(admin);

            var userRole = await _userRepository.GetRoleAsync(existingUser);

            var updatedUser = new ApplicationUser();

            if (adminRole == RoleConstants.Admin)
            {
                updatedUser = UserMapper.EditEntityByAdminRole(existingUser, model);
            }
            if (adminRole == userRole)
            {
                updatedUser = UserMapper.EditEntityByUserRole(existingUser, model);
            }
            var result = await _userRepository.UpdateAsync(updatedUser);

            if (!result)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToUpdateUser);
                return(response);
            }
            if (!string.IsNullOrWhiteSpace(model.NewPassword) && adminRole == userRole)
            {
                result = await _userRepository.ChangePasswordAsync(updatedUser, model.OldPassword, model.NewPassword);
            }
            if (!result)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToChangeUserPassword);
            }
            return(response);
        }
Exemple #21
0
        public static ApplicationUser MapModelToEntity(UserModelItem model)
        {
            var applicationUser = new ApplicationUser()
            {
                Avatar         = model.Avatar,
                Email          = model.Email,
                Id             = model.Id,
                EmailConfirmed = model.EmailConfirmed,
                FirstName      = model.FirstName,
                LastName       = model.LastName,
                UserName       = $"{model.FirstName} {model.LastName}",
                LockoutEnabled = true
            };

            return(applicationUser);
        }
Exemple #22
0
        public async Task <BaseModel> IsLockedOutAsync(UserModelItem model)
        {
            var response = new BaseModel();

            if (model == null)
            {
                response.Errors.Add(ErrorConstants.ModelIsNull);
                return(response);
            }
            var user   = UserMapper.MapModelToEntity(model);
            var result = await _userRepository.IsLockedOutAsync(user);

            if (result)
            {
                response.Errors.Add(ErrorConstants.UserIsLocked);
            }
            return(response);
        }
Exemple #23
0
        public async Task <UserModelItem> LogInAsync(LogInModel model, string password)
        {
            var response = new UserModelItem();

            if (model == null)
            {
                response.Errors.Add(ErrorConstants.ModelIsNull);
                return(response);
            }
            var existingUser = await _userRepository.GetByEmailAsync(model.Email);

            if (existingUser == null)
            {
                response.Errors.Add(ErrorConstants.IncorrectEmail);
                return(response);
            }
            var result = await _userRepository.IsEmailConfirmedAsync(existingUser);

            if (!result)
            {
                response.Errors.Add(ErrorConstants.DontConfirmEmail);
                return(response);
            }
            var role = await _userRepository.GetRoleAsync(existingUser);

            response      = UserMapper.MapEntityToModel(existingUser);
            response.Role = role;
            result        = await _userRepository.IsLockedOutAsync(existingUser);

            if (result)
            {
                response.Errors.Add(ErrorConstants.UserIsLocked);
                return(response);
            }
            result = await _userRepository.LogInAsync(existingUser, password);

            if (!result)
            {
                response.Errors.Add(ErrorConstants.IncorrectPassword);
            }
            return(response);
        }
Exemple #24
0
        public string GenerateToken(UserModelItem userModel, double expirationTime, string secretKey, bool isAccess)
        {
            var tokenHandler = new JwtSecurityTokenHandler();

            var claims = isAccess
                ? GetAccessClaims(userModel)
                : GetRefreshClaims(userModel);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Expires            = DateTime.UtcNow.AddMinutes(expirationTime),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)),
                                                            SecurityAlgorithms.HmacSha256)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
Exemple #25
0
        public async Task <UserModelItem> FindByNameAsync(string userName)
        {
            var resultModel = new UserModelItem();
            var user        = await _userRepository.FindByNameAsync(userName);

            if (user == null)
            {
                resultModel.Errors.Add(EmailConstants.ErrorConstants.UserNotFoundError);
            }

            /*var result = await CheckUserAsync(user, "pass");
             * if (!result)
             * {
             *  //resturn errors
             * }*/
            var role = await CheckRoleAsync(user.Id);

            resultModel.Role = role.Name;
            return(user.Mapping());
        }
Exemple #26
0
        public async Task <BaseModel> DeleteUserAsync(long id)
        {
            var user = await _userRepository.FindByIdAsync(id);

            var userModel = new UserModelItem();

            if (user == null)
            {
                userModel.Errors.Add(Constants.Errors.UserNotExistsError);
                return(userModel);
            }
            user.isRemoved = true;
            var result = await _userRepository.UpdateAsync(user, null, null);

            if (!result)
            {
                userModel.Errors.Add(Constants.Errors.DeleteUserError);
            }

            return(userModel);
        }
Exemple #27
0
        public TokensModel RefreshOldTokens(UserModelItem model, string refreshToken)
        {
            var responce        = new BaseModel();
            var newRefreshToken = new JwtSecurityTokenHandler().ReadJwtToken(refreshToken);

            if (newRefreshToken.ValidTo <= DateTime.Now)
            {
                return(GenerateTokens(model));
            }
            var accessToken = GenerateAccessToken(model);

            if (accessToken == null)
            {
                responce.Errors.Add(ErrorConstants.AccessProblems);
                return((TokensModel)responce);
            }
            return(new TokensModel()
            {
                AccessToken = accessToken,
                RefreshToken = refreshToken
            });
        }
Exemple #28
0
        public async Task <UserModelItem> SignInAsync(SignInModel signInModel)
        {
            var user = await _userRepository.FindByEmailAsync(signInModel.Email);

            var userModel = new UserModelItem();

            if (user == null)
            {
                userModel.Errors.Add(Constants.Errors.UserNotExistsError);
                return(userModel);
            }

            if (!user.EmailConfirmed)
            {
                userModel.Errors.Add(Constants.Errors.EmailConfirmationError);
                return(userModel);
            }


            if (user.LockoutEnabled && user.isRemoved)
            {
                userModel.Errors.Add(Constants.Errors.UserLockError);
                return(userModel);
            }

            userModel = user.MapToModel();

            userModel.Role = await _userRepository.GetUserRolesAsync(user.Id);

            var result = await _userRepository.CheckSignInAsync(signInModel.Email, signInModel.Password);

            if (!result)
            {
                userModel.Errors.Add(Constants.Errors.WrongCredentialsError);
            }

            return(userModel);
        }
Exemple #29
0
        public async Task <BaseModel> UpdateUserAsync(SignUpModel signUpModel)
        {
            var user = await _userRepository.FindByIdAsync(signUpModel.Id);

            var userModel = new UserModelItem();

            if (user == null)
            {
                userModel.Errors.Add(Constants.Errors.UserNotExistsError);
                return(userModel);
            }

            user = signUpModel.MapToEntity(user);

            var result = await _userRepository.UpdateAsync(user, signUpModel.Password, signUpModel.NewPassword);

            if (!result)
            {
                userModel.Errors.Add(Constants.Errors.EditUserError);
            }

            return(userModel);
        }
Exemple #30
0
        public TokensModel GenerateTokens(UserModelItem model)
        {
            var responce    = new BaseModel();
            var accessToken = GenerateAccessToken(model);

            if (accessToken == null)
            {
                responce.Errors.Add(ErrorConstants.AccessProblems);
                return((TokensModel)responce);
            }
            var refreshToken = GenerateRefreshToken(model);

            if (refreshToken == null)
            {
                responce.Errors.Add(ErrorConstants.AccessProblems);
                return((TokensModel)responce);
            }
            return(new TokensModel()
            {
                AccessToken = accessToken,
                RefreshToken = refreshToken
            });
        }