Allow file service to be used in plugins

This commit is contained in:
Kukks 2022-03-02 12:22:11 +01:00
parent 03e49ea2bf
commit 3231d5d179
5 changed files with 35 additions and 3 deletions

View file

@ -0,0 +1,16 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace BTCPayServer.Abstractions.Contracts;
public interface IFileService
{
Task<IStoredFile> AddFile(IFormFile file, string userId);
Task<string?> GetFileUrl(Uri baseUri, string fileId);
Task<string?> GetTemporaryFileUrl(Uri baseUri, string fileId, DateTimeOffset expiry,
bool isDownload);
Task RemoveFile(string fileId, string userId);
}

View file

@ -0,0 +1,12 @@
using System;
namespace BTCPayServer.Abstractions.Contracts;
public interface IStoredFile
{
string Id { get; set; }
string FileName { get; set; }
string StorageFileName { get; set; }
DateTime Timestamp { get; set; }
string ApplicationUserId { get; set; }
}

View file

@ -1,9 +1,10 @@
using System; using System;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using BTCPayServer.Abstractions.Contracts;
namespace BTCPayServer.Data namespace BTCPayServer.Data
{ {
public class StoredFile public class StoredFile : IStoredFile
{ {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; } public string Id { get; set; }

View file

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using BTCPayServer.Abstractions.Contracts;
using BTCPayServer.Data; using BTCPayServer.Data;
using BTCPayServer.Services; using BTCPayServer.Services;
using BTCPayServer.Storage.Models; using BTCPayServer.Storage.Models;
@ -11,7 +12,7 @@ using Microsoft.AspNetCore.Http;
namespace BTCPayServer.Storage.Services namespace BTCPayServer.Storage.Services
{ {
public class FileService public class FileService : IFileService
{ {
private readonly StoredFileRepository _FileRepository; private readonly StoredFileRepository _FileRepository;
private readonly IEnumerable<IStorageProviderService> _providers; private readonly IEnumerable<IStorageProviderService> _providers;
@ -25,7 +26,7 @@ namespace BTCPayServer.Storage.Services
_SettingsRepository = settingsRepository; _SettingsRepository = settingsRepository;
} }
public async Task<StoredFile> AddFile(IFormFile file, string userId) public async Task<IStoredFile> AddFile(IFormFile file, string userId)
{ {
var settings = await _SettingsRepository.GetSettingAsync<StorageSettings>(); var settings = await _SettingsRepository.GetSettingAsync<StorageSettings>();
if (settings is null) if (settings is null)

View file

@ -1,6 +1,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Runtime.InteropServices.ComTypes; using System.Runtime.InteropServices.ComTypes;
using BTCPayServer.Abstractions.Contracts;
using BTCPayServer.Configuration; using BTCPayServer.Configuration;
using BTCPayServer.Storage.Services; using BTCPayServer.Storage.Services;
using BTCPayServer.Storage.Services.Providers; using BTCPayServer.Storage.Services.Providers;
@ -23,6 +24,7 @@ namespace BTCPayServer.Storage
{ {
serviceCollection.AddSingleton<StoredFileRepository>(); serviceCollection.AddSingleton<StoredFileRepository>();
serviceCollection.AddSingleton<FileService>(); serviceCollection.AddSingleton<FileService>();
serviceCollection.AddSingleton<IFileService>(provider => provider.GetRequiredService<FileService>());
// serviceCollection.AddSingleton<IStorageProviderService, AmazonS3FileProviderService>(); // serviceCollection.AddSingleton<IStorageProviderService, AmazonS3FileProviderService>();
serviceCollection.AddSingleton<IStorageProviderService, AzureBlobStorageFileProviderService>(); serviceCollection.AddSingleton<IStorageProviderService, AzureBlobStorageFileProviderService>();
serviceCollection.AddSingleton<IStorageProviderService, FileSystemFileProviderService>(); serviceCollection.AddSingleton<IStorageProviderService, FileSystemFileProviderService>();