예제 #1
0
        /// <summary>
        /// Actualiza el idioma del usuario en sesión, según el id del idioma pasado por parámetro.
        /// </summary>
        /// <param name="languageId"></param>
        /// <returns></returns>
        public ResultBM ChangeCurrentLanguage(int languageId)
        {
            // Se recupera el usuario de la sesión para cambiarle el id del idioma
            UserDAL  userDal = new UserDAL();
            UserDTO  userDto = userDal.GetUser(SessionHelper.GetLoggedUser().Id);
            UserBM   userBm  = new UserBM(userDto);
            ResultBM updateResult;

            try
            {
                int originalLanguage = userBm.LanguageId;
                userBm.LanguageId = languageId;

                updateResult = UpdateUser(userBm);

                if (updateResult.IsValid())
                {
                    //Quizá debería manejarme con el modelo de lenguage
                    LanguageBLL languageBll = new LanguageBLL();
                    LanguageBM  languageBm  = languageBll.GetLanguage(languageId);
                    SessionHelper.SetLanguage(languageBm);
                    SessionHelper.GetLoggedUser().LanguageId = languageId;
                }
                else
                {
                    userBm.LanguageId = originalLanguage;
                }

                return(updateResult);
            }
            catch (Exception exception)
            {
                return(new ResultBM(ResultBM.Type.EXCEPTION, SessionHelper.GetTranslation("UPDATING_ERROR") + " " + exception.Message, exception));
            }
        }
예제 #2
0
        public ResultBM LogIn(string user, string password)
        {
            UserBLL userBll = new UserBLL();
            UserBM  userBm;

            LanguageBLL languageBll = new LanguageBLL();
            LanguageBM  languageBm;

            ProfileBLL profileBll = new ProfileBLL();
            ProfileBM  profileBm;

            DigitVerificatorBLL dvBll = new DigitVerificatorBLL();

            ResultBM result;

            try
            {
                //1. Validación input
                result = IsValid(user, password);

                if (result.IsValid())
                {
                    //2. Validación usuario
                    result = userBll.GetUser(user, password);

                    if (result.IsValid())
                    {
                        log.AddLogInfo("Autenticando", "Usuario " + user + " encontrado en la base de datos.", this);
                        userBm = result.GetValue <UserBM>();

                        //3. Recuperación de permisos
                        profileBm = profileBll.GetProfile(userBm.PermissionId).GetValue() as ProfileBM;

                        //4. Recuperación de idioma
                        languageBm = languageBll.GetLanguage(userBm.LanguageId);

                        //5. Armado de sesión
                        SessionHelper.StartSession(userBm, profileBm, languageBm);
                        log.AddLogDebug("Creando sesión", "Sesion para el usuario " + user + " creada.", this);

                        //6 Chequeo de consistencia horizontal
                        result = dvBll.IsHorizontallyConsistent(userBm);

                        if (!result.IsValid())
                        {
                            log.AddLogCritical("Dígito horizontal", "Falló la verificación horizontal al momento de chequear los datos del usuario " + user + ".", this);
                            //Sólo un admin puede continuar no es suficiente con que pueda restaurar
                            result = new ResultBM(ResultBM.Type.CORRUPTED_DATABASE, result.description, null, profileBm.HasPermission("GE999"));
                        }
                        else
                        {
                            //4.2 Chequeo de vertical
                            result = dvBll.IsVerticallyConsistent();

                            if (!result.IsValid())
                            {
                                log.AddLogCritical("Dígito vertical", "Falló la verificación vertical al momento de loguear al usuario " + user + ".", this);
                                //Sólo un admin puede continuar no es suficiente con que pueda restaurar
                                result = new ResultBM(ResultBM.Type.CORRUPTED_DATABASE, result.description, null, profileBm.HasPermission("GE999"));
                            }
                            else
                            {
                                log.AddLogInfo("Logueo", "El usuario " + user + " se ha logueado exitosamente.", this);
                                result = new ResultBM(ResultBM.Type.OK, "Inicio de sesión exitoso para el usuario " + user);
                            }
                        }
                    }
                    else
                    {
                        log.AddLogInfo("Autenticando", "Usuario " + user + " no ha sido encontrado en la base de datos.", this);
                    }
                }
            }
            catch (Exception exception)
            {
                result = new ResultBM(ResultBM.Type.EXCEPTION, exception.Message, exception, false);
            }

            return(result);
        }