HomeController.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  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. if (CheckAuthToken())
  138. {
  139. return Redirect(
  140. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  141. );
  142. }
  143. if (!CheckAuthToken())
  144. {
  145. //String uri = HttpContext.Request.QueryString.ToUriComponent().ToString();
  146. log.Info("UUID: " + uuid);
  147. log.Info("tokenPresent: " + !string.IsNullOrEmpty(token));
  148. //token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ1c2VySW5mb3IiLCJleHAiOjE3MTAzODE0NTksInV1aWQiOiI1MGEwYjNlNzk5ZjllZDU3YTE1ZjZjNjljODVmYTM3NSJ9.EgR-P_KzsHJ1XCdgeu25Gy_-qAHOfM9uv9RTZSvr0AA";
  149. if (token != null)
  150. {
  151. // nhan dien qua token
  152. AutoLoginRequest autoLoginRequest = new AutoLoginRequest();
  153. autoLoginRequest.token = token;
  154. AutoLoginResponse autoLoginResponse = await api.AutoLoginApiAsync(
  155. configuration,
  156. autoLoginRequest
  157. );
  158. if (autoLoginResponse.code == Code.SUCCESS_CODE)
  159. {
  160. string msisdnReal = validateMsisdn(
  161. autoLoginResponse.data.msisdn.Substring(1)
  162. );
  163. if (msisdnReal == "")
  164. {
  165. return Redirect(
  166. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login"
  167. );
  168. }
  169. // check local system
  170. CheckAccountRequest checkAccountRequest = new CheckAccountRequest
  171. {
  172. msisdn = msisdnReal,
  173. channel = Constants.WEB_CHANNEL,
  174. language = lang == "en" ? "0" : "1"
  175. };
  176. CheckAccountResponse checkAccountResponse = api.CheckAccountApi(
  177. configuration,
  178. checkAccountRequest
  179. );
  180. if (checkAccountResponse.status == Code.SUCCESS)
  181. {
  182. string tokenGetReal = checkAccountResponse.token;
  183. HttpContext.Session.SetComplexData("msisdn", msisdnReal);
  184. // create session
  185. // create new auth
  186. CreateAuthToken();
  187. HttpContext.Session.SetComplexData("token", tokenGetReal);
  188. // load user status
  189. UserGetProfileRequest userGetProfileRequest =
  190. new UserGetProfileRequest
  191. {
  192. users = msisdnReal,
  193. token = tokenGetReal
  194. };
  195. Profile profileGet = api.UserLoadProfileApi(
  196. configuration,
  197. userGetProfileRequest
  198. );
  199. HttpContext.Session.SetComplexData("profile", profileGet);
  200. // load profile
  201. UserStatusRequest userStatusRequest = new UserStatusRequest
  202. {
  203. users = msisdnReal,
  204. token = tokenGetReal
  205. };
  206. UserStatus userStatusGet = api.GetUserStatusApi(
  207. configuration,
  208. userStatusRequest
  209. );
  210. HttpContext.Session.SetComplexData("userStatus", userStatusGet);
  211. return Redirect(
  212. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  213. );
  214. }
  215. else
  216. {
  217. return Redirect(
  218. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login"
  219. );
  220. }
  221. }
  222. }
  223. else if (uuid != null)
  224. {
  225. // nhan dien thue bao
  226. //string uuid = HttpContext.Request.QueryString.ToUriComponent().ToString().Substring(6);
  227. //String uuid = data.Substring(data.Length - 5, data.Length);
  228. String res = await CheckAutoLogin(log, uuid);
  229. log.Info("uuid: " + uuid + " res: " + res);
  230. if (res != null)
  231. {
  232. dynamic json = JsonConvert.DeserializeObject(res);
  233. log.Info("res json: " + json);
  234. String code = json["code"];
  235. if (code == "200")
  236. {
  237. String errorCode = json["errorCode"];
  238. if (errorCode == "200")
  239. {
  240. msisdnAuto = json["data"]["msisdn"];
  241. log.Info("msisdnAuto: " + msisdnAuto);
  242. }
  243. }
  244. }
  245. // redirect to OTP screen
  246. String msisdnDetect = validateMsisdn(msisdnAuto.Substring(1));
  247. if (msisdnDetect != "")
  248. {
  249. // get OTP
  250. RegisterRequest request = new RegisterRequest();
  251. request.Msisdn = msisdnDetect;
  252. RegisterResponse reset = api.UserForgotPasswordApi(
  253. configuration,
  254. request
  255. );
  256. if (reset.status == Code.SUCCESS)
  257. {
  258. HttpContext.Session.Remove("regInfos");
  259. HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
  260. return Redirect(
  261. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  262. );
  263. // return to login
  264. return Redirect(
  265. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login?step=2"
  266. );
  267. }
  268. }
  269. // return to view to get phone number
  270. model.termType =
  271. termType != null ? termType : Constants.NEW_YORK_BOLET_CODE;
  272. //model.uuid = uuid;
  273. //model.subDomain = GetParameter(Constants.SUB_DOMAIN);
  274. return Redirect(
  275. GetParameter(Constants.SUB_DOMAIN)
  276. + "/Account/Login?message="
  277. + Lang.reset_after_1_minute
  278. );
  279. }
  280. else if (phonenumber != null)
  281. {
  282. String channel = GetParameter(Constants.CHANNEL);
  283. if (channel == ApiConstants.WALLET)
  284. {
  285. //giai ma
  286. String msisdnRSA = DecryptRSA(configuration, phonenumber);
  287. // login
  288. HttpContext.Session.SetComplexData("msisdn", msisdnRSA);
  289. // create session
  290. // create new auth
  291. CreateAuthToken();
  292. // login success --> store session
  293. HttpContext.Session.SetComplexData("token", ApiConstants.WALLET_TOKEN);
  294. // load profile
  295. // load user status
  296. UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest
  297. {
  298. users = msisdnRSA,
  299. token = ApiConstants.WALLET_TOKEN
  300. };
  301. Profile profileGet = api.UserLoadProfileApi(
  302. configuration,
  303. userGetProfileRequest
  304. );
  305. HttpContext.Session.SetComplexData("profile", profileGet);
  306. // load profile
  307. UserStatusRequest userStatusRequest = new UserStatusRequest
  308. {
  309. users = msisdnRSA,
  310. token = ApiConstants.WALLET_TOKEN
  311. };
  312. UserStatus userStatusGet = api.GetUserStatusApi(
  313. configuration,
  314. userStatusRequest
  315. );
  316. HttpContext.Session.SetComplexData("userStatus", userStatusGet);
  317. return Redirect(
  318. GetParameter(Constants.SUB_DOMAIN) + "/Account/ChooseApp"
  319. );
  320. }
  321. else
  322. {
  323. // after auto detect
  324. String msisdnGet = phonenumber.Substring(1);
  325. String msisdnDetect = validateMsisdn(msisdnGet);
  326. if (msisdnDetect != "")
  327. {
  328. // auto login
  329. // reload user info
  330. HttpContext.Session.Remove("regInfos");
  331. HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
  332. // return to login
  333. return Redirect(
  334. GetParameter(Constants.SUB_DOMAIN) + "/Account/Login?step=2"
  335. );
  336. }
  337. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  338. }
  339. }
  340. else
  341. {
  342. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  343. }
  344. }
  345. Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
  346. UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>(
  347. "userStatus"
  348. );
  349. // login success --> store session
  350. model.termType = termType != null ? termType : Constants.FLORIDA_BOLET_CODE;
  351. model.userStatus = userStatus;
  352. model.profile = profile;
  353. // get time to nearest term
  354. model.listTerm = new List<Term>();
  355. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  356. String tokenGet = HttpContext.Session.GetComplexData<String>("token");
  357. String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  358. String toDate = DateTime.Now.ToString("dd/MM/yyyy");
  359. // get winner
  360. GetTopWinnerRequest getTopWinnerRequest = new GetTopWinnerRequest();
  361. getTopWinnerRequest.type = lang == "en" ? "0" : "1";
  362. getTopWinnerRequest.token = tokenGet;
  363. GetTopWininerResponse getTopWininerResponse = api.GetTopWinnerApi(
  364. configuration,
  365. getTopWinnerRequest
  366. );
  367. if (getTopWininerResponse.responseCode == Code.SUCCESS)
  368. {
  369. model.topWinner = getTopWininerResponse.list;
  370. HttpContext.Session.SetComplexData("topWinner", model.topWinner);
  371. }
  372. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
  373. {
  374. gameId = model.termType,
  375. token = tokenGet,
  376. type = Constants.TERM_HAS_NOT_RESULT_TYPE,
  377. order = Constants.DECS,
  378. fromDate = fromDate,
  379. toDate = toDate,
  380. rowsOnPage = Constants.ROW_ON_PAGE,
  381. seqPage = "1",
  382. id = Constants.ALL_DATA
  383. };
  384. ResultOfTermResponse result = api.GetResultOfTermApi(
  385. configuration,
  386. resultOfTermRequest
  387. );
  388. if (result.responseCode == Code.SESSION_EXPIRED)
  389. {
  390. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  391. }
  392. else if (result.responseCode == Code.SUCCESS)
  393. {
  394. model.listTerm = result.listTerm;
  395. }
  396. }
  397. catch (Exception ex)
  398. {
  399. log.Error(ex);
  400. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  401. }
  402. return View(model);
  403. }
  404. [ValidateAntiForgeryToken]
  405. public IActionResult TermResult(string termType)
  406. {
  407. if (!CheckAuthToken())
  408. {
  409. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  410. }
  411. TermResultModel model = new TermResultModel();
  412. model.listTerm = new List<Term>();
  413. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  414. String token = HttpContext.Session.GetComplexData<String>("token");
  415. String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  416. String toDate = DateTime.Now.ToString("dd/MM/yyyy");
  417. // get result
  418. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
  419. {
  420. gameId = termType,
  421. token = token,
  422. type = Constants.TERM_HAS_RESULT_TYPE,
  423. order = Constants.DECS,
  424. fromDate = fromDate,
  425. toDate = toDate,
  426. rowsOnPage = Constants.ROW_ON_PAGE,
  427. seqPage = "1",
  428. id = Constants.ALL_DATA
  429. };
  430. ResultOfTermResponse result = api.GetResultOfTermApi(
  431. configuration,
  432. resultOfTermRequest
  433. );
  434. if (result.responseCode == Code.SESSION_EXPIRED)
  435. {
  436. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  437. }
  438. else if (result.responseCode == Code.SUCCESS)
  439. {
  440. if (result.listTerm != null)
  441. model.listTerm = result.listTerm;
  442. model.termType = termType;
  443. }
  444. return PartialView("TermResult", model);
  445. }
  446. public IActionResult Transfer(string step, string walletType)
  447. {
  448. if (!CheckAuthToken())
  449. {
  450. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  451. }
  452. HomeTransfer_ViewModel model = new HomeTransfer_ViewModel();
  453. try
  454. {
  455. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  456. String token = HttpContext.Session.GetComplexData<String>("token");
  457. Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
  458. UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>(
  459. "userStatus"
  460. );
  461. TransferMoneyRequest transferData =
  462. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  463. model.step = step != null ? step : Constants.TRANSFER_SHOW;
  464. model.walletType =
  465. walletType != null ? walletType : Constants.BASIC_WALLET_TRANSFER;
  466. model.profile = profile;
  467. model.userStatus = userStatus;
  468. model.transferData = transferData;
  469. if (step == Constants.TRANSFER_RESULT)
  470. {
  471. // get payment info
  472. String paymentCode = HttpContext.Session.GetComplexData<String>("paymentCode");
  473. TransactionInfoRequest transactionInfoRequest = new TransactionInfoRequest
  474. {
  475. id = paymentCode,
  476. msisdn = msisdn,
  477. token = token
  478. };
  479. TransactionInfoResponse transactionInfoResponse = api.GetTransactionInfoApi(
  480. configuration,
  481. transactionInfoRequest
  482. );
  483. if (transactionInfoResponse.responseCode == Code.SESSION_EXPIRED)
  484. {
  485. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  486. }
  487. else if (transactionInfoResponse.responseCode == Code.SUCCESS)
  488. {
  489. TransferMoneyRequest transferMoneyRequest =
  490. HttpContext.Session.GetComplexData<TransferMoneyRequest>(
  491. "transferData"
  492. );
  493. model.walletType = transferMoneyRequest.channelPayment;
  494. if (transactionInfoResponse.list.Count > 0)
  495. {
  496. model.transaction = transactionInfoResponse.list[0];
  497. }
  498. else
  499. {
  500. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Home/Error");
  501. }
  502. }
  503. }
  504. }
  505. catch (Exception ex)
  506. {
  507. log.Error(ex);
  508. }
  509. return View(model);
  510. }
  511. [ValidateAntiForgeryToken]
  512. public IActionResult TransactionConfirm_Action(
  513. string walletType,
  514. string receivernumber,
  515. string moneyon
  516. )
  517. {
  518. try
  519. {
  520. if (!CheckAuthToken())
  521. {
  522. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  523. }
  524. // send otp to user and show otp partial
  525. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  526. String token = HttpContext.Session.GetComplexData<String>("token");
  527. //String receiver = walletType == Constants.NATCASH_WALLET_TRANSFER ? null : msisdn;
  528. String receiver = msisdn;
  529. //if (walletType == Constants.NATCASH_WALLET_TRANSFER)
  530. //{
  531. // receiver = validateMsisdn(receivernumber);
  532. // if (receiver == "")
  533. // {
  534. // return Json(new
  535. // {
  536. // code = Code.FAILURE,
  537. // message = Lang.phone_invalid
  538. // });
  539. // }
  540. //}
  541. // save info to session
  542. TransferMoneyRequest transferMoneyRequest = new TransferMoneyRequest();
  543. transferMoneyRequest.money = moneyon;
  544. transferMoneyRequest.msisdn = msisdn;
  545. transferMoneyRequest.msisdnReceive = receiver;
  546. transferMoneyRequest.channelPayment = walletType;
  547. HttpContext.Session.SetComplexData("transferData", transferMoneyRequest);
  548. return Json(new { code = Code.SUCCESS, });
  549. }
  550. catch (Exception ex)
  551. {
  552. log.Error(ex);
  553. }
  554. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  555. }
  556. [ValidateAntiForgeryToken]
  557. public JsonResult TransactionSendOTP_Action()
  558. {
  559. try
  560. {
  561. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  562. String token = HttpContext.Session.GetComplexData<String>("token");
  563. TransferMoneyRequest transferData =
  564. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  565. String content =
  566. Lang.confirm_transfer_1
  567. + " "
  568. + transferData.money
  569. + Lang.confirm_transfer_2
  570. + " "
  571. + transferData.msisdnReceive
  572. + Lang.confirm_transfer_3;
  573. // send OTP
  574. SendOTPRequest sendOTPRequest = new SendOTPRequest();
  575. sendOTPRequest.msisdn = msisdn;
  576. sendOTPRequest.token = token;
  577. SendOTPResponse sendOTPResponse = api.SendOTPApi(configuration, sendOTPRequest);
  578. return Json(
  579. new
  580. {
  581. code = int.Parse(sendOTPResponse.responseCode),
  582. message = GetLangFromCode(sendOTPResponse.responseCode),
  583. content = content,
  584. }
  585. );
  586. }
  587. catch (Exception ex)
  588. {
  589. log.Error(ex);
  590. }
  591. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  592. }
  593. [ValidateAntiForgeryToken]
  594. public JsonResult TransactionResentOTP_Action()
  595. {
  596. try
  597. {
  598. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  599. String token = HttpContext.Session.GetComplexData<String>("token");
  600. // send OTP
  601. SendOTPRequest sendOTPRequest = new SendOTPRequest
  602. {
  603. msisdn = msisdn,
  604. token = token
  605. };
  606. SendOTPResponse sendOTPResponse = api.SendOTPApi(configuration, sendOTPRequest);
  607. return Json(
  608. new
  609. {
  610. code = int.Parse(sendOTPResponse.responseCode),
  611. message = GetLangFromCode(sendOTPResponse.responseCode),
  612. }
  613. );
  614. }
  615. catch (Exception ex)
  616. {
  617. log.Error(ex);
  618. }
  619. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  620. }
  621. [ValidateAntiForgeryToken]
  622. public JsonResult TransactionConfirmOTP_Action(string otp)
  623. {
  624. try
  625. {
  626. String token = HttpContext.Session.GetComplexData<String>("token");
  627. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  628. TransferMoneyRequest transferMoneyRequest =
  629. HttpContext.Session.GetComplexData<TransferMoneyRequest>("transferData");
  630. transferMoneyRequest.otp = otp;
  631. transferMoneyRequest.token = token;
  632. TransferMoneyResponse transferMoneyResponse = api.TransferMoneyApi(
  633. configuration,
  634. transferMoneyRequest
  635. );
  636. if (transferMoneyResponse.responseCode == Code.SUCCESS)
  637. {
  638. // save payment code
  639. //HttpContext.Session.DeleteComplexData("transferData");
  640. HttpContext.Session.SetComplexData(
  641. "paymentCode",
  642. transferMoneyResponse.paymentCode
  643. );
  644. // load user status
  645. UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest
  646. {
  647. users = msisdn,
  648. token = token
  649. };
  650. Profile profile = api.UserLoadProfileApi(configuration, userGetProfileRequest);
  651. HttpContext.Session.SetComplexData("profile", profile);
  652. // load profile
  653. UserStatusRequest userStatusRequest = new UserStatusRequest
  654. {
  655. users = msisdn,
  656. token = token
  657. };
  658. UserStatus userStatus = api.GetUserStatusApi(configuration, userStatusRequest);
  659. HttpContext.Session.SetComplexData("userStatus", userStatus);
  660. }
  661. return Json(
  662. new
  663. {
  664. code = int.Parse(transferMoneyResponse.responseCode),
  665. message = GetLangFromCode(transferMoneyResponse.responseCode),
  666. }
  667. );
  668. }
  669. catch (Exception ex)
  670. {
  671. log.Error(ex);
  672. }
  673. return Json(new { code = Code.FAILURE, message = Lang.error_happened });
  674. }
  675. public IActionResult Rules(string termType)
  676. {
  677. if (!CheckAuthToken())
  678. {
  679. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  680. }
  681. HomeRules_ViewModel model = new HomeRules_ViewModel();
  682. try
  683. {
  684. model.termType = termType != null ? termType : Constants.FLORIDA_BOLET_CODE;
  685. }
  686. catch (Exception ex)
  687. {
  688. log.Error(ex);
  689. }
  690. return View(model);
  691. }
  692. public IActionResult Results(string termType, string fromDate, string toDate)
  693. {
  694. if (!CheckAuthToken())
  695. {
  696. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  697. }
  698. HomeResults_ViewModel model = new HomeResults_ViewModel();
  699. try
  700. {
  701. model.termType = termType != null ? termType : Constants.NEW_YORK_BOLET_CODE;
  702. model.fromDate =
  703. fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  704. model.toDate = toDate != null ? toDate : DateTime.Now.ToString("dd/MM/yyyy");
  705. }
  706. catch (Exception ex)
  707. {
  708. log.Error(ex);
  709. }
  710. return View(model);
  711. }
  712. public IActionResult TermResultHistory(string termType, string fromDate, string toDate)
  713. {
  714. TermResultHistoryModel model = new TermResultHistoryModel();
  715. if (!CheckAuthToken())
  716. {
  717. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  718. }
  719. try
  720. {
  721. String msisdn = HttpContext.Session.GetComplexData<String>("msisdn");
  722. String token = HttpContext.Session.GetComplexData<String>("token");
  723. model.fromDate =
  724. fromDate != null
  725. ? DateTime
  726. .ParseExact(fromDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)
  727. .ToString("dd/MM/yyyy")
  728. : DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
  729. model.toDate =
  730. toDate != null
  731. ? DateTime
  732. .ParseExact(toDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)
  733. .ToString("dd/MM/yyyy")
  734. : DateTime.Now.ToString("dd/MM/yyyy");
  735. // get result
  736. ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest();
  737. resultOfTermRequest.gameId = termType;
  738. resultOfTermRequest.token = token;
  739. resultOfTermRequest.type = Constants.TERM_HAS_RESULT_TYPE;
  740. resultOfTermRequest.order = Constants.DECS;
  741. resultOfTermRequest.fromDate = model.fromDate;
  742. resultOfTermRequest.toDate = model.toDate;
  743. resultOfTermRequest.rowsOnPage = Constants.ROW_ON_PAGE;
  744. resultOfTermRequest.seqPage = "1";
  745. resultOfTermRequest.id = Constants.ALL_DATA;
  746. ResultOfTermResponse result = api.GetResultOfTermApi(
  747. configuration,
  748. resultOfTermRequest
  749. );
  750. if (result.responseCode == Code.SESSION_EXPIRED)
  751. {
  752. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  753. }
  754. else if (result.responseCode == Code.SUCCESS)
  755. {
  756. model.listTerm = result.listTerm != null ? result.listTerm : new List<Term>();
  757. model.termType = termType;
  758. }
  759. }
  760. catch (Exception ex)
  761. {
  762. log.Error(ex);
  763. }
  764. return PartialView("TermResultHistory", model);
  765. }
  766. public IActionResult Privacy()
  767. {
  768. return View();
  769. }
  770. public IActionResult Update()
  771. {
  772. return View();
  773. }
  774. public IActionResult FAQ()
  775. {
  776. if (!CheckAuthToken())
  777. {
  778. return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
  779. }
  780. HomeFAQ_ViewModel model = new HomeFAQ_ViewModel();
  781. return View("FAQ", model);
  782. }
  783. [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
  784. public IActionResult Error()
  785. {
  786. return View(
  787. new ErrorViewModel
  788. {
  789. RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
  790. }
  791. );
  792. }
  793. }
  794. }