Пример #1
0
        public bool UpdateUser(UpdateInfoModel updatedInfoModel, WebshopUser userToUpdate, ShippingAddress address)
        {
            userToUpdate.Email       = updatedInfoModel.Email;
            userToUpdate.FirstName   = updatedInfoModel.FirstName;
            userToUpdate.LastName    = updatedInfoModel.LastName;
            userToUpdate.PhoneNumber = updatedInfoModel.PhoneNumber;


            bool addressChanged = updatedInfoModel.PostalCode != address.PostalCode ||
                                  updatedInfoModel.StreetNumber != address.StreetNumber ||
                                  updatedInfoModel.StreetName != address.StreetName ||
                                  updatedInfoModel.CityName != address.CityName;

            if (addressChanged)
            {
                ShippingAddress userAddress = new ShippingAddress
                {
                    PostalCode     = updatedInfoModel.PostalCode,
                    StreetNumber   = updatedInfoModel.StreetNumber,
                    StreetName     = updatedInfoModel.StreetName,
                    CityName       = updatedInfoModel.CityName,
                    Country        = updatedInfoModel.Country,
                    Province       = updatedInfoModel.Province,
                    AssociatedUser = userToUpdate.UserGuid
                };

                userToUpdate.ShippingAddresses = new List <ShippingAddress>(new ShippingAddress[] { userAddress });
            }

            context.SaveChanges();
            return(addressChanged);
        }
Пример #2
0
        public async Task <string> GenerateTokenLogin(WebshopUser user)
        {
            List <Claim> claims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Sub, user.Email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.Sid, user.Id),
                new Claim(ClaimTypes.Name, user.FirstName),
                new Claim(ClaimTypes.UserData, user.UserGuid.ToString())
            };

            IList <Claim> userClaims = await userManager.GetClaimsAsync(user);

            SymmetricSecurityKey key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config["Token:Key"]));
            SigningCredentials   credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512);

            JwtSecurityToken securityToken = new JwtSecurityToken(
                config["Token:Issuer"],
                config["Token:Issuer"],
                claims,
                expires: DateTime.UtcNow.AddHours(24),
                signingCredentials: credentials);

            return(new JwtSecurityTokenHandler().WriteToken(securityToken));
        }
Пример #3
0
        public async Task <IActionResult> GetUserOrders()
        {
            string      userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
            WebshopUser user   = await UserManager.FindByIdAsync(userId);

            if (user != null)
            {
                List <OrderOverviewModel> orders = OrderRepository.GetAllUserOrders(user.UserGuid);

                // Can be done in subquery in repository but this also works
                foreach (OrderOverviewModel order in orders)
                {
                    order.Products = new List <ProductOverviewModel>();
                    foreach (ProductOrder productOrder in order.OrderedProducts)
                    {
                        order.Products.Add(ProductRepository.GetOverviewModel(productOrder));
                    }

                    // Set the null to erase duplicate data
                    order.OrderedProducts = null;
                }

                return(Ok(new { orders }));
            }
            else
            {
                return(BadRequest());
            }
        }
Пример #4
0
        public async Task <IActionResult> AdminCheck()
        {
            string      userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid)?.Value;
            WebshopUser user   = await UserManager.FindByIdAsync(userId);

            return(Ok(new { user.isAdmin }));
        }
Пример #5
0
        public async Task <IActionResult> Login([FromBody] LoginViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            LoginResponse loginResponse = new LoginResponse();
            WebshopUser   user          = await UserManager.FindByEmailAsync(model.Email);

            if (user != null)
            {
                Microsoft.AspNetCore.Identity.SignInResult result =
                    await SignInManager.CheckPasswordSignInAsync(user, model.Password, true);

                if (result.Succeeded)
                {
                    string token = await TokenGenerator.GenerateTokenLogin(user);

                    loginResponse.Success = true;
                    loginResponse.Token   = token;

                    return(Ok(new { loginResponse }));
                }

                loginResponse.Success = false;
                return(Ok(new { loginResponse }));
            }

            loginResponse.Success = false;
            loginResponse.Error   = "User could not be found. Or Password does not match login.";
            return(Ok(new { loginResponse }));
        }
Пример #6
0
        public void Delete(string id)
        {
            WebshopUser userToDelete = UserRepository.FindById(id);

            AddressRepository.DeleteAddress(userToDelete.UserGuid);
            UserRepository.DeleteUser(userToDelete);
        }
Пример #7
0
        public IActionResult GetUserInformation(string id)
        {
            WebshopUser     user    = UserRepository.FindById(id);
            ShippingAddress address = AddressRepository.GetByGuid(user.UserGuid);

            user.ShippingAddresses = new List <ShippingAddress>(new[] { address });
            return(Json(new { user }));
        }
