//------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Gets the session ID.
        /// </summary>
        /// <param name="username">The username.</param>
        /// <param name="password">The password.</param>
        /// <returns></returns>
        public string GetSessionID(string username, string password)
        {
            logger.Debug(EnumMethod.START);

            PMAUserInfo userInfo = null;

            foreach (PMAUserInfo tempUserInfo in configManager.PMAUsers.ListPMAUserInfo)
            {
                if (tempUserInfo.UserName == username && tempUserInfo.UserPassword == password)
                {
                    userInfo = tempUserInfo;
                    break;
                }
            }

            string sessionID = string.Empty;

            if (userInfo != null)
            {
                lock (UsersLoggedIn)
                {
                    sessionID = CreateSessionID(userInfo);
                    userInfo.LastLoginTime = DateTime.Now;
                    configManager.UpdateUserInformation();
                }
            }
            logger.Debug(EnumMethod.END);
            if (sessionID != null && sessionID != string.Empty)
            {
                string            message        = "User " + userInfo.UserName + " Has Logged into system";
                PMAMailController mailController = new PMAMailController(message, AlertType.USER_ALERT, userInfo.UserName);
                mailController.SendMail();
            }
            return(sessionID);
        }
        //------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Creates the session ID.
        /// </summary>
        /// <param name="userInfo">The user info.</param>
        /// <returns></returns>
        private string CreateSessionID(PMAUserInfo userInfo)
        {
            logger.Debug(EnumMethod.START);
            string sessionID = string.Empty;

            lock (UsersLoggedIn)
            {
                UsersLoggedIn.Add(sessionID = GenerateUniqueId(), userInfo);
            }
            logger.Debug(EnumMethod.END);
            return(sessionID);
        }
        public static PMAUserInfo GetUserInfo(string username, string password)
        {
            PMAUserInfo userInfo = (from info in PMAConfigManager.GetConfigManagerInstance.PMAUsers.ListPMAUserInfo
                                    where info.UserName == username && info.UserPassword == password
                                    select info).SingleOrDefault <PMAUserInfo>();

            if (userInfo != null)
            {
                UsersLoggedIn.Add(userInfo.UserName, true);
            }

            return(userInfo);
        }
        //---------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Updates the config.
        /// </summary>
        public void UpdateConfig()
        {
            PMAUserInfo userInfo = null;

            configManager.PMAUsers.ListPMAUserInfo.Clear();
            foreach (DataGridViewRow row in dataGridView_users.Rows)
            {
                userInfo                        = new PMAUserInfo();
                userInfo.UserName               = row.Cells["User"].Value.ToString();
                userInfo.UserPassword           = row.Cells["PasswordString"].Value.ToString();
                userInfo.IsActionUser           = bool.Parse(row.Cells["Action"].Value.ToString());
                userInfo.IsServiceUser          = bool.Parse(row.Cells["Services"].Value.ToString());
                userInfo.IsSQLUser              = bool.Parse(row.Cells["SQL"].Value.ToString());
                userInfo.IsTaskManagerAdminUser = bool.Parse(row.Cells["TaskManagerAdmin"].Value.ToString());
                configManager.PMAUsers.ListPMAUserInfo.Add(userInfo);
            }
        }
        //------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Removes the expired session.
        /// </summary>
        private void RemoveExpiredSession()
        {
            logger.Debug(EnumMethod.START);
            PMAUserInfo   userInfo        = null;
            List <string> expiredSessions = new List <string>();

            foreach (string sessionID in UsersLoggedIn.Keys)
            {
                userInfo = UsersLoggedIn[sessionID];
                if ((userInfo.LastLoginTime - DateTime.Now).Hours > 6)
                {
                    expiredSessions.Add(sessionID);
                }
            }

            foreach (string sessionID in expiredSessions)
            {
                RemoveSessionID(sessionID);
            }
            Thread.Sleep(60000);
            logger.Debug(EnumMethod.END);
        }
        //------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Verifies the session privileges.
        /// </summary>
        /// <param name="sessionID">The session ID.</param>
        /// <param name="priviledge">The priviledge.</param>
        /// <returns></returns>
        private static bool VerifySessionPrivileges(string sessionID, string priviledge)
        {
            logger.Debug(EnumMethod.START);
            PMAUserInfo userInfo = null;
            bool        result   = false;

            if ((userInfo = userManager.GetUserInfo(sessionID)) != null)
            {
                switch (priviledge)
                {
                case PRIVILEGE_ACTION:
                    result = userInfo.IsActionUser;
                    break;

                case PRIVILEGE_SERVICE:
                    result = userInfo.IsServiceUser;
                    break;

                case PRIVILEGE_SQL:
                    result = userInfo.IsSQLUser;
                    break;

                case PRIVILEGE_TASK_MANAGER_VIEW:
                    result = true;
                    break;

                case PRIVILEGE_TASK_MANAGER_ADMIN:
                    result = userInfo.IsTaskManagerAdminUser;
                    break;

                default:
                    result = false;
                    break;
                }
            }
            logger.Debug(EnumMethod.END);
            return(result);
        }