private ReturnObject AddSendTransactionToBlockchainAddress(UserSendTransaction sendTransaction) { try { using (var walletRepository = new WalletRepository(_connectionDb)) { var walletBusiness = new WalletBusiness.WalletBusiness(_vakapayRepositoryFactory, false); var wallet = walletRepository.FindByUserAndNetwork(sendTransaction.UserId, sendTransaction.Currency); if (wallet == null) { return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = $"UserId {sendTransaction.UserId} with {sendTransaction.Currency} wallet is not found!" }); } var res = walletBusiness.Withdraw(wallet, sendTransaction.To, sendTransaction.Amount, sendTransaction.PricePerCoin, sendTransaction.Description); return(res); } } catch (Exception e) { _logger.Error(e.Message); throw; } }
public ReturnObject AddSendTransaction(UserSendTransaction sendTransaction) { try { if (!string.IsNullOrEmpty(sendTransaction.Idem)) { using (var sendTransactionRepository = new UserSendTransactionRepository(_connectionDb)) { var idem = sendTransactionRepository.FindExistedIdem(sendTransaction); if (idem != null) { return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = $"Transaction with idem = {sendTransaction.Idem} is already existed!" }); } } } var walletBusiness = new WalletBusiness.WalletBusiness(_vakapayRepositoryFactory, false); var valid = walletBusiness.ValidateWithdrawAmount(sendTransaction.UserId, sendTransaction.SendByBlockchainAddress, sendTransaction.Amount, sendTransaction.Fee, sendTransaction.Currency); if (valid.Status == Status.STATUS_ERROR) { return(valid); } if (sendTransaction.SendByBlockchainAddress) { return(AddSendTransactionToBlockchainAddress(sendTransaction)); } else { return(AddSendTransactionToEmailAddress(sendTransaction)); } } catch (Exception e) { _logger.Error(e.Message); return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = e.Message }); } }
public ReturnObject AddSendTransaction(UserSendTransaction request) { var sendTransactionBusiness = new UserSendTransactionBusiness.UserSendTransactionBusiness(_repositoryFactory); ReturnObject result = null; try { var res = sendTransactionBusiness.AddSendTransaction(request); if (res.Status == Status.STATUS_ERROR) { result = new ReturnObject() { Status = Status.STATUS_ERROR, Message = res.Message }; } else { result = new ReturnDataObject() { Status = Status.STATUS_SUCCESS, Data = request }; } } catch (Exception e) { Console.WriteLine(e); result = new ReturnObject() { Status = Status.STATUS_ERROR, Message = e.Message }; } finally { sendTransactionBusiness.CloseDbConnection(); } return(result); }
private ReturnObject AddSendTransactionToEmailAddress(UserSendTransaction sendTransaction) { if (_connectionDb.State != ConnectionState.Open) { _connectionDb.Open(); } using (var userRepository = new UserRepository(_connectionDb)) { var sender = userRepository.FindById(sendTransaction.UserId); var receiver = userRepository.FindByEmailAddress(sendTransaction.To); if (sender == null) { return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = "Sender UserID not found in Vakapay system" }); } if (receiver == null) { return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = "Email address not found in Vakapay system" }); } using (var sendTransactionRepository = new UserSendTransactionRepository(_connectionDb)) { var insertTrx = _connectionDb.BeginTransaction(); var insertRes = sendTransactionRepository.Insert(sendTransaction); if (insertRes.Status == Status.STATUS_ERROR) { insertTrx.Rollback(); return(insertRes); } var internalTransactions = new InternalWithdrawTransaction() { SenderUserId = sendTransaction.UserId, ReceiverUserId = receiver.Id, Amount = sendTransaction.Amount, PricePerCoin = sendTransaction.PricePerCoin, Currency = sendTransaction.Currency, Idem = sendTransaction.Idem, Description = sendTransaction.Description }; using (var internalTransactionsRepository = new InternalTransactionsRepository(_connectionDb)) { insertRes = internalTransactionsRepository.Insert(internalTransactions); if (insertRes.Status == Status.STATUS_ERROR) { insertTrx.Rollback(); return(insertRes); } insertTrx.Commit(); var sendTrx = _connectionDb.BeginTransaction(); var senRes = SendInternalTransaction(internalTransactions); if (senRes.Status == Status.STATUS_ERROR) { sendTrx.Rollback(); internalTransactionsRepository.Update(internalTransactions); return(senRes); } var updateRes = internalTransactionsRepository.Update(internalTransactions); if (updateRes.Status == Status.STATUS_ERROR) { sendTrx.Rollback(); return(new ReturnObject() { Status = Status.STATUS_ERROR, Message = "Fail to update send status" }); } sendTrx.Commit(); var email = sender.Email; if (email != null) { var res = SendMailBusiness.SendMailBusiness.CreateDataEmail( "Notify send " + sendTransaction.Currency, email, internalTransactions.Amount, internalTransactions.Id, EmailTemplate.Sent, internalTransactions.Currency, _vakapayRepositoryFactory, true); res.Wait(); } var receiverEmail = receiver.Email; if (receiverEmail != null) { var res = SendMailBusiness.SendMailBusiness.CreateDataEmail( "Notify receive " + sendTransaction.Currency, receiverEmail, internalTransactions.Amount, internalTransactions.Id, EmailTemplate.ReceivedInternal, internalTransactions.Currency, _vakapayRepositoryFactory, true); res.Wait(); } return(new ReturnObject() { Status = Status.STATUS_SUCCESS, Message = "Transaction Sent!" }); } } } }
public string VerifyCodeTransaction([FromBody] JObject value) { try { var userModel = (User)RouteData.Values[ParseDataKeyApi.KEY_PASS_DATA_USER_MODEL]; var code = ""; var codeGG = ""; if (value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS)) { code = value[ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS].ToString(); } if (value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_2FA)) { codeGG = value[ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_2FA].ToString(); } bool isVerify = false; switch (userModel.IsTwoFactor) { case 1: if (!value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS)) { return(HelpersApi.CreateDataError(MessageApiError.PARAM_INVALID)); } isVerify = HelpersApi.CheckCodeGoogle(userModel.TwoFactorSecret, codeGG); break; case 2: if (!value.ContainsKey(ParseDataKeyApi.KEY_TWO_FA_VERIFY_CODE_TRANSACTION_SMS)) { return(HelpersApi.CreateDataError(MessageApiError.PARAM_INVALID)); } var secretAuthToken = ActionCode.FromJson(userModel.SecretAuthToken); if (string.IsNullOrEmpty(secretAuthToken.SendTransaction)) { return(HelpersApi.CreateDataError(MessageApiError.SMS_VERIFY_ERROR)); } isVerify = HelpersApi.CheckCodeSms(secretAuthToken.SendTransaction, code, userModel); break; case 0: isVerify = true; break; } if (!isVerify) { return(HelpersApi.CreateDataError(MessageApiError.SMS_VERIFY_ERROR)); } // userModel.Verification = (int) option; // su ly data gui len //to do var request = value.ToObject <SendTransaction>(); var userRequest = new UserSendTransaction() { UserId = userModel.Id, Type = "send", To = request.Detail.SendByAd ? request.Detail.RecipientWalletAddress : request.Detail.RecipientEmailAddress, SendByBlockchainAddress = request.Detail.SendByAd, Amount = request.Detail.VkcAmount, PricePerCoin = request.Detail.PricePerCoin, Currency = request.NetworkName, Description = request.Detail.VkcNote, }; ReturnObject result = null; result = AddSendTransaction(userRequest); return(JsonHelper.SerializeObject(result)); } catch (Exception e) { return(HelpersApi.CreateDataError(e.Message)); } }