public async Task <IActionResult> CambiarContrasenia(CambiarContraseniaViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            var user = await userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{userManager.GetUserId(User)}'."));
            }

            var addPasswordResult = await userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);

            if (!addPasswordResult.Succeeded)
            {
                foreach (var error in addPasswordResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(View());
            }

            await signInManager.RefreshSignInAsync(user);

            ViewBag.StatusMessage = "Your password has been set.";

            return(RedirectToAction("Index", "Usuario"));
        }
Пример #2
0
        public async Task <ActionResult> NuevaContrasenia(CambiarContraseniaViewModel model)
        {
            FormsAuthentication.SetAuthCookie("", false);
            if (ModelState.IsValid)
            {
                var MSG = new EnviarCorreoRecuperacionModel();
                try
                {
                    //sección del recaptcha
                    //Valido el capcha
                    if (!this.IsCaptchaValid("Captcha is not valid"))
                    {
                        ModelState.AddModelError(string.Empty, "Error: captcha no es válido.");
                    }
                    //si el captcha es valido
                    else
                    {
                        //Ejecuto los valores en el SP
                        //borrarSP_Updaterestacontra
                        var response = db.SP_ChangeContraseniaUser(model.usuario_id, model.contrasenia).First();
                        //
                        await db.SaveChangesAsync();

                        // el procedimiento envia un codigo de 201 como respuesta
                        if (response.codigo == 201)
                        {
                            //consulto el mensaje correspondiente para el esta caso
                            var msg = db.Web_Mensaje.Where(m => m.codigo.Equals(1018)).Select(m => new { codigo = m.codigo, tipo = m.tipo, mensaje = m.cuerpo }).First();
                            //creo un array a partir del json devuelto por la api para tratarlo desde aca y poder enviar los diferentes errores
                            var json = JsonConvert.SerializeObject(msg, Formatting.Indented);
                            //creo un json dinamico para enviarlo a la vista
                            dynamic dynJson = JsonConvert.DeserializeObject(json);
                            //envio mensaje
                            TempData["mensaje"] = dynJson;
                            //cierro sesiones
                            FormsAuthentication.SignOut();
                            //Cargo la vista
                            return(RedirectToAction("Index"));
                        }// fin if valida response
                        else
                        {
                            ModelState.AddModelError(string.Empty, response.mensaje);
                            return(RedirectToAction("Index"));
                        }
                    } //fin else captcha
                }     //fin try
                catch (Exception e)
                {
                    // envio error a la api logs errores
                    //envio a la carpeta logs
                    APIS.LogsController log = new APIS.LogsController(e.ToString());
                    log.createFolder();
                    //envio error mensaje al usuario
                    ModelState.AddModelError(string.Empty, "Estamos presentando dificultades en el momento por favor intente mas tarde");
                }
            }
            //return View();
            return(Logout());
        }
        //[ValidateAntiForgeryToken] quito el validador del token ya que la aplicación se estalla y no hay forma de solucionar el problema TODO
        //[OutputCache(NoStore = true, Duration = 0)]
        public async Task <ActionResult> NuevaContrasenia(CambiarContraseniaViewModel model)
        {
            if (ModelState.IsValid)
            {
                var MSG = new EnviarCorreoRecuperacionModel();
                try
                {
                    //sección del recaptcha
                    var    captcharesponse = Request["g-recaptcha-response"];
                    string secretKey       = System.Web.Configuration.WebConfigurationManager.AppSettings["recaptchaPrivateKey"]; //esta linea esta en el web config
                    var    client          = new WebClient();
                    var    result          = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secretKey, captcharesponse));
                    var    obj             = JObject.Parse(result);
                    var    status          = (bool)obj.SelectToken("success");
                    //valido que el status del recapcha sea verdadero
                    if (status == true)
                    {
                        //Ejecuto los valores en el SP
                        //borrarSP_Updaterestacontra
                        var response = bd.SP_ChangeContraseniaUser(model.idUsuario, model.contrasenia).First();
                        //
                        await bd.SaveChangesAsync();

                        // el procedimiento envia un codigo de 201 como respuesta
                        if (response.codigo == 201)
                        {
                            //creo un array a partir del json devuelto por la api para tratarlo desde aca y poder enviar los diferentes errores
                            var json = JsonConvert.SerializeObject(response, Formatting.Indented);
                            //creo un json dinamico para enviarlo a la vista
                            dynamic dynJson = JsonConvert.DeserializeObject(json);
                            ViewBag.SomeData = dynJson;
                            FormsAuthentication.SignOut();
                            Session.Abandon();
                            return(View("Index"));
                        }// fin if valida response
                        else
                        {
                            ModelState.AddModelError(string.Empty, response.mensaje);
                            return(RedirectToAction("Index"));
                        }
                    }//fin if captcha
                    else
                    {
                        ModelState.AddModelError(string.Empty, "El captcha no se ingresó correctamente.");
                    }//fin else captcha
                }
                catch (Exception e)
                {
                    // envio error a la api logs errores
                    //TODO
                    //envio a la carpeta logs
                    APIS.LogsController log = new APIS.LogsController(e.ToString());
                    log.createFolder();
                    //envio error mensaje al usuario
                    ModelState.AddModelError(string.Empty, "Estamos presentando dificultades en el momento por favor intente mas tarde");
                }
            }
            return(View());
        }
