HomeController.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Globalization;
  5. using System.Linq;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using LotteryWebApp.Common;
  9. using LotteryWebApp.Extensions;
  10. using LotteryWebApp.Languages;
  11. using LotteryWebApp.Models;
  12. using LotteryWebApp.Service;
  13. using Microsoft.AspNetCore.Hosting;
  14. using Microsoft.AspNetCore.Http;
  15. using Microsoft.AspNetCore.Localization;
  16. using Microsoft.AspNetCore.Mvc;
  17. using Microsoft.Extensions.Configuration;
  18. using Microsoft.Extensions.Logging;
  19. using Newtonsoft.Json;
  20. namespace LotteryWebApp.Controllers
  21. {
  22. [AutoValidateAntiforgeryToken]
  23. public class HomeController : BaseController
  24. {
  25. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
  26. IConfiguration configuration;
  27. private readonly IWebHostEnvironment webHostEnvironment;
  28. APIFunctions api = new APIFunctions();
  29. bool flashViewEnabled = false;
  30. public HomeController(IConfiguration _configuration, IWebHostEnvironment hostEnvironment)
  31. {
  32. configuration = _configuration;
  33. webHostEnvironment = hostEnvironment;
  34. }
  35. public String GetParameter(String key)
  36. {
  37. return configuration.GetSection(key).Value;
  38. }
  39. public IActionResult FlashView()
  40. {
  41. return View();
  42. }
  43. [HttpGet("/token={token}")]
  44. public Task<IActionResult> LegacyTokenAsync(
  45. string token,
  46. string uuid,
  47. string mcuid,
  48. string phonenumber,
  49. string termType
  50. )
  51. {
  52. log.Info(
  53. "App entry route: legacy /token=[REDACTED]; "
  54. + "tokenPresent="
  55. + !string.IsNullOrEmpty(token)
  56. + "; uuidPresent="
  57. + !string.IsNullOrEmpty(uuid)
  58. + "; phonenumberPresent="
  59. + !string.IsNullOrEmpty(phonenumber)
  60. );
  61. return IndexAsync(termType, uuid, mcuid, phonenumber, token);
  62. }
  63. public JsonResult SetCulture(string lang)
  64. {
  65. try
  66. {
  67. Response.Cookies.Append(
  68. CookieRequestCultureProvider.DefaultCookieName,
  69. CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(lang)),
  70. new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
  71. );
  72. HttpContext.Session.SetComplexData("culture", lang);
  73. }
  74. catch (Exception ex)
  75. {
  76. log.Error("Exp: " + ex);
  77. }
  78. return Json(new { });
  79. }
  80. public async Task<IActionResult> IndexAsync(
  81. string termType,
  82. String uuid,
  83. String mcuid,
  84. String phonenumber,
  85. String token
  86. )
  87. {
  88. //return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Home/Update");
  89. //String param = "transactionId=" + "ABC" + "&requestId=" + "DEF" + "&money=" + "100";
  90. //String url = CreatePrivateURL(configuration, param, "seconds", "0", "0", GetParameter("rsaPolicy"));
  91. string requestPath = HttpContext.Request.Path.Value ?? "";
  92. if (requestPath.StartsWith("/token=", StringComparison.OrdinalIgnoreCase))
  93. {
  94. requestPath = "/token=[REDACTED]";
  95. }
  96. log.Info(
  97. "Home entry request: path="
  98. + requestPath
  99. + "; queryKeys="
  100. + string.Join(",", HttpContext.Request.Query.Keys)
  101. + "; tokenPresent="
  102. + !string.IsNullOrEmpty(token)
  103. + "; uuidPresent="
  104. + !string.IsNullOrEmpty(uuid)
  105. + "; mcuidPresent="
  106. + !string.IsNullOrEmpty(mcuid)
  107. + "; phonenumberPresent="
  108. + !string.IsNullOrEmpty(phonenumber)
  109. );
  110. HomeIndex_ViewModel model = new HomeIndex_ViewModel();
  111. try
  112. {
  113. if (
  114. CheckAuthToken()
  115. && HttpContext.Session.GetString("ShowChooseAppAfterLogin") == "1"
  116. )
  117. {
  118. HttpContext.Session.Remove("ShowChooseAppAfterLogin");
  119. log.Info("Manual login fallback: redirecting /Home to /Account/ChooseApp");
  120. return Redirect(
  121. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  122. );
  123. }
  124. HttpContext.Session.SetComplexData("navigator", Constants.HOME_NAVIGATOR);
  125. CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
  126. String lang = currentCulture.Name;
  127. log.Info("lang: " + lang);
  128. String msisdnAuto = null;
  129. // check auto login ?uuid=681471d23b83f0a463e2dd5671ea0fc5
  130. // ?uuid=681471d23b83f0a463e2dd5671ea0fc5&mcuid=6c6948a89908d83aec8c05be256970a1&mcapp=mocha
  131. if (
  132. !CheckAuthToken()
  133. || token != null
  134. || uuid != null
  135. || phonenumber != null
  136. )
  137. {
  138. //String uri = HttpContext.Request.QueryString.ToUriComponent().ToString();
  139. log.Info("UUID: " + uuid);
  140. log.Info("tokenPresent: " + !string.IsNullOrEmpty(token));
  141. //token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ1c2VySW5mb3IiLCJleHAiOjE3MTAzODE0NTksInV1aWQiOiI1MGEwYjNlNzk5ZjllZDU3YTE1ZjZjNjljODVmYTM3NSJ9.EgR-P_KzsHJ1XCdgeu25Gy_-qAHOfM9uv9RTZSvr0AA";
  142. if (token != null)
  143. {
  144. // nhan dien qua token
  145. AutoLoginRequest autoLoginRequest = new AutoLoginRequest();
  146. autoLoginRequest.token = token;
  147. AutoLoginResponse autoLoginResponse = await api.AutoLoginApiAsync(
  148. configuration,
  149. autoLoginRequest
  150. );
  151. if (autoLoginResponse.code == Code.SUCCESS_CODE)
  152. {
  153. string msisdnReal = validateMsisdn(
  154. autoLoginResponse.data.msisdn.Substring(1)
  155. );
  156. if (msisdnReal == "")
  157. {
  158. return Redirect(
  159. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login"
  160. );
  161. }
  162. // check local system
  163. CheckAccountRequest checkAccountRequest = new CheckAccountRequest
  164. {
  165. msisdn = msisdnReal,
  166. channel = Constants.WEB_CHANNEL,
  167. language = lang == "en" ? "0" : "1"
  168. };
  169. CheckAccountResponse checkAccountResponse = api.CheckAccountApi(
  170. configuration,
  171. checkAccountRequest
  172. );
  173. if (checkAccountResponse.status == Code.SUCCESS)
  174. {
  175. string tokenGetReal = checkAccountResponse.token;
  176. HttpContext.Session.SetComplexData("msisdn", msisdnReal);
  177. // create session
  178. // create new auth
  179. CreateAuthToken();
  180. HttpContext.Session.SetComplexData("token", tokenGetReal);
  181. // load user status
  182. UserGetProfileRequest userGetProfileRequest =
  183. new UserGetProfileRequest
  184. {
  185. users = msisdnReal,
  186. token = tokenGetReal
  187. };
  188. Profile profileGet = api.UserLoadProfileApi(
  189. configuration,
  190. userGetProfileRequest
  191. );
  192. HttpContext.Session.SetComplexData("profile", profileGet);
  193. // load profile
  194. UserStatusRequest userStatusRequest = new UserStatusRequest
  195. {
  196. users = msisdnReal,
  197. token = tokenGetReal
  198. };
  199. UserStatus userStatusGet = api.GetUserStatusApi(
  200. configuration,
  201. userStatusRequest
  202. );
  203. HttpContext.Session.SetComplexData("userStatus", userStatusGet);
  204. return Redirect(
  205. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  206. );
  207. }
  208. else
  209. {
  210. return Redirect(
  211. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login"
  212. );
  213. }
  214. }
  215. }
  216. else if (uuid != null)
  217. {
  218. // nhan dien thue bao
  219. //string uuid = HttpContext.Request.QueryString.ToUriComponent().ToString().Substring(6);
  220. //String uuid = data.Substring(data.Length - 5, data.Length);
  221. String res = await CheckAutoLogin(log, uuid);
  222. log.Info("uuid: " + uuid + " res: " + res);
  223. if (res != null)
  224. {
  225. dynamic json = JsonConvert.DeserializeObject(res);
  226. log.Info("res json: " + json);
  227. String code = json["code"];
  228. if (code == "200")
  229. {
  230. String errorCode = json["errorCode"];
  231. if (errorCode == "200")
  232. {
  233. msisdnAuto = json["data"]["msisdn"];
  234. log.Info("msisdnAuto: " + msisdnAuto);
  235. }
  236. }
  237. }
  238. // redirect to OTP screen
  239. String msisdnDetect = validateMsisdn(msisdnAuto.Substring(1));
  240. if (msisdnDetect != "")
  241. {
  242. // get OTP
  243. RegisterRequest request = new RegisterRequest();
  244. request.Msisdn = msisdnDetect;
  245. RegisterResponse reset = api.UserForgotPasswordApi(
  246. configuration,
  247. request
  248. );
  249. if (reset.status == Code.SUCCESS)
  250. {
  251. HttpContext.Session.Remove("regInfos");
  252. HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
  253. return Redirect(
  254. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  255. );
  256. // return to login
  257. return Redirect(
  258. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login?step=2"
  259. );
  260. }
  261. }
  262. // return to view to get phone number
  263. model.termType =
  264. termType != null ? termType : Constants.NEW_YORK_BOLET_CODE;
  265. //model.uuid = uuid;
  266. //model.subDomain = GetParameter(Constants.SUB_DOMAIN);
  267. return Redirect(
  268. GetParameter(Constants.SUB_DOMAIN)
  269. + "/Account/Login?message="
  270. + Lang.reset_after_1_minute
  271. );
  272. }
  273. else if (phonenumber != null)
  274. {
  275. String channel = GetParameter(Constants.CHANNEL);
  276. if (channel == ApiConstants.WALLET)
  277. {
  278. //giai ma
  279. String msisdnRSA = DecryptRSA(configuration, phonenumber);
  280. // login
  281. HttpContext.Session.SetComplexData("msisdn", msisdnRSA);
  282. // create session
  283. // create new auth
  284. CreateAuthToken();
  285. // login success --> store session
  286. HttpContext.Session.SetComplexData("token", ApiConstants.WALLET_TOKEN);
  287. // load profile
  288. // load user status
  289. UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest
  290. {
  291. users = msisdnRSA,
  292. token = ApiConstants.WALLET_TOKEN
  293. };
  294. Profile profileGet = api.UserLoadProfileApi(
  295. configuration,
  296. userGetProfileRequest
  297. );
  298. HttpContext.Session.SetComplexData("profile", profileGet);
  299. // load profile
  300. UserStatusRequest userStatusRequest = new UserStatusRequest
  301. {
  302. users = msisdnRSA,
  303. token = ApiConstants.WALLET_TOKEN
  304. };
  305. UserStatus userStatusGet = api.GetUserStatusApi(
  306. configuration,
  307. userStatusRequest
  308. );
  309. HttpContext.Session.SetComplexData("userStatus", userStatusGet);
  310. return Redirect(
  311. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  312. );
  313. }
  314. else
  315. {
  316. // after auto detect
  317. String msisdnGet = phonenumber.Substring(1);
  318. String msisdnDetect = validateMsisdn(msisdnGet);
  319. if (msisdnDetect != "")
  320. {
  321. // auto login
  322. // reload user info
  323. HttpContext.Session.Remove("regInfos");
  324. HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
  325. // return to login
  326. return Redirect(
  327. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login?step=2"
  328. );
  329. }
  330. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  331. }
  332. }
  333. else
  334. {
  335. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  336. }
  337. }
  338. Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
  339. UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>(
  340. "userStatus"
  341. );
  342. // login success --> store session
  343. model.termType = termType != null ? termType : Constants.FLORIDA_BOLET_CODE;
  344. model.userStatus = userStatus;
  345. model.profile = profile;
  346. // get time to nearest term
  347. model.listTerm = new List<Term>();
  348. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  349. String tokenGet = HttpContext.Session.GetComplexData<String>("token");
  350. String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  351. String toDate = DateTime.Now.ToString("dd/MM/yyyy");
  352. // get winner
  353. GetTopWinnerRequest getTopWinnerRequest = new GetTopWinnerRequest();
  354. getTopWinnerRequest.type = lang == "en" ? "0" : "1";
  355. getTopWinnerRequest.token = tokenGet;
  356. GetTopWininerResponse getTopWininerResponse = api.GetTopWinnerApi(
  357. configuration,
  358. getTopWinnerRequest
  359. );
  360. if (getTopWininerResponse.responseCode == Code.SUCCESS)
  361. {
  362. model.topWinner = getTopWininerResponse.list;
  363. HttpContext.Session.SetComplexData("topWinner", model.topWinner);
  364. }
  365. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
  366. {
  367. gameId = model.termType,
  368. token = tokenGet,
  369. type = Constants.TERM_HAS_NOT_RESULT_TYPE,
  370. order = Constants.DECS,
  371. fromDate = fromDate,
  372. toDate = toDate,
  373. rowsOnPage = Constants.ROW_ON_PAGE,
  374. seqPage = "1",
  375. id = Constants.ALL_DATA
  376. };
  377. ResultOfTermResponse result = api.GetResultOfTermApi(
  378. configuration,
  379. resultOfTermRequest
  380. );
  381. if (result.responseCode == Code.SESSION_EXPIRED)
  382. {
  383. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  384. }
  385. else if (result.responseCode == Code.SUCCESS)
  386. {
  387. model.listTerm = result.listTerm;
  388. }
  389. }
  390. catch (Exception ex)
  391. {
  392. log.Error(ex);
  393. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  394. }
  395. return View(model);
  396. }
  397. [ValidateAntiForgeryToken]
  398. public IActionResult TermResult(string termType)
  399. {
  400. if (!CheckAuthToken())
  401. {
  402. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  403. }
  404. TermResultModel model = new TermResultModel();
  405. model.listTerm = new List<Term>();
  406. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  407. String token = HttpContext.Session.GetComplexData<String>("token");
  408. String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  409. String toDate = DateTime.Now.ToString("dd/MM/yyyy");
  410. // get result
  411. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
  412. {
  413. gameId = termType,
  414. token = token,
  415. type = Constants.TERM_HAS_RESULT_TYPE,
  416. order = Constants.DECS,
  417. fromDate = fromDate,
  418. toDate = toDate,
  419. rowsOnPage = Constants.ROW_ON_PAGE,
  420. seqPage = "1",
  421. id = Constants.ALL_DATA
  422. };
  423. ResultOfTermResponse result = api.GetResultOfTermApi(
  424. configuration,
  425. resultOfTermRequest
  426. );
  427. if (result.responseCode == Code.SESSION_EXPIRED)
  428. {
  429. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  430. }
  431. else if (result.responseCode == Code.SUCCESS)
  432. {
  433. if (result.listTerm != null)
  434. model.listTerm = result.listTerm;
  435. model.termType = termType;
  436. }
  437. return PartialView("TermResult", model);
  438. }
  439. public IActionResult Transfer(string step, string walletType)
  440. {
  441. if (!CheckAuthToken())
  442. {
  443. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  444. }
  445. HomeTransfer_ViewModel model = new HomeTransfer_ViewModel();
  446. try
  447. {
  448. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  449. String token = HttpContext.Session.GetComplexData<String>("token");
  450. Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
  451. UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>(
  452. "userStatus"
  453. );
  454. TransferMoneyRequest transferData =
  455. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  456. model.step = step != null ? step : Constants.TRANSFER_SHOW;
  457. model.walletType =
  458. walletType != null ? walletType : Constants.BASIC_WALLET_TRANSFER;
  459. model.profile = profile;
  460. model.userStatus = userStatus;
  461. model.transferData = transferData;
  462. if (step == Constants.TRANSFER_RESULT)
  463. {
  464. // get payment info
  465. String paymentCode = HttpContext.Session.GetComplexData<String>("paymentCode");
  466. TransactionInfoRequest transactionInfoRequest = new TransactionInfoRequest
  467. {
  468. id = paymentCode,
  469. msisdn = msisdn,
  470. token = token
  471. };
  472. TransactionInfoResponse transactionInfoResponse = api.GetTransactionInfoApi(
  473. configuration,
  474. transactionInfoRequest
  475. );
  476. if (transactionInfoResponse.responseCode == Code.SESSION_EXPIRED)
  477. {
  478. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  479. }
  480. else if (transactionInfoResponse.responseCode == Code.SUCCESS)
  481. {
  482. TransferMoneyRequest transferMoneyRequest =
  483. HttpContext.Session.GetComplexData<TransferMoneyRequest>(
  484. "transferData"
  485. );
  486. model.walletType = transferMoneyRequest.channelPayment;
  487. if (transactionInfoResponse.list.Count > 0)
  488. {
  489. model.transaction = transactionInfoResponse.list[0];
  490. }
  491. else
  492. {
  493. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Home/Error");
  494. }
  495. }
  496. }
  497. }
  498. catch (Exception ex)
  499. {
  500. log.Error(ex);
  501. }
  502. return View(model);
  503. }
  504. [ValidateAntiForgeryToken]
  505. public IActionResult TransactionConfirm_Action(
  506. string walletType,
  507. string receivernumber,
  508. string moneyon
  509. )
  510. {
  511. try
  512. {
  513. if (!CheckAuthToken())
  514. {
  515. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  516. }
  517. // send otp to user and show otp partial
  518. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  519. String token = HttpContext.Session.GetComplexData<String>("token");
  520. //String receiver = walletType == Constants.NATCASH_WALLET_TRANSFER ? null : msisdn;
  521. String receiver = msisdn;
  522. //if (walletType == Constants.NATCASH_WALLET_TRANSFER)
  523. //{
  524. // receiver = validateMsisdn(receivernumber);
  525. // if (receiver == "")
  526. // {
  527. // return Json(new
  528. // {
  529. // code = Code.FAILURE,
  530. // message = Lang.phone_invalid
  531. // });
  532. // }
  533. //}
  534. // save info to session
  535. TransferMoneyRequest transferMoneyRequest = new TransferMoneyRequest();
  536. transferMoneyRequest.money = moneyon;
  537. transferMoneyRequest.msisdn = msisdn;
  538. transferMoneyRequest.msisdnReceive = receiver;
  539. transferMoneyRequest.channelPayment = walletType;
  540. HttpContext.Session.SetComplexData("transferData", transferMoneyRequest);
  541. return Json(new { code = Code.SUCCESS, });
  542. }
  543. catch (Exception ex)
  544. {
  545. log.Error(ex);
  546. }
  547. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  548. }
  549. [ValidateAntiForgeryToken]
  550. public JsonResult TransactionSendOTP_Action()
  551. {
  552. try
  553. {
  554. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  555. String token = HttpContext.Session.GetComplexData<String>("token");
  556. TransferMoneyRequest transferData =
  557. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  558. String content =
  559. Lang.confirm_transfer_1
  560. + " "
  561. + transferData.money
  562. + Lang.confirm_transfer_2
  563. + " "
  564. + transferData.msisdnReceive
  565. + Lang.confirm_transfer_3;
  566. // send OTP
  567. SendOTPRequest sendOTPRequest = new SendOTPRequest();
  568. sendOTPRequest.msisdn = msisdn;
  569. sendOTPRequest.token = token;
  570. SendOTPResponse sendOTPResponse = api.SendOTPApi(configuration, sendOTPRequest);
  571. return Json(
  572. new
  573. {
  574. code = int.Parse(sendOTPResponse.responseCode),
  575. message = GetLangFromCode(sendOTPResponse.responseCode),
  576. content = content,
  577. }
  578. );
  579. }
  580. catch (Exception ex)
  581. {
  582. log.Error(ex);
  583. }
  584. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  585. }
  586. [ValidateAntiForgeryToken]
  587. public JsonResult TransactionResentOTP_Action()
  588. {
  589. try
  590. {
  591. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  592. String token = HttpContext.Session.GetComplexData<String>("token");
  593. // send OTP
  594. SendOTPRequest sendOTPRequest = new SendOTPRequest
  595. {
  596. msisdn = msisdn,
  597. token = token
  598. };
  599. SendOTPResponse sendOTPResponse = api.SendOTPApi(configuration, sendOTPRequest);
  600. return Json(
  601. new
  602. {
  603. code = int.Parse(sendOTPResponse.responseCode),
  604. message = GetLangFromCode(sendOTPResponse.responseCode),
  605. }
  606. );
  607. }
  608. catch (Exception ex)
  609. {
  610. log.Error(ex);
  611. }
  612. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  613. }
  614. [ValidateAntiForgeryToken]
  615. public JsonResult TransactionConfirmOTP_Action(string otp)
  616. {
  617. try
  618. {
  619. String token = HttpContext.Session.GetComplexData<String>("token");
  620. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  621. TransferMoneyRequest transferMoneyRequest =
  622. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  623. transferMoneyRequest.otp = otp;
  624. transferMoneyRequest.token = token;
  625. TransferMoneyResponse transferMoneyResponse = api.TransferMoneyApi(
  626. configuration,
  627. transferMoneyRequest
  628. );
  629. if (transferMoneyResponse.responseCode == Code.SUCCESS)
  630. {
  631. // save payment code
  632. //HttpContext.Session.DeleteComplexData("transferData");
  633. HttpContext.Session.SetComplexData(
  634. "paymentCode",
  635. transferMoneyResponse.paymentCode
  636. );
  637. // load user status
  638. UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest
  639. {
  640. users = msisdn,
  641. token = token
  642. };
  643. Profile profile = api.UserLoadProfileApi(configuration, userGetProfileRequest);
  644. HttpContext.Session.SetComplexData("profile", profile);
  645. // load profile
  646. UserStatusRequest userStatusRequest = new UserStatusRequest
  647. {
  648. users = msisdn,
  649. token = token
  650. };
  651. UserStatus userStatus = api.GetUserStatusApi(configuration, userStatusRequest);
  652. HttpContext.Session.SetComplexData("userStatus", userStatus);
  653. }
  654. return Json(
  655. new
  656. {
  657. code = int.Parse(transferMoneyResponse.responseCode),
  658. message = GetLangFromCode(transferMoneyResponse.responseCode),
  659. }
  660. );
  661. }
  662. catch (Exception ex)
  663. {
  664. log.Error(ex);
  665. }
  666. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  667. }
  668. public IActionResult Rules(string termType)
  669. {
  670. if (!CheckAuthToken())
  671. {
  672. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  673. }
  674. HomeRules_ViewModel model = new HomeRules_ViewModel();
  675. try
  676. {
  677. model.termType = termType != null ? termType : Constants.FLORIDA_BOLET_CODE;
  678. }
  679. catch (Exception ex)
  680. {
  681. log.Error(ex);
  682. }
  683. return View(model);
  684. }
  685. public IActionResult Results(string termType, string fromDate, string toDate)
  686. {
  687. if (!CheckAuthToken())
  688. {
  689. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  690. }
  691. HomeResults_ViewModel model = new HomeResults_ViewModel();
  692. try
  693. {
  694. model.termType = termType != null ? termType : Constants.NEW_YORK_BOLET_CODE;
  695. model.fromDate =
  696. fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  697. model.toDate = toDate != null ? toDate : DateTime.Now.ToString("dd/MM/yyyy");
  698. }
  699. catch (Exception ex)
  700. {
  701. log.Error(ex);
  702. }
  703. return View(model);
  704. }
  705. public IActionResult TermResultHistory(string termType, string fromDate, string toDate)
  706. {
  707. TermResultHistoryModel model = new TermResultHistoryModel();
  708. if (!CheckAuthToken())
  709. {
  710. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  711. }
  712. try
  713. {
  714. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  715. String token = HttpContext.Session.GetComplexData<String>("token");
  716. model.fromDate =
  717. fromDate != null
  718. ? DateTime
  719. .ParseExact(fromDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)
  720. .ToString("dd/MM/yyyy")
  721. : DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  722. model.toDate =
  723. toDate != null
  724. ? DateTime
  725. .ParseExact(toDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)
  726. .ToString("dd/MM/yyyy")
  727. : DateTime.Now.ToString("dd/MM/yyyy");
  728. // get result
  729. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest();
  730. resultOfTermRequest.gameId = termType;
  731. resultOfTermRequest.token = token;
  732. resultOfTermRequest.type = Constants.TERM_HAS_RESULT_TYPE;
  733. resultOfTermRequest.order = Constants.DECS;
  734. resultOfTermRequest.fromDate = model.fromDate;
  735. resultOfTermRequest.toDate = model.toDate;
  736. resultOfTermRequest.rowsOnPage = Constants.ROW_ON_PAGE;
  737. resultOfTermRequest.seqPage = "1";
  738. resultOfTermRequest.id = Constants.ALL_DATA;
  739. ResultOfTermResponse result = api.GetResultOfTermApi(
  740. configuration,
  741. resultOfTermRequest
  742. );
  743. if (result.responseCode == Code.SESSION_EXPIRED)
  744. {
  745. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  746. }
  747. else if (result.responseCode == Code.SUCCESS)
  748. {
  749. model.listTerm = result.listTerm != null ? result.listTerm : new List<Term>();
  750. model.termType = termType;
  751. }
  752. }
  753. catch (Exception ex)
  754. {
  755. log.Error(ex);
  756. }
  757. return PartialView("TermResultHistory", model);
  758. }
  759. public IActionResult Privacy()
  760. {
  761. return View();
  762. }
  763. public IActionResult Update()
  764. {
  765. return View();
  766. }
  767. public IActionResult FAQ()
  768. {
  769. if (!CheckAuthToken())
  770. {
  771. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  772. }
  773. HomeFAQ_ViewModel model = new HomeFAQ_ViewModel();
  774. return View("FAQ", model);
  775. }
  776. [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
  777. public IActionResult Error()
  778. {
  779. return View(
  780. new ErrorViewModel
  781. {
  782. RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
  783. }
  784. );
  785. }
  786. }
  787. }