Rename and clean up properties

This commit is contained in:
Dennis Reimann
2024-04-04 10:44:08 +02:00
parent 71ba5d9c4c
commit df4d370524
11 changed files with 135 additions and 146 deletions

View File

@@ -35,16 +35,16 @@ namespace BTCPayServer.Controllers
var walletEnabled = derivationSchemes.Any(scheme => !string.IsNullOrEmpty(scheme.Value) && scheme.Enabled); var walletEnabled = derivationSchemes.Any(scheme => !string.IsNullOrEmpty(scheme.Value) && scheme.Enabled);
var lightningEnabled = lightningNodes.Any(ln => !string.IsNullOrEmpty(ln.Address) && ln.Enabled); var lightningEnabled = lightningNodes.Any(ln => !string.IsNullOrEmpty(ln.Address) && ln.Enabled);
var cryptoCode = _NetworkProvider.DefaultNetwork.CryptoCode; var cryptoCode = _networkProvider.DefaultNetwork.CryptoCode;
var vm = new StoreDashboardViewModel var vm = new StoreDashboardViewModel
{ {
WalletEnabled = walletEnabled, WalletEnabled = walletEnabled,
LightningEnabled = lightningEnabled, LightningEnabled = lightningEnabled,
LightningSupported = _NetworkProvider.GetNetwork<BTCPayNetwork>(cryptoCode)?.SupportLightning is true, LightningSupported = _networkProvider.GetNetwork<BTCPayNetwork>(cryptoCode)?.SupportLightning is true,
StoreId = CurrentStore.Id, StoreId = CurrentStore.Id,
StoreName = CurrentStore.StoreName, StoreName = CurrentStore.StoreName,
CryptoCode = cryptoCode, CryptoCode = cryptoCode,
Network = _NetworkProvider.DefaultNetwork, Network = _networkProvider.DefaultNetwork,
IsSetUp = walletEnabled || lightningEnabled IsSetUp = walletEnabled || lightningEnabled
}; };

View File

@@ -100,7 +100,7 @@ namespace BTCPayServer.Controllers
blob.EmailRules = vm.Rules; blob.EmailRules = vm.Rules;
if (store.SetStoreBlob(blob)) if (store.SetStoreBlob(blob))
{ {
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
message += "Store email rules saved. "; message += "Store email rules saved. ";
} }
@@ -237,7 +237,7 @@ namespace BTCPayServer.Controllers
var storeBlob = store.GetStoreBlob(); var storeBlob = store.GetStoreBlob();
storeBlob.EmailSettings.Password = null; storeBlob.EmailSettings.Password = null;
store.SetStoreBlob(storeBlob); store.SetStoreBlob(storeBlob);
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = "Email server password reset"; TempData[WellKnownTempData.SuccessMessage] = "Email server password reset";
} }
if (useCustomSMTP) if (useCustomSMTP)
@@ -255,7 +255,7 @@ namespace BTCPayServer.Controllers
} }
storeBlob.EmailSettings = model.Settings; storeBlob.EmailSettings = model.Settings;
store.SetStoreBlob(storeBlob); store.SetStoreBlob(storeBlob);
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = "Email settings modified"; TempData[WellKnownTempData.SuccessMessage] = "Email settings modified";
} }
return RedirectToAction(nameof(StoreEmailSettings), new { storeId }); return RedirectToAction(nameof(StoreEmailSettings), new { storeId });

View File