Пример #4
0
        public async Task <Object> UpdateContrasenia(CambiarContraseniaViewModel datos)
        {
            //creo una variable para manejar los mensajes
            var MSG = new List <object>();

            if (!ModelState.IsValid)
            {
                //var linq1 = bd.Mensajes.Where(s => s.Codigo_mensaje == 412).First();
                //MSG.Add(new { type = linq1.Tipo_mensaje, value = linq1.Cuerpo_mensaje, codigo = linq1.Codigo_mensaje });
                //return Json(MSG);
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }
            else
            {
                try
                {
                    var result = bd.SP_ChangeContraseniaUser(datos.idUsuario, datos.contrasenia).First();
                    await bd.SaveChangesAsync();

                    //MSG.Add(new { type = result.tipo, value = result.mensaje, codigo = result.codigo });
                    return(Json(result));
                }
                catch (Exception e)
                {
                    //envio log a archivo de logs
                    LogsController log = new LogsController(e.ToString());
                    log.createFolder();
                    //TODO ENVIAR A LA BASE DE DATOS
                    //ENVIO MENSAJE AL USUARIO
                    var linq1 = bd.Web_Mensaje.Where(s => s.codigo == 412).First();

                    MSG.Add(new { type = linq1.tipo, value = linq1.cuerpo, codigo = linq1.codigo });
                    return(Json(MSG));
                }
            }
        }
