public async Task <IHttpActionResult> SendResetPasswordMail(string email)
        {
            if (string.IsNullOrEmpty(email))
            {
                return(this.BadRequest("Email is required!"));
            }

            ApplicationUser user = await this.UserManager.FindByNameAsync(email);

            if (user == null)
            {
                return(this.BadRequest("User with email: " + email + " is not found!"));
            }

            if (string.IsNullOrEmpty(user.PasswordHash))
            {
                return(this.BadRequest("The user with email: " + email + "does not have local login!"));
            }

            this.UserManager.SetUserTokenProvider("ForgottenPassword");
            string passwordResetToken = await this.UserManager.GeneratePasswordResetTokenAsync(user.Id);

            string            baseUrl           = ConfigurationManager.AppSettings["Site.BaseUrl"];
            string            resetPasswordPath = ConfigurationManager.AppSettings["Site.ResetPasswordPath"];
            string            resetPasswordUrl  = string.Concat(baseUrl, resetPasswordPath.TrimStart('/'), "/", HttpUtility.UrlEncode(email), "?token=", HttpUtility.UrlEncode(passwordResetToken));
            MailSendingFacade mailSender        = new MailSendingFacade();

            mailSender.SendForgottenPasswordMail(baseUrl, resetPasswordUrl, email);

            return(this.Ok());
        }
        public async Task <IHttpActionResult> Register(RegisterBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            ApplicationUser user = new ApplicationUser
            {
                UserName  = model.Email,
                Email     = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            IHttpActionResult errorResult = GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            MailSendingFacade mailSender = new MailSendingFacade();

            mailSender.SendNewUserRegisteredMail(model.Email, model.FirstName, model.LastName);

            return(Ok());
        }
        protected override void ProcessEntities(IEnumerable <DbEntityEntry <Order> > entitesToProcess)
        {
            foreach (DbEntityEntry <Order> orderEntry in entitesToProcess)
            {
                DbPropertyEntry statusIdProperty = orderEntry.Property("StatusId");
                bool            isStatusChanged  = orderEntry.State != EntityState.Added && statusIdProperty.IsModified && ((int)statusIdProperty.OriginalValue) != ((int)statusIdProperty.CurrentValue);
                if (orderEntry.State == EntityState.Added || isStatusChanged)
                {
                    Order order = orderEntry.Entity;

                    order.OrderStatusesHistory.Add(new OrderStatusesHistory()
                    {
                        StatusId         = order.StatusId,
                        StatusAssignDate = DateTime.UtcNow
                    });
                }

                if (isStatusChanged)
                {
                    Order order       = orderEntry.Entity;
                    int   oldStatusId = (int)statusIdProperty.OriginalValue;
                    int   newStatusId = (int)statusIdProperty.CurrentValue;

                    MailSendingFacade mailSender = new MailSendingFacade();
                    mailSender.SendOrderStatusChangedMail(order.Id, oldStatusId, newStatusId);

                    if (newStatusId == 4) //Изпълнена
                    {
                        RegisterExpenseTask registerExpenseTask = new RegisterExpenseTask();
                        registerExpenseTask.Execute(new RegisterExpenseContext()
                        {
                            OrderId       = order.Id,
                            UserId        = order.UserId,
                            ExpenseAmount = order.TotalPrice
                        });
                    }
                }

                if (orderEntry.State == EntityState.Added)
                {
                    IEnumerable <ArticleOrderCountModel> articleOrderCounts = orderEntry.Entity.OrderDetails.Select(o =>
                                                                                                                    new ArticleOrderCountModel()
                    {
                        ArticleId  = o.ItemId,
                        OrderCount = o.Quantity
                    }).ToArray();

                    UpdateArticlesOrdersCountsTask updateArticlesOrdersCountsTask = new UpdateArticlesOrdersCountsTask();
                    updateArticlesOrdersCountsTask.Execute(articleOrderCounts);
                }
            }
        }
        public async Task <IHttpActionResult> Submit(FeedbackModel feedback)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest());
            }

            FeedbackSubmissionsProvider feedbackProvider = new FeedbackSubmissionsProvider();
            await feedbackProvider.CreateFeedbackSubmission(feedback.Email, feedback.Name, feedback.Message);

            MailSendingFacade mailSender = new MailSendingFacade();

            mailSender.SendContactUsMail(feedback);

            return(this.Ok());
        }
        protected override async Task ExecuteCore(CancellationToken cancellationToken, RegisterExpenseContext context)
        {
            ExpensesProvider expensesProvider = new ExpensesProvider();
            decimal          newTotalAmount   = await expensesProvider.RegisterUserExpense(context.UserId, context.ExpenseAmount);

            if (newTotalAmount >= 1000)
            {
                IdentityResult result;
                using (ApplicationUserManager userManager = Startup.UserManagerFactory())
                {
                    result = await userManager.AddToRoleAsync(context.UserId.ToString(), "LoyalCustomer");
                }

                if (result.Succeeded)
                {
                    MailSendingFacade mailSender = new MailSendingFacade();
                    await mailSender.SendLoyalCustomerMail(context.UserId, context.OrderId);
                }
            }
        }
