Example #1
0
        public async Task <IActionResult> Register([FromBody] RegisterRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = new UserAccount
            {
                UserName    = model.Username,
                Email       = model.Email,
                IsBlocked   = false,
                Firstname   = model.FirstName,
                Lastname    = model.LastName,
                PhoneNumber = model.PhoneNumber
            };

            var result = await _userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                await _userManager.AddToRoleAsync(user, UserRoleString.User);

                await _signInManager.SignInAsync(user, false);

                return(Ok(JWTtoken.Generate(_configuration, model.Username, user)));
            }

            return(BadRequest(result.Errors.First().Description));
        }
Example #2
0
        public IActionResult AddItem([FromBody] ShoppingCartDto item)
        {
            _logger.LogInformation("Hello from dummy controller!");
            //_logger.LogInformation("User name: " + User.Identity.Name + "User role: " + User.Identity.ToString() + "Time: " + DateTime.Now.ToString("h:mm:ss tt") + "ShoppingCartController:CheckIfUserHasShoppingCart()");
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (item.itemQuantity == 0)
            {
                return(NoContent());
            }

            var userName = JWTtoken.GetTokenInfo(Request, "sub");

            if (userName == null)
            {
                return(NotFound("Could not get token"));
            }

            var itemFromDb = _itemsRepository.GetItem(item.itemId);

            if (itemFromDb == null)
            {
                return(NotFound("Item with given id not found"));
            }

            var shoppingCart = _shoppingCartRepository.Get(userName);

            _shoppingCartRepository.Add(shoppingCart, itemFromDb.Id, item.itemQuantity);

            return(Ok("Item(s) added successfully"));
        }
Example #3
0
        public async Task <IActionResult> Login([FromBody] LoginRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, false, false);

            if (result.Succeeded)
            {
                var appUser = _userManager.Users.SingleOrDefault(r => r.UserName == model.Username);
                if (appUser.IsBlocked)
                {
                    return(StatusCode((int)HttpStatusCode.Unauthorized, new ErrorResponse
                    {
                        Message = "Your account is blocked for indefinite ammount of time"
                    }));
                }

                var userRoles = await _userManager.GetRolesAsync(appUser);

                var role = userRoles.Contains(UserRoles.Admin.ToString())
                    ? UserRoles.Admin
                    : UserRoles.User;
                return(Ok(JWTtoken.Generate(_configuration, model.Username, appUser, role)));
            }

            return(StatusCode((int)HttpStatusCode.Unauthorized, new ErrorResponse
            {
                Message = "Username and password doesn't match"
            }));
        }
Example #4
0
        public async Task <IActionResult> Update_Info([FromBody] UpdateUserInfoRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var username = JWTtoken.GetUsernameFromToken(Request);

            if (username == null)
            {
                return(NotFound());
            }

            var emailIsUsed = _userManager.Users.Any(user => user.Email.Equals(model.Email) && !user.UserName.Equals(username));

            if (emailIsUsed)
            {
                return(BadRequest($"Email {model.Email} is already taken"));
            }

            var userAccount = await _userManager.FindByNameAsync(username);

            userAccount.Email       = model.Email;
            userAccount.Firstname   = model.FirstName;
            userAccount.Lastname    = model.LastName;
            userAccount.PhoneNumber = model.PhoneNumber;
            var result = await _userManager.UpdateAsync(userAccount);

            if (result.Succeeded)
            {
                return(Ok("User updated successfully"));
            }
            return(NotFound());
        }
        public async Task <IActionResult> GetMe()
        {
            var accName = JWTtoken.GetUsernameFromToken(Request);

            if (accName == null)
            {
                return(Unauthorized());
            }

            var account = await _userManager.FindByNameAsync(accName);

            if (account == null)
            {
                return(NotFound());
            }

            var response = new UserSelfInfoResponse
            {
                Email       = account.Email,
                Firstname   = account.Firstname,
                Lastname    = account.Lastname,
                PhoneNumber = account.PhoneNumber
            };

            return(Ok(response));
        }
Example #6
0
        public IActionResult CheckIfUserHasShoppingCart()
        {
            //_logger.LogInformation("User name: " + User.Identity.Name + "User role: " + User.Identity.ToString() + "Time: " + DateTime.Now.ToString("h:mm:ss tt") + "ShoppingCartController:CheckIfUserHasShoppingCart()");
            var userName = JWTtoken.GetTokenInfo(Request, "sub");

            if (userName == null)
            {
                return(NotFound("Wrong credentials"));
            }

            var shoppingCart = _shoppingCartRepository.Get(userName);

            return(Ok(shoppingCart.ShoppingCartItems != null));
        }
