public IActionResult BookUser(BookingViewModel model) { string EncodedResponse = Request.Form["g-recaptcha-response"]; var isCaptchaValid = CaptchaResponse.Validate(EncodedResponse); if (!ModelState.IsValid) { return(View(model)); } var shop = this._context.Shops.FirstOrDefault(s => s.Id == model.ShopId); var user = this._context.Users.FirstOrDefault(u => u.Id == model.UserId); var shopServices = this._context.ShopServices.FirstOrDefault(ss => ss.Id == model.ShopServiceId); var tacId = Guid.Parse("0919fe8a-f05b-4f1f-a0ee-db37664fad38"); var tac = this._context.TermAndConditions.FirstOrDefault(t => t.Id == tacId); if (isCaptchaValid) { if (shop != null) { if (user != null) { if (shopServices != null) { Booking bookings = new Booking() { Id = Guid.NewGuid(), UserId = model.UserId.Value, ShopId = model.ShopId.Value, ShopServiceId = model.ShopServiceId.Value, UserName = model.UserName, ContactNumber = model.ContactNumber, ShopServiceName = model.TitleShopService, ShopServicePrice = model.PriceShopService, ShopServiceDescription = model.DescriptionShopService, AdditionalDescription = model.AdditionalDescription, ReserveStatus = Infrastructures.Domain.Enums.ReserveStatus.Pending, Address = model.Address, UpdatedAt = DateTime.UtcNow, DateAndTime = model.DateAndTime, CreatedAt = DateTime.UtcNow, TimeStamps = DateTime.UtcNow, TermAndConditionId = tacId, TermAndCondition = tac, }; WebIDS.SetBookingId(bookings.Id); this._context.Bookings.Add(bookings); shop.LikesEnabled = true; shop.RatingsEnabled = true; shop.CommentsEnabled = true; _context.Shops.Update(shop); this._context.SaveChanges(); } else { return(Redirect("~/home/index")); } } } } else { ModelState.AddModelError("", "Error From Google ReCaptcha :" + isCaptchaValid); return(View()); } //return RedirectToAction("Index", new { ShopId = model.ShopId, UserId = model.UserId }); //return Redirect("~/shop/shop-items/" + model.ShopId + "/" + model.UserId); return(Redirect("~/booking/book-review/" + WebIDS.GetBookingId)); }
public async Task <IActionResult> Login(LoginViewModel model) { string EncodedResponse = Request.Form["g-recaptcha-response"]; var isCaptchaValid = CaptchaResponse.Validate(EncodedResponse); if (!ModelState.IsValid) { return(View(model)); } var user = this._context.Users.FirstOrDefault(u => u.EmailAddress.ToLower() == model.EmailAddress.ToLower()); if (isCaptchaValid) { if (user != null) { var userRole = this._context.UserRoles.FirstOrDefault(ur => ur.UserId == user.Id); var shop = this._context.Shops.FirstOrDefault(s => s.UserId == user.Id); if (BCrypt.BCryptHelper.CheckPassword(model.Password, user.Password)) { if (user.LoginStatus == Infrastructures.Domain.Enums.LoginStatus.Locked) { ModelState.AddModelError("", "Your account has been locked "); return(View()); } else if (user.LoginStatus.Equals(Infrastructures.Domain.Enums.LoginStatus.Unverified)) { ModelState.AddModelError("", "Please verify your account first."); return(View()); } else if (user.LoginStatus.Equals(Infrastructures.Domain.Enums.LoginStatus.NeedToChangePassword)) { user.LoginRetries = 0; user.LoginStatus = Infrastructures.Domain.Enums.LoginStatus.Active; this._context.Users.Update(user); this._context.SaveChanges(); var roles = this._context.UserRoles.Where(ur => ur.UserId == user.Id).Select(ur => ur.Role).ToList(); var groupIds = this._context.UserGroups.Where(ug => ug.Id == user.Id).Select(ur => ur.GroupId).ToList(); var groups = this._context.Groups.Where(g => groupIds.Contains(g.Id.Value)).ToList(); //var shops = this._context.Shops.Where(s => s.Id == user.Id).Where(s => ).ToList(); WebUser.SetUser(user, roles, groups); await this.SignIn(); return(RedirectToAction("~/account/change-password")); } else if (userRole.Role == Infrastructures.Domain.Enums.Role.Admin && user.LoginStatus == Infrastructures.Domain.Enums.LoginStatus.Active) { user.LoginRetries = 0; user.LoginStatus = Infrastructures.Domain.Enums.LoginStatus.Active; this._context.Users.Update(user); this._context.SaveChanges(); var roles = this._context.UserRoles.Where(ur => ur.UserId == user.Id).Select(ur => ur.Role).ToList(); var groupIds = this._context.UserGroups.Where(ug => ug.Id == user.Id).Select(ur => ur.GroupId).ToList(); var groups = this._context.Groups.Where(g => groupIds.Contains(g.Id.Value)).ToList(); WebUser.SetUser(user, roles, groups); WebIDS.SetUserId(user.Id, user.UserName, user.EmailAddress, roles, groups); WebIDS.SetAdminId(user.Id, roles, groups); //Send email login alert! this.EmailSendNow( EmailLoginAlert(user.UserName), model.EmailAddress, user.UserName, "Welcome To Fixit.PH" ); await this.SignIn(); return(RedirectPermanent("~/manage/users")); } else if (userRole.Role == Infrastructures.Domain.Enums.Role.ShopAdmin && user.LoginStatus == LoginStatus.Active && shop.Id != null) { user.LoginStatus = LoginStatus.Active; user.LoginRetries = 0; this._context.Users.Update(user); this._context.SaveChanges(); var roles = this._context.UserRoles.Where(ur => ur.UserId == user.Id).Select(ur => ur.Role).ToList(); var groupIds = this._context.UserGroups.Where(ug => ug.Id == user.Id).Select(ur => ur.GroupId).ToList(); var groups = this._context.Groups.Where(g => groupIds.Contains(g.Id.Value)).ToList(); WebIDS.SetShopId(shop.Id); WebIDS.SetUserId(user.Id, user.UserName, user.EmailAddress, roles, groups); WebIDS.SetShopAdminId(user.Id, roles, groups); await this.SignIn(); this.EmailSendNow( EmailLoginAlert(user.UserName), model.EmailAddress, user.UserName, "Welcome To Fixit.PH" ); return(RedirectPermanent("~/shop/my-dashboard")); } else if (userRole.Role == Infrastructures.Domain.Enums.Role.User && user.LoginStatus == Infrastructures.Domain.Enums.LoginStatus.Active) { user.LoginRetries = 0; user.LoginStatus = Infrastructures.Domain.Enums.LoginStatus.Active; this._context.Users.Update(user); this._context.SaveChanges(); var roles = this._context.UserRoles.Where(ur => ur.UserId == user.Id).Select(ur => ur.Role).ToList(); var groupIds = this._context.UserGroups.Where(ug => ug.Id == user.Id).Select(ur => ur.GroupId).ToList(); var groups = this._context.Groups.Where(g => groupIds.Contains(g.Id.Value)).ToList(); //var shops = this._context.Shops.Where(s => ).Select(s => s.Id).ToList; WebUser.SetUser(user, roles, groups); WebIDS.SetUserId(user.Id, user.UserName, user.EmailAddress, roles, groups); WebIDS.SetPublicUserId(user.Id, roles, groups); //Send email login alert! this.EmailSendNow( EmailLoginAlert(user.UserName), model.EmailAddress, user.UserName, "Welcome To Fixit.PH" ); await this.SignIn(); return(RedirectPermanent("~/shop/index")); } else { user.LoginRetries = user.LoginRetries + 1; if (user.LoginRetries >= 3) { ModelState.AddModelError("", "Your account has been locked please contact an Administrator."); user.LoginStatus = Infrastructures.Domain.Enums.LoginStatus.Locked; } this._context.Users.Update(user); this._context.SaveChanges(); ModelState.AddModelError("", "Invalid Login."); return(View()); } } } else { ModelState.AddModelError("", "Invalid login. Please create your account first."); return(View()); } } else { ModelState.AddModelError("", "Error From Google ReCaptcha :" + isCaptchaValid); return(View()); } return(View()); }