Пример #1
0
        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));
        }
Пример #2
0
        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());
        }