Users.cs 15 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MongoDB.Driver;
using MongoDB.Bson;
using AIAHTML5.API.Properties;
using AIAHTML5.API.Constants;
using log4net;
using AIAHTML5.API.Models;
using Newtonsoft.Json;
using System.Collections;

namespace AIAHTML5.API.Models
{
    public class Users
    {
        internal static dynamic GetUserDetailsForAuthenticatedUser(Newtonsoft.Json.Linq.JObject credentials)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug("inside AuthenticateUser for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString());
            dynamic userDetails = null;

            try
            {
                User user = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());
                //string userDetails = DBModel.GetUserDetailsByLoginId2(credentials["username"].ToString());

                if (user != null)
                {
                    logger.Debug("userDetails.loginId= " + user.LoginId); // .loginId);

                    userDetails = JsonConvert.SerializeObject(user);
                }
                else
                {
                    userDetails = AIAConstants.USER_NOT_FOUND;
                }

            }
            catch (Exception e)
            {

                logger.Fatal("Exception in AuthenticateUser for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);

                //string errorMessage = AIAConstants.ERROR_IN_FECTHING_DETAILS;
                //string error = "Message: " + e.Message + ", STACKTRACE: " + e.StackTrace;
                //userDetails = errorMessage;

                ArrayList supportMailList = UserUtility.GetSupportMailList();
                string mailSubject = "SQL Exception intimation mail";
                string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
                UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);

                userDetails = AIAConstants.SQL_CONNECTION_ERROR;
            }
            return userDetails;
        }

        internal static dynamic GetUserByEmail(Newtonsoft.Json.Linq.JObject userInfo)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug(" inside GetUserByEmail for emailId = " + userInfo["emailId"]);
            //var client = new MongoClient();

            //try
            //{

            //    var db = client.GetDatabase(Settings.Default.database);

            //    var collection = db.GetCollection<dynamic>("Users");

            //    FilterDefinition<dynamic> filterCondition = Builders<dynamic>.Filter.Eq("emailId", userInfo["emailId"].ToString().ToLower());

            //    dynamic userDetails = collection.Find(Builders<dynamic>.Filter.And(filterCondition)).SingleOrDefault();
            //    if (userDetails != null)
            //    {
            //        logger.Debug("userDetails= " + userDetails.loginId);

            //        return userDetails;
            //    }
            //    else
            //    {
            //        logger.Debug("user not found");
            //        return AIAConstants.USER_NOT_FOUND;
            //    }
            //}
            //catch (Exception e)
            //{
            //    logger.Fatal("Exception= " + e.Message+", stacktrace = "+e.StackTrace);
            //    return AIAConstants.ERROR_IN_FECTHING_DETAILS;
            //}