Example #7
0
        public IActionResult Update([FromBody] List <ShoppingCartDto> items)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var username = JWTtoken.GetTokenInfo(Request, "sub");

            if (username == null)
            {
                return(NotFound("Could not get token"));
            }

            ShoppingCart            cart = _shoppingCartRepository.Get(username);
            List <ShoppingCartItem> shoppingCartItems = new List <ShoppingCartItem>();

            if (items.Count == 0)
            {
                _shoppingCartRepository.Delete(username);
            }
            else
            {
                foreach (var item in items)
                {
                    var itemFromDb = _itemsRepository.GetItem(item.itemId);
                    if (itemFromDb == null)
                    {
                        return(NotFound("Item with given id not found"));
                    }

                    var newItem = new ShoppingCartItem
                    {
                        ItemId   = item.itemId,
                        Quantity = item.itemQuantity
                    };
                    shoppingCartItems.Add(newItem);
                }
                cart.ShoppingCartItems = shoppingCartItems;
                _shoppingCartRepository.Update(cart);
                _shoppingCartItemsRepository.DeleteOrphans();
            }

            return(Ok("Item(s) updated successfully"));
        }
Example #8
0
        public async Task <IActionResult> AddReview([FromBody] ReviewDto reviewData)
        {
            //reviewData.orderId here will not be sent
            if (reviewData.Stars < 1 || reviewData.Stars > 5)
            {
                return(BadRequest("Star evaluation missing or is in incorrect format"));
            }

            var username = JWTtoken.GetUsernameFromToken(Request);

            if (username == null)
            {
                return(BadRequest());
            }

            var acc = await _accountManager.FindByNameAsync(username);

            var newestOrder = _ordersRepository.GetUserPurchaseHistory(acc.Id)
                              .OrderByDescending(order => order.Date)
                              .FirstOrDefault();

            if (newestOrder == null)
            {
                return(BadRequest("Order not found"));
            }

            if (_reviewsRepository.GetById(newestOrder.Id) != null)
            {
                return(BadRequest("This order already has a review"));
            }

            Review newReview = new Review
            {
                Id          = newestOrder.Id,
                Description = reviewData.Description,
                Stars       = reviewData.Stars
            };
            Review addedReview = _reviewsRepository.Add(newReview);

            if (addedReview == null)
            {
                return(BadRequest("Review could not be added"));
            }
            return(Ok("Review added successfully"));
        }
Example #9
0
        public IActionResult Delete()
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var username = JWTtoken.GetTokenInfo(Request, "sub");

            if (username == null)
            {
                return(NotFound("Could not get token"));
            }

            _shoppingCartRepository.Delete(username);

            return(Ok("Item deleted successfully"));
        }
Example #10
0
        public IActionResult Get()
        {
            //_logger.LogInformation("User name: " + User.Identity.Name + "User role: " + User.Identity.ToString() + "Time: " + DateTime.Now.ToString("h:mm:ss tt") + "ShoppingCartController:CheckIfUserHasShoppingCart()");
            var userName = JWTtoken.GetTokenInfo(Request, "sub");

            if (userName == null)
            {
                return(NotFound("Wrong credentials"));
            }

            var shoppingCart = _shoppingCartRepository.Get(userName);

            if (shoppingCart == null)
            {
                return(NoContent());
            }
            if (shoppingCart.ShoppingCartItems == null)
            {
                return(NoContent());
            }
            if (shoppingCart.ShoppingCartItems.Count == 0)
            {
                return(NoContent());
            }

            var response = new List <ShoppingCartItemResponse>();

            foreach (var item in shoppingCart.ShoppingCartItems)
            {
                var newItem = new ShoppingCartItemResponse()
                {
                    Id        = item.ItemId,
                    ImagePath = item.Item.PictureLocation,
                    Price     = item.Item.Cost,
                    Quantity  = item.Quantity,
                    Title     = item.Item.Title
                };
                response.Add(newItem);
            }
            return(Ok(response));
        }
        public async Task <IActionResult> GetPurchaseHistory()
        {
            var username = JWTtoken.GetUsernameFromToken(Request);

            if (username == null)
            {
                return(NotFound());
            }

            var user = await _accountManager.FindByNameAsync(username);

            if (user == null)
            {
                return(NotFound());
            }

            var list = _ordersRepository.GetUserPurchaseHistory(user.Id).ToList();

            if (list.Count() != 0)
            {
                List <ShoppingHistoryItemResponse> purchases = list.Select(order => new ShoppingHistoryItemResponse
                {
                    Id    = order.Id,
                    Date  = order.Date,
                    Items = order.Items,
                    Cost  = order.Cost
                })
                                                               .ToList();

                return(Ok(purchases));
            }
            else
            {
                return(NotFound("Purchase history is empty!"));
            }
        }
