Exemplo n.º 1
0
        public ActionResult EditUserAccounts(String mailAccount1, String password1, Boolean isMainAccount1,
                                             String mailAccount2, String password2, Boolean isMainAccount2,
                                             String mailAccount3, String password3, Boolean isMainAccount3)
        {
            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.");
                }

                #region Initialize UserView
                MailAccountViewModel        mailAccountView1 = new MailAccountViewModel();
                MailAccountViewModel        mailAccountView2 = new MailAccountViewModel();
                MailAccountViewModel        mailAccountView3 = new MailAccountViewModel();
                UserViewModel               userView         = new UserViewModel();
                List <MailAccountViewModel> mailAccountsView = new List <MailAccountViewModel>();

                mailAccountView1.Address       = mailAccount1;
                mailAccountView1.Password      = password1;
                mailAccountView1.IsMainAccount = isMainAccount1;

                mailAccountView2.Address       = mailAccount2;
                mailAccountView2.Password      = password2;
                mailAccountView2.IsMainAccount = isMainAccount2;

                mailAccountView3.Address       = mailAccount3;
                mailAccountView3.Password      = password3;
                mailAccountView3.IsMainAccount = isMainAccount3;

                mailAccountsView.Add(mailAccountView1);
                mailAccountsView.Add(mailAccountView2);
                mailAccountsView.Add(mailAccountView3);

                userView.Username         = sessionUser.Entity.Username;
                userView.ListMailAccounts = mailAccountsView;
                userView.FilterInvalidAccounts();
                #endregion

                this.ValidateUserMailAccounts(userView, sessionUser, session); //direcciones de correo y contraseñas

                List <MailAccount> removedMailAccounts = new List <MailAccount>();
                foreach (MailAccount removedMailAccount in sessionUser.mailAccounts
                         .Where(x => !userView.ListMailAccounts.Any(c => c.Address == x.Entity.Address)))
                {
                    removedMailAccount.Disconnect();
                    removedMailAccount.Deactivate(session); //saveOrUpdate adentro
                    removedMailAccounts.Add(removedMailAccount);
                }

                foreach (MailAccount removedMailAccount in removedMailAccounts)
                {
                    sessionUser.mailAccounts.Remove(removedMailAccount);
                }

                foreach (MailAccountViewModel mailAccountView in userView.ListMailAccounts)
                {
                    if (sessionUser.mailAccounts.Any(x => x.Entity.Address == mailAccountView.Address)) //si la cuenta ya existia
                    {
                        MailAccount editedMailAccount = sessionUser.mailAccounts.Single(x => x.Entity.Address == mailAccountView.Address);
                        if (!String.IsNullOrEmpty(mailAccountView.Password))
                        {
                            editedMailAccount.Entity.Password = CryptoHelper.EncryptDefaultKey(mailAccountView);
                        }
                        editedMailAccount.SetUser(sessionUser);
                        editedMailAccount.ConnectLight();
                        if (mailAccountView.IsMainAccount)
                        {
                            editedMailAccount.SetAsMainAccount(true);
                        }
                        else
                        {
                            editedMailAccount.SetAsMainAccount(false);
                        }
                        editedMailAccount.Activate(session); //saveOrUpdate adentro
                    }
                    else //si la cuenta es nueva
                    {
                        MailAccount newMailAccount = new MailAccount(mailAccountView.Address, CryptoHelper.EncryptDefaultKey(mailAccountView.Password));
                        newMailAccount.SetUser(sessionUser);
                        if (mailAccountView.IsMainAccount)
                        {
                            newMailAccount.SetAsMainAccount(true);
                        }
                        else
                        {
                            newMailAccount.SetAsMainAccount(false);
                        }
                        newMailAccount.SetOldestMailDate();
                        newMailAccount.Activate(session); //saveOrUpdate adentro
                        newMailAccount.ConnectFull(session);
                        sessionUser.AddAccount(newMailAccount);
                    }
                }

                tran.Commit();
                Session[AccountController.USER_NAME] = sessionUser;

                return(Json(new { success = true, url = Url.Action("Index", "Home") }, 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: viewAccountName1:(" + mailAccount1 + "), viewAccountPass1( " + password1 +
                                 "), viewAccountCheck1(" + isMainAccount1 + "), viewAccountName2(" + mailAccount2 +
                                 "), viewAccountPass1(" + password1 + "), viewAccountCheck2(" + isMainAccount2 +
                                 "),  viewAccountName3:(" + mailAccount3 + "), viewAccountPass3( " + password3 +
                                 "), viewAccountCheck3(" + isMainAccount3 + ").");
                return(Json(new { success = false, message = "Error modificando usuario." }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }