Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 2
0
        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)));
        }
Exemplo n.º 4
0
 private void PageLoaded(object sender, RoutedEventArgs e)
 {
     if (!_initialized)
     {
         _initialized       = true;
         _viewModel         = new RatesViewModel();
         _viewModel.Failed += OnFailed;
         DataContext        = _viewModel;
     }
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 11
0
        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);
 }