@@ -19,13 +19,13 @@ namespace BTCPayServer.Controllers
{ {
private async Task<Data.WebhookDeliveryData?> LastDeliveryForWebhook(string webhookId) private async Task<Data.WebhookDeliveryData?> LastDeliveryForWebhook(string webhookId)
{ {
return (await _Repo.GetWebhookDeliveries(CurrentStore.Id, webhookId, 1)).ToList().FirstOrDefault(); return (await _storeRepo.GetWebhookDeliveries(CurrentStore.Id, webhookId, 1)).ToList().FirstOrDefault();
} }
[HttpGet("{storeId}/webhooks")] [HttpGet("{storeId}/webhooks")]
public async Task<IActionResult> Webhooks() public async Task<IActionResult> Webhooks()
{ {
var webhooks = await _Repo.GetWebhooks(CurrentStore.Id); var webhooks = await _storeRepo.GetWebhooks(CurrentStore.Id);
return View(nameof(Webhooks), new WebhooksViewModel() return View(nameof(Webhooks), new WebhooksViewModel()
{ {
Webhooks = webhooks.Select(async w => Webhooks = webhooks.Select(async w =>
@@ -63,7 +63,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> DeleteWebhook(string webhookId) public async Task<IActionResult> DeleteWebhook(string webhookId)
{ {
var webhook = await _Repo.GetWebhook(CurrentStore.Id, webhookId); var webhook = await _storeRepo.GetWebhook(CurrentStore.Id, webhookId);
if (webhook is null) if (webhook is null)
return NotFound(); return NotFound();
@@ -74,11 +74,11 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> DeleteWebhookPost(string webhookId) public async Task<IActionResult> DeleteWebhookPost(string webhookId)
{ {
var webhook = await _Repo.GetWebhook(CurrentStore.Id, webhookId); var webhook = await _storeRepo.GetWebhook(CurrentStore.Id, webhookId);
if (webhook is null) if (webhook is null)
return NotFound(); return NotFound();
await _Repo.DeleteWebhook(CurrentStore.Id, webhookId); await _storeRepo.DeleteWebhook(CurrentStore.Id, webhookId);
TempData[WellKnownTempData.SuccessMessage] = "Webhook successfully deleted"; TempData[WellKnownTempData.SuccessMessage] = "Webhook successfully deleted";
return RedirectToAction(nameof(Webhooks), new { storeId = CurrentStore.Id }); return RedirectToAction(nameof(Webhooks), new { storeId = CurrentStore.Id });
} }
@@ -90,7 +90,7 @@ namespace BTCPayServer.Controllers
if (!ModelState.IsValid) if (!ModelState.IsValid)
return View(nameof(ModifyWebhook), viewModel); return View(nameof(ModifyWebhook), viewModel);
await _Repo.CreateWebhook(CurrentStore.Id, viewModel.CreateBlob()); await _storeRepo.CreateWebhook(CurrentStore.Id, viewModel.CreateBlob());
TempData[WellKnownTempData.SuccessMessage] = "The webhook has been created"; TempData[WellKnownTempData.SuccessMessage] = "The webhook has been created";
return RedirectToAction(nameof(Webhooks), new { storeId }); return RedirectToAction(nameof(Webhooks), new { storeId });
} }
@@ -99,12 +99,12 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> ModifyWebhook(string webhookId) public async Task<IActionResult> ModifyWebhook(string webhookId)
{ {
var webhook = await _Repo.GetWebhook(CurrentStore.Id, webhookId); var webhook = await _storeRepo.GetWebhook(CurrentStore.Id, webhookId);
if (webhook is null) if (webhook is null)
return NotFound(); return NotFound();
var blob = webhook.GetBlob(); var blob = webhook.GetBlob();
var deliveries = await _Repo.GetWebhookDeliveries(CurrentStore.Id, webhookId, 20); var deliveries = await _storeRepo.GetWebhookDeliveries(CurrentStore.Id, webhookId, 20);
return View(nameof(ModifyWebhook), new EditWebhookViewModel(blob) return View(nameof(ModifyWebhook), new EditWebhookViewModel(blob)
{ {
Deliveries = deliveries Deliveries = deliveries
@@ -116,13 +116,13 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> ModifyWebhook(string webhookId, EditWebhookViewModel viewModel) public async Task<IActionResult> ModifyWebhook(string webhookId, EditWebhookViewModel viewModel)
{ {
var webhook = await _Repo.GetWebhook(CurrentStore.Id, webhookId); var webhook = await _storeRepo.GetWebhook(CurrentStore.Id, webhookId);
if (webhook is null) if (webhook is null)
return NotFound(); return NotFound();
if (!ModelState.IsValid) if (!ModelState.IsValid)
return View(nameof(ModifyWebhook), viewModel); return View(nameof(ModifyWebhook), viewModel);
await _Repo.UpdateWebhook(CurrentStore.Id, webhookId, viewModel.CreateBlob()); await _storeRepo.UpdateWebhook(CurrentStore.Id, webhookId, viewModel.CreateBlob());
TempData[WellKnownTempData.SuccessMessage] = "The webhook has been updated"; TempData[WellKnownTempData.SuccessMessage] = "The webhook has been updated";
return RedirectToAction(nameof(Webhooks), new { storeId = CurrentStore.Id }); return RedirectToAction(nameof(Webhooks), new { storeId = CurrentStore.Id });
} }
@@ -131,7 +131,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> TestWebhook(string webhookId) public async Task<IActionResult> TestWebhook(string webhookId)
{ {
var webhook = await _Repo.GetWebhook(CurrentStore.Id, webhookId); var webhook = await _storeRepo.GetWebhook(CurrentStore.Id, webhookId);
if (webhook is null) if (webhook is null)
return NotFound(); return NotFound();
@@ -142,7 +142,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> TestWebhook(string webhookId, TestWebhookViewModel viewModel, CancellationToken cancellationToken) public async Task<IActionResult> TestWebhook(string webhookId, TestWebhookViewModel viewModel, CancellationToken cancellationToken)
{ {
var result = await WebhookNotificationManager.TestWebhook(CurrentStore.Id, webhookId, viewModel.Type, cancellationToken); var result = await _webhookNotificationManager.TestWebhook(CurrentStore.Id, webhookId, viewModel.Type, cancellationToken);
if (result.Success) if (result.Success)
{ {
@@ -160,11 +160,11 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> RedeliverWebhook(string webhookId, string deliveryId) public async Task<IActionResult> RedeliverWebhook(string webhookId, string deliveryId)
{ {
var delivery = await _Repo.GetWebhookDelivery(CurrentStore.Id, webhookId, deliveryId); var delivery = await _storeRepo.GetWebhookDelivery(CurrentStore.Id, webhookId, deliveryId);
if (delivery is null) if (delivery is null)
return NotFound(); return NotFound();
var newDeliveryId = await WebhookNotificationManager.Redeliver(deliveryId); var newDeliveryId = await _webhookNotificationManager.Redeliver(deliveryId);
if (newDeliveryId is null) if (newDeliveryId is null)
return NotFound(); return NotFound();
@@ -181,7 +181,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> WebhookDelivery(string webhookId, string deliveryId) public async Task<IActionResult> WebhookDelivery(string webhookId, string deliveryId)
{ {
var delivery = await _Repo.GetWebhookDelivery(CurrentStore.Id, webhookId, deliveryId); var delivery = await _storeRepo.GetWebhookDelivery(CurrentStore.Id, webhookId, deliveryId);
if (delivery is null) if (delivery is null)
return NotFound(); return NotFound();

View File

@@ -50,7 +50,7 @@ namespace BTCPayServer.Controllers
}; };
try try
{ {
model.Link = await service.GetLink(Request.GetAbsoluteUriNoPathBase(), _BtcpayServerOptions.NetworkType); model.Link = await service.GetLink(Request.GetAbsoluteUriNoPathBase(), _btcpayServerOptions.NetworkType);
} }
catch (Exception exception) catch (Exception exception)
{ {
@@ -108,7 +108,7 @@ namespace BTCPayServer.Controllers
if (store == null) if (store == null)
return NotFound(); return NotFound();
var network = _ExplorerProvider.GetNetwork(vm.CryptoCode); var network = _explorerProvider.GetNetwork(vm.CryptoCode);
var oldConf = _handlers.GetLightningConfig(store, network); var oldConf = _handlers.GetLightningConfig(store, network);
vm.CanUseInternalNode = CanUseInternalLightning(vm.CryptoCode); vm.CanUseInternalNode = CanUseInternalLightning(vm.CryptoCode);
@@ -159,7 +159,7 @@ namespace BTCPayServer.Controllers
LUD12Enabled = false LUD12Enabled = false
}); });
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning node updated."; TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning node updated.";
return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode }); return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode });
@@ -246,7 +246,7 @@ namespace BTCPayServer.Controllers
return View(vm); return View(vm);
} }
var network = _ExplorerProvider.GetNetwork(vm.CryptoCode); var network = _explorerProvider.GetNetwork(vm.CryptoCode);
var needUpdate = false; var needUpdate = false;
var blob = store.GetStoreBlob(); var blob = store.GetStoreBlob();
blob.LightningDescriptionTemplate = vm.LightningDescriptionTemplate ?? string.Empty; blob.LightningDescriptionTemplate = vm.LightningDescriptionTemplate ?? string.Empty;
@@ -277,7 +277,7 @@ namespace BTCPayServer.Controllers
if (needUpdate) if (needUpdate)
{ {
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning settings successfully updated."; TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning settings successfully updated.";
} }
@@ -296,7 +296,7 @@ namespace BTCPayServer.Controllers
if (cryptoCode == null) if (cryptoCode == null)
return NotFound(); return NotFound();
var network = _ExplorerProvider.GetNetwork(cryptoCode); var network = _explorerProvider.GetNetwork(cryptoCode);
var lightning = GetConfig<LightningPaymentMethodConfig>(PaymentTypes.LN.GetPaymentMethodId(cryptoCode), store); var lightning = GetConfig<LightningPaymentMethodConfig>(PaymentTypes.LN.GetPaymentMethodId(cryptoCode), store);
if (lightning == null) if (lightning == null)
return NotFound(); return NotFound();
@@ -309,7 +309,7 @@ namespace BTCPayServer.Controllers
storeBlob.SetExcluded(PaymentTypes.LNURL.GetPaymentMethodId(network.CryptoCode), true); storeBlob.SetExcluded(PaymentTypes.LNURL.GetPaymentMethodId(network.CryptoCode), true);
} }
store.SetStoreBlob(storeBlob); store.SetStoreBlob(storeBlob);
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning payments are now {(enabled ? "enabled" : "disabled")} for this store."; TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning payments are now {(enabled ? "enabled" : "disabled")} for this store.";
return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode }); return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode });
@@ -317,7 +317,7 @@ namespace BTCPayServer.Controllers
private bool CanUseInternalLightning(string cryptoCode) private bool CanUseInternalLightning(string cryptoCode)
{ {
return LightningNetworkOptions.InternalLightningByCryptoCode.ContainsKey(cryptoCode.ToUpperInvariant()) && (User.IsInRole(Roles.ServerAdmin) || _policiesSettings.AllowLightningInternalNodeForAll); return _lightningNetworkOptions.InternalLightningByCryptoCode.ContainsKey(cryptoCode.ToUpperInvariant()) && (User.IsInRole(Roles.ServerAdmin) || _policiesSettings.AllowLightningInternalNodeForAll);
} }
private void SetExistingValues(StoreData store, LightningNodeViewModel vm) private void SetExistingValues(StoreData store, LightningNodeViewModel vm)

View File

@@ -88,7 +88,7 @@ namespace BTCPayServer.Controllers
DerivationSchemeSettings strategy = null; DerivationSchemeSettings strategy = null;
PaymentMethodId paymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode); PaymentMethodId paymentMethodId = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
BitcoinLikePaymentHandler handler = (BitcoinLikePaymentHandler)_handlers[paymentMethodId]; BitcoinLikePaymentHandler handler = (BitcoinLikePaymentHandler)_handlers[paymentMethodId];
var wallet = _WalletProvider.GetWallet(network); var wallet = _walletProvider.GetWallet(network);
if (wallet == null) if (wallet == null)
{ {
return NotFound(); return NotFound();
@@ -185,8 +185,8 @@ namespace BTCPayServer.Controllers
ModelState.AddModelError(nameof(vm.DerivationScheme), "Invalid derivation scheme"); ModelState.AddModelError(nameof(vm.DerivationScheme), "Invalid derivation scheme");
return View(vm.ViewName, vm); return View(vm.ViewName, vm);
} }
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
_EventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(vm.StoreId, vm.CryptoCode) }); _eventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(vm.StoreId, vm.CryptoCode) });
TempData[WellKnownTempData.SuccessMessage] = $"Wallet settings for {network.CryptoCode} have been updated."; TempData[WellKnownTempData.SuccessMessage] = $"Wallet settings for {network.CryptoCode} have been updated.";
@@ -198,11 +198,11 @@ namespace BTCPayServer.Controllers
private string ProtectString(string str) private string ProtectString(string str)
{ {
return Convert.ToBase64String(DataProtector.Protect(Encoding.UTF8.GetBytes(str))); return Convert.ToBase64String(_dataProtector.Protect(Encoding.UTF8.GetBytes(str)));
} }
private string UnprotectString(string str) private string UnprotectString(string str)
{ {
return Encoding.UTF8.GetString(DataProtector.Unprotect(Convert.FromBase64String(str))); return Encoding.UTF8.GetString(_dataProtector.Unprotect(Convert.FromBase64String(str)));
} }
[HttpGet("{storeId}/onchain/{cryptoCode}/generate/{method?}")] [HttpGet("{storeId}/onchain/{cryptoCode}/generate/{method?}")]
@@ -264,7 +264,7 @@ namespace BTCPayServer.Controllers
return NotFound(); return NotFound();
} }
var handler = _handlers.GetBitcoinHandler(cryptoCode); var handler = _handlers.GetBitcoinHandler(cryptoCode);
var client = _ExplorerProvider.GetExplorerClient(cryptoCode); var client = _explorerProvider.GetExplorerClient(cryptoCode);
var isImport = method == WalletSetupMethod.Seed; var isImport = method == WalletSetupMethod.Seed;
var vm = new WalletSetupViewModel var vm = new WalletSetupViewModel
{ {
@@ -351,7 +351,7 @@ namespace BTCPayServer.Controllers
IsStored = request.SavePrivateKeys, IsStored = request.SavePrivateKeys,
ReturnUrl = Url.Action(nameof(GenerateWalletConfirm), new { storeId, cryptoCode }) ReturnUrl = Url.Action(nameof(GenerateWalletConfirm), new { storeId, cryptoCode })
}; };
if (_BTCPayEnv.IsDeveloping) if (_btcPayEnv.IsDeveloping)
{ {
GenerateWalletResponse = response; GenerateWalletResponse = response;
} }
@@ -403,7 +403,7 @@ namespace BTCPayServer.Controllers
var storeBlob = store.GetStoreBlob(); var storeBlob = store.GetStoreBlob();
var excludeFilters = storeBlob.GetExcludedPaymentMethods(); var excludeFilters = storeBlob.GetExcludedPaymentMethods();
(bool canUseHotWallet, bool rpcImport) = await CanUseHotWallet(); (bool canUseHotWallet, bool rpcImport) = await CanUseHotWallet();
var client = _ExplorerProvider.GetExplorerClient(network); var client = _explorerProvider.GetExplorerClient(network);
var handler = _handlers.GetBitcoinHandler(cryptoCode); var handler = _handlers.GetBitcoinHandler(cryptoCode);
var vm = new WalletSettingsViewModel var vm = new WalletSettingsViewModel
@@ -546,14 +546,14 @@ namespace BTCPayServer.Controllers
{ {
store.SetPaymentMethodConfig(handler, derivation); store.SetPaymentMethodConfig(handler, derivation);
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
if (string.IsNullOrEmpty(errorMessage)) if (string.IsNullOrEmpty(errorMessage))
{ {
var successMessage = "Wallet settings successfully updated."; var successMessage = "Wallet settings successfully updated.";
if (enabledChanged) if (enabledChanged)
{ {
_EventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(vm.StoreId, vm.CryptoCode) }); _eventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(vm.StoreId, vm.CryptoCode) });
successMessage += $" {vm.CryptoCode} on-chain payments are now {(vm.Enabled ? "enabled" : "disabled")} for this store."; successMessage += $" {vm.CryptoCode} on-chain payments are now {(vm.Enabled ? "enabled" : "disabled")} for this store.";
} }
@@ -599,7 +599,7 @@ namespace BTCPayServer.Controllers
if (needUpdate) if (needUpdate)
{ {
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
TempData[WellKnownTempData.SuccessMessage] = "Payment settings successfully updated"; TempData[WellKnownTempData.SuccessMessage] = "Payment settings successfully updated";
@@ -644,7 +644,7 @@ namespace BTCPayServer.Controllers
return NotFound(); return NotFound();
} }
var client = _ExplorerProvider.GetExplorerClient(network); var client = _explorerProvider.GetExplorerClient(network);
if (await GetSeed(client, derivation) != null) if (await GetSeed(client, derivation) != null)
{ {
var mnemonic = await client.GetMetadataAsync<string>(derivation.AccountDerivation, var mnemonic = await client.GetMetadataAsync<string>(derivation.AccountDerivation,
@@ -746,8 +746,8 @@ namespace BTCPayServer.Controllers
store.SetPaymentMethodConfig(PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode), null); store.SetPaymentMethodConfig(PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode), null);
await _Repo.UpdateStore(store); await _storeRepo.UpdateStore(store);
_EventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(storeId, cryptoCode) }); _eventAggregator.Publish(new WalletChangedEvent { WalletId = new WalletId(storeId, cryptoCode) });
TempData[WellKnownTempData.SuccessMessage] = TempData[WellKnownTempData.SuccessMessage] =
$"On-Chain payment for {network.CryptoCode} has been removed."; $"On-Chain payment for {network.CryptoCode} has been removed.";
@@ -785,7 +785,7 @@ namespace BTCPayServer.Controllers
private ActionResult IsAvailable(string cryptoCode, out StoreData store, out BTCPayNetwork network) private ActionResult IsAvailable(string cryptoCode, out StoreData store, out BTCPayNetwork network)
{ {
store = HttpContext.GetStoreData(); store = HttpContext.GetStoreData();
network = cryptoCode == null ? null : _ExplorerProvider.GetNetwork(cryptoCode); network = cryptoCode == null ? null : _explorerProvider.GetNetwork(cryptoCode);
return store == null || network == null ? NotFound() : null; return store == null || network == null ? NotFound() : null;
} }
@@ -820,9 +820,9 @@ namespace BTCPayServer.Controllers
? "" ? ""
: " or imported it into an external wallet. If you no longer have access to your private key (recovery seed), immediately replace the wallet"; : " or imported it into an external wallet. If you no longer have access to your private key (recovery seed), immediately replace the wallet";
return return
$"<p class=\"text-danger fw-bold\">Please note that this is a <strong>{Html.Encode(walletType)} wallet</strong>!</p>" + $"<p class=\"text-danger fw-bold\">Please note that this is a <strong>{_html.Encode(walletType)} wallet</strong>!</p>" +
$"<p class=\"text-danger fw-bold\">Do not proceed if you have not backed up the wallet{Html.Encode(additionalText)}.</p>" + $"<p class=\"text-danger fw-bold\">Do not proceed if you have not backed up the wallet{_html.Encode(additionalText)}.</p>" +
$"<p class=\"text-start mb-0\">This action will erase the current wallet data from the server. {Html.Encode(info)}</p>"; $"<p class=\"text-start mb-0\">This action will erase the current wallet data from the server. {_html.Encode(info)}</p>";
} }
private string WalletReplaceWarning(bool isHotWallet) private string WalletReplaceWarning(bool isHotWallet)

View File

@@ -27,8 +27,8 @@ namespace BTCPayServer.Controllers
vm.SetExchangeRates(exchanges, storeBlob.PreferredExchange ?? storeBlob.GetRecommendedExchange()); vm.SetExchangeRates(exchanges, storeBlob.PreferredExchange ?? storeBlob.GetRecommendedExchange());
vm.Spread = (double)(storeBlob.Spread * 100m); vm.Spread = (double)(storeBlob.Spread * 100m);
vm.StoreId = CurrentStore.Id; vm.StoreId = CurrentStore.Id;
vm.Script = storeBlob.GetRateRules(_NetworkProvider).ToString(); vm.Script = storeBlob.GetRateRules(_networkProvider).ToString();
vm.DefaultScript = storeBlob.GetDefaultRateRules(_NetworkProvider).ToString(); vm.DefaultScript = storeBlob.GetDefaultRateRules(_networkProvider).ToString();
vm.AvailableExchanges = exchanges; vm.AvailableExchanges = exchanges;
vm.DefaultCurrencyPairs = storeBlob.GetDefaultCurrencyPairString(); vm.DefaultCurrencyPairs = storeBlob.GetDefaultCurrencyPairString();
vm.ShowScripting = storeBlob.RateScripting; vm.ShowScripting = storeBlob.RateScripting;
@@ -71,7 +71,7 @@ namespace BTCPayServer.Controllers
model.PreferredExchange = model.PreferredExchange.Trim().ToLowerInvariant(); model.PreferredExchange = model.PreferredExchange.Trim().ToLowerInvariant();
var blob = CurrentStore.GetStoreBlob(); var blob = CurrentStore.GetStoreBlob();
model.DefaultScript = blob.GetDefaultRateRules(_NetworkProvider).ToString(); model.DefaultScript = blob.GetDefaultRateRules(_networkProvider).ToString();
model.AvailableExchanges = exchanges; model.AvailableExchanges = exchanges;
blob.PreferredExchange = model.PreferredExchange; blob.PreferredExchange = model.PreferredExchange;
@@ -102,7 +102,7 @@ namespace BTCPayServer.Controllers
model.Script = blob.RateScript; model.Script = blob.RateScript;
} }
} }
rules = blob.GetRateRules(_NetworkProvider); rules = blob.GetRateRules(_networkProvider);
if (command == "Test") if (command == "Test")
{ {
@@ -124,7 +124,7 @@ namespace BTCPayServer.Controllers
pairs.Add(currencyPair); pairs.Add(currencyPair);
} }
var fetchs = _RateFactory.FetchRates(pairs.ToHashSet(), rules, cancellationToken); var fetchs = _rateFactory.FetchRates(pairs.ToHashSet(), rules, cancellationToken);
var testResults = new List<RatesViewModel.TestResultViewModel>(); var testResults = new List<RatesViewModel.TestResultViewModel>();
foreach (var fetch in fetchs) foreach (var fetch in fetchs)
{ {
@@ -144,7 +144,7 @@ namespace BTCPayServer.Controllers
{ {
if (CurrentStore.SetStoreBlob(blob)) if (CurrentStore.SetStoreBlob(blob))
{ {
await _Repo.UpdateStore(CurrentStore); await _storeRepo.UpdateStore(CurrentStore);
TempData[WellKnownTempData.SuccessMessage] = "Rate settings updated"; TempData[WellKnownTempData.SuccessMessage] = "Rate settings updated";
} }
return RedirectToAction(nameof(Rates), new return RedirectToAction(nameof(Rates), new
@@ -175,16 +175,16 @@ namespace BTCPayServer.Controllers
{ {
var blob = CurrentStore.GetStoreBlob(); var blob = CurrentStore.GetStoreBlob();
blob.RateScripting = scripting; blob.RateScripting = scripting;
blob.RateScript = blob.GetDefaultRateRules(_NetworkProvider).ToString(); blob.RateScript = blob.GetDefaultRateRules(_networkProvider).ToString();
CurrentStore.SetStoreBlob(blob); CurrentStore.SetStoreBlob(blob);
await _Repo.UpdateStore(CurrentStore); await _storeRepo.UpdateStore(CurrentStore);
TempData[WellKnownTempData.SuccessMessage] = "Rate rules scripting " + (scripting ? "activated" : "deactivated"); TempData[WellKnownTempData.SuccessMessage] = "Rate rules scripting " + (scripting ? "activated" : "deactivated");
return RedirectToAction(nameof(Rates), new { storeId = CurrentStore.Id }); return RedirectToAction(nameof(Rates), new { storeId = CurrentStore.Id });
} }
private IEnumerable<RateSourceInfo> GetSupportedExchanges() private IEnumerable<RateSourceInfo> GetSupportedExchanges()
{ {
return _RateFactory.RateProviderFactory.AvailableRateProviders return _rateFactory.RateProviderFactory.AvailableRateProviders
.OrderBy(s => s.DisplayName, StringComparer.OrdinalIgnoreCase); .OrderBy(s => s.DisplayName, StringComparer.OrdinalIgnoreCase);
} }
} }

View File

@@ -129,9 +129,9 @@ namespace BTCPayServer.Controllers
return View("Confirm", return View("Confirm",
roleData.IsUsed is true roleData.IsUsed is true
? new ConfirmModel("Delete role", ? new ConfirmModel("Delete role",
$"Unable to proceed: The role <strong>{Html.Encode(roleData.Role)}</strong> is currently assigned to one or more users, it cannot be removed.") $"Unable to proceed: The role <strong>{_html.Encode(roleData.Role)}</strong> is currently assigned to one or more users, it cannot be removed.")
: new ConfirmModel("Delete role", : new ConfirmModel("Delete role",
$"The role <strong>{Html.Encode(roleData.Role)}</strong> will be permanently deleted. Are you sure?", $"The role <strong>{_html.Encode(roleData.Role)}</strong> will be permanently deleted. Are you sure?",
"Delete")); "Delete"));
} }

View File

@@ -41,7 +41,7 @@ namespace BTCPayServer.Controllers
DefaultCurrency = storeBlob.DefaultCurrency, DefaultCurrency = storeBlob.DefaultCurrency,
BOLT11Expiration = (long)storeBlob.RefundBOLT11Expiration.TotalDays, BOLT11Expiration = (long)storeBlob.RefundBOLT11Expiration.TotalDays,
Archived = store.Archived, Archived = store.Archived,
CanDelete = _Repo.CanDeleteStores() CanDelete = _storeRepo.CanDeleteStores()
}; };
return View(vm); return View(vm);
@@ -177,7 +177,7 @@ namespace BTCPayServer.Controllers
if (needUpdate) if (needUpdate)
{ {
await _Repo.UpdateStore(CurrentStore); await _storeRepo.UpdateStore(CurrentStore);
TempData[WellKnownTempData.SuccessMessage] = "Store successfully updated"; TempData[WellKnownTempData.SuccessMessage] = "Store successfully updated";
} }
@@ -193,7 +193,7 @@ namespace BTCPayServer.Controllers
public async Task<IActionResult> ToggleArchive(string storeId) public async Task<IActionResult> ToggleArchive(string storeId)
{ {
CurrentStore.Archived = !CurrentStore.Archived; CurrentStore.Archived = !CurrentStore.Archived;
await _Repo.UpdateStore(CurrentStore); await _storeRepo.UpdateStore(CurrentStore);
TempData[WellKnownTempData.SuccessMessage] = CurrentStore.Archived TempData[WellKnownTempData.SuccessMessage] = CurrentStore.Archived
? "The store has been archived and will no longer appear in the stores list by default." ? "The store has been archived and will no longer appear in the stores list by default."
@@ -216,7 +216,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> DeleteStorePost(string storeId) public async Task<IActionResult> DeleteStorePost(string storeId)
{ {
await _Repo.DeleteStore(CurrentStore.Id); await _storeRepo.DeleteStore(CurrentStore.Id);
TempData[WellKnownTempData.SuccessMessage] = "Store successfully deleted."; TempData[WellKnownTempData.SuccessMessage] = "Store successfully deleted.";
return RedirectToAction(nameof(UIHomeController.Index), "UIHome"); return RedirectToAction(nameof(UIHomeController.Index), "UIHome");
} }
@@ -264,7 +264,7 @@ namespace BTCPayServer.Controllers
vm.DisplayExpirationTimer = (int)storeBlob.DisplayExpirationTimer.TotalMinutes; vm.DisplayExpirationTimer = (int)storeBlob.DisplayExpirationTimer.TotalMinutes;
vm.ReceiptOptions = CheckoutAppearanceViewModel.ReceiptOptionsViewModel.Create(storeBlob.ReceiptOptions); vm.ReceiptOptions = CheckoutAppearanceViewModel.ReceiptOptionsViewModel.Create(storeBlob.ReceiptOptions);
vm.AutoDetectLanguage = storeBlob.AutoDetectLanguage; vm.AutoDetectLanguage = storeBlob.AutoDetectLanguage;
vm.SetLanguages(_LangService, storeBlob.DefaultLang); vm.SetLanguages(_langService, storeBlob.DefaultLang);
return View(vm); return View(vm);
} }
@@ -282,7 +282,7 @@ namespace BTCPayServer.Controllers
CurrentStore.SetDefaultPaymentId(defaultPaymentMethodId); CurrentStore.SetDefaultPaymentId(defaultPaymentMethodId);
} }
SetCryptoCurrencies(model, CurrentStore); SetCryptoCurrencies(model, CurrentStore);
model.SetLanguages(_LangService, model.DefaultLang); model.SetLanguages(_langService, model.DefaultLang);
model.PaymentMethodCriteria ??= new List<PaymentMethodCriteriaViewModel>(); model.PaymentMethodCriteria ??= new List<PaymentMethodCriteriaViewModel>();
for (var index = 0; index < model.PaymentMethodCriteria.Count; index++) for (var index = 0; index < model.PaymentMethodCriteria.Count; index++)
{ {
@@ -409,7 +409,7 @@ namespace BTCPayServer.Controllers
} }
if (needUpdate) if (needUpdate)
{ {
await _Repo.UpdateStore(CurrentStore); await _storeRepo.UpdateStore(CurrentStore);
TempData[WellKnownTempData.SuccessMessage] = "Store successfully updated"; TempData[WellKnownTempData.SuccessMessage] = "Store successfully updated";
} }
@@ -435,8 +435,8 @@ namespace BTCPayServer.Controllers
var defaultChoice = defaultPaymentId is not null ? defaultPaymentId.FindNearest(enabled) : null; var defaultChoice = defaultPaymentId is not null ? defaultPaymentId.FindNearest(enabled) : null;
if (defaultChoice is null) if (defaultChoice is null)
{ {
defaultChoice = enabled.FirstOrDefault(e => e == PaymentTypes.CHAIN.GetPaymentMethodId(_NetworkProvider.DefaultNetwork.CryptoCode)) ?? defaultChoice = enabled.FirstOrDefault(e => e == PaymentTypes.CHAIN.GetPaymentMethodId(_networkProvider.DefaultNetwork.CryptoCode)) ??
enabled.FirstOrDefault(e => e == PaymentTypes.LN.GetPaymentMethodId(_NetworkProvider.DefaultNetwork.CryptoCode)) ?? enabled.FirstOrDefault(e => e == PaymentTypes.LN.GetPaymentMethodId(_networkProvider.DefaultNetwork.CryptoCode)) ??
enabled.FirstOrDefault(); enabled.FirstOrDefault();
} }
var choices = GetEnabledPaymentMethodChoices(storeData); var choices = GetEnabledPaymentMethodChoices(storeData);

