You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
16 KiB

1 year ago
  1. using Common;
  2. using Common.Helper;
  3. using Common.Model;
  4. using Common.Model.Config;
  5. using Common.Model.Enum;
  6. using log4net;
  7. using Newtonsoft.Json;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Configuration;
  11. using System.Runtime.Remoting.Messaging;
  12. using System.Text;
  13. using JsonRx.Helper;
  14. namespace Repository.Authentication
  15. {
  16. public class AuthenticationRepo : IAuthenticationRepo
  17. {
  18. private readonly Dao _dao = new Dao();
  19. private static readonly ILog Log = LogManager.GetLogger(typeof(AuthenticationRepo));
  20. /// <summary>
  21. /// Check for client validity.
  22. /// </summary>
  23. /// <param name="credentials"></param>
  24. /// <returns></returns>
  25. public DbResult IsMapAPIWithOtherApp(ClientRegistrationKeys credentials)
  26. {
  27. var sql = "EXEC mobile_proc_GmeApiClientRegistration @flag='chk-client'";
  28. sql += ", @clientId = " + _dao.FilterString(credentials.clientId);
  29. sql += ", @secret = " + _dao.FilterString(credentials.secret);
  30. // Log.DebugFormat("Repository.AuthenticationRepo.IsMapAPIWithOtherApp | Requested parameters : {0}, SQL:{1}", credentials.ToString(), sql);
  31. return _dao.ParseDbResult(sql);
  32. }
  33. /// <summary>
  34. /// Method allow to enter into the system. Check for user exists, Generates accesscode
  35. /// </summary>
  36. /// <param name="credentials"></param>
  37. /// <returns></returns>
  38. public LoginResponse LoginSystem(LoginCredential credentials)
  39. {
  40. var lang = Convert.ToString(CallContext.GetData(Constants.Language));
  41. LoginResponse ls = null;
  42. var sql = "EXEC mobile_proc_userLogin @flag='l'";
  43. sql += ", @userName = " + _dao.FilterString(credentials.userId);
  44. sql += ", @password = " + _dao.FilterString(credentials.password);
  45. sql += ", @Imei = " + _dao.FilterString(credentials.uuid);
  46. sql += ", @accessCode = " + _dao.FilterString(credentials.AccessGuid);
  47. sql += ", @clientId = " + _dao.FilterString(credentials.clientId);
  48. sql += ", @fcmid = " + _dao.FilterString(credentials.fcmId);
  49. sql += ", @isBiometricLogin = " + _dao.FilterString(credentials.IsBiometricLogin.ToString());
  50. sql += ", @biometricLoginType = " + _dao.FilterString(credentials.BiometricLoginType.ToString());
  51. sql += ", @deviceType = " + _dao.FilterString(string.IsNullOrEmpty(credentials.DeviceType) ? "" : credentials.DeviceType.ToString());
  52. sql += ", @accessToken = " + _dao.FilterString(string.IsNullOrEmpty(credentials.accessCode) ? "" : credentials.accessCode.ToString());
  53. sql += ", @residenceType = " + _dao.FilterString(credentials.CustomerType.ToString());
  54. Log.Debug("LoginSystem | SQL : " + sql);
  55. var dataTable = _dao.ExecuteDataTable(sql);
  56. if (dataTable.Rows[0]["errorCode"].Equals("0"))
  57. {
  58. var ios = ConfigurationManager.AppSettings["IosUpdate"].ToString().Split('-');
  59. var iosInfo = ConfigurationManager.AppSettings["IosUpdateInfo"].ToString();
  60. var android = ConfigurationManager.AppSettings["AndroidUpdate"].ToString().Split('-');
  61. var androidInfo = ConfigurationManager.AppSettings["AndroidUpdateInfo"].ToString();
  62. IList<AppUpdate> app = new List<AppUpdate>();
  63. app.Add(new AppUpdate { OS = "IOS", Build = ios[0], Version = ios[1], Critical = ios[2], Info = iosInfo });
  64. app.Add(new AppUpdate { OS = "ANDROID", Build = android[0], Version = android[1], Critical = android[2], Info = androidInfo });
  65. //var dpStr = dataTable.Rows[0]["dpUrl"].ToString();
  66. //var fileInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["dpUrl"].ToString());
  67. var userIdInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["userId"].ToString());
  68. var moduleInBytes = Encoding.UTF8.GetBytes("kyc");
  69. ls = new LoginResponse
  70. {
  71. ErrorCode = dataTable.Rows[0]["errorCode"].ToString(),
  72. userId = dataTable.Rows[0]["userId"].ToString(),
  73. senderId = dataTable.Rows[0]["SenderId"].ToString(),
  74. firstName = dataTable.Rows[0]["firstName"].ToString(),
  75. // middleName = dataTable.Rows[0]["middleName"].ToString(), lastName =
  76. // dataTable.Rows[0]["lastName"].ToString(), nickName = dataTable.Rows[0]["nickName"].ToString(),
  77. email = dataTable.Rows[0]["email"].ToString(),
  78. customerEmail = dataTable.Rows[0]["customerEmail"].ToString(),
  79. mobileNumber = dataTable.Rows[0]["phone"].ToString(),
  80. // rewardPoint = dataTable.Rows[0]["rewardPoint"].ToString(),
  81. active = dataTable.Rows[0]["active"].ToString().ToBoolean(),
  82. kyc = dataTable.Rows[0]["kyc"].ToString().ToBoolean(),
  83. verified = dataTable.Rows[0]["verified"].ToString().ToBoolean(),
  84. walletNumber = dataTable.Rows[0]["walletNumber"].ToString(),
  85. availableBalance = dataTable.Rows[0]["availableBalance"].ToString(),
  86. primaryBankName = dataTable.Rows[0]["primaryBankName"].ToString(),
  87. accessCode = dataTable.Rows[0]["accessCode"].ToString(),
  88. // cmRegistrationId = dataTable.Rows[0]["cmRegistrationId"].ToString(), dpUrl =
  89. // !(string.IsNullOrEmpty(dpStr)) ? ApplicationConfig.GetRootURL() +
  90. // "handler/docs.ashx?img=" + Convert.ToBase64String(fileInBytes) + "&userId=" +
  91. // Convert.ToBase64String(userIdInBytes) + "&module=" +
  92. // Convert.ToBase64String(moduleInBytes) : null,
  93. country = dataTable.Rows[0]["country"].ToString(),
  94. // province = dataTable.Rows[0]["province"].ToString(),
  95. provinceId = dataTable.Rows[0]["provinceId"].ToString(),
  96. // isReferred = Convert.ToBoolean(dataTable.Rows[0]["isReferred"]),
  97. sourceId = dataTable.Rows[0]["sourceId"].ToString(),
  98. // idType = dataTable.Rows[0]["idType"].ToString(),
  99. //idNumber = dataTable.Rows[0]["idNumber"].ToString(),
  100. countryCode = dataTable.Rows[0]["countryCode"].ToString(),
  101. yearlyLimit = Convert.ToString(dataTable.Rows[0]["yearlyLimit"]),
  102. // primaryBankAccount = Convert.ToString(dataTable.Rows[0]["primaryBankAccount"]),
  103. pennyTestStatus = Convert.ToString(dataTable.Rows[0]["pennyTestStatus"]),
  104. kftcClientId = dataTable.Rows[0]["gmeClientId"].ToString(),
  105. redirectTo = dataTable.Rows[0]["redirectTo"].ToString(),
  106. isExistingCustomer =dataTable.Rows[0]["isExistingCustomer"].ToString().ToBoolean(),
  107. appUpdate = app,
  108. IsBiometricLogin =dataTable.Rows[0]["IsBiometricLogin"].ToString().ToBoolean(),
  109. BiometricLoginType = dataTable.Rows[0]["BiometricLoginType"].ToString(),
  110. //IsForcedPwdchange= dataTable.Rows[0]["IsForcedPwdChange"].ToString(),
  111. Extra = dataTable.Rows[0]["accessToken"].ToString(),
  112. };
  113. var map = Utilities.GetLanguageMapping(RESPONSE_MSG.LOGIN_TO_SYSTEM_SUCCESS.ToString(), lang);
  114. ls.Msg = map.Message;
  115. }
  116. else
  117. {
  118. ls = new LoginResponse();
  119. ls.ErrorCode = "1";
  120. // ls.Msg = dataTable.Rows[0]["errorCode"] + Convert.ToString(dataTable.Rows[0]["msg"]);
  121. //return ls;
  122. string enumString = string.Empty;
  123. if (dataTable.Rows[0]["errorCode"].Equals("1"))
  124. {
  125. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_1.ToString();
  126. }
  127. else if (dataTable.Rows[0]["errorCode"].Equals("2"))
  128. {
  129. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_2.ToString();
  130. }
  131. else if (dataTable.Rows[0]["errorCode"].Equals("3"))
  132. {
  133. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_3.ToString();
  134. }
  135. else if (dataTable.Rows[0]["errorCode"].Equals("4"))
  136. {
  137. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_4.ToString();
  138. }
  139. else if (dataTable.Rows[0]["errorCode"].Equals("5"))
  140. {
  141. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_5.ToString();
  142. }
  143. else if (dataTable.Rows[0]["errorCode"].Equals("6"))
  144. {
  145. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_6.ToString();
  146. }
  147. else if (dataTable.Rows[0]["errorCode"].Equals("7"))
  148. {
  149. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_7.ToString();
  150. }
  151. else if (dataTable.Rows[0]["errorCode"].Equals("8"))
  152. {
  153. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_8.ToString();
  154. }
  155. else if (dataTable.Rows[0]["errorCode"].Equals("20"))
  156. {
  157. enumString = RESPONSE_MSG.LOGIN_TO_SYSTEM_FAIL_20.ToString();
  158. }
  159. var map = Utilities.GetLanguageMapping(enumString, lang);
  160. return new LoginResponse { ErrorCode = dataTable.Rows[0]["errorCode"].Equals("0") ? "0" : "1", Msg = map.Message};
  161. //ls.Msg = map.Message;
  162. }
  163. return ls;
  164. }
  165. /// <summary>
  166. /// Check for validity of access code during every request after login success and KYC
  167. /// verified. Implemented at token authentication.
  168. /// </summary>
  169. /// <param name="credentials"></param>
  170. /// <returns></returns>
  171. public string IsAccessCodeValid(string accessCode, string uuid)
  172. {
  173. var sql = "EXEC mobile_proc_userLogin @flag='chk-access-code'";
  174. sql += ", @imei = " + _dao.FilterString(uuid);
  175. sql += ", @accessCode = " + _dao.FilterString(accessCode);
  176. Log.DebugFormat("Repository.AuthenticationRepo.IsAccessCodeValid | Requested parameters : {0}, SQL:{1}", "", sql);
  177. var dbRes = _dao.ParseDbResult(sql);
  178. if (!dbRes.ResponseCode.Equals("0"))
  179. {
  180. return null;
  181. }
  182. return dbRes.Id;
  183. }
  184. public DbResult ReSendVerificationCode(VerificationKeys keys)
  185. {
  186. var sql = "EXEC mobile_proc_userRegistration @flag='re-code'";
  187. sql += ", @imei = " + _dao.FilterString(keys.uuid);
  188. sql += ", @username = " + _dao.FilterString(keys.userId);
  189. sql += ", @code = " + _dao.FilterString(keys.verificationCode);
  190. sql += ", @codeType = " + _dao.FilterString(keys.codeType);
  191. sql += ", @scope = " + _dao.FilterString(keys.scope);
  192. return _dao.ParseDbResult(sql);
  193. }
  194. public JsonRxResponse GetUser(string userId)
  195. {
  196. JsonRxResponse jsonRx = new JsonRxResponse
  197. {
  198. ErrorCode = "1",
  199. Msg = "Failed"
  200. };
  201. var sql = "EXEC mobile_proc_customerMaster @flag='getUser'";
  202. sql += ", @username = " + _dao.FilterString(userId);
  203. Log.DebugFormat("Repository.CustomerRepo.GetUser | Requested parameters : {0}, SQL:{1}", JsonConvert.SerializeObject(userId), sql);
  204. var dataTable = _dao.ExecuteDataTable(sql);
  205. if (dataTable != null)
  206. {
  207. if (Convert.ToString(dataTable.Rows[0]["errorCode"]) == "0")
  208. {
  209. var moduleInBytes = Encoding.UTF8.GetBytes("kyc");
  210. var dpStr = dataTable.Rows[0]["dpUrl"].ToString();
  211. var fileInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["dpUrl"].ToString());
  212. var userIdInBytes = Encoding.UTF8.GetBytes(dataTable.Rows[0]["userId"].ToString());
  213. var ursDetail = new UserDetail
  214. {
  215. userId = dataTable.Rows[0]["userId"].ToString(),
  216. firstName = dataTable.Rows[0]["firstName"].ToString(),
  217. middleName = dataTable.Rows[0]["middleName"].ToString(),
  218. lastName = dataTable.Rows[0]["lastName"].ToString(),
  219. nickName = dataTable.Rows[0]["nickName"].ToString(),
  220. mobileNumber = dataTable.Rows[0]["mobileNumber"].ToString(),
  221. email = dataTable.Rows[0]["email"].ToString(),
  222. verificationCode = string.IsNullOrEmpty(dataTable.Rows[0]["verificationCode"].ToString()) ? "" : Utilities.DecryptString(dataTable.Rows[0]["verificationCode"].ToString()),
  223. verificationCodeExpiryDate = Convert.ToString(dataTable.Rows[0]["verificationCodeExpiryDate"]),
  224. createdDate = Convert.ToString(dataTable.Rows[0]["createdDate"]),
  225. userRoles = dataTable.Rows[0]["userRoles"].ToString(),
  226. rewardPoint = dataTable.Rows[0]["rewardPoint"].ToString(),
  227. active = Convert.ToBoolean(dataTable.Rows[0]["isActive"]),
  228. kyc = Convert.ToBoolean(dataTable.Rows[0]["hasKyc"]),
  229. verified = Convert.ToBoolean(dataTable.Rows[0]["isVerified"]),
  230. forgetCode = string.IsNullOrEmpty(dataTable.Rows[0]["forgetCode"].ToString()) ? "" : Utilities.DecryptString(dataTable.Rows[0]["forgetCode"].ToString()),
  231. forgetCodeExpiryDate = Convert.ToString(dataTable.Rows[0]["forgetCodeExpiryDate"]),
  232. primaryBankName = dataTable.Rows[0]["primaryBankName"].ToString(),
  233. walletNumber = dataTable.Rows[0]["walletNumber"].ToString(),
  234. availableBalance = dataTable.Rows[0]["availableBalance"].ToString(),
  235. cmRegistrationId = dataTable.Rows[0]["cmRegistrationId"].ToString(),
  236. dpUrl = !(string.IsNullOrEmpty(dpStr)) ? ApplicationConfig.GetRootURL() + "handler/docs.ashx?img=" + Convert.ToBase64String(fileInBytes) + "&userId=" + Convert.ToBase64String(userIdInBytes) + "&module=" + Convert.ToBase64String(moduleInBytes) : null,
  237. yearlyLimit = Convert.ToString(dataTable.Rows[0]["yearlyLimit"])
  238. };
  239. jsonRx.ErrorCode = "0";
  240. jsonRx.Msg = "success";
  241. jsonRx.Data = ursDetail;
  242. return jsonRx;
  243. }
  244. }
  245. return jsonRx;
  246. }
  247. public bool ValidateAuthenticity(string user, string guid)
  248. {
  249. var dic = new Dictionary<string, string>
  250. {
  251. { "@userName", _dao.FilterString(@user) },
  252. { "@accessCode", _dao.FilterString(guid) }
  253. };
  254. var sql = new Query("mobile_proc_userLogin", "ckeck-guid", dic).ToString();
  255. Log.Debug(sql);
  256. var res = _dao.ParseDbResult(sql);
  257. if (res.ResponseCode.Equals(ErrorCode.Zero))
  258. {
  259. return true;
  260. }
  261. else
  262. {
  263. return false;
  264. }
  265. }
  266. public string GetDevice(string customerId)
  267. {
  268. var dic = new Dictionary<string, string>
  269. {
  270. { "@customerId", _dao.FilterString(customerId) }
  271. };
  272. var sql = new Query("mobile_proc_userLogin", "get-device", dic).ToString();
  273. Log.Debug(sql);
  274. var res = _dao.ExecuteDataRow(sql);
  275. return Convert.ToString(res["deviceId"]);
  276. }
  277. }
  278. }