            try
            {
                User objUser = DBModel.GetUserDetailsByEmailId(userInfo["emailId"].ToString());

                //dynamic userDetails;

                if (objUser != null)
                {
                    logger.Debug("userDetails.loginId= " + objUser.LoginId);
                    //return userDetails = JsonConvert.SerializeObject(objUser);
                    return objUser;
                }
                else
                {
                    return AIAConstants.USER_NOT_FOUND;
                }
            }
            catch (Exception ex)
            {
                logger.Fatal("Exception in Gettting UserDetailsByEmailId for EmailId =" + userInfo["emailId"].ToString() + " Exception= " + ex.Message + ", STACKTRACE: " + ex.StackTrace);

                //string errorMessage = AIAConstants.ERROR_IN_FECTHING_DETAILS;
                //return errorMessage;

                ArrayList supportMailList = UserUtility.GetSupportMailList();
                string mailSubject = "SQL Exception intimation mail";
                string mailBody = "MESSAGE: " + ex.Message + ", STACKTRACE: " + ex.StackTrace;
                UserUtility.SendEmail(userInfo, supportMailList, "", mailSubject, mailBody);

                return AIAConstants.SQL_CONNECTION_ERROR;
            }


        }

        internal static dynamic UpdatePassword(Newtonsoft.Json.Linq.JObject userInfo, string sLoginId, string sEmailId)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            //var client = new MongoClient();
            try
            {
                //var db = client.GetDatabase(Settings.Default.database);
                //var collection = db.GetCollection<BsonDocument>("Users");
                //var filter = Builders<BsonDocument>.Filter.Eq("emailId", userInfo["emailId"].ToString());
                //var update = Builders<BsonDocument>.Update.Set("password", userInfo["newPassword"].ToString()).CurrentDate("modifiedDate");

                //var result = collection.UpdateOne(filter, update);

                int result = DBModel.UpdateUserPassword(userInfo, sLoginId, sEmailId);

                if (result > 0)
                    return result;
                else
                    return AIAConstants.USER_NOT_FOUND;
            }
            catch (Exception e)
            {
                logger.Fatal("Exception in UdatePassword with user details = " + userInfo + ", LoginId:" + sLoginId + ", EmailId: "+ sEmailId + "<br/>MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace);
                //return AIAConstants.ERROR_IN_FECTHING_DETAILS;

                ArrayList supportMailList = UserUtility.GetSupportMailList();
                string mailSubject = "SQL Exception intimation mail";
                string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
                UserUtility.SendEmail(userInfo, supportMailList, "", mailSubject, mailBody);

                return AIAConstants.SQL_CONNECTION_ERROR;
            }
        }

        internal static dynamic UpdateLicenseTerm(Newtonsoft.Json.Linq.JObject userLicenseInfo)
        {
            ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
            logger.Debug(" inside UpdateLicenseTerm for AccountNumber = " + userLicenseInfo["licenseeAccountNumber"].ToString() + ", LicenseId: " + userLicenseInfo["userLicenseId"].ToString());
            Newtonsoft.Json.Linq.JObject userInfo = new Newtonsoft.Json.Linq.JObject();

            dynamic result;
            string accountNumber = userLicenseInfo["licenseeAccountNumber"].ToString();

            userInfo.Add("accountNumber", accountNumber);

            try
            {
                result = DBModel.UpdateLicenseTermStatus(accountNumber);

                if (result < 0)
                {
                    logger.Fatal("Unable to update LicenseTermAccepted status for AccountNumber =" + accountNumber);
                }
            }
            catch (Exception ex)
            {
                logger.Fatal("Exception in UpdateLicenseTerm for AccountNumber =" + accountNumber + " Exception= " + ex.Message + ", STACKTRACE: " + ex.StackTrace);

                ArrayList supportMailList = UserUtility.GetSupportMailList();
                string mailSubject = "SQL Exception intimation mail";
                string mailBody = "MESSAGE: " + ex.Message + ", STACKTRACE: " + ex.StackTrace;
                UserUtility.SendEmail(userInfo, supportMailList, "", mailSubject, mailBody);

                result = AIAConstants.SQL_CONNECTION_ERROR;
            }


            return result;
        }

        internal static bool IsUserAuthenticated(Newtonsoft.Json.Linq.JObject credentials, User user)
        {
            bool isAuthenticatedUser = DBModel.ValidateUserAuthenticity(credentials["username"].ToString(), credentials["password"].ToString(), user);

            return isAuthenticatedUser;
        }

        internal static User getUserDetails(Newtonsoft.Json.Linq.JObject credentials)
        {
            User user = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());

            return user;
        }

        internal static void getLicenseIdForThisUser(int userId, out int licenseId, out int editionId)
        {
            //assigning below variable to avoid compiler error for unassignd out params
            licenseId = 0;
            editionId = 0;            

            ArrayList arrLicense = new ArrayList();
            DBModel objModel = new DBModel();
            Hashtable licenseEditionHash = objModel.GetLicenseDetailByUserId(userId);
            foreach (DictionaryEntry de in licenseEditionHash)
            {
                if (de.Key.ToString() == AIAConstants.LICENSE_KEY_ID)
                    licenseId = Convert.ToInt32(de.Value);
                if (de.Key.ToString() == AIAConstants.EDITION_KEY_ID)
                    editionId = Convert.ToInt32(de.Value);
            }
        }

        internal static int insertLoginDetails(int userId)
        {
            int result = 0;
            DBModel objModel = new DBModel();

            result = objModel.InsertLoginDetails(userId);

            return result;
        }

        internal static bool isUSerActive(User user)
        {
            if (user.IsActive)
                return true;
            else
                return false;
        }

        internal static bool checkIfLicenseExpired(LicenseSubscriptionDetails subscriptionDetail, out string expirationDate)
        {
            expirationDate = string.Empty;
            bool isLicenseExpired = false;

            if (subscriptionDetail != null)
            {
                DateTime? subscriptionValidThrough = subscriptionDetail.SubscriptionValidThrough;
                if (subscriptionValidThrough != null && subscriptionValidThrough.Value.Date >= DateTime.Now.Date)
                {
                    isLicenseExpired = false;
                }
                else
                {
                    isLicenseExpired = true;
                    expirationDate = subscriptionDetail.SubscriptionValidThrough.Value.Date.ToString("MM/dd/yyyy").ToString();
                }                
            }
            return isLicenseExpired;
        }

        internal static ArrayList getModuleListByLicenseId(int licenseId)
        {
            DBModel objModel = new DBModel();
            ArrayList licensedModulesList = objModel.GetUserModulesByLicenseId(licenseId);

            return licensedModulesList;
        }

        internal static int deletePastWrongAttempts(int userId)
        {
            int result = 0;
            DBModel objModel = new DBModel();

            result = objModel.DeleteIncorrectLoginAttempts(userId);

            return result;
        }

        internal static int checkNoOfWrongAttempts(int userId)
        {
            int result = 0;
            DBModel objModel = new DBModel();

            result = objModel.GetIncorrectLoginAttempts(userId);

            return result;
        }

        internal static int saveWrongAttemptofUser(int userId)
        {
            int wrongAttemptCount = Users.checkNoOfWrongAttempts(userId);
            int result = 0;
            DBModel objModel = new DBModel();

            if (wrongAttemptCount < 1)
            {
                result = objModel.InsertIncorrectLoginAttempts(userId);
            }
            else
            {
                result = objModel.UpdateIncorrectLoginAttempts(userId);
            }

            return result;
        }

        internal static bool isLicenseActive(int licenseId)
        {
            DBModel objModel = new DBModel();
            License userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);

            if (userLicense.IsActive)
                return true;
            else
                return false;
        }

        internal static License getLicenseDetails(int licenseId)
        {
            DBModel objModel = new DBModel();
            License userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);

            return userLicense;
        }

        internal static LicenseSubscriptionDetails getLicenseSubscriptionDetails(int licenseId)
        {
            DBModel objModel = new DBModel();
            LicenseSubscriptionDetails userSubscriptionDetail = objModel.GetLicenseSubscriptionDetailsByLicenseId(licenseId);

            return userSubscriptionDetail;
        }

        internal static void isCredentialCorrect(Newtonsoft.Json.Linq.JObject credentials, out bool isCorrectLoginId, out bool isCorrectPassword)
        {
            isCorrectLoginId = false;
            isCorrectPassword = false;

            User userInfo = Users.getUserDetails(credentials);

            if (userInfo != null)
            {
                if (string.Equals(credentials["username"].ToString().ToUpper(), userInfo.LoginId.ToUpper()))
                    isCorrectLoginId = true;

                if (string.Equals(credentials["password"].ToString(), userInfo.Password))
                {
                    isCorrectPassword = true;
                }
            }
        }

        internal static int insertUserLoginLog(string accountNumber, Int16 failureId, string referalUrl, string edition, string httpReferer)
        {
            int result = 0;
            DBModel objModel = new DBModel();
            result = objModel.InsertUserLoginLog(accountNumber, failureId, null, edition, null);

            return result;
        }


        internal static ArrayList getTermsOfServiceText()
        {
            ArrayList arrTermsOfService = new ArrayList(); 
            DBModel objModel = new DBModel();
            arrTermsOfService = DBModel.GetTermsOfServiceText();

            return arrTermsOfService;
        }

        internal static ArrayList getAllModulesList()
        {
            DBModel objModel = new DBModel();
            ArrayList modulesList = objModel.GetAllModules();

            return modulesList;
        }
    }
}