View File

@@ -23,7 +23,7 @@ namespace BTCPayServer.Controllers
public async Task<IActionResult> ListTokens() public async Task<IActionResult> ListTokens()
{ {
var model = new TokensViewModel(); var model = new TokensViewModel();
var tokens = await _TokenRepository.GetTokensByStoreIdAsync(CurrentStore.Id); var tokens = await _tokenRepository.GetTokensByStoreIdAsync(CurrentStore.Id);
model.StoreNotConfigured = StoreNotConfigured; model.StoreNotConfigured = StoreNotConfigured;
model.Tokens = tokens.Select(t => new TokenViewModel() model.Tokens = tokens.Select(t => new TokenViewModel()
{ {
@@ -32,7 +32,7 @@ namespace BTCPayServer.Controllers
Id = t.Value Id = t.Value
}).ToArray(); }).ToArray();
model.ApiKey = (await _TokenRepository.GetLegacyAPIKeys(CurrentStore.Id)).FirstOrDefault(); model.ApiKey = (await _tokenRepository.GetLegacyAPIKeys(CurrentStore.Id)).FirstOrDefault();
if (model.ApiKey == null) if (model.ApiKey == null)
model.EncodedApiKey = "*API Key*"; model.EncodedApiKey = "*API Key*";
else else
@@ -44,20 +44,20 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> RevokeToken(string tokenId) public async Task<IActionResult> RevokeToken(string tokenId)
{ {
var token = await _TokenRepository.GetToken(tokenId); var token = await _tokenRepository.GetToken(tokenId);
if (token == null || token.StoreId != CurrentStore.Id) if (token == null || token.StoreId != CurrentStore.Id)
return NotFound(); return NotFound();
return View("Confirm", new ConfirmModel("Revoke the token", $"The access token with the label <strong>{Html.Encode(token.Label)}</strong> will be revoked. Do you wish to continue?", "Revoke")); return View("Confirm", new ConfirmModel("Revoke the token", $"The access token with the label <strong>{_html.Encode(token.Label)}</strong> will be revoked. Do you wish to continue?", "Revoke"));
} }
[HttpPost("{storeId}/tokens/{tokenId}/revoke")] [HttpPost("{storeId}/tokens/{tokenId}/revoke")]
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> RevokeTokenConfirm(string tokenId) public async Task<IActionResult> RevokeTokenConfirm(string tokenId)
{ {
var token = await _TokenRepository.GetToken(tokenId); var token = await _tokenRepository.GetToken(tokenId);
if (token == null || if (token == null ||
token.StoreId != CurrentStore.Id || token.StoreId != CurrentStore.Id ||
!await _TokenRepository.DeleteToken(tokenId)) !await _tokenRepository.DeleteToken(tokenId))
TempData[WellKnownTempData.ErrorMessage] = "Failure to revoke this token."; TempData[WellKnownTempData.ErrorMessage] = "Failure to revoke this token.";
else else
TempData[WellKnownTempData.SuccessMessage] = "Token revoked"; TempData[WellKnownTempData.SuccessMessage] = "Token revoked";
@@ -68,7 +68,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> ShowToken(string tokenId) public async Task<IActionResult> ShowToken(string tokenId)
{ {
var token = await _TokenRepository.GetToken(tokenId); var token = await _tokenRepository.GetToken(tokenId);
if (token == null || token.StoreId != CurrentStore.Id) if (token == null || token.StoreId != CurrentStore.Id)
return NotFound(); return NotFound();
return View(token); return View(token);
@@ -101,7 +101,7 @@ namespace BTCPayServer.Controllers
var store = model.StoreId switch var store = model.StoreId switch
{ {
null => CurrentStore, null => CurrentStore,
_ => await _Repo.FindStore(storeId, userId) _ => await _storeRepo.FindStore(storeId, userId)
}; };
if (store == null) if (store == null)
return Challenge(AuthenticationSchemes.Cookie); return Challenge(AuthenticationSchemes.Cookie);
@@ -114,18 +114,18 @@ namespace BTCPayServer.Controllers
string? pairingCode = null; string? pairingCode = null;
if (model.PublicKey == null) if (model.PublicKey == null)
{ {
tokenRequest.PairingCode = await _TokenRepository.CreatePairingCodeAsync(); tokenRequest.PairingCode = await _tokenRepository.CreatePairingCodeAsync();
await _TokenRepository.UpdatePairingCode(new PairingCodeEntity() await _tokenRepository.UpdatePairingCode(new PairingCodeEntity()
{ {
Id = tokenRequest.PairingCode, Id = tokenRequest.PairingCode,
Label = model.Label, Label = model.Label,
}); });
await _TokenRepository.PairWithStoreAsync(tokenRequest.PairingCode, store.Id); await _tokenRepository.PairWithStoreAsync(tokenRequest.PairingCode, store.Id);
pairingCode = tokenRequest.PairingCode; pairingCode = tokenRequest.PairingCode;
} }
else else
{ {
pairingCode = (await _TokenController.Tokens(tokenRequest)).Data[0].PairingCode; pairingCode = (await _tokenController.Tokens(tokenRequest)).Data[0].PairingCode;
} }
GeneratedPairingCode = pairingCode; GeneratedPairingCode = pairingCode;
@@ -147,7 +147,7 @@ namespace BTCPayServer.Controllers
ViewBag.HidePublicKey = true; ViewBag.HidePublicKey = true;
ViewBag.ShowStores = true; ViewBag.ShowStores = true;
ViewBag.ShowMenu = false; ViewBag.ShowMenu = false;
var stores = (await _Repo.GetStoresByUserId(userId)).Where(data => data.HasPermission(userId, Policies.CanModifyStoreSettings)).ToArray(); var stores = (await _storeRepo.GetStoresByUserId(userId)).Where(data => data.HasPermission(userId, Policies.CanModifyStoreSettings)).ToArray();
model.Stores = new SelectList(stores, nameof(CurrentStore.Id), nameof(CurrentStore.StoreName)); model.Stores = new SelectList(stores, nameof(CurrentStore.Id), nameof(CurrentStore.StoreName));
if (!model.Stores.Any()) if (!model.Stores.Any())
@@ -174,12 +174,12 @@ namespace BTCPayServer.Controllers
return NotFound(); return NotFound();
if (command == "revoke") if (command == "revoke")
{ {
await _TokenRepository.RevokeLegacyAPIKeys(CurrentStore.Id); await _tokenRepository.RevokeLegacyAPIKeys(CurrentStore.Id);
TempData[WellKnownTempData.SuccessMessage] = "API Key revoked"; TempData[WellKnownTempData.SuccessMessage] = "API Key revoked";
} }
else else
{ {
await _TokenRepository.GenerateLegacyAPIKey(CurrentStore.Id); await _tokenRepository.GenerateLegacyAPIKey(CurrentStore.Id);
TempData[WellKnownTempData.SuccessMessage] = "API Key re-generated"; TempData[WellKnownTempData.SuccessMessage] = "API Key re-generated";
} }
@@ -202,20 +202,20 @@ namespace BTCPayServer.Controllers
if (selectedStore != null) if (selectedStore != null)
{ {
var store = await _Repo.FindStore(selectedStore, userId); var store = await _storeRepo.FindStore(selectedStore, userId);
if (store == null) if (store == null)
return NotFound(); return NotFound();
HttpContext.SetStoreData(store); HttpContext.SetStoreData(store);
} }
var pairing = await _TokenRepository.GetPairingAsync(pairingCode); var pairing = await _tokenRepository.GetPairingAsync(pairingCode);
if (pairing == null) if (pairing == null)
{ {
TempData[WellKnownTempData.ErrorMessage] = "Unknown pairing code"; TempData[WellKnownTempData.ErrorMessage] = "Unknown pairing code";
return RedirectToAction(nameof(UIHomeController.Index), "UIHome"); return RedirectToAction(nameof(UIHomeController.Index), "UIHome");
} }
var stores = (await _Repo.GetStoresByUserId(userId)).Where(data => data.HasPermission(userId, Policies.CanModifyStoreSettings)).ToArray(); var stores = (await _storeRepo.GetStoresByUserId(userId)).Where(data => data.HasPermission(userId, Policies.CanModifyStoreSettings)).ToArray();
return View(new PairingModel return View(new PairingModel
{ {
Id = pairing.Id, Id = pairing.Id,
@@ -237,11 +237,11 @@ namespace BTCPayServer.Controllers
if (pairingCode == null) if (pairingCode == null)
return NotFound(); return NotFound();
var store = CurrentStore; var store = CurrentStore;
var pairing = await _TokenRepository.GetPairingAsync(pairingCode); var pairing = await _tokenRepository.GetPairingAsync(pairingCode);
if (store == null || pairing == null) if (store == null || pairing == null)
return NotFound(); return NotFound();
var pairingResult = await _TokenRepository.PairWithStoreAsync(pairingCode, store.Id); var pairingResult = await _tokenRepository.PairWithStoreAsync(pairingCode, store.Id);
if (pairingResult == PairingResult.Complete || pairingResult == PairingResult.Partial) if (pairingResult == PairingResult.Complete || pairingResult == PairingResult.Partial)
{ {
var excludeFilter = store.GetStoreBlob().GetExcludedPaymentMethods(); var excludeFilter = store.GetStoreBlob().GetExcludedPaymentMethods();

View File

@@ -36,16 +36,16 @@ namespace BTCPayServer.Controllers
return View(vm); return View(vm);
} }
var roles = await _Repo.GetStoreRoles(CurrentStore.Id); var roles = await _storeRepo.GetStoreRoles(CurrentStore.Id);
if (roles.All(role => role.Id != vm.Role)) if (roles.All(role => role.Id != vm.Role))
{ {
ModelState.AddModelError(nameof(vm.Role), "Invalid role"); ModelState.AddModelError(nameof(vm.Role), "Invalid role");
return View(vm); return View(vm);
} }
var user = await _UserManager.FindByEmailAsync(vm.Email); var user = await _userManager.FindByEmailAsync(vm.Email);
var isExistingUser = user is not null; var isExistingUser = user is not null;
var isExistingStoreUser = isExistingUser && await _Repo.GetStoreUser(storeId, user!.Id) is not null; var isExistingStoreUser = isExistingUser && await _storeRepo.GetStoreUser(storeId, user!.Id) is not null;
var successInfo = string.Empty; var successInfo = string.Empty;
if (user == null) if (user == null)
{ {
@@ -58,11 +58,11 @@ namespace BTCPayServer.Controllers
Created = DateTimeOffset.UtcNow Created = DateTimeOffset.UtcNow
}; };
var result = await _UserManager.CreateAsync(user); var result = await _userManager.CreateAsync(user);
if (result.Succeeded) if (result.Succeeded)
{ {
var tcs = new TaskCompletionSource<Uri>(); var tcs = new TaskCompletionSource<Uri>();
var currentUser = await _UserManager.GetUserAsync(HttpContext.User); var currentUser = await _userManager.GetUserAsync(HttpContext.User);
_eventAggregator.Publish(new UserRegisteredEvent _eventAggregator.Publish(new UserRegisteredEvent
{ {
@@ -87,11 +87,11 @@ namespace BTCPayServer.Controllers
} }
} }
var roleId = await _Repo.ResolveStoreRoleId(storeId, vm.Role); var roleId = await _storeRepo.ResolveStoreRoleId(storeId, vm.Role);
var action = isExistingUser var action = isExistingUser
? isExistingStoreUser ? "updated" : "added" ? isExistingStoreUser ? "updated" : "added"
: "invited"; : "invited";
if (await _Repo.AddOrUpdateStoreUser(CurrentStore.Id, user.Id, roleId)) if (await _storeRepo.AddOrUpdateStoreUser(CurrentStore.Id, user.Id, roleId))
{ {
TempData.SetStatusMessageModel(new StatusMessageModel TempData.SetStatusMessageModel(new StatusMessageModel
{ {
@@ -110,14 +110,14 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> UpdateStoreUser(string storeId, string userId, StoreUsersViewModel.StoreUserViewModel vm) public async Task<IActionResult> UpdateStoreUser(string storeId, string userId, StoreUsersViewModel.StoreUserViewModel vm)
{ {
var roleId = await _Repo.ResolveStoreRoleId(storeId, vm.Role); var roleId = await _storeRepo.ResolveStoreRoleId(storeId, vm.Role);
var storeUsers = await _Repo.GetStoreUsers(storeId); var storeUsers = await _storeRepo.GetStoreUsers(storeId);
var user = storeUsers.First(user => user.Id == userId); var user = storeUsers.First(user => user.Id == userId);
var isOwner = user.StoreRole.Id == StoreRoleId.Owner.Id; var isOwner = user.StoreRole.Id == StoreRoleId.Owner.Id;
var isLastOwner = isOwner && storeUsers.Count(u => u.StoreRole.Id == StoreRoleId.Owner.Id) == 1; var isLastOwner = isOwner && storeUsers.Count(u => u.StoreRole.Id == StoreRoleId.Owner.Id) == 1;
if (isLastOwner && roleId != StoreRoleId.Owner) if (isLastOwner && roleId != StoreRoleId.Owner)
TempData[WellKnownTempData.ErrorMessage] = $"User {user.Email} is the last owner. Their role cannot be changed."; TempData[WellKnownTempData.ErrorMessage] = $"User {user.Email} is the last owner. Their role cannot be changed.";
else if (await _Repo.AddOrUpdateStoreUser(storeId, userId, roleId)) else if (await _storeRepo.AddOrUpdateStoreUser(storeId, userId, roleId))
TempData[WellKnownTempData.SuccessMessage] = $"The role of {user.Email} has been changed to {vm.Role}."; TempData[WellKnownTempData.SuccessMessage] = $"The role of {user.Email} has been changed to {vm.Role}.";
return RedirectToAction(nameof(StoreUsers), new { storeId, userId }); return RedirectToAction(nameof(StoreUsers), new { storeId, userId });
} }
@@ -126,7 +126,7 @@ namespace BTCPayServer.Controllers
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)] [Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
public async Task<IActionResult> DeleteStoreUser(string storeId, string userId) public async Task<IActionResult> DeleteStoreUser(string storeId, string userId)
{ {
if (await _Repo.RemoveStoreUser(storeId, userId)) if (await _storeRepo.RemoveStoreUser(storeId, userId))
TempData[WellKnownTempData.SuccessMessage] = "User removed successfully."; TempData[WellKnownTempData.SuccessMessage] = "User removed successfully.";
else else
TempData[WellKnownTempData.ErrorMessage] = "Removing this user would result in the store having no owner."; TempData[WellKnownTempData.ErrorMessage] = "Removing this user would result in the store having no owner.";
@@ -135,7 +135,7 @@ namespace BTCPayServer.Controllers
private async Task FillUsers(StoreUsersViewModel vm) private async Task FillUsers(StoreUsersViewModel vm)
{ {
var users = await _Repo.GetStoreUsers(CurrentStore.Id); var users = await _storeRepo.GetStoreUsers(CurrentStore.Id);
vm.StoreId = CurrentStore.Id; vm.StoreId = CurrentStore.Id;
vm.Users = users.Select(u => new StoreUsersViewModel.StoreUserViewModel() vm.Users = users.Select(u => new StoreUsersViewModel.StoreUserViewModel()
{ {

View File

@@ -33,10 +33,9 @@ namespace BTCPayServer.Controllers
public partial class UIStoresController : Controller public partial class UIStoresController : Controller
{ {
public UIStoresController( public UIStoresController(
IServiceProvider serviceProvider,
BTCPayServerOptions btcpayServerOptions, BTCPayServerOptions btcpayServerOptions,
BTCPayServerEnvironment btcpayEnv, BTCPayServerEnvironment btcpayEnv,
StoreRepository repo, StoreRepository storeRepo,
TokenRepository tokenRepo, TokenRepository tokenRepo,
UserManager<ApplicationUser> userManager, UserManager<ApplicationUser> userManager,
BitpayAccessTokenController tokenController, BitpayAccessTokenController tokenController,
@@ -55,88 +54,78 @@ namespace BTCPayServer.Controllers
IOptions<LightningNetworkOptions> lightningNetworkOptions, IOptions<LightningNetworkOptions> lightningNetworkOptions,
IOptions<ExternalServicesOptions> externalServiceOptions, IOptions<ExternalServicesOptions> externalServiceOptions,
IHtmlHelper html, IHtmlHelper html,
LightningClientFactoryService lightningClientFactoryService,
EmailSenderFactory emailSenderFactory, EmailSenderFactory emailSenderFactory,
WalletFileParsers onChainWalletParsers, WalletFileParsers onChainWalletParsers,
SettingsRepository settingsRepository, SettingsRepository settingsRepository,
EventAggregator eventAggregator) EventAggregator eventAggregator)
{ {
_RateFactory = rateFactory; _rateFactory = rateFactory;
_Repo = repo; _storeRepo = storeRepo;
_TokenRepository = tokenRepo; _tokenRepository = tokenRepo;
_UserManager = userManager; _userManager = userManager;
_LangService = langService; _langService = langService;
_TokenController = tokenController; _tokenController = tokenController;
_WalletProvider = walletProvider; _walletProvider = walletProvider;
_handlers = paymentMethodHandlerDictionary; _handlers = paymentMethodHandlerDictionary;
_policiesSettings = policiesSettings; _policiesSettings = policiesSettings;
_authorizationService = authorizationService; _authorizationService = authorizationService;
_appService = appService; _appService = appService;
_fileService = fileService; _fileService = fileService;
DataProtector = dataProtector.CreateProtector("ConfigProtector"); _networkProvider = networkProvider;
WebhookNotificationManager = webhookNotificationManager; _explorerProvider = explorerProvider;
LightningNetworkOptions = lightningNetworkOptions.Value; _btcpayServerOptions = btcpayServerOptions;
_EventAggregator = eventAggregator; _btcPayEnv = btcpayEnv;
_NetworkProvider = networkProvider;
_ExplorerProvider = explorerProvider;
_ServiceProvider = serviceProvider;
_BtcpayServerOptions = btcpayServerOptions;
_BTCPayEnv = btcpayEnv;
_externalServiceOptions = externalServiceOptions; _externalServiceOptions = externalServiceOptions;
_lightningClientFactoryService = lightningClientFactoryService;
_emailSenderFactory = emailSenderFactory; _emailSenderFactory = emailSenderFactory;
_onChainWalletParsers = onChainWalletParsers; _onChainWalletParsers = onChainWalletParsers;
_settingsRepository = settingsRepository; _settingsRepository = settingsRepository;
_eventAggregator = eventAggregator; _eventAggregator = eventAggregator;
Html = html; _html = html;
_dataProtector = dataProtector.CreateProtector("ConfigProtector");
_webhookNotificationManager = webhookNotificationManager;
_lightningNetworkOptions = lightningNetworkOptions.Value;
} }
readonly BTCPayServerOptions _BtcpayServerOptions; private readonly BTCPayServerOptions _btcpayServerOptions;
readonly BTCPayServerEnvironment _BTCPayEnv; private readonly BTCPayServerEnvironment _btcPayEnv;
readonly IServiceProvider _ServiceProvider; private readonly BTCPayNetworkProvider _networkProvider;
readonly BTCPayNetworkProvider _NetworkProvider; private readonly BTCPayWalletProvider _walletProvider;
readonly BTCPayWalletProvider _WalletProvider; private readonly BitpayAccessTokenController _tokenController;
readonly BitpayAccessTokenController _TokenController; private readonly StoreRepository _storeRepo;
readonly StoreRepository _Repo; private readonly TokenRepository _tokenRepository;
readonly TokenRepository _TokenRepository; private readonly UserManager<ApplicationUser> _userManager;
readonly UserManager<ApplicationUser> _UserManager; private readonly RateFetcher _rateFactory;
readonly RateFetcher _RateFactory; private readonly SettingsRepository _settingsRepository;
readonly SettingsRepository _settingsRepository; private readonly ExplorerClientProvider _explorerProvider;
private readonly ExplorerClientProvider _ExplorerProvider; private readonly LanguageService _langService;
private readonly LanguageService _LangService;
private readonly PaymentMethodHandlerDictionary _handlers; private readonly PaymentMethodHandlerDictionary _handlers;
private readonly PoliciesSettings _policiesSettings; private readonly PoliciesSettings _policiesSettings;
private readonly IAuthorizationService _authorizationService; private readonly IAuthorizationService _authorizationService;
private readonly AppService _appService; private readonly AppService _appService;
private readonly IFileService _fileService; private readonly IFileService _fileService;
private readonly EventAggregator _EventAggregator;
private readonly IOptions<ExternalServicesOptions> _externalServiceOptions; private readonly IOptions<ExternalServicesOptions> _externalServiceOptions;
private readonly LightningClientFactoryService _lightningClientFactoryService;
private readonly EmailSenderFactory _emailSenderFactory; private readonly EmailSenderFactory _emailSenderFactory;
private readonly WalletFileParsers _onChainWalletParsers; private readonly WalletFileParsers _onChainWalletParsers;
private readonly EventAggregator _eventAggregator; private readonly EventAggregator _eventAggregator;
private readonly IHtmlHelper _html;
private readonly WebhookSender _webhookNotificationManager;
private readonly LightningNetworkOptions _lightningNetworkOptions;
private readonly IDataProtector _dataProtector;
public string? GeneratedPairingCode { get; set; } public string? GeneratedPairingCode { get; set; }
public WebhookSender WebhookNotificationManager { get; }
public IHtmlHelper Html { get; }
public LightningNetworkOptions LightningNetworkOptions { get; }
public IDataProtector DataProtector { get; }
[TempData] [TempData]
public bool StoreNotConfigured private bool StoreNotConfigured { get; set; }
{
get; set;
}
[AllowAnonymous] [AllowAnonymous]
[HttpGet("{storeId}/index")] [HttpGet("{storeId}/index")]
public async Task<IActionResult> Index(string storeId) public async Task<IActionResult> Index(string storeId)
{ {
var userId = _UserManager.GetUserId(User); var userId = _userManager.GetUserId(User);
if (string.IsNullOrEmpty(userId)) if (string.IsNullOrEmpty(userId))
return Forbid(); return Forbid();
var store = await _Repo.FindStore(storeId); var store = await _storeRepo.FindStore(storeId);
if (store is null) if (store is null)
return NotFound(); return NotFound();
@@ -171,7 +160,7 @@ namespace BTCPayServer.Controllers
{ {
if (User.Identity?.AuthenticationType != AuthenticationSchemes.Cookie) if (User.Identity?.AuthenticationType != AuthenticationSchemes.Cookie)
return null; return null;
return _UserManager.GetUserId(User); return _userManager.GetUserId(User);
} }
} }
} }