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