コード例 #1
0
        public ActionResult GetFile(Int64 id, Int64 mailAccountId = 0)
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                Extra extra = Extra.FindByID(id, session);

                if (extra != null && extra.BelongsToUser(sessionUser))
                {
                    return(File(extra.Entity.Data, extra.Entity.FileType, extra.Entity.Name));
                }
                else
                {
                    return(new HttpNotFoundResult());
                }
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros de la llamada: idExtra(" + id.ToString() + ").");
                return(null);
            }
            finally
            {
                session.Close();
            }
        }
コード例 #2
0
        public ActionResult GetMailBody(Int64 id = 0, Int64 mailAccountId = 0)
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                MailAccount currentMailAccount = this.GetMailAccount(mailAccountId);
                String      body = currentMailAccount.ReadMail(id, session);

                IList <ExtraEntity> mailExtras = Extra.FindByMailId(id, session);

                if (body.Contains("<img src=\"cid:"))
                {
                    this.InsertEmbeddedExtraUrl(ref body, id, session);
                }

                var returnInfo = this.PrepareBodyMail(body, mailExtras);

                JsonResult result = Json(new { success = true, mail = returnInfo }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Error generico GetMailBody. Parametros del mail: idMail(" + id.ToString() + ").");
                return(Json(new { success = false, message = "Error al obtener el cuerpo del mail." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #3
0
        public ActionResult ChangeImportance(Int64 mailId, Boolean isIncrease, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount currentMailAccount = this.GetMailAccount(mailAccountId);
                Mail        theMail            = new Mail(mailId, session);

                if (isIncrease)
                {
                    theMail.SetImportance((UInt16)(theMail.Entity.Importance + 1), session);
                }
                else
                {
                    theMail.SetImportance((UInt16)(theMail.Entity.Importance - 1), session);
                }
                tran.Commit();
                JsonResult result = Json(new { success = true }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: mailId(" + mailId.ToString() +
                                 "), isIncrease(" + isIncrease.ToString() + "), mailAccountId(" + mailAccountId.ToString() + ").");
                return(Json(new { success = false, message = "Error al aumentar importancia." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #4
0
        public ActionResult UnarchiveMail(Int64 mailId, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount currentMailAccount = this.GetMailAccount(mailAccountId);
                Mail        mail       = new Mail(mailId, session);
                Label       inboxLabel = Label.FindBySystemName(currentMailAccount, "Inbox", session);
                mail.Unarchive(inboxLabel, session);    //DB
                tran.Commit();
                currentMailAccount.UnarchiveMail(mail); //IMAP

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: mailId(" + mailId.ToString() +
                                 "), mailAccountId(" + mailAccountId.ToString() + ").");
                return(Json(new { success = false, message = "Error al desarchivar mail." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #5
0
        public ActionResult GetMailsByDate(Int64 initial, Int64 final, Int64 mailAccountId = 0)
        {
            DateTime initialDate = AsyncMailsController.ConvertFromJS(initial);
            DateTime finalDate   = AsyncMailsController.ConvertFromJS(final);

            ISession session = NHibernateManager.OpenSession();

            try
            {
                MailCollection accountMails;
                List <Object>  mailsToReturn = new List <object>();
                User           currentUser   = (User)Session[AccountController.USER_NAME];
                foreach (MailAccount mailAccount in currentUser.GetAccounts())
                {
                    accountMails = new MailCollection(mailAccount.GetMailsByDate(initialDate, finalDate, session));
                    mailsToReturn.AddRange(this.PrepareHomeMails(accountMails));
                }

                JsonResult result = Json(new { success = true, mails = mailsToReturn }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Fechas del metodo: initialDate(" + initialDate.ToString() + "), finalDate(" + finalDate.ToString() + ").");
                return(Json(new { success = false, message = "Error al obtener los mails." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #6
0
        public ActionResult RemoveLabel(String labelName, Int64 mailId, Boolean isSystemLabel, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount currentMailAccount = this.GetMailAccount(mailAccountId);
                Mail        mail = new Mail(mailId, session);

                if (mail.Entity.MailAccountEntity.Id != currentMailAccount.Entity.Id)
                {
                    return(Json(new { success = false, message = "El mail indicado no pertenece a la cuenta indicada." }, JsonRequestBehavior.AllowGet));
                }

                mail.RemoveLabel(labelName, isSystemLabel, session);               //DB
                tran.Commit();
                currentMailAccount.RemoveMailLabel(labelName, mail.Entity.Gm_mid); //IMAP

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros de la llamada: labelName(" + labelName + "), gmID(" + mailId.ToString() + "), mailAccountId(" + mailAccountId + ").");
                return(Json(new { success = false, message = "Error al remover label." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #7
0
        public ActionResult ValidateUserFields(String firstname, String lastname, String username, String userPassword, String userConfirmationPassword)
        {
            String   exceptionMessage = "";
            ISession session          = NHibernateManager.OpenSession();

            try
            {
                #region Initialize UserView
                UserViewModel userView = new UserViewModel();
                userView.Firstname            = firstname;
                userView.Lastname             = lastname;
                userView.Username             = username;
                userView.Password             = userPassword;
                userView.ConfirmationPassword = userConfirmationPassword;
                #endregion

                this.UpdateModel(userView);                        //corre todos los regex
                this.ValidateUserGenericFields(userView, session); //nombre, apellido, usuarioGlimpse, contraseñas

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (InvalidOperationException exc) //model state invalido
            {
                foreach (ModelState wrongState in this.ModelState.Values.Where(x => x.Errors.Count > 0))
                {
                    foreach (ModelError error in wrongState.Errors)
                    {
                        if (error.ErrorMessage.Contains("usuario Glimpse válido")) //regex dice que un email puede ser valido
                        {
                            exceptionMessage += "El nombre de usuario elegido no posee caracteres válidos.";
                        }
                        else
                        {
                            exceptionMessage += error.ErrorMessage;
                        }
                    }
                }
                if (String.IsNullOrEmpty(exceptionMessage))
                {
                    exceptionMessage = exc.Message;
                }
                return(Json(new { success = false, message = exceptionMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (GlimpseException exc)
            {
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros: userName:(" + username + "), password( " + userPassword +
                                 "), confirmationPassword(" + userConfirmationPassword + "), firstname(" + firstname +
                                 "), lastname(" + lastname + ").");
                return(Json(new { success = false, message = "Error validando usuario." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #8
0
        public ActionResult RenameLabel(String oldLabelName, String newLabelName)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                List <LabelEntity>  userLabels       = new List <LabelEntity>();
                IList <MailAccount> userMailAccounts = sessionUser.GetAccounts();
                foreach (MailAccount userMailAccount in userMailAccounts)
                {
                    userLabels.AddRange(Label.FindByAccount(userMailAccount.Entity, session));
                }

                if (userLabels.Any(x => x.Name == newLabelName && x.SystemName == null))
                {
                    throw new GlimpseException("No se puede renombrar la etiqueta con un nombre de una etiqueta existente.");
                }

                foreach (MailAccount userMailAccount in userMailAccounts)
                {
                    IEnumerable <LabelEntity> accountLabelsToRename = userLabels.Where(x => x.Name == oldLabelName &&
                                                                                       x.MailAccountEntity.Id == userMailAccount.Entity.Id &&
                                                                                       x.SystemName == null);
                    foreach (LabelEntity label in accountLabelsToRename)
                    {
                        new Label(label).Rename(oldLabelName, newLabelName, session); //BD
                        userMailAccount.RenameLabel(oldLabelName, newLabelName);      //IMAP
                    }
                }
                tran.Commit();

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (GlimpseException exc)
            {
                tran.Rollback();
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: oldLabelName(" + oldLabelName +
                                 "), newLabelName(" + newLabelName + ").");
                return(Json(new { success = false, message = "Error al renombrar label." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #9
0
ファイル: MailAccount.cs プロジェクト: marcogatti/glimpse
 public void ValidateCredentials()
 {
     using (ISession session = NHibernateManager.OpenSession())
     {
         MailAccount correctMailAccount = MailAccount.FindByAddress(this.Entity.Address, session, false);
         if (!CryptoHelper.PasswordsMatch(correctMailAccount.Entity.Password, this.Entity.Password))
         {
             throw new InvalidAuthenticationException("Las credenciales ingresadas no son validas, usuario:" + this.Entity.Address);
         }
     }
 }
コード例 #10
0
        public ActionResult CreateLabel(String labelName, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                MailAccount labelAccount;

                if (mailAccountId != 0)
                {
                    labelAccount = this.GetMailAccount(mailAccountId);
                }
                else
                {
                    labelAccount = this.GetMainMailAccount();
                }

                Label existingLabel = Label.FindByName(labelAccount, labelName, session);
                if (existingLabel != null)
                {
                    return(Json(new { success = false, message = "Ya existe una etiqueta con ese nombre." }, JsonRequestBehavior.AllowGet));
                }
                Label newLabel = new Label(new LabelEntity());
                newLabel.Entity.SystemName        = null;
                newLabel.Entity.Name              = labelName;
                newLabel.Entity.Active            = true;
                newLabel.Entity.MailAccountEntity = labelAccount.Entity;
                Label.ColorLabel(newLabel.Entity, labelAccount, sessionUser, session);
                newLabel.SaveOrUpdate(session);      //BD
                tran.Commit();
                labelAccount.CreateLabel(labelName); //IMAP

                return(Json(new { success = true, color = newLabel.Entity.Color }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: labelName(" + labelName + "), mailAccountId(" + mailAccountId.ToString() + ").");
                return(Json(new { success = false, message = "Error al crear label." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #11
0
        public static void SynchronizeTrash(String mailAddress)
        {
            MailAccount mailAccountTrash;
            MailsTask   newTaskTrash;
            String      mailAddressTrash = mailAddress + "/TRASH";

            if (MailsTasksHandler.IsWorking(mailAddressTrash))
            {
                return;
            }

            using (ISession session = NHibernateManager.OpenSession())
            {
                mailAccountTrash = MailAccount.FindByAddress(mailAddress, session, false);
                try
                {
                    mailAccountTrash.ConnectFull(session);
                }
                catch (NullReferenceException exc)
                {
                    Log.LogException(exc, "Direccion inexistente en la base de datos: " + mailAccountTrash + ".");
                    return;
                }
                catch (InvalidAuthenticationException exc)
                {
                    Log.LogException(exc, "No se pudo conectar a imap con la direccion: " + mailAddress + ", ha cambiado el password.");
                    return;
                }
                catch (SocketException exc)
                {
                    Log.LogException(exc, "No se pudo conectar a imap con la direccion: " + mailAddress + ".");
                    return;
                }
                Label trashLabel = Label.FindBySystemName(mailAccountTrash, "Trash", session);
                newTaskTrash = new MailsTask(mailAccountTrash.GetUIDLocal(session, trashLabel.Entity.SystemName, true),
                                             mailAccountTrash.GetUIDLocal(session, trashLabel.Entity.SystemName, false),
                                             mailAccountTrash.GetUIDExternalFrom(trashLabel.Entity.Name, true),
                                             mailAccountTrash.GetUIDExternalFrom(trashLabel.Entity.Name, false),
                                             trashLabel,
                                             mailAccountTrash);
                session.Close();
            }
            if (!newTaskTrash.HasFinished)
            {
                MailsTasksHandler.LockTasksList();
                MailsTasksHandler.TasksList[mailAddressTrash] = newTaskTrash;
                MailsTasksHandler.UnlockTasksList();
                MailsTasksHandler.StartMailsTask(newTaskTrash);
            }
        }
コード例 #12
0
ファイル: MailAccount.cs プロジェクト: marcogatti/glimpse
        private static void Save(List <Mail> mails)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            foreach (Mail mailToSave in mails)
            {
                Address newAddress = new Address(mailToSave.Entity.From);
                newAddress.SaveOrUpdate(session); //si fija si ya existe adentro
                mailToSave.SetFrom(newAddress.Entity);
                session.SaveOrUpdate(mailToSave.Entity);
            }
            tran.Commit();
            session.Flush();
            session.Close();
        }
コード例 #13
0
        public ActionResult EditUserPassword(String oldPassword, String newPassword, String newPasswordConfirmation)
        {
            String   exceptionMessage = "";
            ISession session          = NHibernateManager.OpenSession();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                if (!Glimpse.Models.User.IsPassword(newPassword))
                {
                    exceptionMessage += "La contraseña ingresada contiene caracteres no válidos, es muy corta o muy larga.";
                }
                if (newPassword != newPasswordConfirmation)
                {
                    exceptionMessage += "Las contraseñas ingresadas deben coincidir.";
                }

                if (exceptionMessage != "")
                {
                    throw new GlimpseException(exceptionMessage);
                }

                sessionUser.ChangePassword(CryptoHelper.EncryptDefaultKey(oldPassword), CryptoHelper.EncryptDefaultKey(newPassword), session);
                session.Flush();

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (GlimpseException exc)
            {
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros: oldPassword:(" + oldPassword + "), newPassword( " + newPassword +
                                 "), newPasswordConfirmation(" + newPasswordConfirmation + ").");
                return(Json(new { success = false, message = "Error actualizando contraseñas." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #14
0
        public void Init()
        {
            NHibernateManager.FluentAssemblies.Add(typeof(User).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(Customer).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(eBayDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(AmazonDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(PayPalDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(EkmDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(DatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(YodleeDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(PayPointDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(FreeAgentDatabaseMarketPlace).Assembly);
            NHibernateManager.FluentAssemblies.Add(typeof(SageDatabaseMarketPlace).Assembly);

            Scanner.Register();

            ObjectFactory.Configure(x => {
                x.For <ISession>()
                .LifecycleIs(new ThreadLocalStorageLifecycle())
                .Use(ctx => NHibernateManager.OpenSession());

                x.For <ISessionFactory>().Use(() => NHibernateManager.SessionFactory);
                x.For <ICustomerRepository>().Use <CustomerRepository>();
                x.For <ILoanLegalRepository>().Use <LoanLegalRepository>();
                x.For <ILoanTypeRepository>().Use <LoanTypeRepository>();
                x.For <ILoanSourceRepository>().Use <LoanSourceRepository>();
                x.For <IDiscountPlanRepository>().Use <DiscountPlanRepository>();
                x.For <ILoanOptionsRepository>().Use <LoanOptionsRepository>();
                x.For <IEzServiceAccessor>().Use <EzServiceAccessorLong>();
            });

            var oLog4NetCfg = new Log4Net().Init();

            m_oEnv = oLog4NetCfg.Environment;

            m_oLog = new ConsoleLog(new SafeILog(this));

            m_oDB = new SqlConnection(oLog4NetCfg.Environment, m_oLog);

            ConfigManager.CurrentValues.Init(m_oDB, m_oLog);
            DbConnectionPool.ReuseCount = CurrentValues.Instance.ConnectionPoolReuseCount;
            AConnection.UpdateConnectionPoolMaxSize(CurrentValues.Instance.ConnectionPoolMaxSize);

            Ezbob.Backend.Strategies.Library.Initialize(m_oEnv, m_oDB, m_oLog);
        }         // Init
コード例 #15
0
ファイル: MailAccount.cs プロジェクト: marcogatti/glimpse
        public MailAccount Clone()
        {
            MailAccount       mailAccountClone;
            MailAccountEntity entity;

            using (ISession session = NHibernateManager.OpenSession())
            {
                entity           = MailAccount.FindByAddress(this.Entity.Address, session, false).Entity;
                mailAccountClone = new MailAccount(entity);

                if (this.IsConnected())
                {
                    mailAccountClone.ConnectFull(session);
                }
                session.Close();
            }
            return(mailAccountClone);
        }
コード例 #16
0
        public async Task <IList <T> > FindAll(string orderByProperty = null, int?maxResults = null)
        {
            using var session = NHibernateManager.OpenSession();
            var criteria = session.CreateCriteria(typeof(T));

            if (!string.IsNullOrWhiteSpace(orderByProperty))
            {
                criteria.AddOrder(Order.Asc(orderByProperty));
            }
            else
            {
                criteria.AddOrder(Order.Asc("Id"));
            }

            if (maxResults.HasValue)
            {
                criteria.SetMaxResults(maxResults.Value);
            }

            return(await criteria.ListAsync <T>());
        }
コード例 #17
0
        public ActionResult GetUsedDirections()
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                User currentUser = (User)Session[AccountController.USER_NAME];
                if (currentUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }
                IList <String> directions = new List <string>();
                String         accountIds = "";

                foreach (MailAccount mailAccount in currentUser.GetAccounts())
                {
                    accountIds += mailAccount.Entity.Id + ',';
                }

                accountIds = accountIds.Trim(',');

                directions = session.CreateQuery(
                    "SELECT distinct(A.MailAddress) " +
                    "FROM ADDRESS A " +
                    "INNER JOIN MAIL M ON M.fromid = A.id " +
                    "WHERE M.mailaccountid IN (" + accountIds + ")")
                             .List <String>();

                return(Json(new { directions = directions }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                Log.LogException(exc);
                return(Json(new { directions = new String[0] }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #18
0
        public ActionResult RecolorLabel(String labelName, String color)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                foreach (MailAccount currentMailAccount in sessionUser.GetAccounts())
                {
                    IList <LabelEntity> labels = Label.FindByAccount(currentMailAccount.Entity, session);
                    if (labels.Any(x => x.Name == labelName))
                    {
                        LabelEntity labelToRecolor = labels.Single(x => x.Name == labelName);
                        labelToRecolor.Color = color;
                        session.SaveOrUpdate(labelToRecolor);
                    }
                }
                tran.Commit();

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: labelName(" + labelName + "), color(" + color + ").");
                return(Json(new { success = false, message = "Error al cambiar color." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #19
0
        public async Task <IList <T> > FindAllByProperty(string property, object value, string orderByProperty = null, int?maxResults = null)
        {
            using var session = NHibernateManager.OpenSession();
            var criteria = session.CreateCriteria(typeof(T));

            if (!string.IsNullOrWhiteSpace(orderByProperty))
            {
                criteria.AddOrder(Order.Asc(orderByProperty));
            }
            else
            {
                criteria.AddOrder(Order.Asc("Id"));
            }

            criteria.Add(value == null || value.ToString() == "null" ? Restrictions.IsNull(property) : Restrictions.Eq(property, value));

            if (maxResults.HasValue)
            {
                criteria.SetMaxResults(maxResults.Value);
            }

            return(await criteria.ListAsync <T>());
        }
コード例 #20
0
        public ActionResult ResetPassword(String username)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                User user = Glimpse.Models.User.FindByUsername(username, session);
                if (user == null)
                {
                    throw new GlimpseException("Usuario inexistente: " + username + ".");
                }
                String newPassword    = StringHelper.GenerateRandomString();
                String newPasswordEnc = CryptoHelper.EncryptDefaultKey(newPassword);
                user.ChangePassword(user.Entity.Password, newPasswordEnc, session);
                MailAccount.SendResetPasswordMail(user, newPassword, session);
                tran.Commit();

                JsonResult result = Json(new { success = true, message = "La contraseña ha sido reinicializada." }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (GlimpseException exc)
            {
                tran.Rollback();
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc);
                return(Json(new { success = false, message = "Error al reiniciar la contraseña." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #21
0
        public ActionResult EditUserPersonalData(String firstName, String lastName, String country, String city, String tel)
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                sessionUser.Entity.Firstname = firstName;
                sessionUser.Entity.Lastname  = lastName;
                sessionUser.Entity.Country   = country;
                sessionUser.Entity.City      = city;
                sessionUser.Entity.Telephone = tel;
                sessionUser.SaveOrUpdate(session);
                session.Flush();

                return(Json(new { success = true, url = Url.Action("Index", "Home") }, JsonRequestBehavior.AllowGet));
            }
            catch (GlimpseException exc)
            {
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros: firstName:(" + firstName + "), lastName( " + lastName +
                                 "), country(" + country + "), city(" + city + "), tel(" + tel + ").");
                return(Json(new { success = false, message = "Error modificando los datos del usuario." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #22
0
        public ActionResult DeleteLabel(String labelName, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                User sessionUser = (User)Session[AccountController.USER_NAME];
                if (sessionUser == null)
                {
                    throw new GlimpseException("No se encontró el usuario.");
                }

                foreach (MailAccount currentMailAccount in sessionUser.GetAccounts())
                {
                    Label labelToDelete = Label.FindByName(currentMailAccount, labelName, session);
                    if (labelToDelete != null)
                    {
                        labelToDelete.Delete(session);             //BD
                        currentMailAccount.DeleteLabel(labelName); //IMAP
                    }
                }
                tran.Commit();

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros del metodo: labelName(" + labelName + "), mailAccountId(" + mailAccountId.ToString() + ").");
                return(Json(new { success = false, message = "Error al eliminar label." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #23
0
        public ActionResult AddLabel(String labelName, Int64 mailId, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount mailAccount = this.GetMailAccount(mailAccountId);
                Label       theLabel    = this.GetAccountLabel(labelName, mailAccount, session);
                if (theLabel == null)
                {
                    return(Json(new { success = false, message = "No se ha podido encontrar la etiqueta con el nombre:" + labelName + "." }, JsonRequestBehavior.AllowGet));
                }
                Mail theMail = new Mail(mailId, session);

                if (theMail.Entity.MailAccountEntity.Id != theLabel.Entity.MailAccountEntity.Id) //si el mail no es del mismo MailAccount de la etiqueta
                {
                    this.CreateLabel(labelName, theMail.Entity.MailAccountEntity.Id);            //DB e IMAP
                }
                theMail.AddLabel(theLabel, session);                                             //DB
                tran.Commit();
                mailAccount.AddLabelFolder(theMail, theLabel);                                   //IMAP

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros de la llamada: label(" + labelName + "), mailId(" +
                                 mailId.ToString() + "), mailAccountId(" + mailAccountId + ").");
                return(Json(new { success = false }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #24
0
        public async Task <T> FindOneByProperty(string property, object value, string orderByProperty = null)
        {
            using var session = NHibernateManager.OpenSession();
            var criteria = session.CreateCriteria(typeof(T));

            if (!string.IsNullOrEmpty(orderByProperty))
            {
                criteria.AddOrder(Order.Asc(orderByProperty));
            }
            else
            {
                criteria.AddOrder(Order.Asc("Id"));
            }

            criteria.Add(value == null ? Restrictions.IsNull(property) : Restrictions.Eq(property, value));
            criteria.SetMaxResults(1);
            var result = await criteria.ListAsync <T>();

            if (result != null && result.Count > 0)
            {
                return(result[0]);
            }

            return(default);
コード例 #25
0
        public ActionResult SetReadFlag(Int64 mailId, Boolean seenFlag, Int64 mailAccountId = 0)
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                MailAccount currentMailAccount = this.GetMailAccount(mailAccountId);
                Mail        mail = new Mail(mailId, session);
                currentMailAccount.SetReadFlag(mail, seenFlag, session);

                JsonResult result = Json(new { success = true }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros del metodo: mailId(" + mailId.ToString() +
                                 "), seenFlag(" + seenFlag.ToString() + "), mailAccountId(" + mailAccountId.ToString() + ").");
                return(Json(new { success = false, message = "Error al marcar flag de leido." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #26
0
        public ActionResult GetMailsByAmount(Int32 amountOfMails, Int64 mailAccountId = 0)
        {
            ISession session = NHibernateManager.OpenSession();

            try
            {
                MailCollection mails;
                List <Object>  mailsToReturn      = new List <object>();
                MailAccount    currentMailAccount = this.GetMailAccount(mailAccountId);
                mails         = currentMailAccount.GetMailsByAmount(amountOfMails, session);
                mailsToReturn = this.PrepareHomeMails(mails);

                return(Json(new { success = true, mails = mailsToReturn }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                Log.LogException(exc, "Parametros de la llamada: amountOfMails(" + amountOfMails + ").");
                return(Json(new { success = false, message = "Error al obtener los mails." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #27
0
        public ActionResult UntrashMail(Int64 id, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount mailAccount = this.GetMailAccount(mailAccountId);
                Mail        mail        = new Mail(id, session);
                if (mail == null)
                {
                    throw new GlimpseException("Mail inexistente: " + id.ToString() + ".");
                }
                mailAccount.UntrashMail(mail, session); //IMAP y BD
                tran.Commit();

                JsonResult result = Json(new { success = true }, JsonRequestBehavior.AllowGet);
                return(result);
            }
            catch (GlimpseException exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros de la llamada: mailID(" + id.ToString() + ").");
                return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros de la llamada: mailID(" + id.ToString() + ").");
                return(Json(new { success = false, message = exc.Message }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }
コード例 #28
0
        public static void StartSynchronization(String mailAddress, Boolean forwardOnly = true)
        {
            MailAccount mailAccountAll;
            MailsTask   newAllTask;
            MailsTask   newTaskTrash;
            MailsTask   newSpamTask;
            String      mailAddressAll   = mailAddress + "/ALL";
            String      mailAddressTrash = mailAddress + "/TRASH";
            String      mailAddressSpam  = mailAddress + "/SPAM";

            if (MailsTasksHandler.IsAnyWorking(new String[]  { mailAddressAll, mailAddressTrash, mailAddressSpam }))
            {
                return; //alguna tarea se encuentra trabajando
            }
            using (ISession session = NHibernateManager.OpenSession())
            {
                mailAccountAll = MailAccount.FindByAddress(mailAddress, session, false);
                try
                {
                    mailAccountAll.ConnectFull(session);
                }
                catch (NullReferenceException exc)
                {
                    Log.LogException(exc, "Direccion inexistente en la base de datos: " + mailAccountAll + ".");
                    return;
                }
                catch (InvalidAuthenticationException exc)
                {
                    Log.LogException(exc, "No se pudo conectar a imap con la direccion: " + mailAddress + ", ha cambiado el password.");
                    return;
                }
                catch (SocketException exc)
                {
                    Log.LogException(exc, "No se pudo conectar a imap con la direccion: " + mailAddress + ".");
                    return;
                }
                Label allLabel   = Label.FindBySystemName(mailAccountAll, "All", session);
                Label trashLabel = Label.FindBySystemName(mailAccountAll, "Trash", session);
                Label spamLabel  = Label.FindBySystemName(mailAccountAll, "Junk", session);

                newAllTask = new MailsTask(mailAccountAll.GetUIDLocal(session, allLabel.Entity.SystemName, true),  //lastUidLocal
                                           mailAccountAll.GetUIDLocal(session, allLabel.Entity.SystemName, false), //firstUidLocal
                                           mailAccountAll.GetUIDExternalFrom(allLabel.Entity.Name, true),          //lastUidExternal
                                           mailAccountAll.GetUIDExternalFrom(allLabel.Entity.Name, false),         //firstUidExternal
                                           allLabel,
                                           mailAccountAll);
                newTaskTrash = new MailsTask(mailAccountAll.GetUIDLocal(session, trashLabel.Entity.SystemName, true),  //lastUidLocal
                                             mailAccountAll.GetUIDLocal(session, trashLabel.Entity.SystemName, false), //firstUidLocal
                                             mailAccountAll.GetUIDExternalFrom(trashLabel.Entity.Name, true),          //lastUidExternal
                                             mailAccountAll.GetUIDExternalFrom(trashLabel.Entity.Name, false),         //firstUidExternal
                                             trashLabel,
                                             null);
                newSpamTask = new MailsTask(mailAccountAll.GetUIDLocal(session, spamLabel.Entity.SystemName, true),  //lastUidLocal
                                            mailAccountAll.GetUIDLocal(session, spamLabel.Entity.SystemName, false), //firstUidLocal
                                            mailAccountAll.GetUIDExternalFrom(spamLabel.Entity.Name, true),          //lastUidExternal
                                            mailAccountAll.GetUIDExternalFrom(spamLabel.Entity.Name, false),         //firstUidExternal
                                            spamLabel,
                                            null);
                session.Close();
            }
            if (!newAllTask.HasFinished)             //puede ser que no se necesite sincronizar dependiendo de los numeros
            {
                if (newAllTask.HighestUidLocal != 0) //si no es la primera vez, que sincronice hacia adelante sin limites
                {
                    newAllTask.SetUnlimitedForwarding(true);
                }
                newAllTask.SetForwardOnly(forwardOnly);
                MailsTasksHandler.LockTasksList();
                MailsTasksHandler.TasksList[mailAddressAll] = newAllTask;
                MailsTasksHandler.UnlockTasksList();
                MailsTasksHandler.StartMailsTask(newAllTask);
            }
            if (!newTaskTrash.HasFinished)
            {
                MailAccount mailAccountTrash = mailAccountAll.Clone(); //crear otra conexion a IMAP
                newTaskTrash.SetMailAccount(mailAccountTrash);
                MailsTasksHandler.LockTasksList();
                MailsTasksHandler.TasksList[mailAddressTrash] = newTaskTrash;
                MailsTasksHandler.UnlockTasksList();
                MailsTasksHandler.StartMailsTask(newTaskTrash);
            }
            if (!newSpamTask.HasFinished)
            {
                MailAccount mailAccountSpam = mailAccountAll.Clone(); //crear otra conexion a IMAP
                newSpamTask.SetMailAccount(mailAccountSpam);
                MailsTasksHandler.LockTasksList();
                MailsTasksHandler.TasksList[mailAddressSpam] = newSpamTask;
                MailsTasksHandler.UnlockTasksList();
                MailsTasksHandler.StartMailsTask(newSpamTask);
            }
        }
コード例 #29
0
 public void Setup()
 {
     NHibernateManager.FluentAssemblies.Add(typeof(User).Assembly);
     NHibernateManager.FluentAssemblies.Add(typeof(Customer).Assembly);
     NHibernateManager.FluentAssemblies.Add(typeof(PayPointDatabaseMarketPlace).Assembly);
     Scanner.Register();
     ObjectFactory.Configure(x =>
     {
         x.For <ISession>().LifecycleIs(new ThreadLocalStorageLifecycle()).Use(ctx => NHibernateManager.OpenSession());
         x.For <ISessionFactory>().Use(() => NHibernateManager.SessionFactory);
         x.For <ILoanRepository>().Use <LoanRepository>();
     });
 }
コード例 #30
0
        }         // InitInstanceName

        private bool Init()
        {
            m_oDB = new SqlConnection(m_oEnv, m_oLog);

            if (m_oDB == null)
            {
                throw new Exception("Failed to create a DB connection.");
            }

            if (!InitInstanceName())
            {
                return(false);
            }

            m_oCfg = new Configuration(m_sInstanceName, m_oDB, m_oLog);

            m_oCfg.Init();

            var oRuntimeData = new EzServiceInstanceRuntimeData {
                Env          = m_oEnv,
                Host         = this,
                Log          = m_oLog,
                DB           = m_oDB,
                InstanceName = m_sInstanceName,
                InstanceID   = m_oCfg.InstanceID,
            };

            m_oHost = new EzServiceHost(m_oCfg, oRuntimeData);

            CurrentValues.ReloadOnTimer oOnTimer = () => {
                DbConnectionPool.ReuseCount = CurrentValues.Instance.ConnectionPoolReuseCount;
                AConnection.UpdateConnectionPoolMaxSize(CurrentValues.Instance.ConnectionPoolMaxSize);
            };

            CurrentValues.Init(m_oDB, m_oLog);
            CurrentValues.Instance.RefreshIntervalMinutes = CurrentValues.Instance.EzServiceUpdateConfiguration;

            Scanner.Register();

            ObjectFactory.Configure(x => {
                x.For <ISession>().LifecycleIs(new ThreadLocalStorageLifecycle()).Use(ctx => NHibernateManager.OpenSession());
                x.For <ISessionFactory>().Use(() => NHibernateManager.SessionFactory);
                x.AddRegistry <ServiceRegistry>();
            });

            oOnTimer();
            CurrentValues.OnReloadByTimer += oOnTimer;

            m_oCrontabDaemon = new Daemon(oRuntimeData, m_oDB, m_oLog);

            return(true);
        }         // Init