Example #1
0
        public async Task <RespuestaDatos> Register([FromBody] RegisterDatos model)
        {
            // Registra el usuario en el aplicativo
            ApplicationUser user = await _seguridadBiz.RegistrarUsuario(model);

            try
            {
                /* var urlApp = _configuration["App:Url"];
                 * //Generar token de confirmación
                 * var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                 * var linkConfirmation = urlApp + $@"/ConfirmarCuenta/{user.Email}/{code}";
                 *
                 * Console.WriteLine($@"A1 - {linkConfirmation}");
                 *
                 *
                 * //Envia mensaje de registro
                 * await _workflowMensaje.EnviarMensajeRegistro(new DemografiaDatos
                 * {
                 *   Nombres = model.Nombres,
                 *   Apellidos = model.Apellidos,
                 *   Email = model.Email
                 * }, linkConfirmation);*/

                //return new RespuestaDatos { Codigo = COCodigoRespuesta.OK, Mensaje = $@"Hemos enviado a su correo electrónico un enlace de confirmación, por favor revise su bandeja de entrada y siga las instrucciones para activar su cuenta en {_configuration["App:Nombre"]}." };
                return(new RespuestaDatos {
                    Codigo = COCodigoRespuesta.OK, Mensaje = $@"Bienvenido a Buy@, ya puedes ingresar con tus credenciales!!!"
                });
            }
            catch (Exception e)
            {
                try
                {
                    RepoErrorLog.AddErrorLog(new ErrorLog
                    {
                        Mensaje   = e.Message,
                        Traza     = e.StackTrace,
                        Usuario   = user.Email,
                        Creacion  = DateTime.Now,
                        Tipoerror = COErrorLog.ENVIO_CORREO
                    });
                    return(new RespuestaDatos {
                        Codigo = COCodigoRespuesta.OK, Mensaje = $@"Se completo el registro!! Ocurrió un problema al enviar el correo de confirmación. Pongase en contacto con servicio al cliente"
                    });
                }
                catch (Exception e1)
                {
                    return(new RespuestaDatos {
                        Codigo = COCodigoRespuesta.OK, Mensaje = $@"Se completo el registro!! Ocurrió un problema al enviar el correo de confirmación. Pongase en contacto con servicio al cliente"
                    });
                }
            }
        }
        private void ValidarDatosRegistro(RegisterDatos registroDatos)
        {
            bool          isDatosCorrectos = true;
            StringBuilder mensajeDeError   = new StringBuilder();

            mensajeDeError.Append("Los datos diligenciados son incorrectos:");

            if (string.IsNullOrEmpty(registroDatos.Nombres) || string.IsNullOrWhiteSpace(registroDatos.Nombres))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Nombres");
            }
            else
            {
                registroDatos.Nombres = registroDatos.Nombres.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.Apellidos) || string.IsNullOrWhiteSpace(registroDatos.Apellidos))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Apellidos");
            }
            else
            {
                registroDatos.Apellidos = registroDatos.Apellidos.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.Email) || string.IsNullOrWhiteSpace(registroDatos.Email))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Correo electrónico");
            }
            else
            {
                registroDatos.Email = registroDatos.Email.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.NumeroDocumento) || string.IsNullOrWhiteSpace(registroDatos.NumeroDocumento))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Número de documento");
            }
            else
            {
                registroDatos.NumeroDocumento = registroDatos.NumeroDocumento.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.CodigoTelefonoPais) || string.IsNullOrWhiteSpace(registroDatos.CodigoTelefonoPais))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Código telèfonico");
            }
            else
            {
                registroDatos.CodigoTelefonoPais = registroDatos.CodigoTelefonoPais.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.NumeroTelefonico) || string.IsNullOrWhiteSpace(registroDatos.NumeroTelefonico))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Número de teléfonico");
            }
            else
            {
                registroDatos.NumeroTelefonico = registroDatos.NumeroTelefonico.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.ConfirmPassword) || string.IsNullOrWhiteSpace(registroDatos.ConfirmPassword))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Confirmación de contraseña");
            }
            else
            {
                registroDatos.ConfirmPassword = registroDatos.ConfirmPassword.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.Password) || string.IsNullOrWhiteSpace(registroDatos.Password))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Contraseña");
            }
            else
            {
                registroDatos.Password = registroDatos.Password.Trim();
            }

            if (string.IsNullOrEmpty(registroDatos.Direccion) || string.IsNullOrWhiteSpace(registroDatos.Direccion))
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Direccion");
            }
            else
            {
                registroDatos.Direccion = registroDatos.Direccion.Trim();
            }


            if (registroDatos.IdTipoCliente <= 0)
            {
                isDatosCorrectos = false;
                mensajeDeError.Append(" - Tipo de cliente");
            }

            if (!isDatosCorrectos)
            {
                throw new COExcepcion(mensajeDeError.ToString());
            }

            if (!registroDatos.ConfirmPassword.Equals(registroDatos.Password))
            {
                throw new COExcepcion("La confirmación y la contraseña no coinciden. ");
            }

            if (registroDatos.Password.Length < 8)
            {
                throw new COExcepcion("La contraseña es muy corta");
            }
        }
        public async Task <ApplicationUser> RegistrarUsuario(RegisterDatos model)
        {
            try
            {
                ValidarDatosRegistro(model);

                if (!model.IsAceptaTerminosYCondiciones)
                {
                    throw new COExcepcion("No aceptó los términos y condiciones. ");
                }

                if (model.IdTipoCliente == CORol.ADMIN)
                {
                    throw new COExcepcion("Este rol no tiene permiso para registro. ");
                }

                var rolIdentity = CORol.GetIdentityRolPorId(model.IdTipoCliente);
                if (rolIdentity == null)
                {
                    throw new COExcepcion("El rol no existe");
                }

                var userExists = await _userManager.FindByEmailAsync(model.Email);

                if (userExists != null)
                {
                    throw new COExcepcion("Este correo electrónico ya se encuentra registrado. ");
                }

                ApplicationUser user = new ApplicationUser()
                {
                    Email         = model.Email,
                    SecurityStamp = Guid.NewGuid().ToString(),
                    UserName      = model.Email,
                    PhoneNumber   = model.NumeroTelefonico.ToString()
                };

                StringBuilder sbPassword = new StringBuilder();

                var hasNumber    = new Regex(@"[0-9]+");
                var hasUpperChar = new Regex(@"[A-Z]+");
                var hasLowerChar = new Regex(@"[a-z]+");
                var hasSymbols   = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");

                if (!hasLowerChar.IsMatch(model.Password))
                {
                    sbPassword.Append($@" - La contraseña debe contener al menos una letra minúscula");
                    throw new COExcepcion(sbPassword.ToString());
                }
                else if (!hasUpperChar.IsMatch(model.Password))
                {
                    sbPassword.Append($@" - La contraseña debe contener al menos una letra mayúscula");
                    throw new COExcepcion(sbPassword.ToString());
                }
                else if (!hasNumber.IsMatch(model.Password))
                {
                    sbPassword.Append($@" - La contraseña debe contener al menos un valor numérico");
                    throw new COExcepcion(sbPassword.ToString());
                }

                else if (!hasSymbols.IsMatch(model.Password))
                {
                    sbPassword.Append($@" - La contraseña debe contener al menos un carácter de caso especial");
                    throw new COExcepcion(sbPassword.ToString());
                }
                else
                {
                }

                var result = await _userManager.CreateAsync(user, model.Password);

                if (!result.Succeeded)
                {
                    StringBuilder sb = new StringBuilder();
                    result.Errors.ToList().ForEach(err =>
                    {
                        sb.Append($@" - {err.Description}");
                    });

                    throw new COExcepcion(sb.ToString());
                }

                if (result == IdentityResult.Success)
                {
                    await _userManager.AddToRoleAsync(user, rolIdentity);

                    var demografia = new DemografiaCor
                    {
                        Aceptoterminoscondiciones = 1,
                        Email              = model.Email,
                        Nombre             = model.Nombres,
                        Apellido           = model.Apellidos,
                        Estado             = COEstados.VIGENTE,
                        Tipodocumentocorid = model.IdTipoDocumento,
                        Numerodocumento    = Convert.ToInt64(model.NumeroDocumento),
                        Creacion           = DateTime.Now,
                        Codigotelefonopais = model.CodigoTelefonoPais,
                        Telefono           = Convert.ToInt64(model.NumeroTelefonico),
                        Rolcorid           = model.IdTipoCliente,
                        Modificacion       = DateTime.Now,
                        Direccion          = model.Direccion,
                        Idpoblacion        = int.Parse(model.IdPoblacion),
                    };

                    await _repoDemografia.GuardarDemografia(demografia);
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    result.Errors.ToList().ForEach(err =>
                    {
                        sb.Append($@" - {err.Description}");
                    });
                    RepoErrorLog.AddErrorLog(new ErrorLog
                    {
                        Usuario   = user.Email,
                        Mensaje   = $@"No se logro registrar al usuario en IdentityServer. {sb}",
                        Tipoerror = COErrorLog.NO_SE_INSERTO_USUARIO_IDENTITY_SERVER,
                        Creacion  = DateTime.Now
                    });

                    throw new COExcepcion("No se logro registrar el usuario en el sistema. ");
                }
                return(user);
            }
            catch (COExcepcion e)
            {
                throw new COExcepcion("Ocurrió un problema al realizar el registro. " + e.Message);
            }
        }