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)); }
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)); }
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)); }
//need wallet(Iban), username public async Task <ActionResult <MessageModel> > DeleteWallet(WalletRequestModel requestModel) { var currentUser = HttpContext.User; return(await _walletService.DeleteWallet(currentUser, requestModel)); }
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)); } }
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)); } }