using Common; using Common.Helper; using Common.Model; using Common.Model.Config; using Common.Model.Enum; using log4net; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Runtime.Remoting.Messaging; using System.Text; using JsonRx.Helper; namespace Repository.Authentication { public class AuthenticationRepo : IAuthenticationRepo { private readonly Dao _dao = new Dao(); private static readonly ILog Log = LogManager.GetLogger(typeof(AuthenticationRepo)); /// /// Check for client validity. /// /// /// public DbResult IsMapAPIWithOtherApp(ClientRegistrationKeys credentials) { var sql = "EXEC mobile_proc_GmeApiClientRegistration @flag='chk-client'"; sql += ", @clientId = " + _dao.FilterString(credentials.clientId); sql += ", @secret = " + _dao.FilterString(credentials.secret); // Log.DebugFormat("Repository.AuthenticationRepo.IsMapAPIWithOtherApp | Requested parameters : {0}, SQL:{1}", credentials.ToString(), sql); return _dao.ParseDbResult(sql); } /// /// Method allow to enter into the system. Check for user exists, Generates accesscode /// /// /// public LoginResponse LoginSystem(LoginCredential credentials) { var lang = Convert.ToString(CallContext.GetData(Constants.Language)); LoginResponse ls = null; var sql = "EXEC mobile_proc_userLogin @flag='l'"; sql += ", @userName = " + _dao.FilterString(credentials.userId); sql += ", @password = " + _dao.FilterString(credentials.password); sql += ", @Imei = " + _dao.FilterString(credentials.uuid); sql += ", @accessCode = " + _dao.FilterString(credentials.AccessGuid); sql += ", @clientId = " + _dao.FilterString(credentials.clientId); sql += ", @fcmid = " + _dao.FilterString(credentials.fcmId); sql += ", @isBiometricLogin = " + _dao.FilterString(credentials.IsBiometricLogin.ToString()); sql += ", @biometricLoginType = " + _dao.FilterString(credentials.BiometricLoginType.ToString()); sql += ", @deviceType = " + _dao.FilterString(string.IsNullOrEmpty(credentials.DeviceType) ? "" : credentials.DeviceType.ToString()); sql += ", @accessToken = " + _dao.FilterString(string.IsNullOrEmpty(credentials.accessCode) ? "" : credentials.accessCode.ToString()); sql += ", @residenceType = " + _dao.FilterString(credentials.CustomerType.ToString()); Log.Debug("LoginSystem | SQL : " + sql); var dataTable = _dao.ExecuteDataTable(sql); if (dataTable.Rows[0]["errorCode"].Equals("0")) { var ios = ConfigurationManager.AppSettings["IosUpdate"].ToString().Split('-'); var iosInfo = ConfigurationManager.AppSettings["IosUpdateInfo"].ToString(); var android = ConfigurationManager.AppSettings["AndroidUpdate"].ToString().Split('-'); var androidInfo = ConfigurationManager.AppSettings["AndroidUpdateInfo"].ToString(); IList app = new List(); app.Add(new AppUpdate { OS = "IOS", Build = ios[0], Version = ios[1], Critical = ios[2], Info = iosInfo }); app.Add(new AppUpdate { OS = "ANDROID", Build = android[0], Version = android[1], Critical = android[2], Info = androidInfo }); //var dpStr = dataTable.Rows[0]["dpUrl"].ToString(); //var fileInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["dpUrl"].ToString()); var userIdInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["userId"].ToString()); var moduleInBytes = Encoding.UTF8.GetBytes("kyc"); ls = new LoginResponse { ErrorCode = dataTable.Rows[0]["errorCode"].ToString(), userId = dataTable.Rows[0]["userId"].ToString(), senderId = dataTable.Rows[0]["SenderId"].ToString(), firstName = dataTable.Rows[0]["firstName"].ToString(), // middleName = dataTable.Rows[0]["middleName"].ToString(), lastName = // dataTable.Rows[0]["lastName"].ToString(), nickName = dataTable.Rows[0]["nickName"].ToString(), email = dataTable.Rows[0]["email"].ToString(), customerEmail = dataTable.Rows[0]["customerEmail"].ToString(), mobileNumber = dataTable.Rows[0]["phone"].ToString(), // rewardPoint = dataTable.Rows[0]["rewardPoint"].ToString(), active = dataTable.Rows[0]["active"].ToString().ToBoolean(), kyc = dataTable.Rows[0]["kyc"].ToString().ToBoolean(), verified = dataTable.Rows[0]["verified"].ToString().ToBoolean(), walletNumber = dataTable.Rows[0]["walletNumber"].ToString(), availableBalance = dataTable.Rows[0]["availableBalance"].ToString(), primaryBankName = dataTable.Rows[0]["primaryBankName"].ToString(), accessCode = dataTable.Rows[0]["accessCode"].ToString(), // cmRegistrationId = dataTable.Rows[0]["cmRegistrationId"].ToString(), dpUrl = // !(string.IsNullOrEmpty(dpStr)) ? ApplicationConfig.GetRootURL() + // "handler/docs.ashx?img=" + Convert.ToBase64String(fileInBytes) + "&userId=" + // Convert.ToBase64String(userIdInBytes) + "&module=" + // Convert.ToBase64String(moduleInBytes) : null, country = dataTable.Rows[0]["country"].ToString(), // province = dataTable.Rows[0]["province"].ToString(), provinceId = dataTable.Rows[0]["provinceId"].ToString(), // isReferred = Convert.ToBoolean(dataTable.Rows[0]["isReferred"]), sourceId = dataTable.Rows[0]["sourceId"].ToString(), // idType = dataTable.Rows[0]["idType"].ToString(), //idNumber = dataTable.Rows[0]["idNumber"].ToString(), countryCode = dataTable.Rows[0]["countryCode"].ToString(), yearlyLimit = Convert.ToString(dataTable.Rows[0]["yearlyLimit"]), // primaryBankAccount = Convert.ToString(dataTable.Rows[0]["primaryBankAccount"]), pennyTestStatus = Convert.ToString(dataTable.Rows[0]["pennyTestStatus"]), kftcClientId = dataTable.Rows[0]["gmeClientId"].ToString(), redirectTo = dataTable.Rows[0]["redirectTo"].ToString(), isExistingCustomer =dataTable.Rows[0]["isExistingCustomer"].ToString().ToBoolean(), appUpdate = app, IsBiometricLogin =dataTable.Rows[0]["IsBiometricLogin"].ToString().ToBoolean(), BiometricLoginType = dataTable.Rows[0]["BiometricLoginType"].ToString(), //IsForcedPwdchange= dataTable.Rows[0]["IsForcedPwdChange"].ToString(), Extra = dataTable.Rows[0]["accessToken"].ToString(), }; var map = Utilities.GetLanguageMapping(RESPONSE_MSG.LOGIN_TO_SYSTEM_SUCCESS.ToString(), lang); ls.Msg = map.Message; } else { ls = new LoginResponse(); ls.ErrorCode = "1"; // ls.Msg = dataTable.Rows[0]["errorCode"] + Convert.ToString(dataTable.Rows[0]["msg"]); //return ls; string enumString = string.Empty; if (dataTable.Rows[0]["errorCode"].Equals("1")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_1.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("2")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_2.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("3")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_3.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("4")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_4.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("5")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_5.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("6")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_6.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("7")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_7.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("8")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_8.ToString(); } else if (dataTable.Rows[0]["errorCode"].Equals("20")) { enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_20.ToString(); } var map = Utilities.GetLanguageMapping(enumString, lang); return new LoginResponse { ErrorCode = dataTable.Rows[0]["errorCode"].Equals("0") ? "0" : "1", Msg = map.Message}; //ls.Msg = map.Message; } return ls; } /// /// Check for validity of access code during every request after login success and KYC /// verified. Implemented at token authentication. /// /// /// public string IsAccessCodeValid(string accessCode, string uuid) { var sql = "EXEC mobile_proc_userLogin @flag='chk-access-code'"; sql += ", @imei = " + _dao.FilterString(uuid); sql += ", @accessCode = " + _dao.FilterString(accessCode); Log.DebugFormat("Repository.AuthenticationRepo.IsAccessCodeValid | Requested parameters : {0}, SQL:{1}", "", sql); var dbRes = _dao.ParseDbResult(sql); if (!dbRes.ResponseCode.Equals("0")) { return null; } return dbRes.Id; } public DbResult ReSendVerificationCode(VerificationKeys keys) { var sql = "EXEC mobile_proc_userRegistration @flag='re-code'"; sql += ", @imei = " + _dao.FilterString(keys.uuid); sql += ", @username = " + _dao.FilterString(keys.userId); sql += ", @code = " + _dao.FilterString(keys.verificationCode); sql += ", @codeType = " + _dao.FilterString(keys.codeType); sql += ", @scope = " + _dao.FilterString(keys.scope); return _dao.ParseDbResult(sql); } public JsonRxResponse GetUser(string userId) { JsonRxResponse jsonRx = new JsonRxResponse { ErrorCode = "1", Msg = "Failed" }; var sql = "EXEC mobile_proc_customerMaster @flag='getUser'"; sql += ", @username = " + _dao.FilterString(userId); Log.DebugFormat("Repository.CustomerRepo.GetUser | Requested parameters : {0}, SQL:{1}", JsonConvert.SerializeObject(userId), sql); var dataTable = _dao.ExecuteDataTable(sql); if (dataTable != null) { if (Convert.ToString(dataTable.Rows[0]["errorCode"]) == "0") { var moduleInBytes = Encoding.UTF8.GetBytes("kyc"); var dpStr = dataTable.Rows[0]["dpUrl"].ToString(); var fileInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["dpUrl"].ToString()); var userIdInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["userId"].ToString()); var ursDetail = new UserDetail { userId = dataTable.Rows[0]["userId"].ToString(), firstName = dataTable.Rows[0]["firstName"].ToString(), middleName = dataTable.Rows[0]["middleName"].ToString(), lastName = dataTable.Rows[0]["lastName"].ToString(), nickName = dataTable.Rows[0]["nickName"].ToString(), mobileNumber = dataTable.Rows[0]["mobileNumber"].ToString(), email = dataTable.Rows[0]["email"].ToString(), verificationCode = string.IsNullOrEmpty(dataTable.Rows[0]["verificationCode"].ToString()) ? "" : Utilities.DecryptString(dataTable.Rows[0]["verificationCode"].ToString()), verificationCodeExpiryDate = Convert.ToString(dataTable.Rows[0]["verificationCodeExpiryDate"]), createdDate = Convert.ToString(dataTable.Rows[0]["createdDate"]), userRoles = dataTable.Rows[0]["userRoles"].ToString(), rewardPoint = dataTable.Rows[0]["rewardPoint"].ToString(), active = Convert.ToBoolean(dataTable.Rows[0]["isActive"]), kyc = Convert.ToBoolean(dataTable.Rows[0]["hasKyc"]), verified = Convert.ToBoolean(dataTable.Rows[0]["isVerified"]), forgetCode = string.IsNullOrEmpty(dataTable.Rows[0]["forgetCode"].ToString()) ? "" : Utilities.DecryptString(dataTable.Rows[0]["forgetCode"].ToString()), forgetCodeExpiryDate = Convert.ToString(dataTable.Rows[0]["forgetCodeExpiryDate"]), primaryBankName = dataTable.Rows[0]["primaryBankName"].ToString(), walletNumber = dataTable.Rows[0]["walletNumber"].ToString(), availableBalance = dataTable.Rows[0]["availableBalance"].ToString(), cmRegistrationId = dataTable.Rows[0]["cmRegistrationId"].ToString(), dpUrl = !(string.IsNullOrEmpty(dpStr)) ? ApplicationConfig.GetRootURL() + "handler/docs.ashx?img=" + Convert.ToBase64String(fileInBytes) + "&userId=" + Convert.ToBase64String(userIdInBytes) + "&module=" + Convert.ToBase64String(moduleInBytes) : null, yearlyLimit = Convert.ToString(dataTable.Rows[0]["yearlyLimit"]) }; jsonRx.ErrorCode = "0"; jsonRx.Msg = "success"; jsonRx.Data = ursDetail; return jsonRx; } } return jsonRx; } public bool ValidateAuthenticity(string user, string guid) { var dic = new Dictionary { { "@userName", _dao.FilterString(@user) }, { "@accessCode", _dao.FilterString(guid) } }; var sql = new Query("mobile_proc_userLogin", "ckeck-guid", dic).ToString(); Log.Debug(sql); var res = _dao.ParseDbResult(sql); if (res.ResponseCode.Equals(ErrorCode.Zero)) { return true; } else { return false; } } public string GetDevice(string customerId) { var dic = new Dictionary { { "@customerId", _dao.FilterString(customerId) } }; var sql = new Query("mobile_proc_userLogin", "get-device", dic).ToString(); Log.Debug(sql); var res = _dao.ExecuteDataRow(sql); return Convert.ToString(res["deviceId"]); } } }