Exemple #6
0
        public async Task <ActionResult> Send()
        {
            Guid   userId       = new Guid("5c771db7-ee95-4bda-8bbe-f44eef49de79");
            string userIdString = userId.ToString();

            using (ApplicationUserManager userManager = Startup.UserManagerFactory())
            {
                userManager.SetUserTokenProvider("ForgottenPassword");

                string passwordResetToken = await userManager.GeneratePasswordResetTokenAsync(userIdString);

                //ApplicationUser user = await userManager.Users.FirstAsync(u => u.Id == userIdString);
                string            baseUrl           = ConfigurationManager.AppSettings["Site.BaseUrl"];
                string            resetPasswordPath = ConfigurationManager.AppSettings["Site.ResetPasswordPath"];
                string            resetPasswordUrl  = string.Concat(baseUrl, resetPasswordPath.TrimStart('/'), "/", passwordResetToken);
                MailSendingFacade mailSender        = new MailSendingFacade();
                mailSender.SendForgottenPasswordMail(baseUrl, resetPasswordUrl, userIdString);
            }

            return(this.Content("Done!"));
        }
Exemple #7
0
        public async Task <IHttpActionResult> ValidateAndSaveOrder(FullOrderModel order)
        {
            if (!this.ModelState.IsValid)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: invalid model state");

                return(this.BadRequest(this.ModelState));
            }

            if (order.Items.Count() == 0)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: no items");

                return(this.BadRequest("Empty order"));
            }

            OrderItemsGrouper        itemsGrouper    = new OrderItemsGrouper();
            IList <OrderedItemModel> normalizedItems = itemsGrouper.NormalizeOrderedItems(order.Items.ToList());

            if (normalizedItems == null)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: grouping error");

                return(this.BadRequest("Different prices of the same item"));
            }

            OrderValidator orderValidator     = new OrderValidator();
            bool           areOrderItemsValid = await orderValidator.ValidateOrderItems(normalizedItems);

            if (!areOrderItemsValid)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: invalid quantities");

                return(this.BadRequest("Invalid quantities"));
            }

            bool freeShipping = order.Coupones != null && order.Coupones.Any(c => c.FreeShipping.Value);

            IModelTracker <DeliveryMethodModel> deliveryMethodModelTracker = new DeliveryMethodsTrackerFactory().GetDeliveryMethodsTracker(freeShipping);
            IModelTracker <PaymentMethodModel>  paymentMethodModelTracker  = new PaymentMethodsTrackerFactory().GetPaymentMethodsTracker(freeShipping);
            bool isLoyal = deliveryMethodModelTracker is FreeShippingDeliveryMethodsTracker;
            DeliveryMethodsProvider deliveryMethodsProvider = new DeliveryMethodsProvider(deliveryMethodModelTracker);
            PaymentMethodsProvider  paymentMethodsProvider  = new PaymentMethodsProvider(paymentMethodModelTracker);

            if (order.Coupones != null)
            {
                bool areCouponesValid = await orderValidator.ValidateCoupones(this.User.Identity.GetUserId(), order);

                if (!areCouponesValid)
                {
                    Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: invalid coupones");

                    return(this.BadRequest("Invalid coupones"));
                }
            }

            bool areOrderPricesValid = await orderValidator.ValidatePrices(order, deliveryMethodsProvider, paymentMethodsProvider);

            if (!areOrderPricesValid)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: invalid prive");

                return(this.BadRequest("Invalid price"));
            }

            StocksProvider stocksProvider = new StocksProvider();
            bool           stockQuantitiesUpdatedSuccessfully = await stocksProvider.UpdateStocks(
                normalizedItems.Select(o => new StockChangeModel(o.ArticleId.Value, o.SizeId.Value, o.ColorId, -o.Quantity.Value)),
                Logger.Current);

            if (!stockQuantitiesUpdatedSuccessfully)
            {
                Logger.Current.LogWarning("Orders.ValidateAndSaveOrder: invalid quantities (update stocks)");

                return(this.BadRequest("Invalid quantities"));
            }


            Task <DeliveryMethodModel> getDeliveryMethodTask = deliveryMethodsProvider.GetDeliveryMethodById(order.DeliveryMethodId.Value);
            Task <PaymentMethodModel>  getPaymentMethodTask  = paymentMethodsProvider.GetPaymentMethodById(order.PaymentMethodId.Value);

            DeliveryMethodModel deliveryMethod = await getDeliveryMethodTask;
            PaymentMethodModel  paymentMethod  = await getPaymentMethodTask;

            Order newOrder = new Order();

            newOrder.UserId             = new Guid(this.User.Identity.GetUserId());
            newOrder.DeliveryMerchant   = deliveryMethod.Name;
            newOrder.DeliveryPrice      = deliveryMethod.DeliveryPrice;
            newOrder.PaymentMethodId    = paymentMethod.Id;
            newOrder.HasCommission      = paymentMethod.ApplyDeliveryTax;
            newOrder.CommissionPercents = deliveryMethod.CODTax;
            newOrder.ShippingPrice      = order.Total.Shipping.Value;
            newOrder.ItemsPrice         = order.Total.Order.Value;
            newOrder.TotalPrice         = order.Total.Full.Value;
            newOrder.StatusId           = 1;
            newOrder.DateCreated        = DateTime.UtcNow;

            List <OrderDetail> orderDetails = new List <OrderDetail>();

            foreach (OrderedItemModel orderedItem in normalizedItems)
            {
                OrderDetail orderDetail = new OrderDetail();
                orderDetail.ItemId    = orderedItem.ArticleId.Value;
                orderDetail.SizeId    = orderedItem.SizeId.Value;
                orderDetail.ColorId   = orderedItem.ColorId;
                orderDetail.Quantity  = orderedItem.Quantity.Value;
                orderDetail.ItemPrice = orderedItem.Price.Value;

                orderDetails.Add(orderDetail);
            }

            OrdersProvider ordersProvider = new OrdersProvider();
            int            newOrderId     = await ordersProvider.SaveOrder(newOrder, orderDetails);

            MailSendingFacade mailSender = new MailSendingFacade();

            mailSender.SendNewOrderMail(newOrderId);

            return(this.Ok(newOrderId));
        }
        public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            if (error != null)
            {
                return(Redirect(Url.Content("~/") + "?code=0&data=" + Uri.EscapeDataString(error) + "#/autherror"));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }

            ApplicationUser user = await UserManager.FindByNameAsync(externalLogin.Email);

            if (user == null)
            {
                user = new ApplicationUser()
                {
                    UserName  = externalLogin.Email,
                    Email     = externalLogin.Email,
                    FirstName = externalLogin.FirstName,
                    LastName  = externalLogin.LastName
                };

                user.Logins.Add(new IdentityUserLogin()
                {
                    LoginProvider = externalLogin.LoginProvider,
                    ProviderKey   = externalLogin.ProviderKey,
                    UserId        = user.Id
                });

                IdentityResult result = await UserManager.CreateAsync(user);

                IHttpActionResult errorResult = GetErrorResult(result);

                if (errorResult != null)
                {
                    return(errorResult);
                }

                MailSendingFacade mailSender = new MailSendingFacade();
                mailSender.SendNewUserRegisteredMail(externalLogin.Email, externalLogin.FirstName, externalLogin.LastName);
            }
            else
            {
                bool isExistingLogin = user.Logins.Any(l => l.LoginProvider == externalLogin.LoginProvider && l.ProviderKey == externalLogin.ProviderKey);
                if (!isExistingLogin)
                {
                    user.Logins.Add(new IdentityUserLogin()
                    {
                        LoginProvider = externalLogin.LoginProvider,
                        ProviderKey   = externalLogin.ProviderKey,
                        UserId        = user.Id
                    });

                    await UserManager.UpdateAsync(user);
                }
            }

            Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
            ClaimsIdentity oAuthIdentity = await UserManager.CreateIdentityAsync(user,
                                                                                 OAuthDefaults.AuthenticationType);

            ClaimsIdentity cookieIdentity = await UserManager.CreateIdentityAsync(user,
                                                                                  CookieAuthenticationDefaults.AuthenticationType);

            //AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user);
            Authentication.SignIn(/*properties, */ oAuthIdentity, cookieIdentity);

            return(Ok());
        }