public async Task <IActionResult> Rates(RatesViewModel vm) { var rates = (await _SettingsRepository.GetSettingAsync <RatesSetting>()) ?? new RatesSetting(); rates.PrivateKey = vm.PrivateKey; rates.PublicKey = vm.PublicKey; rates.CacheInMinutes = vm.CacheMinutes; try { if (rates.GetCoinAverageSignature() != null) { await new CoinAverageRateProvider("BTC") { Authenticator = new TestCoinAverageAuthenticator(rates) }.TestAuthAsync(); } } catch { ModelState.AddModelError(nameof(vm.PrivateKey), "Invalid API key pair"); } if (!ModelState.IsValid) { return(View(vm)); } await _SettingsRepository.UpdateSetting(rates); ((BTCPayRateProviderFactory)_RateProviderFactory).CacheSpan = TimeSpan.FromMinutes(vm.CacheMinutes); StatusMessage = "Rate settings successfully updated"; return(RedirectToAction(nameof(Rates))); }
public async Task <IActionResult> Rates(RatesViewModel vm) { var rates = (await _SettingsRepository.GetSettingAsync <RatesSetting>()) ?? new RatesSetting(); rates.PrivateKey = vm.PrivateKey; rates.PublicKey = vm.PublicKey; rates.CacheInMinutes = vm.CacheMinutes; try { var service = GetCoinaverageService(vm, true); if (service != null) { await service.TestAuthAsync(); } } catch { ModelState.AddModelError(nameof(vm.PrivateKey), "Invalid API key pair"); } if (!ModelState.IsValid) { await FetchRateLimits(vm); return(View(vm)); } await _SettingsRepository.UpdateSetting(rates); StatusMessage = "Rate settings successfully updated"; return(RedirectToAction(nameof(Rates))); }
public async Task <IActionResult> Rates(RatesViewModel vm) { var rates = (await _SettingsRepository.GetSettingAsync <RatesSetting>()) ?? new RatesSetting(); rates.PrivateKey = vm.PrivateKey; rates.PublicKey = vm.PublicKey; rates.CacheInMinutes = vm.CacheMinutes; try { var service = GetCoinaverageService(vm, true); if (service != null) { await service.TestAuthAsync(); } } catch { ModelState.AddModelError(nameof(vm.PrivateKey), "Par de claves API inválidas"); } if (!ModelState.IsValid) { await FetchRateLimits(vm); return(View(vm)); } await _SettingsRepository.UpdateSetting(rates); StatusMessage = "Configuraciones de tarifas actualizadas exitosamente"; return(RedirectToAction(nameof(Rates))); }
private void PageLoaded(object sender, RoutedEventArgs e) { if (!_initialized) { _initialized = true; _viewModel = new RatesViewModel(); _viewModel.Failed += OnFailed; DataContext = _viewModel; } }
public IActionResult Rates() { var storeBlob = StoreData.GetStoreBlob(); var vm = new RatesViewModel(); vm.SetExchangeRates(GetSupportedExchanges(), storeBlob.PreferredExchange ?? CoinAverageRateProvider.CoinAverageName); vm.Spread = (double)(storeBlob.Spread * 100m); vm.Script = storeBlob.GetRateRules(_NetworkProvider).ToString(); vm.DefaultScript = storeBlob.GetDefaultRateRules(_NetworkProvider).ToString(); vm.AvailableExchanges = GetSupportedExchanges(); vm.ShowScripting = storeBlob.RateScripting; return View(vm); }
private static async Task FetchRateLimits(RatesViewModel vm) { var coinAverage = GetCoinaverageService(vm, false); if (coinAverage != null) { try { vm.RateLimits = await coinAverage.GetRateLimitsAsync(); } catch { } } }
public async Task<IActionResult> Rates() { var rates = (await _SettingsRepository.GetSettingAsync<RatesSetting>()) ?? new RatesSetting(); var vm = new RatesViewModel() { CacheMinutes = rates.CacheInMinutes, PrivateKey = rates.PrivateKey, PublicKey = rates.PublicKey }; await FetchRateLimits(vm); return View(vm); }
private static CoinAverageRateProvider GetCoinaverageService(RatesViewModel vm, bool withAuth) { var settings = new CoinAverageSettings() { KeyPair = (vm.PublicKey, vm.PrivateKey) }; if (!withAuth || settings.GetCoinAverageSignature() != null) { return new CoinAverageRateProvider() { Authenticator = settings }; } return null; }
public IActionResult Rates() { var exchanges = GetSupportedExchanges(); var storeBlob = CurrentStore.GetStoreBlob(); var vm = new RatesViewModel(); vm.SetExchangeRates(exchanges, storeBlob.PreferredExchange ?? CoinGeckoRateProvider.CoinGeckoName); vm.Spread = (double)(storeBlob.Spread * 100m); vm.StoreId = CurrentStore.Id; vm.Script = storeBlob.GetRateRules(_NetworkProvider).ToString(); vm.DefaultScript = storeBlob.GetDefaultRateRules(_NetworkProvider).ToString(); vm.AvailableExchanges = exchanges; vm.DefaultCurrencyPairs = storeBlob.GetDefaultCurrencyPairString(); vm.ShowScripting = storeBlob.RateScripting; return(View(vm)); }
public ActionResult Index() { var companyInfo = this._companyInfoProvider.GetCompanyInfo(); var users = this._usersProvider.GetAll(); var projects = this._projectsProvider.GetAll(); var pojectRates = this._projectRatesProvider.GetAll(); var model = new RatesViewModel() { Users = users, ProjectRates = pojectRates, CompanyInfo = companyInfo, UsersOptions = users.Select(u => new SelectListItem { Text = u.UserName, Value = u.UserId.ToString() }).ToList(), ProjectsOptions = projects.Select(u => new SelectListItem { Text = u.ProjectName, Value = u.ProjectId.ToString() }).ToList() }; return(View(model)); }
public async Task <IActionResult> Index() { RatesViewModel ratesViewModel = new RatesViewModel(); string userId = await GetCurrentUserIdAsync(); List <PendingRate> userPendingRates = ratesRepository.GetPendingsForUser(userId).ToList(); foreach (PendingRate pendingRate in userPendingRates) { ratesViewModel.ProductsToRate.Add(new ProductToRate { Id = pendingRate.Product.Id, Name = pendingRate.Product.Name, DateOfPurchase = pendingRate.PurchaseDate }); } ratesViewModel.GivenRates = ratesRepository .GetRatesGivenByUser(userId) .OrderByDescending(r => r.AddedDate) .ToList(); return(View(ratesViewModel)); }
public async Task <IActionResult> Rates(RatesViewModel model, string command = null, string storeId = null, CancellationToken cancellationToken = default) { model.SetExchangeRates(GetSupportedExchanges(), model.PreferredExchange); model.StoreId = storeId ?? model.StoreId; CurrencyPair[] currencyPairs = null; try { currencyPairs = model.DefaultCurrencyPairs? .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(p => CurrencyPair.Parse(p)) .ToArray(); } catch { ModelState.AddModelError(nameof(model.DefaultCurrencyPairs), "Invalid currency pairs (should be for example: BTC_USD,BTC_CAD,BTC_JPY)"); } if (!ModelState.IsValid) { return(View(model)); } if (model.PreferredExchange != null) { model.PreferredExchange = model.PreferredExchange.Trim().ToLowerInvariant(); } var blob = StoreData.GetStoreBlob(); model.DefaultScript = blob.GetDefaultRateRules(_NetworkProvider).ToString(); model.AvailableExchanges = GetSupportedExchanges(); blob.PreferredExchange = model.PreferredExchange; blob.Spread = (decimal)model.Spread / 100.0m; blob.DefaultCurrencyPairs = currencyPairs; if (!model.ShowScripting) { if (!GetSupportedExchanges().Select(c => c.Name).Contains(blob.PreferredExchange, StringComparer.OrdinalIgnoreCase)) { ModelState.AddModelError(nameof(model.PreferredExchange), $"Unsupported exchange ({model.RateSource})"); return(View(model)); } } RateRules rules = null; if (model.ShowScripting) { if (!RateRules.TryParse(model.Script, out rules, out var errors)) { errors = errors ?? new List <RateRulesErrors>(); var errorString = String.Join(", ", errors.ToArray()); ModelState.AddModelError(nameof(model.Script), $"Parsing error ({errorString})"); return(View(model)); } else { blob.RateScript = rules.ToString(); ModelState.Remove(nameof(model.Script)); model.Script = blob.RateScript; } } rules = blob.GetRateRules(_NetworkProvider); if (command == "Test") { if (string.IsNullOrWhiteSpace(model.ScriptTest)) { ModelState.AddModelError(nameof(model.ScriptTest), "Fill out currency pair to test for (like BTC_USD,BTC_CAD)"); return(View(model)); } var splitted = model.ScriptTest.Split(',', StringSplitOptions.RemoveEmptyEntries); var pairs = new List <CurrencyPair>(); foreach (var pair in splitted) { if (!CurrencyPair.TryParse(pair, out var currencyPair)) { ModelState.AddModelError(nameof(model.ScriptTest), $"Invalid currency pair '{pair}' (it should be formatted like BTC_USD,BTC_CAD)"); return(View(model)); } pairs.Add(currencyPair); } var fetchs = _RateFactory.FetchRates(pairs.ToHashSet(), rules, cancellationToken); var testResults = new List <RatesViewModel.TestResultViewModel>(); foreach (var fetch in fetchs) { var testResult = await(fetch.Value); testResults.Add(new RatesViewModel.TestResultViewModel() { CurrencyPair = fetch.Key.ToString(), Error = testResult.Errors.Count != 0, Rule = testResult.Errors.Count == 0 ? testResult.Rule + " = " + testResult.BidAsk.Bid.ToString(CultureInfo.InvariantCulture) : testResult.EvaluatedRule }); } model.TestRateRules = testResults; return(View(model)); } else // command == Save { if (StoreData.SetStoreBlob(blob)) { await _Repo.UpdateStore(StoreData); StatusMessage = "Rate settings updated"; } return(RedirectToAction(nameof(Rates), new { storeId = StoreData.Id })); } }
public RatesViewModelTest() { _ratesViewModel = new RatesViewModel(_unitOfWork); }