Пример #8
0
        public async Task <IActionResult> AddOrder([FromBody] OrderUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                string      userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
                WebshopUser user   = await UserManager.FindByIdAsync(userId);

                if (user != null)
                {
                    decimal             totalPriceOrder = CalculateOrderPrice(model.Products);
                    List <ProductOrder> productOrders   = GetOrderProducts(model.Products);

                    decimal finalPrice = totalPriceOrder;
                    decimal discount   = 0;

                    if (model.Coupon != null)
                    {
                        var discountValidation = ValidateCouponCode(model.Coupon, totalPriceOrder);
                        if (discountValidation != null)
                        {
                            model.Coupon = discountValidation.Item1;
                            discount     = discountValidation.Item2;
                            finalPrice   = discountValidation.Item3;
                        }
                    }

                    Order newOrder = new Order
                    {
                        Guid                    = Guid.NewGuid(),
                        Paid                    = false,
                        Shipped                 = false,
                        OrderCreated            = DateTime.Now,
                        TotalPrice              = totalPriceOrder,
                        Discount                = discount,
                        FinalPrice              = finalPrice,
                        CouponCode              = model.Coupon,
                        OrderedProducts         = productOrders,
                        AssociatedUserGuid      = user.UserGuid,
                        OrderedFromGuestAccount = false,
                        EmailConfirmationSent   = false,
                        OrderStatus             = OrderStatus.Received
                    };

                    OrderRepository.AddOrder(newOrder);
                    return(Ok(newOrder.Guid));
                }
            }

            return(BadRequest());
        }
Пример #9
0
        public async Task <IActionResult> Register([FromBody] RegisterViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            WebshopUser newUser = new WebshopUser
            {
                UserGuid      = Guid.NewGuid(),
                UserName      = model.Email,
                Email         = model.Email,
                FirstName     = model.FirstName,
                LastName      = model.LastName,
                FavoriteLists = new List <FavoriteList>(),
                DateCreated   = DateTime.Now
            };

            ShippingAddress userAddress = new ShippingAddress
            {
                PostalCode     = model.PostalCode,
                StreetNumber   = model.StreetNumber,
                StreetName     = model.StreetName,
                CityName       = model.CityName,
                Country        = model.Country,
                Province       = model.Province,
                AssociatedUser = newUser.UserGuid
            };

            newUser.PhoneNumber       = model.PhoneNumber;
            newUser.ShippingAddresses = new List <ShippingAddress>(new[] { userAddress });

            IdentityResult registerResult = await UserManager.CreateAsync(newUser, model.Password);

            RegisterResponse registerResponse = new RegisterResponse();

            if (registerResult.Succeeded)
            {
                registerResponse.Success = true;
                MailService.SendWelcomeEmail(model.FirstName, model.LastName, model.Email);
                return(Ok(new { registerResponse }));
            }

            List <string> errors = registerResult.Errors.Select(error => error.Description).ToList();

            registerResponse.Success = false;
            registerResponse.Errors  = errors;
            return(Ok(new { registerResponse }));
        }
Пример #10
0
        public async Task <IActionResult> GetAccountInformation()
        {
            string      userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid)?.Value;
            WebshopUser user   = await UserManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(BadRequest());
            }
            ShippingAddress address = AddressRepository.GetByGuid(user.UserGuid);

            return(Ok(new
            {
                address, email = user.Email, name = user.FirstName, lastName = user.LastName,
                phone = user.PhoneNumber
            }));
        }
Пример #11
0
        public async void Update([FromBody] UpdateInfoModel updatedInfoModel, string id)
        {
            WebshopUser userToUpdate = UserRepository.FindById(id);

            if (userToUpdate.Email != updatedInfoModel.Email)
            {
                string token = await UserManager.GenerateChangeEmailTokenAsync(userToUpdate, updatedInfoModel.Email);

                await UserManager.ChangeEmailAsync(userToUpdate, updatedInfoModel.Email, token);
            }

            ShippingAddress address = AddressRepository
                                      .GetByGuid(userToUpdate.UserGuid);
            bool addressChanged = UserRepository.UpdateUser(updatedInfoModel, userToUpdate, address);

            if (addressChanged)
            {
                AddressRepository.DeleteAddress(userToUpdate.UserGuid);
            }
        }
Пример #12
0
        public async Task <IActionResult> UpdateAccountInformation([FromBody] UpdateInfoModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            string      userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid)?.Value;
            WebshopUser user   = await UserManager.FindByIdAsync(userId);

            ShippingAddress currentAddress = AddressRepository.GetByGuid(user.UserGuid);

            if (model.PostalCode != currentAddress.PostalCode)
            {
                ShippingAddress userAddress = new ShippingAddress
                {
                    PostalCode     = model.PostalCode,
                    StreetNumber   = model.StreetNumber,
                    StreetName     = model.StreetName,
                    CityName       = model.CityName,
                    Country        = model.Country,
                    Province       = model.Province,
                    AssociatedUser = user.UserGuid
                };
                AddressRepository.DeleteAddress(user.UserGuid);
                user.ShippingAddresses = new List <ShippingAddress>(new[] { userAddress });
            }

            user.PhoneNumber = model.PhoneNumber;
            user.FirstName   = model.FirstName;
            user.LastName    = model.LastName;

            IdentityResult result = await UserManager.UpdateAsync(user);

            if (result.Succeeded)
            {
                return(Ok());
            }

            return(BadRequest());
        }
Пример #13
0
 public Task <string> GenerateTokenReset(WebshopUser user)
 {
     throw new NotImplementedException();
 }
Пример #14
0
 public void DeleteUser(WebshopUser user)
 {
     context.Users.Remove(user);
     context.SaveChanges();
 }