Пример #5
0
        async void Btn_ingresar_Click(object sender, RoutedEventArgs e)
        {
            LoginDialogSettings settings = new LoginDialogSettings();

            settings.ColorScheme           = MetroDialogOptions.ColorScheme;
            settings.PasswordWatermark     = "Password";
            settings.UsernameWatermark     = "Username";
            settings.InitialPassword       = "******";
            settings.InitialUsername       = "******";
            settings.AffirmativeButtonText = StringResources.lblBtnLogin;


            //Abrimos el mensaje modal para que el usuario ingrese sus credenciales, el resultado lo guardamos en una variable local.
            LoginDialogData result = await this.ShowLoginAsync(StringResources.ttlAuthentication, StringResources.lblEnterCredentials, settings);

            //Comparamos si el resultado es distinto de nulo. Si es igual a nulo quiere decir que el usuario cancelo la captura o cerró inesperadamente la pantalla.
            if (result != null)
            {
                //Incializamos los servicios de dialog.
                DialogService dialog = new DialogService();

                //Declaramos un objeto de tipo ProgressDialogController, el cual servirá para recibir el resultado el mensaje progress.
                ProgressDialogController AsyncProgress;

                //Ejecutamos el método para enviar un mensaje de espera mientras se comprueban los datos.
                AsyncProgress = await dialog.SendProgressAsync(StringResources.lblLogIn, "");

                //Declaramos un objeto con el cual se realiza la encriptación
                Services.Encriptacion encriptar = new Services.Encriptacion();

                //Ejecutamos el método para encriptar tanto el usuario como la contraseña y los guardamos en variables locales respectivamente.
                string usuario    = encriptar.encript(result.Username);
                string contrasena = encriptar.encript(result.Password);

                //Ejecutamos el método para verificar las credenciales, el resultado lo asignamos a un objeto local de tipo Usuario.
                Usuario usuarioConectado = await DataManager.GetLogin(usuario, contrasena);

                //Verificamos el resultado, si es direfente de nulo quiere decir que el logueo fué correcto, si es igual a nulo quiere decir que el usuario no existe con las credenciales proporcionadas.
                if (usuarioConectado != null)
                {
                    //Ejecutamos el método para cerrar el mensaje de espera.
                    await AsyncProgress.CloseAsync();

                    //Verificamos si el usuario no esta bloqueado.
                    if (usuarioConectado.Block)
                    {
                        //Enviamos un mensaje para indicar que el usuario está bloqueado.
                        MessageDialogResult message = await this.ShowMessageAsync(StringResources.lblInformation, StringResources.lblUserNotActive);
                    }
                    else
                    {
                        SpeechSynthesizer _SS = new SpeechSynthesizer();
                        _SS.Volume = 100;
                        _SS.Rate   = 1;

                        _SS.SpeakAsync("Welcome, " + usuarioConectado.Nombre + ", To Process Design Engineering Program");

                        //Enviamos un mensaje de bienvenida al usuario.
                        MessageDialogResult message = await this.ShowMessageAsync(StringResources.lblWelcome, usuarioConectado.Nombre);

                        //Obtenemos la fecha del servidor
                        DateTime date_now = DataManagerControlDocumentos.Get_DateTime();
                        //Ejecutamos el método para desbloquear el sistema, si se venció la fecha final
                        DataManagerControlDocumentos.DesbloquearSistema(date_now);

                        //Obtenemos los detalles del usuario logueado.
                        usuarioConectado.Details = DataManager.GetUserDetails(usuarioConectado.NombreUsuario);

                        //Verificamos si esta cargada la foto, sino asignamos una por default.
                        if (string.IsNullOrEmpty(usuarioConectado.Details.PathPhoto))
                        {
                            usuarioConectado.Details.PathPhoto = System.Configuration.ConfigurationManager.AppSettings["PathDefaultImage"];
                        }

                        //Insertamos el ingreso a la bitácora.
                        DataManager.InserIngresoBitacora(Environment.MachineName, usuarioConectado.Nombre + " " + usuarioConectado.ApellidoPaterno + " " + usuarioConectado.ApellidoMaterno);

                        //Validamos si el usuario nuevo tiene la contraseña random
                        if (usuarioConectado.Details.Temporal_Password == true)
                        {
                            //Cargamnos las vista de ModificarContrasena
                            ModificarContrasena vistacontrasena = new ModificarContrasena();
                            //Cargamnos el modelo de CambiarContraseniaViewModel
                            CambiarContraseniaViewModel vmcambiarconatraseña = new CambiarContraseniaViewModel(usuarioConectado);

                            //Asingamos el DataContext.
                            vistacontrasena.DataContext = vmcambiarconatraseña;

                            //Mostramos la ventana de modificacion de contraseña
                            vistacontrasena.ShowDialog();

                            //Verificamos el valor de la variable CierrePantalla, si en la View Model de CambiarContrasenia la variable es false, dejamos continual el proceso
                            if (vmcambiarconatraseña.CierrePantalla == false)
                            {
                                return;
                            }
                        }

                        #region Configuración del correo electrónico

                        //Verificamos si esta configurado el correo electrónico en la plataforma.
                        //if (!usuarioConectado.Details.IsAvailableEmail || !System.IO.File.Exists(usuarioConectado.Pathnsf))
                        //{
                        //    //Configuramos las opciones del mesaje de pregunta.
                        //    MetroDialogSettings settings = new MetroDialogSettings();
                        //    settings.AffirmativeButtonText = StringResources.lblYes;
                        //    settings.NegativeButtonText = StringResources.lblNo;

                        //    //Preguntamos al usuario si lo quiere configurar en estos momentos.
                        //    MessageDialogResult resultMSG = await this.ShowMessageAsync(StringResources.ttlAtencion + usuarioConectado.Nombre, StringResources.msgConfiguracionCorreo, MessageDialogStyle.AffirmativeAndNegative, settings);

                        //    //Verificamos la respuesta del usuario, si es afirmativa iniciamos el proceso de configuración.
                        //    if (resultMSG == MessageDialogResult.Affirmative)
                        //    {
                        //        settings = new MetroDialogSettings();
                        //        settings.AffirmativeButtonText = StringResources.ttlOkEntiendo;

                        //        await this.ShowMessageAsync(usuarioConectado.Nombre + StringResources.msgParaTuInf, StringResources.msgProcesoConfiguracion, MessageDialogStyle.Affirmative, settings);

                        //        ProgressDialogController AsyncProgressConfigEmail;

                        //        AsyncProgressConfigEmail = await dialog.SendProgressAsync(StringResources.ttlEspereUnMomento + usuarioConectado.Nombre + "...", StringResources.msgEstamosConfigurando);

                        //        ConfigEmailViewModel configEmail = new ConfigEmailViewModel(usuarioConectado);

                        //        // Se reciben valores de las 2 propiedades del objeto
                        //        DO_PathMail respuestaConfigEmail = await configEmail.setEmail();

                        //        await AsyncProgressConfigEmail.CloseAsync();

                        //        if (respuestaConfigEmail.respuesta)
                        //        {
                        //            // Actualizamos el path de usuario en la misma sesión
                        //            usuarioConectado.Pathnsf = respuestaConfigEmail.rutamail;

                        //            settings.AffirmativeButtonText = StringResources.ttlGenial;
                        //            await this.ShowMessageAsync(StringResources.msgPerfecto + usuarioConectado.Nombre, StringResources.msgCuentaConfigurada, MessageDialogStyle.Affirmative, settings);
                        //        }
                        //        else
                        //        {
                        //            await this.ShowMessageAsync(StringResources.ttlOcurrioError, StringResources.msgErrorVincular);
                        //        }
                        //    }
                        //}

                        #endregion

                        if (Module.UsuarioIsRol(usuarioConectado.Roles, 2))
                        {
                            DashboardViewModel context;
                            FDashBoard         pDashBoard = new FDashBoard();
                            context = new DashboardViewModel(usuarioConectado);
                            context.ModelUsuario = usuarioConectado;

                            //NOTA IMPORTANTE: Se hizo una redundancia al asignarle en la propiedad página su misma pantalla. Solo es por ser la primera vez y tenernos en donde descanzar la primera pantalla.
                            context.Pagina = pDashBoard;

                            //Asignamos al DataContext de la PantallaHome el context creado anteriormente.
                            pDashBoard.DataContext = context;

                            //Declaramos la pantalla en la que descanzan todas las páginas.
                            Layout masterPage = new Layout();

                            //Asingamos el DataContext.
                            masterPage.DataContext = context;

                            //Ejecutamos el método el cual despliega la pantalla.
                            masterPage.ShowDialog();
                        }
                        else
                        {
                            Home PantallaHome = new Home(usuarioConectado.NombreUsuario);

                            //Creamos un objeto UsuarioViewModel, y le asignamos los valores correspondientes, a la propiedad Pagina se le asigna la pantalla inicial de Home.
                            UsuarioViewModel context = new UsuarioViewModel(usuarioConectado, PantallaHome);
                            context.ModelUsuario = usuarioConectado;

                            //NOTA IMPORTANTE: Se hizo una redundancia al asignarle en la propiedad página su misma pantalla. Solo es por ser la primeva vez y tenernos en donde descanzar la primera pantalla.
                            context.Pagina = PantallaHome;

                            //Asignamos al DataContext de la PantallaHome el context creado anteriormente.
                            PantallaHome.DataContext = context;

                            //Declaramos la pantalla en la que descanzan todas las páginas.
                            Layout masterPage = new Layout();

                            //Asingamos el DataContext.
                            masterPage.DataContext = context;

                            //Ejecutamos el método el cual despliega la pantalla.
                            masterPage.ShowDialog();
                        }

                        //Una vez que el usuario hizo clic en aceptar el mensaje de bienvenida, se procede con la codificación de la presentación de la pantalla inicial.
                        //Creamos un objeto de tipo Home, la cual es la pantalla inicial del sistema.
                        //Home PantallaHome = new Home(usuarioConectado.NombreUsuario);

                        //Creamos un objeto UsuarioViewModel, y le asignamos los valores correspondientes, a la propiedad Pagina se le asigna la pantalla inicial de Home.
                        //UsuarioViewModel context = new UsuarioViewModel { ModelUsuario = usuarioConectado, Pagina = PantallaHome };
                        //UsuarioViewModel context = new UsuarioViewModel(usuarioConectado, PantallaHome);
                        //context.ModelUsuario = usuarioConectado;

                        ////NOTA IMPORTANTE: Se hizo una redundancia al asignarle en la propiedad página su misma pantalla. Solo es por ser la primeva vez y tenernos en donde descanzar la primera pantalla.
                        //context.Pagina = PantallaHome;

                        ////Asignamos al DataContext de la PantallaHome el context creado anteriormente.
                        //PantallaHome.DataContext = context;

                        ////Declaramos la pantalla en la que descanzan todas las páginas.
                        //Layout masterPage = new Layout();

                        ////Asingamos el DataContext.
                        //masterPage.DataContext = context;

                        ////Ejecutamos el método el cual despliega la pantalla.
                        //masterPage.ShowDialog();


                        ////Si el usuario es administrador, le mostramos la pantalla de Dashboard.
                        //if (Module.UsuarioIsRol(usuarioConectado.Roles, 2))
                        //{
                        //    FDashBoard pDashBoard = new FDashBoard();

                        //    DashboardViewModel wm = new DashboardViewModel(pDashBoard, usuarioConectado);
                        //    pDashBoard.DataContext = wm;

                        //    //Declaramos la pantalla en la que descanzan todas las páginas.
                        //    Layout masterPage1 = new Layout();

                        //    //Asingamos el DataContext.
                        //    masterPage1.DataContext = wm;

                        //    //Ejecutamos el método el cual despliega la pantalla.
                        //    masterPage1.ShowDialog();

                        //}
                        //else
                        //{

                        //}
                    }
                }
                else
                {
                    //Ejecutamos el método para cerrar el mensaje de espera.
                    await AsyncProgress.CloseAsync();

                    //Enviamos un mensaje indicando que las credenciales escritas son incorrectas.
                    MessageDialogResult message = await this.ShowMessageAsync(StringResources.ttlAlerta, StringResources.lblPasswordIncorrect);
                }
            }
        }