Пример #1
0
        public IActionResult Login([FromBody] AutenticacaoTrabalhadorDTO model)
        {
            _logger.LogDebug("A executar api/administrador/login -> Post");
            if (model is null)
            {
                _logger.LogWarning("O objeto AutenticacaoDTO é null!");
                return(BadRequest(nameof(model)));
            }

            try
            {
                ServiceResult <TokenDTO> resultado = _administradorBusiness.Login(model);
                if (resultado.Sucesso)
                {
                    _logger.LogInformation($"O Administrador com Número de Funcionário {model.NumFuncionario} efetou login com sucesso.");
                    return(Ok(resultado.Resultado));
                }
                else
                {
                    _logger.LogInformation($"Ocorreu um erro ao efetuar o login com o Número de Funcionário {model.NumFuncionario}.");
                    return(BadRequest(resultado.Erros));
                }
            }
            catch (ArgumentNullException e)
            {
                _logger.LogError(e, e.Message);
                return(BadRequest(new { message = e.Message }));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(StatusCode(500));
            }
        }
        public ServiceResult <TokenDTO> Login(AutenticacaoTrabalhadorDTO model)
        {
            _logger.LogDebug("A executar [FuncionarioBusiness -> Login]");
            if (string.IsNullOrWhiteSpace(model.Password))
            {
                throw new ArgumentNullException("Password", "Campo não poder ser nulo!");
            }

            IList <int> erros       = new List <int>();
            TokenDTO    resultToken = null;

            if (!_funcionarioDAO.ExisteNumFuncionario(model.NumFuncionario))
            {
                _logger.LogWarning($"O Número de Funcionário {model.NumFuncionario} não existe.");
                erros.Add((int)ErrosEnumeration.NumFuncionarioNaoExiste);
            }
            else
            {
                Funcionario funcionario = _funcionarioDAO.GetContaNumFuncionario(model.NumFuncionario);
                if (funcionario == null)
                {
                    _logger.LogWarning($"O Número de Funcionário {model.NumFuncionario} é um Administrador.");
                    erros.Add((int)ErrosEnumeration.NumFuncionarioInvalidoLogin);
                }
                else
                {
                    if (funcionario.Password.Equals(_hashPasswordService.HashPassword(model.Password)))
                    {
                        var tokenHandler    = new JwtSecurityTokenHandler();
                        var key             = Encoding.ASCII.GetBytes(_appSettings.Secret);
                        var tokenDescriptor = new SecurityTokenDescriptor
                        {
                            Subject = new ClaimsIdentity(new Claim[]
                            {
                                new Claim(ClaimTypes.NameIdentifier, funcionario.IdFuncionario.ToString()),
                                new Claim(ClaimTypes.Role, "Funcionario")
                            }),
                            Expires            = DateTime.UtcNow.AddHours(9),
                            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                        };
                        var token = tokenHandler.CreateToken(tokenDescriptor);
                        resultToken = new TokenDTO {
                            Token = tokenHandler.WriteToken(token)
                        };
                    }
                    else
                    {
                        _logger.LogWarning("A Password está incorreta!");
                        erros.Add((int)ErrosEnumeration.NumFuncionarioPasswordIncorreta);
                    }
                }
            }

            return(new ServiceResult <TokenDTO> {
                Erros = new ErrosDTO {
                    Erros = erros
                }, Sucesso = !erros.Any(), Resultado = resultToken
            });
        }