public ActionResult Create([Bind(Include = "Name, ParentCategoryId, UseParentCategoryNecessityValue, NecessityValue")] EditCategoryViewModel categoryViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(categoryViewModel));
            }
            var category = Mapper.Map <Category>(categoryViewModel);

            category.UserId = User.Identity.GetUserId();
            _db.Categories.Add(category);
            _db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public JsonResult Scan(string emailAddress)
        {
            var userId       = User.Identity.GetUserId();
            var emailAccount =
                _context.TrackedEmailAccounts.SingleOrDefault(
                    e => e.EmailAddress == emailAddress && e.UserId == userId);

            string message;

            if (emailAccount != null)
            {
                BackgroundJob.Enqueue(() => _emailAccountScannerService.Scan(emailAccount.Id));
                emailAccount.LastScanned = DateTime.Now;
                _context.SaveChanges();
                message = JsonConvert.SerializeObject(emailAccount);
            }
            else
            {
                message = "Sorry, an error occured.";
            }

            return(Json(message));
        }
Пример #3
0
        public ActionResult EditPurchase(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var userId           = User.Identity.GetUserId();
            var purchaseToUpdate = _db.Purchases.Where(x => x.UserId == userId).SingleOrDefault(x => x.Id == id);

            if (purchaseToUpdate == null)
            {
                return(HttpNotFound());
            }

            if (TryUpdateModel(purchaseToUpdate, "",
                               new[] { "CategoryId", "UseCategoryNecessityValue", "NecessityValue" }))
            {
                try
                {
                    _db.SaveChanges();

                    return(RedirectToAction("Index"));
                }
                catch (DataException)
                {
                    ModelState.AddModelError("",
                                             "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
                }
            }

            var editPurchaseViewModel = Mapper.Map <EditPurchaseViewModel>(purchaseToUpdate);

            editPurchaseViewModel.Categories      = GetCategories();
            editPurchaseViewModel.Sites           = GetSites();
            editPurchaseViewModel.NecessityValues = GetNecessityValues();
            return(View(editPurchaseViewModel));
        }
        public ActionResult Create([Bind(Include = "AlertType,CategoryCheckModels,NecessityValueCheckModels,Amount")] EditAlertViewModel alertViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(alertViewModel));
            }

            if (alertViewModel.AlertType == AlertType.Category)
            {
                var categoryAlert = new CategoryAlert
                {
                    AlertType   = alertViewModel.AlertType,
                    UserId      = User.Identity.GetUserId(),
                    CategoryIds = alertViewModel.CategoryCheckModels
                                  .Where(x => x.Checked).Select(x => x.Id).ToList(),
                    CostThreshold  = alertViewModel.Amount,
                    NumberOfMonths = 1
                };
                _db.Alerts.Add(categoryAlert);
            }
            else
            {
                var necessityAlert = new NecessityAlert
                {
                    AlertType         = alertViewModel.AlertType,
                    UserId            = User.Identity.GetUserId(),
                    NecessityValueIds = alertViewModel.NecessityValueCheckModels
                                        .Where(x => x.Checked).Select(x => x.Id).ToList(),
                    CostThreshold  = alertViewModel.Amount,
                    NumberOfMonths = 1
                };
                _db.Alerts.Add(necessityAlert);
            }

            _db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Пример #5
0
        public string RedirectToGoogleAuthorizationPage()
        {
            var codeRequest = Flow.CreateAuthorizationCodeRequest(RedirectUri);

            // TODO: Use a more cryptographically safe nonce generator
            var oauthState = $"{State}{new Random().Next(int.Parse(new string('9', 8))).ToString("D" + 8)}";

            // TODO: What should happen if an OAuth state is already in the database?
            // TODO: For now, upsert
            _context.GoogleOauthStates.AddOrUpdate(
                new GoogleOauthState {
                UserId = UserId, Value = oauthState
            });

            // TODO: Make sure the code request URL can be built before saving the state in the database
            _context.SaveChanges();
            codeRequest.State = oauthState;

            // HACK: Needed to add "&prompt=select_account" to force Google account selection screen
            return($"{codeRequest.Build()}&prompt=select_account+consent");
        }
        private void ScanAccountForNewMessages()
        {
            if (_emailAccount == null)
            {
                return;
            }

            var scannerFactory      = new EmailAccountScannerFactory();
            var emailAccountScanner = scannerFactory.GetScanner(_emailAccount.EmailAccountType);

            if (emailAccountScanner == null)
            {
                return;
            }

            var newMessages = emailAccountScanner.GetNewEmailMessages(_emailAccount.Id);

            if (newMessages.Count == 0)
            {
                return;
            }
            _context.EmailMessages.AddRange(newMessages);
            _context.SaveChanges();
        }