using System.Threading;
using System.Threading.Tasks;
using BTCPayServer.Blazor.VaultBridge.Elements;
namespace BTCPayServer.Blazor.VaultBridge;
public abstract class VaultController : IController
{
protected abstract string VaultUri { get; }
protected abstract Task Run(VaultBridgeUI ui, VaultClient vaultClient, CancellationToken cancellationToken);
public async Task Run(VaultBridgeUI ui, CancellationToken cancellationToken)
{
try
{
ui.ShowFeedback(FeedbackType.Loading, ui.StringLocalizer["Checking BTCPay Server Vault is running..."]);
var client = new VaultClient(ui.JSRuntime, VaultUri);
var res = await client.AskPermission(cancellationToken);
var feedback = (status: res.HttpCode, browser: res.Browser) switch
{
(200, _) => new Feedback(ui.StringLocalizer["Access to vault granted by owner."], FeedbackType.Success),
(401, _) => new Feedback(ui.StringLocalizer["The user declined access to the vault."],
FeedbackType.Failed),
(_, "safari") => new Feedback(
ui.ViewLocalizer[
"Safari doesn't support BTCPay Server Vault. Please use a different browser. (More information)"],
FeedbackType.Failed),
_ => new Feedback(
ui.ViewLocalizer[
"BTCPay Server Vault does not seem to be running, you can download it on Github."],
FeedbackType.Failed),
};
ui.ShowFeedback(feedback);
if (res.HttpCode != 200)
{
if (res.HttpCode == 0 && res.Browser == "brave")
ui.AddWarning(ui.ViewLocalizer[
"Brave supports BTCPay Server Vault, but you need to disable Brave Shields. (More information)"]);
ui.ShowRetry();
return;
}
await Run(ui, client, cancellationToken);
}
catch (VaultClient.VaultNotConnectedException)
{
ui.ShowFeedback(new Feedback(
ui.ViewLocalizer[
"BTCPay Server Vault does not seem to be running, you can download it on Github."],
FeedbackType.Failed));
ui.ShowRetry();
}
}
}