Example #12
0
        public async Task <IActionResult> Change_Password([FromBody] ChangePasswordRequest request)
        {
            if (string.IsNullOrEmpty(request.CurrentPassword) || string.IsNullOrEmpty(request.NewPassword))
            {
                return(BadRequest("Please fill all the fields"));
            }

            var username = JWTtoken.GetUsernameFromToken(Request);

            if (username == null)
            {
                return(NotFound());
            }

            var user = await _userManager.FindByNameAsync(username);

            var result = await _userManager.ChangePasswordAsync(user, request.CurrentPassword, request.NewPassword);

            if (result.Succeeded)
            {
                return(Ok("Password changed successfully"));
            }
            return(BadRequest(result.Errors.First().Description));
        }
 public JWTAuthenticate(IOptions <JWTtoken> token)
 {
     jwtToken = token.Value;
 }
Example #14
0
        public IActionResult HandlePurchase([FromBody] PaymentRequest paymentInfo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //validating body
            if (paymentInfo.Amount <= 0)
            {
                return(BadRequest("Amount to pay must is invalid")); //change request code
            }
            if (!ValidCreditCardNumber(paymentInfo.Number))
            {
                return(BadRequest("Credit card info is invalid"));
            }
            if (paymentInfo.Holder.Length < 2 || paymentInfo.Holder.Length > 32)
            {
                return(BadRequest("Card holder name is invalid"));
            }
            if (paymentInfo.Exp_Year < 1970)
            {
                return(BadRequest("Card expiration year is invalid"));
            }
            if (paymentInfo.Exp_Month < 1 || paymentInfo.Exp_Month > 12)
            {
                return(BadRequest("Card expiration month is invalid"));
            }
            if (!ValidCvv(paymentInfo.Cvv))
            {
                return(BadRequest("Card cvv security code is invalid"));
            }


            //get user for further information
            var username = JWTtoken.GetUsernameFromToken(Request);
            var user     = _ordersRepository.GetOrderingUser(username);

            //check if payment ammount matches shopping cart total amount
            decimal ammount = (decimal)paymentInfo.Amount / 100;

            if (!_ordersRepository.PaymentEqualsShoppingCartSum(user, ammount))
            {
                return(BadRequest("Payment ammount does not match the shopping cart total ammount"));
            }

            //Get current user items in the shopping cart
            var items = _ordersRepository.GetShoppingCartItems(user);


            //make payment
            //*****make payment*****
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mock-payment-processor.appspot.com/v1/payment");

            httpWebRequest.Credentials = new NetworkCredential("technologines", "platformos");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method      = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = Newtonsoft.Json.JsonConvert.SerializeObject(paymentInfo);

                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }

            try
            {
                var             httpResponse        = (HttpWebResponse)httpWebRequest.GetResponse();
                PaymentResponse paymentResponseInfo = new PaymentResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    var paymentResponseJson = JObject.Parse(result);
                    paymentResponseInfo.Created_At = (DateTime)paymentResponseJson["created_at"];
                    paymentResponseInfo.Id         = (string)paymentResponseJson["id"];
                }
                //*****payment made******


                //create new order with those items list
                Order newOrder = new Order
                {
                    Cost        = ammount,
                    Date        = DateTime.Now,
                    UserId      = user.Id,
                    OrderedItem = items,
                    PaymentId   = paymentResponseInfo.Id,
                    PaymentDate = DateTime.Now
                };

                //save order to the database
                newOrder = _ordersRepository.Add(newOrder);

                //add new orders id to the ordered items
                foreach (var orderedItem in items)
                {
                    orderedItem.OrderId = newOrder.Id;
                }

                //clear shopping cart
                _ordersRepository.ClearUserShoppingCart(user);


                if (newOrder.PaymentId != null)
                {
                    _ordersRepository.ClearUserShoppingCart(user);
                    return(Ok("Purchase successful"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest("Payment went wrong"));
            }

            return(BadRequest("Payment went wrong"));
        }