public async Task <ActionResult <MessageModel> > DepositInWallet(WalletRequestModel requestModel)
        {
            //Wallet(IBAN), BankAcc(IBAN), Amount
            var    currentUser = HttpContext.User;
            string username    = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Username").Value;

            return(await _walletService.AddMoney(requestModel, currentUser, username));
        }
        public async Task <ActionResult <MessageModel> > PurchaseWithWallet(WalletRequestModel requestModel)
        {
            //Product, Reciever, Amount, Wallet(Iban, CardNumber, CardExpirationDate, CVV)
            var    currentUser = HttpContext.User;
            string username    = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Username").Value;

            return(await _walletService.SimulatePurchase(requestModel, currentUser, username));
        }
예제 #3
0
        public async Task <ActionResult <MessageModel> > AddMoney(WalletRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            var           amount              = requestModel.Amount;
            Wallet        wallet              = requestModel.Wallet;
            Wallet        walletExists        = null;
            ChargeAccount chargeAccount       = requestModel.ChargeAccount;
            ChargeAccount chargeAccountExists = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        walletExists = await dbContext.Wallets.FirstOrDefaultAsync(x => x.Iban == wallet.Iban);

                        if (walletExists != null)
                        {
                            chargeAccountExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAccount.Iban);

                            if (walletExists.CardExpirationDate < DateTime.Now)
                            {
                                responseMessage.Message = "Wallet Card is expired";
                                return(StatusCode(406, responseMessage));
                            }

                            return(await ValidateDepositAmountAndBankAccount(userAuthenticate, currentUser, walletExists, amount, chargeAccountExists, _transactionsService));
                        }
                        else
                        {
                            responseMessage.Message = "Wallet not found! Invalid Iban!";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Wallet or Bank account not found! Check Iban!";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
예제 #4
0
        public async Task <ActionResult <MessageModel> > SimulatePurchase(WalletRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            var    product      = requestModel.Product;
            var    reciever     = requestModel.Reciever;
            var    amount       = requestModel.Amount;
            Wallet wallet       = requestModel.Wallet;
            Wallet walletExists = null;
            WalletResponseModel  walletResponseModel = new WalletResponseModel();
            BCryptPasswordHasher _BCrypt             = new BCryptPasswordHasher();

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        walletExists = await dbContext.Wallets.FirstOrDefaultAsync(x => x.Iban == wallet.Iban);

                        if (walletExists != null && (wallet.CardNumber == walletExists.CardNumber && wallet.CardExpirationDate == walletExists.CardExpirationDate && _BCrypt.AuthenticateWalletCVV(wallet, walletExists)))
                        {
                            if (walletExists.CardExpirationDate < DateTime.Now)
                            {
                                responseMessage.Message = "Wallet Card is expired";
                                return(StatusCode(406, responseMessage));
                            }

                            return(await ValidatePurchaseAmountAndBankAccount(userAuthenticate, currentUser, walletExists, product, reciever, amount, _transactionsService));
                        }
                        else
                        {
                            responseMessage.Message = "Wallet not found! Invalid Credentials!";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Wallet not found! Invalid Credentials!";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
            }
            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
예제 #5
0
        //need wallet(Iban), username
        public async Task <ActionResult <MessageModel> > DeleteWallet(WalletRequestModel requestModel)
        {
            var currentUser = HttpContext.User;

            return(await _walletService.DeleteWallet(currentUser, requestModel));
        }
예제 #6
0
        public async Task <ActionResult <MessageModel> > CreateWallet(ClaimsPrincipal currentUser, WalletRequestModel requestModel)
        {
            string role     = "";
            var    username = requestModel.Username;
            Wallet wallet   = requestModel.Wallet;
            BCryptPasswordHasher _BCrypt = new BCryptPasswordHasher();

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                if (userAuthenticate != null)
                {
                    try
                    {
                        if (dbContext.Wallets.Where(x => x.UserId == userAuthenticate.Id).Count() < 7)
                        {
                            if (ValidateUser(userAuthenticate) && ValidateWallet(wallet))
                            {
                                wallet.UserId     = userAuthenticate.Id;
                                wallet.Iban       = IBANGenerator.GenerateIBANInVitoshaBank("Wallet", dbContext);
                                wallet.CardNumber = GenerateCardInfo.GenerateNumber(11);
                                var CVV = GenerateCardInfo.GenerateCVV(3);
                                wallet.Cvv = (_BCrypt.HashPassword(CVV));
                                wallet.CardExpirationDate = DateTime.Now.AddMonths(60);

                                await dbContext.AddAsync(wallet);

                                await dbContext.SaveChangesAsync();

                                SendEmail(userAuthenticate.Email, _config);
                                responseMessage.Message = "Wallet created succesfully!";
                                return(StatusCode(200, responseMessage));
                            }
                            else if (ValidateUser(userAuthenticate) == false)
                            {
                                responseMessage.Message = "User not found!";
                                return(StatusCode(404, responseMessage));
                            }
                            else if (ValidateWallet(wallet) == false)
                            {
                                responseMessage.Message = "Don't put negative value!";
                                return(StatusCode(400, responseMessage));
                            }
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "User not found!";
                        return(StatusCode(404, responseMessage));
                    }
                }

                responseMessage.Message = "User already has 7 wallets!";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                responseMessage.Message = "You are not autorized to do such actions!";
                return(StatusCode(403, responseMessage));
            }
        }
예제 #7
0
        public async Task <ActionResult <MessageModel> > DeleteWallet(ClaimsPrincipal currentUser, WalletRequestModel requestModel)
        {
            string role         = "";
            var    username     = requestModel.Username;
            Wallet wallet       = requestModel.Wallet;
            Wallet walletExists = null;


            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                var user = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                if (user != null)
                {
                    try
                    {
                        walletExists = await dbContext.Wallets.FirstOrDefaultAsync(x => x.Iban == wallet.Iban);
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "User doesn't have a Wallet";
                        return(StatusCode(400, responseMessage));
                    }
                }

                if (user == null)
                {
                    responseMessage.Message = "User not found";
                    return(StatusCode(404, responseMessage));
                }
                else if (walletExists == null)
                {
                    responseMessage.Message = "User doesn't have a Wallet";
                    return(StatusCode(400, responseMessage));
                }

                dbContext.Wallets.Remove(walletExists);
                await dbContext.SaveChangesAsync();

                responseMessage.Message = $"Succsesfully deleted {user.Username} Wallet!";
                return(StatusCode(200, responseMessage));
            }
            else
            {
                responseMessage.Message = "You are not autorized to do such actions!";
                return(StatusCode(403, responseMessage));
            }
        }