public async Task <Unit> Handle(AssociarGrupoUsuarioCommand request, CancellationToken cancellationToken) { var grupos = await usuarioCoreSSORepositorio.SelecionarGrupos(); if (grupos == null) { throw new NegocioException("Grupos de usuário não encontrados"); } var gruposNaoIncluidos = grupos.Where(x => !request.UsuarioCoreSSO.Grupos.Any(z => z.Equals(x))); if (gruposNaoIncluidos.Any()) { await usuarioCoreSSORepositorio.IncluirUsuarioNosGrupos(request.UsuarioCoreSSO.UsuId, gruposNaoIncluidos); } return(default);
public async Task <RetornoUsuarioCoreSSO> Handle(CriarUsuarioCoreSSOCommand request, CancellationToken cancellationToken) { var usuarios = await repositoryCoreSSO.ObterPorCPF(request.Usuario.Cpf); if (usuarios != null) { throw new NegocioException($"Já existe usuário com o CPF {request.Usuario.Cpf} na base do CoreSSO"); } var usuarioId = await repositoryCoreSSO.Criar(request.Usuario); var grupos = await repositoryCoreSSO.SelecionarGrupos(); await repositoryCoreSSO.IncluirUsuarioNosGrupos(usuarioId, grupos); return(await repositoryCoreSSO.ObterPorId(usuarioId)); }
public async Task <RespostaApi> Handle(AutenticarUsuarioCommand request, CancellationToken cancellationToken) { bool primeiroAcesso = false; var validator = new AutenticarUsuarioUseCaseValidatior(); var validacao = validator.Validate(request); if (!validacao.IsValid) { return(RespostaApi.Falha(validacao.Errors)); } //verificar se o usuário está cadastrado no CoreSSO var usuarioCoreSSO = await mediator.Send(new ObterUsuarioCoreSSOQuery(request.Cpf)); string senhaCriptografada = string.Empty; //se for primeiro acesso if (usuarioCoreSSO == null) { primeiroAcesso = true; var senha = Regex.Replace(request.Senha, @"\-\/", ""); try { request.DataNascimento = DateTime.ParseExact(senha, "ddMMyyyy", CultureInfo.InvariantCulture); } catch { validacao.Errors.Add(new ValidationFailure("Usuário", "Data de nascimento inválida.")); return(RespostaApi.Falha(validacao.Errors)); } } //buscar o usuario var usuarioRetorno = await _repository.ObterPorCpf(request.Cpf); //verificar se as senhas são iguais if (usuarioRetorno != null) { primeiroAcesso = usuarioRetorno.PrimeiroAcesso; if (!usuarioRetorno.PrimeiroAcesso) { if (usuarioCoreSSO != null && (!Criptografia.EqualsSenha(request.Senha, usuarioCoreSSO.Senha, usuarioCoreSSO.TipoCriptografia))) { validacao.Errors.Add(new ValidationFailure("Usuário", "Usuário ou senha incorretos.")); return(RespostaApi.Falha(validacao.Errors)); } } else { var senha = Regex.Replace(request.Senha, @"\-\/", ""); try { request.DataNascimento = DateTime.ParseExact(senha, "ddMMyyyy", CultureInfo.InvariantCulture); } catch { validacao.Errors.Add(new ValidationFailure("Usuário", "Data de nascimento inválida.")); return(RespostaApi.Falha(validacao.Errors)); } } } else { primeiroAcesso = true; var senha = Regex.Replace(request.Senha, @"\-\/", ""); try { request.DataNascimento = DateTime.ParseExact(senha, "ddMMyyyy", CultureInfo.InvariantCulture); } catch { validacao.Errors.Add(new ValidationFailure("Usuário", "Data de nascimento inválida.")); return(RespostaApi.Falha(validacao.Errors)); } } //selecionar alunos do responsável buscando apenas pelo cpf var usuarioAlunos = await _autenticacaoService.SelecionarAlunosResponsavel(request.Cpf); //caso nao tenha nenhum filho matriculado, retornar falha e inativá-lo no coresso if (usuarioAlunos == null || !usuarioAlunos.Any()) { validacao.Errors.Add(new ValidationFailure("Usuário", "Este CPF não está relacionado como responsável de um aluno ativo na rede municipal.")); ExcluiUsuarioSeExistir(request, usuarioRetorno); if (usuarioCoreSSO != null) { await _repositoryCoreSSO.AlterarStatusUsuario(usuarioCoreSSO.UsuId, StatusUsuarioCoreSSO.Inativo); } return(RespostaApi.Falha(validacao.Errors)); } //se for primeiro acesso, a senha validar se a senha inputada é alguma data de nascimento de algum aluno do responsável if (primeiroAcesso && (!usuarioAlunos.Any(w => w.DataNascimento == request.DataNascimento))) { validacao.Errors.Add(new ValidationFailure("Usuário", "Data de Nascimento inválida.")); //ExcluiUsuarioSeExistir(request, usuarioRetorno); return(RespostaApi.Falha(validacao.Errors)); } if (primeiroAcesso && (usuarioAlunos.Any(w => w.DataNascimento == request.DataNascimento && w.TipoSigilo == (int)AlunoTipoSigilo.Restricao))) { validacao.Errors.Add(new ValidationFailure("Usuário", "Usuário não cadastrado, qualquer dúvida procure a unidade escolar.")); return(RespostaApi.Falha(validacao.Errors)); } //necessário implementar unit of work para transacionar essas operações var grupos = await _repositoryCoreSSO.SelecionarGrupos(); var usuarioParaSeBasear = usuarioAlunos .OrderByDescending(a => a.DataAtualizacao) .FirstOrDefault(); primeiroAcesso = primeiroAcesso || !grupos.Any(x => usuarioCoreSSO.Grupos.Any(z => z.Equals(x))); //verificar se o usuário está incluído em todos os grupos if (usuarioCoreSSO != null && usuarioCoreSSO.Status == (int)StatusUsuarioCoreSSO.Inativo) { await _repositoryCoreSSO.AlterarStatusUsuario(usuarioCoreSSO.UsuId, StatusUsuarioCoreSSO.Ativo); } if (usuarioCoreSSO != null && usuarioCoreSSO.TipoCriptografia != TipoCriptografia.TripleDES) { senhaCriptografada = Criptografia.CriptografarSenhaTripleDES(request.Senha); await _repositoryCoreSSO.AtualizarCriptografiaUsuario(usuarioCoreSSO.UsuId, senhaCriptografada); } usuarioRetorno = await CriaUsuarioEhSeJaExistirAtualizaUltimoLogin(request, usuarioRetorno, usuarioParaSeBasear, primeiroAcesso); usuarioRetorno.PrimeiroAcesso = usuarioRetorno.PrimeiroAcesso || primeiroAcesso; var atualizarDadosCadastrais = VerificarAtualizacaoCadastral(usuarioParaSeBasear); return(MapearResposta(usuarioParaSeBasear, usuarioRetorno, primeiroAcesso, atualizarDadosCadastrais || primeiroAcesso)); }