public async Task <IActionResult> Login([FromBody] Login model)
        {
            var user = _unitOfWork.GetUser(model.Username);

            if (user == null)
            {
                ModelState.AddModelError("Login", Errors.USER_NOT_FOUND);

                return(BadRequest(ModelState));
            }

            if (!_passwordManager.Compare(user, model.Password))
            {
                ModelState.AddModelError("Password", Errors.INVALID_PASSWORD);

                return(BadRequest(ModelState));
            }
            ;

            var claims = await _unitOfWork.GetUserClaims(user);

            await _unitOfWork.UpdateLastLogin(user);

            var token = _jwtTokenProvider.CreateToken(user, claims);

            return(new ObjectResult(token));
        }
Esempio n. 2
0
        public async Task <HttpResult <string> > Login(Login model, CancellationToken token = default(CancellationToken))
        {
            var result = new HttpResult <string>();

            var user = _unitOfWork.GetUser(model.Username);

            if (user == null)
            {
                result.Error = new System.Collections.Generic.Dictionary <string, string[]>
                {
                    { "Username", new [] { "Username not found" } }
                };

                return(result);
            }

            if (!_passwordManager.Compare(user, model.Password))
            {
                result.Error = new System.Collections.Generic.Dictionary <string, string[]>
                {
                    { "Password", new [] { "Invalid password" } }
                };
            }
            ;

            var claims = await _unitOfWork.GetUserClaims(user);

            await _unitOfWork.UpdateLastLogin(user);

            result.Data = _jwtTokenProvider.CreateToken(user, claims);

            return(await Task.FromResult(result));
        }
        public async Task EditUser(EditUser model)
        {
            await RunTaskInTransaction(async() =>
            {
                var entity = UserRepository.Get(model.Id);

                entity.UserName  = model.Username;
                entity.Email     = model.Email;
                entity.FirstName = model.FirstName;
                entity.LastName  = model.LastName;
                entity.Image     = model.Avatar;

                if (!string.IsNullOrEmpty(model.Password))
                {
                    var passwordHash = _passwordManager.GetHash(model.Password);

                    if (!_passwordManager.Compare(entity, passwordHash))
                    {
                        entity.PasswordHash = passwordHash;
                    }
                }

                if (model.Role != null)
                {
                    UserRoleRepository.RemoveRange(entity.UserRoles);

                    var role = await RoleRepository.Find(model.Role.Name);

                    await UserRoleRepository.Add(
                        new UserRole
                    {
                        UserId = entity.Id,
                        RoleId = role.Id
                    });
                }

                UserRepository.Update(entity);

                if (model.Claims != null)
                {
                    UserClaimRepository.RemoveRange(entity.UserClaims);

                    var claims = model.Claims.Select(cl => new UserClaim
                    {
                        UserId     = entity.Id,
                        ClaimType  = cl.Type,
                        ClaimValue = cl.Value
                    });

                    await UserClaimRepository.AddRange(claims);
                }

                return(string.Empty);
            });
        }
        public async Task EditUser(EditUser model)
        {
            var transaction = _dbContext.Database.BeginTransaction();

            try
            {
                var entity = await UserRepository.Get(model.Id);

                entity.UserName  = model.Username;
                entity.Email     = model.Email;
                entity.FirstName = model.FirstName;
                entity.LastName  = model.LastName;
                entity.Image     = model.Avatar;

                if (!string.IsNullOrEmpty(model.Password))
                {
                    var passwordHash = _passwordManager.GetHash(model.Password);

                    if (!_passwordManager.Compare(entity, passwordHash))
                    {
                        entity.PasswordHash = passwordHash;
                    }
                }

                entity.UserRoles.Clear();
                Save();

                if (model.Role != null)
                {
                    var role = await RoleRepository.Find(model.Role.Name);

                    await UserRoleRepository.Add(
                        new UserRole
                    {
                        User = entity,
                        Role = role
                    });
                }

                UserRepository.Update(entity);
                Save();

                entity.UserClaims.Clear();

                if (model.Claims != null)
                {
                    var claims = model.Claims.Select(cl => new UserClaim
                    {
                        UserId     = entity.Id,
                        ClaimType  = cl.Type,
                        ClaimValue = cl.Value
                    });

                    await UserClaimRepository.AddRange(claims);
                }

                Save();

                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
        }