using System.IO; using System.Threading.Tasks; using BTCPayServer.Abstractions.Contracts; using BTCPayServer.Abstractions.Extensions; using BTCPayServer.Abstractions.Models; using BTCPayServer.Abstractions.Services; using BTCPayServer.HostedServices.Webhooks; using BTCPayServer.Services; using BTCPayServer.Services.Apps; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Newtonsoft.Json.Linq; namespace BTCPayServer.Plugins.Subscriptions { public class SubscriptionPlugin : BaseBTCPayServerPlugin { public override IBTCPayServerPlugin.PluginDependency[] Dependencies { get; } = [ new() {Identifier = nameof(BTCPayServer), Condition = ">=1.13.0"} ]; public override void Execute(IServiceCollection applicationBuilder) { applicationBuilder.AddSingleton(); applicationBuilder.AddSingleton(); applicationBuilder.AddSingleton(o => o.GetRequiredService()); applicationBuilder.AddHostedService(s => s.GetRequiredService()); applicationBuilder.AddSingleton(new UIExtension("Subscriptions/NavExtension", "header-nav")); applicationBuilder.AddSingleton(); base.Execute(applicationBuilder); } } public class SubscriptionsSwaggerProvider: ISwaggerProvider { private readonly IFileProvider _fileProvider; public SubscriptionsSwaggerProvider(IWebHostEnvironment webHostEnvironment) { _fileProvider = webHostEnvironment.WebRootFileProvider; } public async Task Fetch() { var file = _fileProvider.GetFileInfo("Resources/swagger.subscriptions.json"); using var reader = new StreamReader(file.CreateReadStream()); return JObject.Parse(await reader.ReadToEndAsync()); } } }