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 }); }