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; using System.Data.SqlClient; using System.Net; using System.Data; using AIAHTML5.API.Constants; namespace AIAHTML5.API.Models { public class Users { private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); internal static dynamic GetUserDetailsForAuthenticatedUser(Newtonsoft.Json.Linq.JObject credentials) { logger.Debug("inside AuthenticateUser for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString()); dynamic userDetails = null; 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; } return userDetails; } internal static dynamic GetUserByEmail(Newtonsoft.Json.Linq.JObject userInfo) { logger.Debug(" inside GetUserByEmail for emailId = " + userInfo["emailId"]); 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; } } internal static dynamic UpdatePassword(Newtonsoft.Json.Linq.JObject userInfo, string sLoginId, string sEmailId) { int result = DBModel.UpdateUserPassword(userInfo, sLoginId, sEmailId); return result; } internal static dynamic UpdateLicenseTerm(Newtonsoft.Json.Linq.JObject userLicenseInfo) { 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); result = DBModel.UpdateLicenseTermStatus(accountNumber); if (result < 0) { logger.Fatal("Unable to update LicenseTermAccepted status for AccountNumber =" + accountNumber); } return result; } internal static bool checkUserAuthenticity(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) { logger.Debug("inside getUserDetails for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString()); User userDetails = null; userDetails = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString()); return userDetails; } internal static void getLicenseIdForThisUser(int userId, out int licenseId, out int editionId, out int LicenseEditionId) { logger.Debug("inside getLicenseIdForThisUser for UserId =" + userId); //assigning below variable to avoid compiler error for unassignd out params licenseId = 0; editionId = 0; LicenseEditionId = 0; DBModel objModel = new DBModel(); Hashtable licenseEditionHash = objModel.GetLicenseDetailByUserId(userId); if (licenseEditionHash.ContainsKey(AIAConstants.LICENSE_KEY_ID)) licenseId = Convert.ToInt32(licenseEditionHash[AIAConstants.LICENSE_KEY_ID]); if (licenseEditionHash.ContainsKey(AIAConstants.EDITION_KEY_ID)) editionId = Convert.ToInt32(licenseEditionHash[AIAConstants.EDITION_KEY_ID]); if (licenseEditionHash.ContainsKey("LicenseEditionId")) LicenseEditionId = Convert.ToInt32(licenseEditionHash["LicenseEditionId"]); } internal static int insertLoginDetails(int userId) { logger.Debug("inside insertLoginDetails for UserId =" + 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 checkIfLicenseNotStarted(LicenseSubscriptionDetails subscriptionDetail, out string startDate) { startDate = string.Empty; bool IsSubscriptionNotStart = false; // validate stat date for new license if (subscriptionDetail != null && subscriptionDetail.RenewalDate==null) { DateTime? SubscriptionValidFrom = subscriptionDetail.SubscriptionValidFrom; if (SubscriptionValidFrom != null && SubscriptionValidFrom.Value.Date <= DateTime.Now.Date) { IsSubscriptionNotStart = false; } else { IsSubscriptionNotStart = true; startDate = subscriptionDetail.SubscriptionValidFrom.Value.Date.ToString("MM/dd/yyyy").ToString(); } } return IsSubscriptionNotStart; } 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) { logger.Debug("inside getModuleListByLicenseId for LicenseId =" + licenseId); ArrayList licensedModulesList = new ArrayList(); DBModel objModel = new DBModel(); licensedModulesList = objModel.GetUserModulesByLicenseId(licenseId); return licensedModulesList; } internal static int deletePastWrongAttempts(int userId) { logger.Debug("inside deletePastWrongAttempts for UserId =" + userId); int result = 0; DBModel objModel = new DBModel(); result = objModel.DeleteIncorrectLoginAttempts(userId); return result; } internal static int checkNoOfWrongAttempts(int userId) { logger.Debug("inside checkNoOfWrongAttempts for UserId =" + userId); int incorrectLoginAttemptCount = 0; DBModel objModel = new DBModel(); incorrectLoginAttemptCount = objModel.GetIncorrectLoginAttempts(userId); return incorrectLoginAttemptCount; } internal static int saveWrongAttemptOfUser(int userId, int previousIncorrectLoginAttempts) { logger.Debug("inside saveWrongAttemptofUser for UserId =" + userId); int result = 0; DBModel objModel = new DBModel(); if (previousIncorrectLoginAttempts < 1) { result = objModel.InsertIncorrectLoginAttempts(userId); } else { result = objModel.UpdateIncorrectLoginAttempts(userId); } return result; } internal static bool isLicenseActive(int licenseId) { logger.Debug("inside isLicenseActive for LicenseId =" + licenseId); bool result = false; DBModel objModel = new DBModel(); License userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId); if (userLicense.IsActive) result = true; else result = false; return result; } internal static License getLicenseDetails(int licenseId) { logger.Debug("inside getLicenseDetails for LicenseId =" + licenseId); License userLicense = null; DBModel objModel = new DBModel(); userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId); return userLicense; } internal static LicenseSubscriptionDetails getLicenseSubscriptionDetails(int licenseId) { logger.Debug("inside getLicenseSubscriptionDetails for LicenseId =" + licenseId); LicenseSubscriptionDetails userSubscriptionDetail = null; DBModel objModel = new DBModel(); userSubscriptionDetail = objModel.GetLicenseSubscriptionDetailsByLicenseId(licenseId); return userSubscriptionDetail; } internal static LicenseUserExportedImageDetail getExportedImageDetail(int licenseId) { logger.Debug("inside getLicenseDetails for LicenseId =" + licenseId); LicenseUserExportedImageDetail imageDetail = null; DBModel objModel = new DBModel(); imageDetail = objModel.GetLicenseUserExportImageDetail(licenseId); return imageDetail; } internal static int InsertExportedImageDetail(LicenseUserInsertImageDetail imageDetail) { logger.Debug("inside InsertExportedImageDetail for Image =" + imageDetail.ImageName); int result = 0; DBModel objModel = new DBModel(); result = objModel.LicenseUserInsertExportedImageDetail(imageDetail); return result; } internal static BypassLogin ByPassLoginDetail(string loginId, string accountNumber) { BypassLogin objUser = null; objUser = DBModel.ByPassLoginDetail(loginId, accountNumber); return objUser; } internal static string GetUserLoginStatus(int userId, string tagName, long SessionId, bool isSiteUser,bool isAdmin) { string status = null; status = DBModel.GetUserLoginStatus(userId, tagName, SessionId, isSiteUser, isAdmin); return status; } internal static int ValidateAodAthenticationStatus(long SessionId, string aiaConfigKey, string aodpasskey, string CourseId) { int status = 0; status = DBModel.ValidateAodAthenticationStatus(SessionId, aiaConfigKey, aodpasskey, CourseId); return status; } internal static int SaveUserSelectedSettings(User selectedSettings) { logger.Debug("inside SaveUserSelectedSettings for Image =" + selectedSettings.Id); int result = 0; DBModel objModel = new DBModel(); result = objModel.SaveSettings(selectedSettings); return result; } internal static User GetUserSelectedSettings(int userId,bool isSiteUser, out string skintone, out string modesty) { logger.Debug("inside GetUserSelectedSettings for userid =" + userId); skintone = null; modesty = null; DBModel objModel = new DBModel(); User result = objModel.GetSelectedSettings(userId, isSiteUser); if (result != null) { skintone = result.userSelectedSkintone; modesty = result.userselectedModesty; } return result; } internal static void isCredentialCorrect(Newtonsoft.Json.Linq.JObject credentials, User userInfo, out bool isCorrectLoginId, out bool isCorrectPassword) { isCorrectLoginId = false; isCorrectPassword = false; if (userInfo.Id > 0) { 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) { logger.Debug("inside insertUserLoginLog for accountNumber =" + accountNumber); int result = 0; DBModel objModel = new DBModel(); result = objModel.InsertUserLoginLog(accountNumber, failureId, null, edition, null); return result; } internal static ArrayList getTermsAndConditions() { logger.Debug("inside getTermsOfServiceText"); ArrayList arrTermsOfService = new ArrayList(); DBModel objModel = new DBModel(); arrTermsOfService = DBModel.GetTermsAndConditions(); return arrTermsOfService; } internal static ArrayList getAllModulesList() { logger.Debug("inside getAllModulesList"); ArrayList modulesList = new ArrayList(); DBModel objModel = new DBModel(); modulesList = objModel.GetAllModules(); return modulesList; } internal static bool checkUserBlockStatus(int userId, out DateTime blockTime) { logger.Debug("inside isUserBlocked for UserId =" + userId); bool isUserBlocked = false; blockTime = new DateTime(); DBModel objModel = new DBModel(); BlockedUser blockedUser = objModel.GetUserBlockedStatusByUserId(userId); if (blockedUser != null) { blockTime = blockedUser.LoginTime; isUserBlocked = true; } else isUserBlocked = false; return isUserBlocked; } public static int ValidateLicenseSiteIP(string strLicenseSiteIP, string remoteIpAddress, string strAccountNumber, byte editionId) { if (strLicenseSiteIP == null) strLicenseSiteIP = remoteIpAddress; int intReturn = 0; DBModel objDBModel = new DBModel(); DataTable dtLicense = objDBModel.GetLicenseInfoBySiteUrl(strAccountNumber, (byte)editionId); if (dtLicense.Rows.Count > 0) { //strLicenseSiteIP String strSiteIP = ""; String strSiteIPTo = ""; String strSiteMIPTo = ""; IPAddress[] arrHostIP = new IPAddress[2]; try { arrHostIP.SetValue(IPAddress.Parse(remoteIpAddress), 0); arrHostIP.SetValue(IPAddress.Parse(strLicenseSiteIP), 1); } catch (Exception e) { //NOTE: if no domain name found we try to resolve by IP. //arrHostIP.SetValue(Dns.GetHostAddresses(strLicenseSiteIP),1); //I SHould remove this feature it is useless }; // foreach (IPAddress address in arrHostIP) foreach (IPAddress address in arrHostIP) { if (address == null) continue; String ipStr = address.ToString(); if (ipStr == "::1" || ipStr == "") continue; foreach (DataRow objLicenseRow in dtLicense.Rows) { strSiteIP = (String.IsNullOrEmpty(objLicenseRow["SiteIp"].ToString()) ? "" : objLicenseRow["SiteIp"].ToString()); strSiteIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteIPTo"].ToString()) ? "" : objLicenseRow["SiteIPTo"].ToString()); //if (String.IsNullOrEmpty(objLicenseRow.SiteIPTo) == false) //strSiteIPTo = objLicenseRow.SiteIPTo; strSiteMIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteMasterIPTo"].ToString()) ? "" : objLicenseRow["SiteMasterIPTo"].ToString()); if (IPValidator.ValidateIP(strSiteIP.ToLower(), strSiteIPTo.ToLower(), strSiteMIPTo.ToLower(), ipStr.ToLower(), Convert.ToInt16(objLicenseRow["IsMaster"])) == true) { intReturn = Convert.ToInt32(objLicenseRow["Id"]); return intReturn; } } } if (IPValidator.IsNumericIP(strLicenseSiteIP) == false) { foreach (DataRow objLicenseRow in dtLicense.Rows) { strSiteIP = (String.IsNullOrEmpty(objLicenseRow["SiteIp"].ToString()) ? "" : objLicenseRow["SiteIp"].ToString()); // strSiteIPTo = (String.IsNullOrEmpty(objLicenseRow.SiteIPTo) ? "" : objLicenseRow.SiteIPTo); if (String.IsNullOrEmpty(objLicenseRow["SiteIPTo"].ToString()) == false) strSiteIPTo = objLicenseRow["SiteIPTo"].ToString(); strSiteMIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteMasterIPTo"].ToString()) ? "" : objLicenseRow["SiteMasterIPTo"].ToString()); // if provided ip is not numeric, then compare directly with all the fields if ((strLicenseSiteIP.ToLower() == strSiteIP.ToLower()) || (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteIP).ToLower()) || (strLicenseSiteIP.ToLower() == strSiteIPTo.ToLower()) || (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteIPTo).ToLower()) || (strLicenseSiteIP.ToLower() == strSiteMIPTo.ToLower()) || (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteMIPTo).ToLower())) { intReturn = Convert.ToInt32(objLicenseRow["Id"]); return intReturn; } } } } return intReturn; } public static User ValidateSiteLogin(String strSiteIP, String strAcccountNumber, String strUrlReferer, string strEdition, int intSiteId) { User userInfo = null; string expirationDate = null; bool isLicenseExpired = false; // validate license start date string startDate = null; bool isSubscriptionNotStart = false; int intLicenseId = 0; DateTime dtLogDate = DateTime.Now; if (string.IsNullOrEmpty(strAcccountNumber)) { userInfo.LoginFailureCauseId = ErrorHelper.E_ACCOUNT_NUMBER_NOT_NULL; } else if (string.IsNullOrEmpty(strEdition)) { strEdition = "0"; userInfo.LoginFailureCauseId = ErrorHelper.E_EDITION_ID_NOT_NULL; } else { int intEditionId = Convert.ToInt16(strEdition); DBModel objDBModel = new DBModel(); DataTable dtLicense = objDBModel.GetLicenseBySiteId(intSiteId, intEditionId); if (dtLicense.Rows.Count > 0) { DataRow licRow = dtLicense.Rows[0]; userInfo = new User(); userInfo.LicenseInfo = AIAHTML5.API.Models.Users.getLicenseDetails(Convert.ToInt32(licRow["Id"])); if (userInfo.LicenseInfo != null) { //05.3 get licenseSubscription details userInfo.LicenseSubscriptions = AIAHTML5.API.Models.Users.getLicenseSubscriptionDetails( userInfo.LicenseInfo.Id); //05.4 check the License expiration irespective of either user is active or not because on AIA //we shows the License expiration message for inactive users too if (userInfo.LicenseSubscriptions != null) { isSubscriptionNotStart = AIAHTML5.API.Models.Users.checkIfLicenseNotStarted(userInfo.LicenseSubscriptions, out startDate); isLicenseExpired = AIAHTML5.API.Models.Users.checkIfLicenseExpired(userInfo.LicenseSubscriptions, out expirationDate); } if (Convert.ToBoolean(licRow["IsActive"]) != true) { userInfo.LoginFailureCauseId = ErrorHelper.LICENSE_INACTIVE; } else if(isLicenseExpired) { userInfo.LoginFailureCauseId = ErrorHelper.LICENSE_EXPIRED; userInfo.SubscriptionExpirationDate = expirationDate; } else if (isSubscriptionNotStart) { userInfo.LoginFailureCauseId = ErrorHelper.LICENSE_NOTSTARTED; userInfo.SubscriptionStartDate = startDate; } else { //User objUserContext = new User(); userInfo.Id = 0; userInfo.siteId = intSiteId; userInfo.isSiteUser = true; userInfo.FirstName = licRow["LicenseeFirstName"].ToString(); userInfo.LastName = licRow["LicenseeLastName"].ToString(); userInfo.UserTypeId = AIAConstants.SITE_USER; if (licRow["EmailId"].ToString() != null) { userInfo.EmailId = licRow["EmailId"].ToString(); } else { userInfo.EmailId = null; } userInfo.AccountNumber = strAcccountNumber; userInfo.EditionId = (Byte)intEditionId; userInfo.LicenseTypeId = (byte)licRow["LicenseTypeId"]; userInfo.LicenseId = Convert.ToInt32(licRow["Id"]); userInfo.LicenseEditionId = Convert.ToInt32(licRow["LicenseEditionId"]); userInfo.LoginId = ""; userInfo.Modesty = (bool)licRow["IsModesty"]; //Retreive ModestyMode userInfo.ModestyMode = false; intLicenseId = Convert.ToInt32(licRow["Id"]); DataTable dtblEditionForModesty = new DBModel().GetEditionsForModesty(userInfo.LicenseId, 0); //This table result set should return always have 0 or 1 record if modesty mode is present. foreach (DataRow drEditionForModesty in dtblEditionForModesty.Rows) { if ((bool)drEditionForModesty["IsModesty"]) { userInfo.Modesty = true; userInfo.ModestyMode = true; } } string skintone; string modesty; User us =GetUserSelectedSettings(userInfo.siteId,true, out skintone, out modesty); if (us != null) { userInfo.userselectedModesty = modesty; userInfo.userSelectedSkintone = skintone; userInfo.userLexicon = us.userLexicon; } else { userInfo.userselectedModesty = null; userInfo.userSelectedSkintone = null; userInfo.userLexicon = null; } // get edition features details userInfo.objEditionFeatures = objDBModel.GetEditionFeatures((Byte)intEditionId); if (intLicenseId > 0) userInfo.Modules = getModuleListByLicenseId(intLicenseId); else userInfo.Modules = getAllModulesList(); // get exported image detail userInfo.UserExportImageDetail = getExportedImageDetail(userInfo.LicenseId); // insert login details objDBModel.InsertSiteLoginDetails(strAcccountNumber, strSiteIP, strEdition); } } else { userInfo.LoginFailureCauseId = ErrorHelper.E_EDITION_NOT_LINKED_WITH_SITE; } } } return userInfo; } internal static Boolean IsModestyActiveForThisLicense(int LicenseId, Int16 editionId) { DBModel objModel = new DBModel(); bool IsModestyOn = objModel.GetModestyInfo(LicenseId,editionId); return IsModestyOn; } } }