using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Application.Sms; using AccountManagement.Application.Contracts.Account; using AccountManagement.Domain.AccountAgg; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; using System.Security.Claims; using AccountManagement.Application.Contracts.CameraAccount; using AccountMangement.Infrastructure.EFCore.Repository; using Company.Domain.RollCallAgg.DomainService; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Authentication.Cookies; using CompanyManagment.App.Contracts.AndroidApkVersion; using CompanyManagment.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; namespace ServiceHost.Pages.login; public class IndexModel : PageModel { private readonly IAccountApplication _accountApplication; private readonly IGoogleRecaptcha _googleRecaptcha; private readonly IAuthHelper _authHelper; private readonly IAndroidApkVersionApplication _androidApkVersionApplication; private readonly CompanyContext _context; private readonly IRollCallDomainService _rollCallDomainService; private readonly AppSettingConfiguration _appSettingConfiguration; public string Mess { get; set; } [BindProperty] public string Username { get; set; } [BindProperty] public string Password { get; set; } [BindProperty] public string CaptchaResponse { get; set; } public bool HasApkToDownload { get; set; } public bool HasFaceDetectionApkToDownload { get; set; } private static Timer aTimer; public Login login; public AccountViewModel Search; public IndexModel(IAccountApplication accountApplication, IGoogleRecaptcha googleRecaptcha, IAuthHelper authHelper, IAndroidApkVersionApplication androidApkVersionApplication, CompanyContext context, IRollCallDomainService rollCallDomainService, IOptions optionsAppSetting) { _accountApplication = accountApplication; _googleRecaptcha = googleRecaptcha; _authHelper = authHelper; _androidApkVersionApplication = androidApkVersionApplication; _context = context; _rollCallDomainService = rollCallDomainService; _appSettingConfiguration = optionsAppSetting.Value; } public IActionResult OnGet() { //var customizeWorkshopSettings = _context.CustomizeWorkshopSettings.AsSplitQuery(); //var rollCalls = // _context.RollCalls.Where(x => customizeWorkshopSettings.Any(a => a.WorkshopId == x.WorkshopId)) // .ToList(); //foreach (var rollCall in rollCalls) //{ // rollCall.SetShiftDate(_rollCallDomainService); //} //_context.SaveChanges(); HasApkToDownload = _androidApkVersionApplication.HasAndroidApkToDownload(ApkType.WebView); HasFaceDetectionApkToDownload = _androidApkVersionApplication.HasAndroidApkToDownload(ApkType.FaceDetection); if (User.Identity is { IsAuthenticated: true }) { if (User.FindFirstValue("IsCamera") == "true") { return Redirect("/Camera"); } else if ((User.FindFirstValue("ClientAriaPermission") == "true") && (User.FindFirstValue("AdminAreaPermission") == "false")) { return Redirect("/Client"); } else { return Redirect($"https://{_appSettingConfiguration.AdminDomain}"); } } _authHelper.SignOut(); return Page(); } #region Vafa //public IActionResult OnGetGenerateAntiForgeryToken() //{ // var tokens = _antiforgery.GetAndStoreTokens(HttpContext); // return new JsonResult(new { token = tokens.RequestToken }); //} //public IActionResult OnPostLoginAjax(Login command) //{ // var result = _accountApplication.Login(command); // if (result.IsSuccedded) // { // string redirectUrl = string.Empty; // switch (result.SendId) // { // case 1: // redirectUrl = "/Admin"; // break; // case 2: // redirectUrl = "/Client"; // break; // case 3: // redirectUrl = "/Camera"; // break; // case 0: // result.Message = "امکان ورود با این حساب کاربری وجود ندارد"; // return new JsonResult(new { success = false, message = result.Message }); // } // return new JsonResult(new { success = true, redirectUrl }); // } // Mess = result.Message; // return new JsonResult(new { success = false, message = result.Message }); //} #endregion public IActionResult OnPostLogin(Login command) { var result = _accountApplication.Login(command); if (result.IsSuccedded) return RedirectToPage("/Admin"); ModelState.AddModelError("Username", "اطلاعات وارد شده اشتباه است"); TempData["h"] = "n"; Mess = result.Message; return null; } public IActionResult OnPostEnter(Login command) { //bool captchaResult = true; //if (!_webHostEnvironment.IsDevelopment()) // captchaResult = _googleRecaptcha.IsSatisfy(CaptchaResponse).Result; //if (captchaResult) //{ var result = _accountApplication.Login(command); if (result.IsSuccedded) { switch (result.SendId) { case 1: return Redirect($"https://{_appSettingConfiguration.AdminDomain}"); break; case 2: return Redirect("/Client"); break; case 3: return Redirect("/Camera"); break; case 0: result.Message = "امکان ورود با این حساب کاربری وجود ندارد"; break; } } Mess = result.Message; //} //else //{ // Mess = "دستگاه شما ربات تشخیص داده شد"; //} //ModelState.AddModelError("Username", "اطلاعات وارد شده اشتباه است"); return Page(); } public async Task OnPostCheckCaptcha(string response) { var result = await _googleRecaptcha.IsSatisfy(response); return new JsonResult(new { isNotRobot = result, }); } public IActionResult OnPostRegisterClient(string name, string user, string pass, string phone, string nationalcode) { var command = new RegisterAccount() { Fullname = name, Username = user, Password = pass, Mobile = phone, NationalCode = nationalcode, }; var result = _accountApplication.RegisterClient(command); return new JsonResult(new { isSucceded = result.IsSuccedded, message = result.Message }); } public IActionResult OnGetLogout() { _accountApplication.Logout(); return RedirectToPage("/Index"); } public async Task OnPostCheckPhoneValid(string phone) { var result = _accountApplication.Search(new AccountSearchModel() { Mobile = phone }).FirstOrDefault(); if (result == null) { return new JsonResult(new { exist = false, }); } else { SendSms(phone); return new JsonResult(new { exist = true, }); } } public void SendSms(string phone) { var result = _accountApplication.Search(new AccountSearchModel() { Mobile = phone }).FirstOrDefault(); if (result != null) { _accountApplication.SetVerifyCode(phone, result.Id); } } public IActionResult OnPostWithMobile(string code, string phone) { //bool captchaResult = true; //if (!_webHostEnvironment.IsDevelopment()) // captchaResult = _googleRecaptcha.IsSatisfy(CaptchaResponse).Result; //if (captchaResult) //{ var verfiyResult = _accountApplication.GetByVerifyCode(code, phone); if (verfiyResult != null) { var result = _accountApplication.LoginWithMobile(verfiyResult.Id); if (result.IsSuccedded && result.SendId == 1) { return new JsonResult(new { exist = true, url = "/Admin", }); } if (result.IsSuccedded && result.SendId == 2) { return new JsonResult(new { exist = true, url = "/Client", }); } } //} //else //{ // Mess = "دستگاه شما ربات تشخیص داده شد"; //} return new JsonResult(new { exist = false, }); } public IActionResult OnPostVerify(string code, string phone) { var result = _accountApplication.GetByVerifyCode(code, phone); if (result != null) { return new JsonResult(new { exist = true, user = result.Username, verfyId = result.Id }); } else { return new JsonResult(new { exist = false, }); } } public IActionResult OnPostChangePass(long id, string username, string newpass) { var result = _accountApplication.GetByUserNameAndId(id, username); if (result != null) { var command = new ChangePassword() { Id = id, Password = newpass, RePassword = newpass }; var finalResult = _accountApplication.ChangePassword(command); if (finalResult.IsSuccedded) { return new JsonResult(new { exist = true, changed = true }); } else { return new JsonResult(new { exist = true, changed = false }); } } else { return new JsonResult(new { exist = false, changed = false }); } } } public class RecaptchaResponse { [JsonProperty("success")] public bool Success { get; set; } [JsonProperty("challenge_ts")] public DateTimeOffset ChallengeTs { get; set; } [JsonProperty("hostname")] public string HostName { get; set; } }