public async void EnvioCorreo(TipoCorreo tipoCorreo) { var Ruta = string.Empty; var Cadena = new String[] { string.Format("{0} {1} {2}", Nombres, ApellidoPaterno, ApellidoMaterno), Codigo, DateTime.Today.ToString("D"), DateTime.Today.AddDays(90).ToString("D") }; var Contenido = new ContenidoMail(); switch (tipoCorreo) { case TipoCorreo.UsuarioNuevoExterno: Ruta = "ErickOrlando.Seguridad.Negocio.Editables.Usuarios.PlantillaCorreo.htm"; Contenido.Asunto = string.Format(Properties.Resources.msgAsuntoActivacion, this.Codigo); break; case TipoCorreo.UsuarioNuevoInterno: Ruta = "ErickOrlando.Seguridad.Negocio.Editables.Usuarios.PlantillaCorreoUsuarioAD.htm"; Contenido.Asunto = string.Format(Properties.Resources.msgAsuntoActivacion, this.Codigo); Cadena = new String[] { Nombres, Codigo, Dominio }; break; case TipoCorreo.CambioClave: Ruta = "ErickOrlando.Seguridad.Negocio.Editables.Usuarios.PlantillaContrasena.htm"; Contenido.Asunto = string.Format(Properties.Resources.msgAsuntoRestablecimiento, this.Codigo); break; } try { TextReader texto = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(Ruta)); #region Configuracion del Correo var crypto = new SimpleInteroperableEncryption(); Contenido.RemitenteMail = ConfigurationManager.AppSettings["RemitenteEmail"]; Contenido.RemitenteNombre = ConfigurationManager.AppSettings["RemitenteNombre"]; Contenido.Servidor = ConfigurationManager.AppSettings["SMTPServer"]; Contenido.Puerto = int.Parse(ConfigurationManager.AppSettings["PuertoSMTP"]); Contenido.Credenciales = new System.Net.NetworkCredential( crypto.Decrypt(ConfigurationManager.AppSettings["CredencialUser"]), crypto.Decrypt(ConfigurationManager.AppSettings["CredencialPass"])); Contenido.UsarSSL = true; Contenido.CuerpoMensaje = texto.ReadToEnd(); Contenido.ListaDestinatarios.Add(Correo); Contenido.ArrayValores = Cadena; Contenido.Html = true; texto.Close(); #endregion #region Contenido del Correo using (MailMessage mail = new MailMessage()) { mail.From = new MailAddress(Contenido.RemitenteMail, Contenido.RemitenteNombre); foreach (var Destinatario in Contenido.ListaDestinatarios) { mail.To.Add(Destinatario); } foreach (var Destinatario in Contenido.ListaDestinatariosCC) { mail.CC.Add(Destinatario); } foreach (var Destinatario in Contenido.ListaDestinatariosBCC) { mail.Bcc.Add(Destinatario); } var CuerpoHTML = new StringBuilder(); if (Contenido.ArrayValores.Length > 0) { CuerpoHTML.AppendFormat(Contenido.CuerpoMensaje, Contenido.ArrayValores); } else { CuerpoHTML.Append(Contenido.CuerpoMensaje); } CuerpoHTML.AppendLine(); CuerpoHTML.AppendLine(); CuerpoHTML.AppendLine(); CuerpoHTML.Append(Contenido.Html ? Contenido.PieDeCorreoHTML : Contenido.PieDeCorreo); mail.Subject = Contenido.Asunto; mail.Body = CuerpoHTML.ToString(); mail.IsBodyHtml = Contenido.Html; //Limpiamos el StringBuilder CuerpoHTML.Length = 0; var smtp = new SmtpClient(); smtp.Host = Contenido.Servidor; if (Contenido.Puerto.HasValue) { smtp.Port = Contenido.Puerto.Value; } if (Contenido.Credenciales != null) { smtp.Credentials = Contenido.Credenciales; } else { smtp.UseDefaultCredentials = true; } if (Contenido.Servidor.ToLower() == "localhost" || Contenido.Servidor == "127.0.0.1") { smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; } if (!string.IsNullOrEmpty(Contenido.DirectorioRecojoIIS)) { smtp.PickupDirectoryLocation = Contenido.DirectorioRecojoIIS; } smtp.EnableSsl = Contenido.UsarSSL; //await smtp.SendMailAsync(mail); await smtp.SendMailAsync(mail); } #endregion } catch (SmtpException ex) { var msg = string.Format("{0}\n{1}", ex.Message, ex.InnerException == null ? string.Empty : ex.InnerException.Message); System.Diagnostics.Trace.WriteLine(msg); } }
public static ResponseUsuarioInsert InsertUsuario(RequestDTOUsuarioInsert request) { ResponseUsuarioInsert result = new ResponseUsuarioInsert(); var perfil = ErickOrlando.Seguridad.Negocio.Editables.PerfilUsuario.NewPerfilUsuario(); var usuario = Usuario.NewUsuario(); try { if (String.IsNullOrEmpty(request.Codigo)) { return(result); } string IdAplicacion = string.Empty; string IdEmpresa = string.Empty; string IdEmpresaPertenencia = string.Empty; string IdRol = string.Empty; string IdCargo = string.Empty; using (var ctx = new SeguridadEntities()) { // Buscamos el ID de la Aplicacion. IdAplicacion = (from app in ctx.Aplicaciones where app.Acronimo == request.Acronimo select app.IdAplicacion).SingleOrDefault(); if (string.IsNullOrEmpty(IdAplicacion)) { throw new ApplicationException(string.Format("La Aplicación {0} no existe!", request.Acronimo)); } // Buscamos el ID de la Empresa. IdEmpresa = (from emp in ctx.Empresas where emp.RUC == request.RUCEmpresa select emp.IdEmpresa).SingleOrDefault(); if (string.IsNullOrEmpty(IdEmpresa)) { throw new ApplicationException(string.Format("La Empresa con el RUC {0} no existe!", request.RUCEmpresa)); } if (request.RUCEmpresa != request.RUCEmpresaPertenencia) { // Buscamos el ID de la Empresa Pertenencia. IdEmpresaPertenencia = (from emp in ctx.Empresas where emp.RUC == request.RUCEmpresaPertenencia select emp.IdEmpresa).SingleOrDefault(); if (string.IsNullOrEmpty(IdEmpresaPertenencia)) { throw new ApplicationException(string.Format("La Empresa con el RUC {0} no existe!", request.RUCEmpresaPertenencia)); } } else { IdEmpresaPertenencia = IdEmpresa; } // Buscamos el ID del Rol. IdRol = (from roles in ctx.Roles where roles.IdAplicacion == IdAplicacion && roles.NombreRol == request.Rol select roles.IdRol).SingleOrDefault(); if (string.IsNullOrEmpty(IdRol)) { throw new ApplicationException(string.Format("No se encuentra el Rol {0}", request.Rol)); } // Buscamos el ID del Cargo. IdCargo = (from cargo in ctx.Cargo where cargo.Descripcion == request.Cargo select cargo.IdCargo).SingleOrDefault(); if (string.IsNullOrEmpty(IdCargo)) { throw new ApplicationException(string.Format("No se encuentra el cargo {0}", request.Cargo)); } ctx.Database.Connection.Close(); } //Creacion de nuevo usuario usuario.IdEmpresa = IdEmpresa; usuario.IdEmpresaPertenencia = IdEmpresaPertenencia; usuario.IdCargo = IdCargo; usuario.Nombres = request.Nombres; usuario.Alias = request.Alias; usuario.Dominio = request.Dominio; usuario.ApellidoMaterno = request.ApellidoMaterno; usuario.ApellidoPaterno = request.ApellidoPaterno; usuario.Codigo = request.Codigo; usuario.Correo = request.Correo; usuario.DNI = request.DNI; usuario.Estado = true; usuario.NotificarConCorreo = request.NotificacionConCorreo; usuario.Tipo = request.Tipo; usuario = usuario.Save(); //Recuperando usuario creado var usuarioCreado = usuario; //Estableciendo variables de entorno Csla.ApplicationContext.GlobalContext["Placa"] = Environment.MachineName; Csla.ApplicationContext.GlobalContext["Usuario"] = Environment.UserName; //Creacion de perfil perfil.IdAplicacion = IdAplicacion; perfil.IdUsuario = usuarioCreado.Id; perfil.Usuario = usuarioCreado.Nombres; perfil.Aplicacion = IdAplicacion; perfil.Caduca = request.Caduca; perfil.VigenciaInicio = DateTime.Now; perfil.VigenciaFin = DateTime.Now.AddYears(1); //Asignando rol var rolPerfil = perfil.RolesPerfiles.AddNew(); rolPerfil.IdRol = IdRol; rolPerfil.IdAplicacion = IdAplicacion; //Agregando permisos rolPerfil.AgregarPermisos(); //Estableciendo recursos var recursosList = RecursosInfoList.GetRecursosInfoList(); if (request.ListaRecursos != null) { foreach (var recurso in request.ListaRecursos) { string recursoact = recurso.Substring(0, recurso.IndexOf(":")).Trim(); string[] recursodetalle = recurso.Substring(recurso.IndexOf(":") + 1).Trim().Split(','); foreach (var itemrecurso in recursosList.Where(x => x.Descripcion == recursoact)) { var recursodetalles = from p in itemrecurso.Detalles where recursodetalle.Contains(p.Descripcion) select p; foreach (var itemrecursodetalle in recursodetalles) { var recursoitem = perfil.Recursos.AddNew(); recursoitem.Conceder = true; recursoitem.IdRecursoDetalle = itemrecursodetalle.ID; perfil.Recursos.Add(recursoitem); } } } } perfil.Save(); string Clave = string.Empty; if (usuario.Tipo == "E") { //Creacion de contraseña if (String.IsNullOrEmpty(request.Clave)) { Clave = GenerarClaveAleatoria(); } else { var crypto = new SimpleInteroperableEncryption(); Clave = crypto.Decrypt(request.Clave); } //Hay que intentar el Login para identificar si se debe crear la contraseña. try { Csla.ApplicationContext.GlobalContext["Acronimo"] = request.Acronimo; GRPrincipal.Load(usuario.Codigo, usuario.Dominio); //GRPrincipal.Login(usuario.Codigo, GRCrypto.Encriptar( "clave")); } catch (DataPortalException ex) { if (ex.BusinessException.GetType() == typeof(UsuarioNoActivoException) || ex.BusinessException.GetType() == typeof(UsuarioSinClaveException)) { var activacion = ActivarUsuario.GetActivarUsuario(new FiltroUsuarios { Usuario = usuario.Codigo, Dominio = usuario.Dominio }); activacion.NombreUsuario = request.Codigo; activacion.PreguntaSecreta = request.PreguntaSecreta; activacion.RespuestaSecreta = request.RespuestaSecreta; activacion.ClaveSecreta = Clave; activacion.ConfirmarClave = Clave; try { activacion.Save(); } catch (ValidationException) { throw new InvalidOperationException(activacion.BrokenRulesCollection.ToString()); } } } } result.IdUsuario = usuarioCreado.Id; result.Clave = (string.IsNullOrEmpty(request.Clave)) ? Clave : string.Empty; result.Codigo = request.Codigo; result.Alias = request.Alias; result.Resultado.Success = true; result.Resultado.Message = string.Empty; } catch (ValidationException) { var msg1 = usuario.BrokenRulesCollection.ToString(); var msg2 = perfil.BrokenRulesCollection.ToString(); if (string.IsNullOrEmpty(msg1)) { result.Resultado.Message = msg2; } else if (string.IsNullOrEmpty(msg2)) { result.Resultado.Message = msg1; } else { result.Resultado.Message = string.Format("{0} {1}", msg1, msg2); } } catch (DataPortalException ex) { result.Resultado.Message = ex.BusinessException.Message; if (ex.BusinessException.InnerException != null) { result.Resultado.Messages.Add(new Result { Message = ex.BusinessException.InnerException.Message }); } } catch (Exception ex) { var msg = ex.Message; if (ex.InnerException != null) { msg = ex.InnerException.Message; } result.Resultado.Message = msg; } return(result); }
/// <summary> /// Cambia la contraseña de un usuario externo, si el campo es vacio se crea una contraseña, de lo contrario registra al constraseña enviada. /// </summary> /// <param name="request">Constraseña a registrar</param> /// <returns>Contraseña generada</returns> public static ResponseCambioClave CambiarClaveWeb(RequestCambioClave request) { ResponseCambioClave response = new ResponseCambioClave(); var publicCrypter = new SimpleInteroperableEncryption(); var info = GetInfoBasicaUsuariosByCodigo(new RequestInfoBasicaUsuarioDTO { CodigoUsuario = request.CodigoUsuario, Dominio = request.Dominio }); if (!info.Resultado.Success) { throw new InvalidOperationException("El usuario no existe!"); } if (info.InfoBasica.Tipo != "E") { throw new InvalidOperationException("Sólo los usuarios externos pueden cambiar su contraseña"); } //SI SE HA SOLICITADO CONTRASEÑA, SE VALIDA LA CONTRASEÑA ANTIGUA if (request.TipoCambioClave == TipoCambioClave.Ui) { // Comprobamos si el campo de Respuesta Secreta se encuentra lleno para validar // que el usuario se olvidó se contraseña y posteriormente hacer el cambio. if (string.IsNullOrEmpty(request.RespuestaSecreta)) { ResponseLoginUsuario responseLogin = Login(new RequestLogin { CodigoUsuario = request.CodigoUsuario, Clave = publicCrypter.Decrypt(request.ClaveAntigua), Dominio = request.Dominio, AcronimoAplicacion = request.Acronimo }); if (!responseLogin.Resultado.Success) { throw new Exception("La contraseña es incorrecta."); } } else { // Comprobamos que la respuesta a la pregunta Secreta sea válida. using (var ctx = new SeguridadEntities()) { var clave = (from clav in ctx.Claves where clav.IdUsuario == info.InfoBasica.IdUsuario && clav.Ultimo select new { RespuestaSecreta = clav.Respuesta }).FirstOrDefault(); if (clave != null) { if (clave.RespuestaSecreta != GRCrypto.Encriptar(request.RespuestaSecreta)) { throw new SecurityException("La respuesta secreta no coincide!"); } } } } } // En caso sea un reseteo de clave if (request.TipoCambioClave == TipoCambioClave.Sys) { request.ClaveAntigua = request.ClaveNuevaConfirmada = request.ClaveNueva = publicCrypter.Decrypt(request.ClaveNueva); } else { //DESENCRIPTAR LA CONTRASENIA request.ClaveAntigua = publicCrypter.Decrypt(request.ClaveAntigua); request.ClaveNueva = publicCrypter.Decrypt(request.ClaveNueva); request.ClaveNuevaConfirmada = publicCrypter.Decrypt(request.ClaveNuevaConfirmada); } Result result = ValidacionCambiarClaveWeb(request); if (result.Success == false) { throw new Exception(result.Message); } bool primeraClave = false; try { //Validamos si tiene Clave registrada. GRPrincipal.Load(request.CodigoUsuario, request.Dominio); } catch (DataPortalException ex) { if (ex.BusinessException != null) { if (ex.BusinessException.GetType() == typeof(UsuarioSinClaveException)) { //SI LA EXCEPCION ES USUARIOSINCLAVE SE LE CREA UNA CLAVE ActivarUsuario activarUsuario = ActivarUsuario.GetActivarUsuario(new FiltroUsuarios { Usuario = request.CodigoUsuario, Dominio = request.Dominio }); activarUsuario.PreguntaSecreta = activarUsuario.RespuestaSecreta = request.CodigoUsuario; activarUsuario.ClaveSecreta = activarUsuario.ConfirmarClave = request.ClaveNueva; activarUsuario.Save(); primeraClave = true; } } } if (!primeraClave) { var cambiarClave = CambiarClave.GetCambiarClave(new FiltroUsuarios { Usuario = request.CodigoUsuario, Dominio = request.Dominio }); cambiarClave.ClaveNueva = cambiarClave.ConfirmarClave = request.ClaveNueva; cambiarClave.RespuestaSecreta = string.IsNullOrEmpty(request.RespuestaSecreta) ? cambiarClave.SecretAnswer : request.RespuestaSecreta; CambiarClave.ByPassClave = true; cambiarClave.Save(); } response.Correo = info.InfoBasica.Correo; response.Nombres = info.InfoBasica.NombresCompletos; response.CodigoUsuario = request.CodigoUsuario; return(response); }
public static ResponseLoginUsuario Login(RequestLogin request) { var response = new ResponseLoginUsuario(); try { if (string.IsNullOrEmpty(request.Clave) || string.IsNullOrEmpty(request.CodigoUsuario)) { throw new InvalidOperationException("El usuario y clave son obligatorios."); } if (string.IsNullOrEmpty(request.AcronimoAplicacion)) { throw new InvalidOperationException("El acrónimo es obligatorio."); } // Desencriptamos el mensaje recibido. var cryptocon = new SimpleInteroperableEncryption(); request.Clave = cryptocon.Decrypt(request.Clave); //Comprobamos que el Nombre de Usuario contiene un Dominio var infoUser = new UserDomain { Usuario = request.CodigoUsuario, Dominio = request.Dominio }; //Guardamos en el GlobalContext el valor que se reciba del Acrónimo Csla.ApplicationContext.GlobalContext["Acronimo"] = request.AcronimoAplicacion; if (string.IsNullOrEmpty(request.Dominio)) { throw new InvalidOperationException("El dominio es obligatorio."); } var result = false; //Comprobamos primero el tipo de Usuario if (GRPrincipal.Load(infoUser.Usuario, infoUser.Dominio)) { InfoUsuario.Initialize(); if (InfoUsuario.Instancia.Tipo) // Si es interno { result = GRPrincipal.Login(infoUser.Usuario, request.Clave, request.Dominio); } else // Si es externo { result = GRPrincipal.Login(infoUser.Usuario, GRCrypto.Encriptar(request.Clave)); } } else { throw new InvalidOperationException("El usuario no está inscrito para este Sistema"); } if (!result) { throw new SecurityException("El usuario o clave no son válidos!"); } response.Resultado.Success = result; response.IdPerfilUsuario = InfoUsuario.Instancia.IdPerfilUsuario; } catch (DataPortalException ex) { response.Resultado.Message = ex.BusinessException.Message; } catch (Exception ex) { var msg = ex.Message; if (ex.InnerException != null) { msg = ex.InnerException.Message; } response.Resultado.Message = msg; } return(response); }