Exemple #1
0
 public async Task ValidarTokenSms(string codigoConvite, string numeroCelular, string codigoToken)
 {
     var validarTokenSmsCommand = new ValidarTokenSmsCommand(codigoConvite, numeroCelular, codigoToken);
     await _bus.SendCommand(validarTokenSmsCommand);
 }
        public async Task <bool> Handle(ValidarTokenSmsCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                NotifyValidationErrors(message);
                return(await Task.FromResult(false));
            }

            try
            {
                var client = _httpAppService.CreateClient(_serviceManager.UrlVileve);

                var token = await _httpAppService.OnPost <Token, object>(client, message.RequestId, "v1/auth/login", new
                {
                    usuario = _serviceManager.UserVileve,
                    senha   = _serviceManager.PasswordVileve
                });

                if (token == null || string.IsNullOrWhiteSpace(token.AccessToken))
                {
                    await _bus.RaiseEvent(new DomainNotification(message.MessageType, "Usuário de integração não encontrado.", message));

                    return(await Task.FromResult(false));
                }

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);

                var validarToken = await _httpAppService.OnPost <ValidarToken, object>(client, message.RequestId, "v1/validacao-contato/validar-token", new
                {
                    token           = message.CodigoToken,
                    numero_telefone = message.NumeroCelular
                });

                if (validarToken.Valido.Equals(false))
                {
                    await _bus.RaiseEvent(new DomainNotification(message.MessageType, "Token inválido.", message));

                    return(await Task.FromResult(false));
                }
            }
            catch (Exception e)
            {
                _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                {
                    message.RequestId,
                    e.Message
                }));

                await _bus.RaiseEvent(new DomainNotification(message.MessageType, "O sistema está momentaneamente indisponível, tente novamente mais tarde.", message));

                return(await Task.FromResult(false));
            }

            if (message.CodigoConvite.Equals("******"))
            {
                return(await Task.FromResult(true));
            }

            var onboarding = _onboardingRepository.Find(o => o.CodigoConvite.Equals(message.CodigoConvite) && o.NumeroCelular.Equals(message.NumeroCelular)).FirstOrDefault();

            if (onboarding != null)
            {
                if (onboarding.StatusOnboarding.Equals(StatusOnboarding.ValidacaoToken) || onboarding.StatusOnboarding.Equals(StatusOnboarding.ValidacaoEmail))
                {
                    return(await Task.FromResult(true));
                }

                await _bus.RaiseEvent(new DomainNotification(message.MessageType, "Este código do convite e número de celular estão vinculados a outro usuário.", message));

                return(await Task.FromResult(false));
            }

            onboarding = new Onboarding(Guid.NewGuid())
            {
                CodigoConvite    = message.CodigoConvite,
                NumeroCelular    = message.NumeroCelular,
                StatusOnboarding = StatusOnboarding.ValidacaoToken
            };

            _onboardingRepository.Add(onboarding);

            if (Commit())
            {
            }

            return(await Task.FromResult(true));
        }