// Por cuestiones de seguirdad, TIENE que ser privado.
        private void cambiar_perfil(string perfil_elegido)
        {
            // Si es un distinto perfil, cambie los permisos.
            if (IdentidadManager.obtener_perfil_actual() != perfil_elegido)
            {
                string correo_actual = IdentidadManager.obtener_correo_actual();

                var identidad = new ClaimsIdentity
                                (
                    new[]
                {
                    new Claim(ClaimTypes.Email, correo_actual),
                    new Claim(ClaimTypes.Role, perfil_elegido)
                },
                    DefaultAuthenticationTypes.ApplicationCookie
                                );

                AuthController.eliminar_privilegios(this);

                Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);
                HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties {
                    IsPersistent = false
                }, identidad);
                Session[correo_actual] = new IdentidadManager();
            }
        }
        // Devuelve los perfiles del usuario loggeado.
        public static ICollection <string> ObtenerPerfiles()
        {
            Opiniometro_DatosEntities db = new Opiniometro_DatosEntities();
            string correo_autenticado    = IdentidadManager.obtener_correo_actual();
            ICollection <String> perfiles;

            perfiles = db.ObtenerPerfilUsuario(correo_autenticado).ToList();
            return(perfiles);
        }
        public ActionResult Login(Usuario usuario)
        {
            eliminar_privilegios(this);
            ObjectParameter exito          = new ObjectParameter("Resultado", 0);
            bool            error_conexion = false;

            try
            {
                db.SP_LoginUsuario(usuario.CorreoInstitucional, usuario.Contrasena, exito);
            }
            catch (EntityException)
            {
                error_conexion = true;
                exito.Value    = false;
            }

            if (IdentidadManager.obtener_correo_actual() != null)      // Si esta autenticado
            {
                return(RedirectToAction("Index", "Home"));
            }
            else if ((bool)exito.Value == true) // Si se pudo autenticar (correo y contrasenna validos).
            {
                // Note que si se cambia la contrasenna no se crea ninguna sesion.

                var recuperar_contrasena = db.Usuario.Where(m => m.CorreoInstitucional == usuario.CorreoInstitucional).ToList();
                if (recuperar_contrasena.ElementAt(0).RecuperarContrasenna == true)
                {
                    Session["recuperar"] = usuario.CorreoInstitucional;
                    return(RedirectToAction("CambiarContrasenna"));
                }
                else
                {
                    crear_sesion(usuario.CorreoInstitucional);
                    return(RedirectToAction("Cambiar", "Perfil"));
                }
            }
            else    // Si hay error en la autenticacion
            {
                // Desplegar mensaje de error personalizado.
                string mensaje_error = "";
                if (error_conexion == true)
                {
                    mensaje_error = "Error de conexión al servidor";
                }
                else
                {
                    mensaje_error = "Usuario o contraseña inválidos";
                }

                ModelState.AddModelError("ErrorLogin", mensaje_error);


                // Devolverse a la misma pagina de Login informando de que hay un error de autenticacion.
                return(View(usuario));
            }
        }
Ejemplo n.º 4
0
        public ActionResult Index()
        {
            DateTime fecha = DateTime.Now;

            var modelo = new CursosMatriculadoModel
            {
                gruposMatriculado = ObtenerGrupoMatriculado(obtenerCedulaEstLoggeado(IdentidadManager.obtener_correo_actual()), ciclo(fecha.Month), fecha.Year)
            };
            var grupo = modelo.gruposMatriculado.ToList().ElementAt(0);

            Debug.WriteLine("\n\nEn EstudiantesGruposMatriculado: " + grupo.anoGrupo + " " + grupo.semestreGrupo + " " + grupo.siglaCursoMatriculado + " " + grupo.numGrupo + ".\n");
            return(View("Index", modelo));
        }
        public static void eliminar_privilegios(Controller controlador)
        {
            // En caso de que no exista sesion, no tiene por que hacer algo.
            if (IdentidadManager.verificar_sesion(controlador))
            {
                string correo = IdentidadManager.obtener_correo_actual();               // Obtengo el correo para obtener la sesion.
                ((IdentidadManager)controlador.Session[correo]).limpiar_permisos();     // Limpio los permisos.
                controlador.Session.Remove(correo);                                     // Remuevo la sesion.
            }

            // Elimino cookies.
            controlador.Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
        }
        /* GET: Auth/Login
         * EFECTO: retornar vista parcial, la cual implica que no se despliega _Layout de la carpeta Shared.
         * REQUIERE: cshtml con el nombre Login.
         * MODIFICA: n/a
         */
        public ActionResult Login()
        {
            // Eliminar el correo de recuperar en caso de que se devuelva al login de haber cambiado la contrasenna.
            Session.Remove("recuperar");

            // Si esta autenticado, redireccione a Home.
            if (IdentidadManager.obtener_correo_actual() != null && IdentidadManager.verificar_sesion(this) == true)
            {
                return(RedirectToAction("Index", "Home"));
            }
            // Si no, retorne la vista para el login.
            else
            {
                return(View("Login"));
            }
        }
        public void obtener_correo_actual_test()
        {
            // Mocks necesarios para tener una sesion "de mentira".
            var mock_controller_contexto = new Mock <ControllerContext>();
            var mock_session             = new Mock <HttpSessionStateBase>();

            var identidad = new ClaimsIdentity(
                new[] {
                new Claim(ClaimTypes.Email, "*****@*****.**")
            },
                DefaultAuthenticationTypes.ApplicationCookie);

            Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);

            var resultado_correo = IdentidadManager.obtener_correo_actual();

            Assert.AreEqual("*****@*****.**", resultado_correo);
        }