public ActionResult LogintoExchange(ExLogOnViewModel model, bool hosted = false)
        {
            EWSCode ewscode = new EWSCode();
            User userObj = (User)Session["user"];
            Account accountObj = (Account)Session["account"];
            TempData["SelectedMenu"] = "Manage";
            TempData["SelectedSubMenu"] = "ManageFolders";
            string selectedButton = string.Empty;
            if (model.ExchangeType == 1) { selectedButton = model.SelectedButtonInhouse; }
            else { selectedButton = model.SelectedButton; }
            long credentialID = 0;
            model.ExistingConnections = CCConnectinRepository.CCSubscriptions.Where(folderID => folderID.AccountGUID == accountObj.AccountGUID & folderID.SecondaryAccount != "").ToList().GroupBy(x => x.SecondaryAccount).Select(y => y.First()).ToList();

            if (selectedButton == "auto")
            {
                ConnectionConfig cc = ewscode.AutoDiscoverConnectionDetails(model.Credentials.EmailAddress, model.Credentials.Password);
                //model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aid => aid.AccountID == userObj.AccountID).ToList();
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;

                if (cc != null)
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, cc.url, cc.version.ToString());

                    ViewBag.url = cc.url;
                    ViewBag.msucess = "Connection Successful";
                    ViewBag.mfail = "";
                    ViewBag.tmessage = "sucess";
                    ViewBag.pass = Encryption.DecryptStringAES(model.Credentials.Password, rand);
                    model.ServerVer = cc.version.ToString();
                    Session["secondaryAccount"] = model.SecondaryAccount;
                    Session["accessType"] = model.AccessType;
                    string accessTypes = Session["accessType"].ToString();
                }
                else
                {
                    ViewBag.url = "";
                    ViewBag.mfail = "Error: Auto-discover failed";
                    ViewBag.msucess = "";
                    ViewBag.tmessage = "fail";
                    ViewBag.pass = model.Credentials.Password;
                }
                model.CreatedCredentialID = credentialID;
                return View(model);
            }
            else if (selectedButton == "test")
            {

                string version = ewscode.StandardConnection(model.Credentials.EmailAddress, model.Credentials.Password, model.Credentials.URL);
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;
                if (version != "" && version != "404" && version != "401" && version != "null")
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, model.Credentials.URL, version.ToString());

                    ViewBag.url = model.Credentials.URL;
                    ViewBag.pass = Encryption.DecryptStringAES(model.Credentials.Password, rand);
                    ViewBag.msucess = "Connection Successful";
                    ViewBag.mfail = "";
                    ViewBag.tmessage = "sucess";
                    model.ServerVer = version.ToString();

                }
                else
                {
                    ViewBag.url = "";
                    if (version == "") { ViewBag.mfail = "Connection Fail"; }
                    else if (version == "404") { ViewBag.mfail = "Error: The URL was not found. Please check the URL."; }
                    else if (version == "401") { ViewBag.mfail = "Error: Server returned 'Unauthorized'. Please check the username and password"; }
                    else if (version == "null") { ViewBag.mfail = "Error: URL cannot be null. Please enter the URL."; }
                    else { ViewBag.mfail = "Connection Fail"; }
                    ViewBag.msucess = "";
                    ViewBag.tmessage = "fail";
                }

                model.CreatedCredentialID = credentialID;
                return View(model);
            }
            else if (selectedButton == "autoInhouse")
            {
                ConnectionConfig cc = ewscode.AutoDiscoverConnectionDetails(model.EmailAddressIn, model.Password);
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;

                if (cc != null)
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, cc.url, cc.version.ToString());

                    ViewBag.urlin = cc.url;
                    ViewBag.msucessin = "Connection Successful";
                    ViewBag.mfailin = "";
                    ViewBag.tmessagein = "";
                    ViewBag.passin = model.Password;
                    model.ServerVersionInhouse = cc.version.ToString();
                    Session["secondaryAccount"] = model.SecondaryAccountIn;
                    Session["accessType"] = model.AccessTypeIn;
                }
                else
                {
                    ViewBag.urlin = "";
                    ViewBag.mfailin = "Error: Auto-discover failed";
                    ViewBag.msucessin = "";
                    ViewBag.tmessagein = "";
                    ViewBag.passin = model.Password;
                }
                model.CreatedCredentialIDIn = credentialID;
                return View(model);

            }
            else if (selectedButton == "testInhouse")
            {
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                string version = ewscode.StandardConnectionToInHouseExchanges(model.UserName, model.Password, model.URL, model.Domain);
                model.ReturnUrlInhouse = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderIDInhouse;

                if (version != "" && version != "404" && version != "401" && version != "null")
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, model.URL, version.ToString());

                    ViewBag.urlin = model.URL;
                    ViewBag.passin = model.Password;
                    ViewBag.msucessin = "Connection Successful";
                    ViewBag.mfailin = "";
                    ViewBag.tmessagein = "sucess";
                    model.ServerVersionInhouse = version.ToString();

                }
                else
                {

                    ViewBag.urlin = "";
                    if (version == "") { ViewBag.mfailin = "Connection Fail"; }
                    else if (version == "404") { ViewBag.mfailin = "Error: The URL was not found. Please check the URL."; }
                    else if (version == "401") { ViewBag.mfailin = "Error: Server returned 'Unauthorized'. Please check the username and password"; }
                    else if (version == "null") { ViewBag.mfailin = "Error: URL cannot be null. Please enter the URL."; }
                    else { ViewBag.mfailin = "Connection Fail"; }
                    ViewBag.msucessin = "";
                    ViewBag.tmessagein = "fail";
                }
                model.CreatedCredentialIDIn = credentialID;
                return View(model);

            }
            else
            {

                if (model.SecondaryAccountc != null)
                {
                    Session["secondaryAccount"] = model.SecondaryAccountc;
                    if (model.AccessTypec != null) { Session["accessType"] = model.AccessTypec; }
                }

                if (model.SecondaryAccount != null)
                {
                    Session["secondaryAccount"] = model.SecondaryAccount;
                    if (model.AccessType != null) { Session["accessType"] = model.AccessType; }
                }

                if (model.SecondaryAccountIn != null)
                {
                    Session["secondaryAccount"] = model.SecondaryAccountIn;
                    if (model.AccessTypeIn != null) { Session["accessType"] = model.AccessTypeIn; }
                }

                if (model.SecondaryAccountc == null && model.SecondaryAccount == null && model.SecondaryAccountIn == null) { Session["accessType"] = 0; Session["secondaryAccount"] = ""; }

                ExchangeService srv = null;
                if (model.SelectedCredentialID != 0 || model.CreatedCredentialID != 0 || model.CreatedCredentialIDIn != 0)
                {
                    long selectedCreadintialID = 0;
                    if (model.SelectedCredentialID != 0) { selectedCreadintialID = model.SelectedCredentialID; }
                    else if (model.CreatedCredentialID != 0) { selectedCreadintialID = model.CreatedCredentialID; }
                    else if (model.CreatedCredentialIDIn != 0) { selectedCreadintialID = model.CreatedCredentialIDIn; }

                    var creds = CCCredentialRepository.Credentials.FirstOrDefault(x => x.ID == selectedCreadintialID);

                    string depassword = Encryption.DecryptStringAES(creds.Password, rand);
                    if (creds.IsHostedExchange)
                    {
                        srv = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
                        if (creds.EmailAddress != null) { srv.Credentials = new WebCredentials(creds.EmailAddress, depassword); }
                        else { srv.Credentials = new WebCredentials(creds.UserName, depassword); }
                        srv.Url = new Uri(creds.URL);
                    }
                    else
                    {
                        if (creds.ServerVersion == "2007SP1") srv = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
                        else if (creds.ServerVersion == "2010") srv = new ExchangeService(ExchangeVersion.Exchange2010);
                        else if (creds.ServerVersion == "2010SP1") srv = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
                        else if (creds.ServerVersion == "Exchange2010_SP1") srv = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
                        else if (creds.ServerVersion == "Exchange2010_SP2") srv = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                        else srv = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
                        if (creds.Domain != null) { srv.Credentials = new WebCredentials(creds.UserName, depassword, creds.Domain); }
                        else if (creds.UserName != null) { srv.Credentials = new WebCredentials(creds.UserName, depassword); }
                        else { srv.Credentials = new WebCredentials(creds.EmailAddress, depassword); }
                        srv.Url = new Uri(creds.URL);
                    }
                    Session["srv"] = srv;
                    if (creds.EmailAddress != null) { Session["srvEmail"] = creds.EmailAddress; }
                    else { Session["srvEmail"] = creds.UserName; }
                    credentialID = selectedCreadintialID;
                }
                return Redirect(model.ReturnUrl + "&creid=" + credentialID);
            }
        }
        public ActionResult EditCredential(CredentialEditModel credentialObj)
        {
            string buttonStatus = credentialObj.ButtonStatus;
            if (buttonStatus == "AutoDiscover")
            {
                EWSCode ec = new EWSCode();
                ConnectionConfig cc = ec.AutoDiscoverConnectionDetails(credentialObj.CredentialDetails.EmailAddress, credentialObj.CredentialDetails.Password);
                try
                {
                    if (cc.url != null)
                    {
                        credentialObj.CredentialDetails.URL = cc.url;
                        ViewBag.Message = "Connection sucess.";
                        ViewBag.Message1 = "";
                        ViewBag.url = cc.url;
                    }
                    else
                    {
                        ViewBag.Message = "";
                        ViewBag.Message1 = "Connection failed. Please check your password and try again.";
                        return View(credentialObj);
                    }
                }
                catch (Exception ex)
                {
                    ViewBag.Message = "";
                    ViewBag.Message1 = "Connection failed. Please check your password and try again.";
                    return View(credentialObj);
                }

                return View(credentialObj);
            }
            else if (buttonStatus == "TestConnection")
            {
                EWSCode ec = new EWSCode();
                string version = ec.StandardConnection(credentialObj.CredentialDetails.EmailAddress, credentialObj.CredentialDetails.Password, credentialObj.CredentialDetails.URL);

                if (version != null)
                {
                    ViewBag.Message = "Connection Sucess";
                    ViewBag.Message1 = "";
                    ViewBag.url = credentialObj.CredentialDetails.URL;
                }
                else
                {
                    ViewBag.Message = "";
                    ViewBag.Message1 = "Connection Fail";

                }

                return View(credentialObj);

            }

            else
            {

                if (ModelState.IsValid)
                {
                    credentialObj.CredentialDetails.Password = Encryption.EncryptStringAES(credentialObj.CredentialDetails.Password, rand);
                    var resp = CCCredentialRepository.SaveCredential(credentialObj.CredentialDetails);
                    return RedirectToAction("ManageCredentials", "Folder");
                }
                else
                {
                    return View(credentialObj);
                }
            }
        }
        public ActionResult AddCredentials(ExLogOnViewModel model, bool hosted = false)
        {
            EWSCode ewscode = new EWSCode();
            User userObj = (User)Session["user"];
            Account accountObj = (Account)Session["account"];
            TempData["SelectedMenu"] = "Manage";
            TempData["SelectedSubMenu"] = "ManageCredentials";
            string selectedButton = string.Empty;
            if (model.ExchangeType == 1) { selectedButton = model.SelectedButtonInhouse; }
            else { selectedButton = model.SelectedButton; }
            long credentialID = 0;
            model.ExistingConnections = CCConnectinRepository.CCSubscriptions.Where(folderID => folderID.AccountGUID == accountObj.AccountGUID & folderID.SecondaryAccount != "").ToList().GroupBy(x => x.SecondaryAccount).Select(y => y.First()).ToList();

            if (selectedButton == "auto")
            {
                ConnectionConfig cc = ewscode.AutoDiscoverConnectionDetails(model.Credentials.EmailAddress, model.Credentials.Password);
                //model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aid => aid.AccountID == userObj.AccountID).ToList();
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;

                if (cc != null)
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, cc.url, cc.version.ToString());

                    ViewBag.url = cc.url;
                    ViewBag.msucess = "Connection Successful and Saved";
                    ViewBag.mfail = "";
                    ViewBag.tmessage = "sucess";
                    ViewBag.pass = Encryption.DecryptStringAES(model.Credentials.Password, rand);
                    model.ServerVer = cc.version.ToString();
                    Session["secondaryAccount"] = model.SecondaryAccount;
                    Session["accessType"] = model.AccessType;
                    string accessTypes = Session["accessType"].ToString();
                    Session["NewCredentialObject"] = model;
                }
                else
                {
                    ViewBag.url = "";
                    ViewBag.mfail = "Error: Auto-discover failed";
                    ViewBag.msucess = "";
                    ViewBag.tmessage = "fail";
                    ViewBag.pass = model.Credentials.Password;
                }
                model.CreatedCredentialID = credentialID;
                return View(model);
            }
            else if (selectedButton == "test")
            {

                string version = ewscode.StandardConnection(model.Credentials.EmailAddress, model.Credentials.Password, model.Credentials.URL);
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;
                if (version != "" && version != "404" && version != "401" && version != "null")
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, model.Credentials.URL, version.ToString());

                    ViewBag.url = model.Credentials.URL;
                    ViewBag.pass = Encryption.DecryptStringAES(model.Credentials.Password, rand);
                    ViewBag.msucess = "Connection Successful and Saved";
                    ViewBag.mfail = "";
                    ViewBag.tmessage = "sucess";
                    model.ServerVer = version.ToString();

                }
                else
                {
                    ViewBag.url = "";
                    if (version == "") { ViewBag.mfail = "Connection Fail"; }
                    else if (version == "404") { ViewBag.mfail = "Error: The URL was not found. Please check the URL."; }
                    else if (version == "401") { ViewBag.mfail = "Error: Server returned 'Unauthorized'. Please check the username and password"; }
                    else if (version == "null") { ViewBag.mfail = "Error: URL cannot be null. Please enter the URL."; }
                    else { ViewBag.mfail = "Connection Fail"; }
                    ViewBag.msucess = "";
                    ViewBag.tmessage = "fail";
                }

                model.CreatedCredentialID = credentialID;
                return View(model);
            }
            else if (selectedButton == "autoInhouse")
            {
                ConnectionConfig cc = ewscode.AutoDiscoverConnectionDetails(model.EmailAddressIn, model.Password);
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                model.ReturnUrl = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderID;

                if (cc != null)
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, cc.url, cc.version.ToString());

                    ViewBag.urlin = cc.url;
                    ViewBag.msucessin = "Connection Successful and Saved";
                    ViewBag.mfailin = "";
                    ViewBag.tmessagein = "";
                    ViewBag.passin = model.Password;
                    model.ServerVersionInhouse = cc.version.ToString();
                    Session["secondaryAccount"] = model.SecondaryAccountIn;
                    Session["accessType"] = model.AccessTypeIn;
                }
                else
                {
                    ViewBag.urlin = "";
                    ViewBag.mfailin = "Error: Auto-discover failed";
                    ViewBag.msucessin = "";
                    ViewBag.tmessagein = "";
                    ViewBag.passin = model.Password;
                }
                model.CreatedCredentialIDIn = credentialID;
                return View(model);

            }
            else if (selectedButton == "testInhouse")
            {
                model.ExistingCredentials = CCCredentialRepository.Credentials.Where(aguid => aguid.AccountGUID == accountObj.AccountGUID).ToList();
                string version = ewscode.StandardConnectionToInHouseExchanges(model.UserName, model.Password, model.URL, model.Domain);
                model.ReturnUrlInhouse = "~/Folder/SelectFolder?src=" + "src" + "&primid=" + model.selectedFolderIDInhouse;

                if (version != "" && version != "404" && version != "401" && version != "null")
                {
                    //save crediantal
                    credentialID = SaveCredentials(model, selectedButton, hosted, model.URL, version.ToString());

                    ViewBag.urlin = model.URL;
                    ViewBag.passin = model.Password;
                    ViewBag.msucessin = "Connection Successful and Saved";
                    ViewBag.mfailin = "";
                    ViewBag.tmessagein = "sucess";
                    model.ServerVersionInhouse = version.ToString();

                }
                else
                {

                    ViewBag.urlin = "";
                    if (version == "") { ViewBag.mfailin = "Connection Fail"; }
                    else if (version == "404") { ViewBag.mfailin = "Error: The URL was not found. Please check the URL."; }
                    else if (version == "401") { ViewBag.mfailin = "Error: Server returned 'Unauthorized'. Please check the username and password"; }
                    else if (version == "null") { ViewBag.mfailin = "Error: URL cannot be null. Please enter the URL."; }
                    else { ViewBag.mfailin = "Connection Fail"; }
                    ViewBag.msucessin = "";
                    ViewBag.tmessagein = "fail";
                }
                model.CreatedCredentialIDIn = credentialID;
                return View(model);

            }
            else if (selectedButton == "setUpConnection")
            {
                Session["NewCredential"] = "Yes";
                return RedirectToAction("setUpNewConnection", "Folder");
            }
            else
            {
                Session["NewCredential"] = "Yes";
                return RedirectToAction("ManageCredentials", "Folder");
            }
        }