mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-19 01:43:50 +01:00
[Refactor] Move SQL classes in their own assembly
This commit is contained in:
parent
5b4e78f8d1
commit
f257f9f91d
11
BTCPayServer.Data/BTCPayServer.Data.csproj
Normal file
11
BTCPayServer.Data/BTCPayServer.Data.csproj
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<Import Project="../Build/Common.csproj" />
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.9" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.4" />
|
||||||
|
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.2" />
|
||||||
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.1.2" />
|
||||||
|
<PackageReference Include="OpenIddict.EntityFrameworkCore" Version="2.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
36
BTCPayServer.Data/Data/AddressInvoiceData.cs
Normal file
36
BTCPayServer.Data/Data/AddressInvoiceData.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public class AddressInvoiceData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Some crypto currencies share same address prefix
|
||||||
|
/// For not having exceptions thrown by two address on different network, we suffix by "#CRYPTOCODE"
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("Use GetHash instead")]
|
||||||
|
public string Address
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvoiceData InvoiceData
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string InvoiceDataId
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateTimeOffset? CreatedTime
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,7 @@
|
|||||||
using System.Linq;
|
using System;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using BTCPayServer.Models;
|
|
||||||
using BTCPayServer.Services.PaymentRequests;
|
|
||||||
using BTCPayServer.Services.U2F.Models;
|
|
||||||
using BTCPayServer.Storage.Models;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using OpenIddict.EntityFrameworkCore.Models;
|
using OpenIddict.EntityFrameworkCore.Models;
|
||||||
|
|
||||||
@ -229,7 +225,7 @@ namespace BTCPayServer.Data
|
|||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
builder.Entity<PaymentRequestData>()
|
builder.Entity<PaymentRequestData>()
|
||||||
.Property(e => e.Created)
|
.Property(e => e.Created)
|
||||||
.HasDefaultValue(NBitcoin.Utils.UnixTimeToDateTime(0));
|
.HasDefaultValue(new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero));
|
||||||
|
|
||||||
builder.Entity<PaymentRequestData>()
|
builder.Entity<PaymentRequestData>()
|
||||||
.HasIndex(o => o.Status);
|
.HasIndex(o => o.Status);
|
@ -88,13 +88,13 @@ namespace BTCPayServer.Data
|
|||||||
public void ConfigureBuilder(DbContextOptionsBuilder builder)
|
public void ConfigureBuilder(DbContextOptionsBuilder builder)
|
||||||
{
|
{
|
||||||
if (_Type == DatabaseType.Sqlite)
|
if (_Type == DatabaseType.Sqlite)
|
||||||
builder.UseSqlite(_ConnectionString);
|
builder.UseSqlite(_ConnectionString, o => o.MigrationsAssembly("BTCPayServer.Data"));
|
||||||
else if (_Type == DatabaseType.Postgres)
|
else if (_Type == DatabaseType.Postgres)
|
||||||
builder
|
builder
|
||||||
.UseNpgsql(_ConnectionString)
|
.UseNpgsql(_ConnectionString, o => o.MigrationsAssembly("BTCPayServer.Data"))
|
||||||
.ReplaceService<IMigrationsSqlGenerator, CustomNpgsqlMigrationsSqlGenerator>();
|
.ReplaceService<IMigrationsSqlGenerator, CustomNpgsqlMigrationsSqlGenerator>();
|
||||||
else if (_Type == DatabaseType.MySQL)
|
else if (_Type == DatabaseType.MySQL)
|
||||||
builder.UseMySql(_ConnectionString);
|
builder.UseMySql(_ConnectionString, o => o.MigrationsAssembly("BTCPayServer.Data"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,13 +2,10 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.U2F.Models;
|
|
||||||
using BTCPayServer.Storage.Models;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
// Add profile data for application users by adding properties to the ApplicationUser class
|
// Add profile data for application users by adding properties to the ApplicationUser class
|
||||||
public class ApplicationUser : IdentityUser
|
public class ApplicationUser : IdentityUser
|
@ -1,6 +1,6 @@
|
|||||||
using OpenIddict.EntityFrameworkCore.Models;
|
using OpenIddict.EntityFrameworkCore.Models;
|
||||||
|
|
||||||
namespace BTCPayServer.Authentication.OpenId.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
public class BTCPayOpenIdAuthorization : OpenIddictAuthorization<string, BTCPayOpenIdClient, BTCPayOpenIdToken> { }
|
public class BTCPayOpenIdAuthorization : OpenIddictAuthorization<string, BTCPayOpenIdClient, BTCPayOpenIdToken> { }
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
using BTCPayServer.Models;
|
|
||||||
using OpenIddict.EntityFrameworkCore.Models;
|
using OpenIddict.EntityFrameworkCore.Models;
|
||||||
|
|
||||||
namespace BTCPayServer.Authentication.OpenId.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
public class BTCPayOpenIdClient: OpenIddictApplication<string, BTCPayOpenIdAuthorization, BTCPayOpenIdToken>
|
public class BTCPayOpenIdClient: OpenIddictApplication<string, BTCPayOpenIdAuthorization, BTCPayOpenIdToken>
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using OpenIddict.EntityFrameworkCore.Models;
|
using OpenIddict.EntityFrameworkCore.Models;
|
||||||
|
|
||||||
namespace BTCPayServer.Authentication.OpenId.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
public class BTCPayOpenIdToken : OpenIddictToken<string, BTCPayOpenIdClient, BTCPayOpenIdAuthorization> { }
|
public class BTCPayOpenIdToken : OpenIddictToken<string, BTCPayOpenIdClient, BTCPayOpenIdAuthorization> { }
|
||||||
}
|
}
|
@ -31,29 +31,6 @@ namespace BTCPayServer.Data
|
|||||||
[Obsolete("Use GetCryptoCode instead")]
|
[Obsolete("Use GetCryptoCode instead")]
|
||||||
public string CryptoCode { get; set; }
|
public string CryptoCode { get; set; }
|
||||||
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
public Payments.PaymentMethodId GetPaymentMethodId()
|
|
||||||
{
|
|
||||||
return string.IsNullOrEmpty(CryptoCode) ? new Payments.PaymentMethodId("BTC", Payments.PaymentTypes.BTCLike)
|
|
||||||
: Payments.PaymentMethodId.Parse(CryptoCode);
|
|
||||||
}
|
|
||||||
public string GetAddress()
|
|
||||||
{
|
|
||||||
if (Address == null)
|
|
||||||
return null;
|
|
||||||
var index = Address.IndexOf("#", StringComparison.InvariantCulture);
|
|
||||||
if (index == -1)
|
|
||||||
return Address;
|
|
||||||
return Address.Substring(0, index);
|
|
||||||
}
|
|
||||||
public HistoricalAddressInvoiceData SetAddress(string depositAddress, string cryptoCode)
|
|
||||||
{
|
|
||||||
Address = depositAddress + "#" + cryptoCode;
|
|
||||||
CryptoCode = cryptoCode;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
|
|
||||||
public DateTimeOffset Assigned
|
public DateTimeOffset Assigned
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
@ -1,5 +1,4 @@
|
|||||||
using BTCPayServer.Models;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -81,10 +80,5 @@ namespace BTCPayServer.Data
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
public List<PendingInvoiceData> PendingInvoices { get; set; }
|
public List<PendingInvoiceData> PendingInvoices { get; set; }
|
||||||
|
|
||||||
public Services.Invoices.InvoiceState GetInvoiceState()
|
|
||||||
{
|
|
||||||
return new Services.Invoices.InvoiceState(Status, ExceptionStatus);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,7 +15,7 @@ namespace BTCPayServer.Data
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
public string UniqueId { get; internal set; }
|
public string UniqueId { get; set; }
|
||||||
public DateTimeOffset Timestamp
|
public DateTimeOffset Timestamp
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
45
BTCPayServer.Data/Data/PaymentRequestData.cs
Normal file
45
BTCPayServer.Data/Data/PaymentRequestData.cs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public class PaymentRequestData
|
||||||
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
|
public DateTimeOffset Created
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public string StoreDataId { get; set; }
|
||||||
|
|
||||||
|
public StoreData StoreData { get; set; }
|
||||||
|
|
||||||
|
public PaymentRequestStatus Status { get; set; }
|
||||||
|
|
||||||
|
public byte[] Blob { get; set; }
|
||||||
|
|
||||||
|
public class PaymentRequestBlob
|
||||||
|
{
|
||||||
|
public decimal Amount { get; set; }
|
||||||
|
public string Currency { get; set; }
|
||||||
|
|
||||||
|
public DateTime? ExpiryDate { get; set; }
|
||||||
|
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public string EmbeddedCSS { get; set; }
|
||||||
|
public string CustomCSSLink { get; set; }
|
||||||
|
public bool AllowCustomPaymentAmounts { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum PaymentRequestStatus
|
||||||
|
{
|
||||||
|
Pending = 0,
|
||||||
|
Completed = 1,
|
||||||
|
Expired = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
102
BTCPayServer.Data/Data/StoreData.cs
Normal file
102
BTCPayServer.Data/Data/StoreData.cs
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System.Security.Claims;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public enum SpeedPolicy
|
||||||
|
{
|
||||||
|
HighSpeed = 0,
|
||||||
|
MediumSpeed = 1,
|
||||||
|
LowSpeed = 2,
|
||||||
|
LowMediumSpeed = 3
|
||||||
|
}
|
||||||
|
public class StoreData
|
||||||
|
{
|
||||||
|
public string Id
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<UserStore> UserStores
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public List<AppData> Apps
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PaymentRequestData> PaymentRequests
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<InvoiceData> Invoices { get; set; }
|
||||||
|
|
||||||
|
[Obsolete("Use GetDerivationStrategies instead")]
|
||||||
|
public string DerivationStrategy
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use GetDerivationStrategies instead")]
|
||||||
|
public string DerivationStrategies
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StoreName
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpeedPolicy SpeedPolicy
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StoreWebsite
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] StoreCertificate
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
[Obsolete]
|
||||||
|
public string Role
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] StoreBlob
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
[Obsolete("Use GetDefaultPaymentId instead")]
|
||||||
|
public string DefaultCrypto { get; set; }
|
||||||
|
public List<PairedSINData> PairedSINs { get; set; }
|
||||||
|
public IEnumerable<APIKeyData> APIKeys { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public List<Claim> AdditionalClaims { get; set; } = new List<Claim>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum NetworkFeeMode
|
||||||
|
{
|
||||||
|
MultiplePaymentsOnly,
|
||||||
|
Always,
|
||||||
|
Never
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using BTCPayServer.Models;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Storage.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
public class StoredFile
|
public class StoredFile
|
||||||
{
|
{
|
@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using BTCPayServer.Models;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Services.U2F.Models
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
public class U2FDevice
|
public class U2FDevice
|
||||||
{
|
{
|
@ -1,5 +1,4 @@
|
|||||||
using BTCPayServer.Models;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
@ -14,25 +14,6 @@ namespace BTCPayServer.Data
|
|||||||
public List<WalletTransactionData> WalletTransactions { get; set; }
|
public List<WalletTransactionData> WalletTransactions { get; set; }
|
||||||
|
|
||||||
public byte[] Blob { get; set; }
|
public byte[] Blob { get; set; }
|
||||||
|
|
||||||
public WalletBlobInfo GetBlobInfo()
|
|
||||||
{
|
|
||||||
if (Blob == null || Blob.Length == 0)
|
|
||||||
{
|
|
||||||
return new WalletBlobInfo();
|
|
||||||
}
|
|
||||||
var blobInfo = JsonConvert.DeserializeObject<WalletBlobInfo>(ZipUtils.Unzip(Blob));
|
|
||||||
return blobInfo;
|
|
||||||
}
|
|
||||||
public void SetBlobInfo(WalletBlobInfo blobInfo)
|
|
||||||
{
|
|
||||||
if (blobInfo == null)
|
|
||||||
{
|
|
||||||
Blob = Array.Empty<byte>();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Blob = ZipUtils.Zip(JsonConvert.SerializeObject(blobInfo));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Label
|
public class Label
|
24
BTCPayServer.Data/Data/WalletTransactionData.cs
Normal file
24
BTCPayServer.Data/Data/WalletTransactionData.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public class WalletTransactionData
|
||||||
|
{
|
||||||
|
public string WalletDataId { get; set; }
|
||||||
|
public WalletData WalletData { get; set; }
|
||||||
|
public string TransactionId { get; set; }
|
||||||
|
public string Labels { get; set; }
|
||||||
|
public byte[] Blob { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WalletTransactionInfo
|
||||||
|
{
|
||||||
|
public string Comment { get; set; } = string.Empty;
|
||||||
|
[JsonIgnore]
|
||||||
|
public HashSet<string> Labels { get; set; } = new HashSet<string>();
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
@ -1,6 +1,5 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using BTCPayServer.Data;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
24
BTCPayServer.Data/MigrationsExtensions.cs
Normal file
24
BTCPayServer.Data/MigrationsExtensions.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Migrations
|
||||||
|
{
|
||||||
|
public static class MigrationsExtensions
|
||||||
|
{
|
||||||
|
public static bool SupportDropColumn(this Microsoft.EntityFrameworkCore.Migrations.Migration migration, string activeProvider)
|
||||||
|
{
|
||||||
|
return activeProvider != "Microsoft.EntityFrameworkCore.Sqlite";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool SupportDropForeignKey(this Microsoft.EntityFrameworkCore.Migrations.Migration migration, string activeProvider)
|
||||||
|
{
|
||||||
|
return activeProvider != "Microsoft.EntityFrameworkCore.Sqlite";
|
||||||
|
}
|
||||||
|
public static bool SupportDropForeignKey(this DatabaseFacade facade)
|
||||||
|
{
|
||||||
|
return facade.ProviderName != "Microsoft.EntityFrameworkCore.Sqlite";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ using BTCPayServer.Tests.Logging;
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Tests
|
namespace BTCPayServer.Tests
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using NBXplorer.DerivationStrategy;
|
using NBXplorer.DerivationStrategy;
|
||||||
using BTCPayServer.Payments;
|
using BTCPayServer.Payments;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -2,7 +2,7 @@ using System.Security.Claims;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AspNet.Security.OpenIdConnect.Extensions;
|
using AspNet.Security.OpenIdConnect.Extensions;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -5,7 +5,7 @@ using System.Security.Claims;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AspNet.Security.OpenIdConnect.Extensions;
|
using AspNet.Security.OpenIdConnect.Extensions;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using BTCPayServer.Services.U2F;
|
using BTCPayServer.Services.U2F;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
<PackageReference Include="BundlerMinifier.TagHelpers" Version="2.9.406" />
|
<PackageReference Include="BundlerMinifier.TagHelpers" Version="2.9.406" />
|
||||||
<PackageReference Include="HtmlSanitizer" Version="4.0.217" />
|
<PackageReference Include="HtmlSanitizer" Version="4.0.217" />
|
||||||
<PackageReference Include="LedgerWallet" Version="2.0.0.3" />
|
<PackageReference Include="LedgerWallet" Version="2.0.0.3" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.4" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.2" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.2" />
|
||||||
<PackageReference Include="Microsoft.NetCore.Analyzers" Version="2.6.2">
|
<PackageReference Include="Microsoft.NetCore.Analyzers" Version="2.6.2">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
@ -49,10 +48,7 @@
|
|||||||
<PackageReference Include="NicolasDorier.CommandLine.Configuration" Version="1.0.0.3" />
|
<PackageReference Include="NicolasDorier.CommandLine.Configuration" Version="1.0.0.3" />
|
||||||
<PackageReference Include="NicolasDorier.RateLimits" Version="1.0.0.9" />
|
<PackageReference Include="NicolasDorier.RateLimits" Version="1.0.0.9" />
|
||||||
<PackageReference Include="NicolasDorier.StandardConfiguration" Version="1.0.0.18" />
|
<PackageReference Include="NicolasDorier.StandardConfiguration" Version="1.0.0.18" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.1.2" />
|
|
||||||
<PackageReference Include="OpenIddict" Version="2.0.0" />
|
<PackageReference Include="OpenIddict" Version="2.0.0" />
|
||||||
<PackageReference Include="OpenIddict.EntityFrameworkCore" Version="2.0.0" />
|
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.2" />
|
|
||||||
<PackageReference Include="Serilog" Version="2.7.1" />
|
<PackageReference Include="Serilog" Version="2.7.1" />
|
||||||
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
|
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
|
||||||
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
|
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
|
||||||
@ -124,6 +120,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Folder Include="Authentication\OpenId\Models\" />
|
||||||
<Folder Include="Build\" />
|
<Folder Include="Build\" />
|
||||||
<Folder Include="U2F\Services" />
|
<Folder Include="U2F\Services" />
|
||||||
<Folder Include="wwwroot\vendor\clipboard.js\" />
|
<Folder Include="wwwroot\vendor\clipboard.js\" />
|
||||||
@ -133,6 +130,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\BTCPayServer.Data\BTCPayServer.Data.csproj" />
|
||||||
<ProjectReference Include="..\BTCPayServer.Rating\BTCPayServer.Rating.csproj" />
|
<ProjectReference Include="..\BTCPayServer.Rating\BTCPayServer.Rating.csproj" />
|
||||||
<ProjectReference Include="..\BTCPayServer.Common\BTCPayServer.Common.csproj" />
|
<ProjectReference Include="..\BTCPayServer.Common\BTCPayServer.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -22,6 +22,7 @@ using BTCPayServer.Services.U2F;
|
|||||||
using BTCPayServer.Services.U2F.Models;
|
using BTCPayServer.Services.U2F.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NicolasDorier.RateLimits;
|
using NicolasDorier.RateLimits;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
namespace BTCPayServer.Controllers
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@ using System.Threading.Tasks;
|
|||||||
using AspNet.Security.OpenIdConnect.Extensions;
|
using AspNet.Security.OpenIdConnect.Extensions;
|
||||||
using AspNet.Security.OpenIdConnect.Primitives;
|
using AspNet.Security.OpenIdConnect.Primitives;
|
||||||
using BTCPayServer.Authentication.OpenId;
|
using BTCPayServer.Authentication.OpenId;
|
||||||
using BTCPayServer.Authentication.OpenId.Models;
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using BTCPayServer.Models.Authorization;
|
using BTCPayServer.Models.Authorization;
|
||||||
using BTCPayServer.Security;
|
using BTCPayServer.Security;
|
||||||
|
@ -6,6 +6,7 @@ using BTCPayServer.Payments.Changelly;
|
|||||||
using BTCPayServer.Rating;
|
using BTCPayServer.Rating;
|
||||||
using BTCPayServer.Services.Rates;
|
using BTCPayServer.Services.Rates;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
namespace BTCPayServer.Controllers
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@ using System.Globalization;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using BTCPayServer.Models.ManageViewModels;
|
using BTCPayServer.Models.ManageViewModels;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
@ -19,6 +19,7 @@ using BTCPayServer.Services.Mails;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using BTCPayServer.Security;
|
using BTCPayServer.Security;
|
||||||
using BTCPayServer.Services.U2F;
|
using BTCPayServer.Services.U2F;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
namespace BTCPayServer.Controllers
|
||||||
{
|
{
|
||||||
|
@ -10,6 +10,7 @@ using BTCPayServer.Models.StoreViewModels;
|
|||||||
using BTCPayServer.Services.Stores;
|
using BTCPayServer.Services.Stores;
|
||||||
using Microsoft.AspNetCore.Cors;
|
using Microsoft.AspNetCore.Cors;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
namespace BTCPayServer.Controllers
|
||||||
{
|
{
|
||||||
|
@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Authorization;
|
|||||||
using BTCPayServer.Authentication;
|
using BTCPayServer.Authentication;
|
||||||
using Microsoft.AspNetCore.Cors;
|
using Microsoft.AspNetCore.Cors;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using BTCPayServer.Data;
|
||||||
|
|
||||||
namespace BTCPayServer.Controllers
|
namespace BTCPayServer.Controllers
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using BTCPayServer.Data;
|
||||||
using BTCPayServer.Models;
|
using BTCPayServer.Models;
|
||||||
using BTCPayServer.Models.StoreViewModels;
|
using BTCPayServer.Models.StoreViewModels;
|
||||||
using BTCPayServer.Security;
|
using BTCPayServer.Security;
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using BTCPayServer.Payments;
|
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using NBitcoin;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Data
|
|
||||||
{
|
|
||||||
public class AddressInvoiceData
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Some crypto currencies share same address prefix
|
|
||||||
/// For not having exceptions thrown by two address on different network, we suffix by "#CRYPTOCODE"
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete("Use GetHash instead")]
|
|
||||||
public string Address
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
public string GetAddress()
|
|
||||||
{
|
|
||||||
if (Address == null)
|
|
||||||
return null;
|
|
||||||
var index = Address.LastIndexOf("#", StringComparison.InvariantCulture);
|
|
||||||
if (index == -1)
|
|
||||||
return Address;
|
|
||||||
return Address.Substring(0, index);
|
|
||||||
}
|
|
||||||
public AddressInvoiceData Set(string address, PaymentMethodId paymentMethodId)
|
|
||||||
{
|
|
||||||
Address = address + "#" + paymentMethodId.ToString();
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public PaymentMethodId GetpaymentMethodId()
|
|
||||||
{
|
|
||||||
if (Address == null)
|
|
||||||
return null;
|
|
||||||
var index = Address.LastIndexOf("#", StringComparison.InvariantCulture);
|
|
||||||
// Legacy AddressInvoiceData does not have the paymentMethodId attached to the Address
|
|
||||||
if (index == -1)
|
|
||||||
return PaymentMethodId.Parse("BTC");
|
|
||||||
/////////////////////////
|
|
||||||
return PaymentMethodId.Parse(Address.Substring(index + 1));
|
|
||||||
}
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
|
|
||||||
public InvoiceData InvoiceData
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string InvoiceDataId
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DateTimeOffset? CreatedTime
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
39
BTCPayServer/Data/AddressInvoiceDataExtensions.cs
Normal file
39
BTCPayServer/Data/AddressInvoiceDataExtensions.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using BTCPayServer.Payments;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public static class AddressInvoiceDataExtensions
|
||||||
|
{
|
||||||
|
#pragma warning disable CS0618
|
||||||
|
public static string GetAddress(this AddressInvoiceData addressInvoiceData)
|
||||||
|
{
|
||||||
|
if (addressInvoiceData.Address == null)
|
||||||
|
return null;
|
||||||
|
var index = addressInvoiceData.Address.LastIndexOf("#", StringComparison.InvariantCulture);
|
||||||
|
if (index == -1)
|
||||||
|
return addressInvoiceData.Address;
|
||||||
|
return addressInvoiceData.Address.Substring(0, index);
|
||||||
|
}
|
||||||
|
public static AddressInvoiceData Set(this AddressInvoiceData addressInvoiceData, string address, PaymentMethodId paymentMethodId)
|
||||||
|
{
|
||||||
|
addressInvoiceData.Address = address + "#" + paymentMethodId.ToString();
|
||||||
|
return addressInvoiceData;
|
||||||
|
}
|
||||||
|
public static PaymentMethodId GetpaymentMethodId(this AddressInvoiceData addressInvoiceData)
|
||||||
|
{
|
||||||
|
if (addressInvoiceData.Address == null)
|
||||||
|
return null;
|
||||||
|
var index = addressInvoiceData.Address.LastIndexOf("#", StringComparison.InvariantCulture);
|
||||||
|
// Legacy AddressInvoiceData does not have the paymentMethodId attached to the Address
|
||||||
|
if (index == -1)
|
||||||
|
return PaymentMethodId.Parse("BTC");
|
||||||
|
/////////////////////////
|
||||||
|
return PaymentMethodId.Parse(addressInvoiceData.Address.Substring(index + 1));
|
||||||
|
}
|
||||||
|
#pragma warning restore CS0618
|
||||||
|
}
|
||||||
|
}
|
33
BTCPayServer/Data/HistoricalAddressInvoiceDataExtensions.cs
Normal file
33
BTCPayServer/Data/HistoricalAddressInvoiceDataExtensions.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public static class HistoricalAddressInvoiceDataExtensions
|
||||||
|
{
|
||||||
|
#pragma warning disable CS0618
|
||||||
|
public static Payments.PaymentMethodId GetPaymentMethodId(this HistoricalAddressInvoiceData historicalAddressInvoiceData)
|
||||||
|
{
|
||||||
|
return string.IsNullOrEmpty(historicalAddressInvoiceData.CryptoCode) ? new Payments.PaymentMethodId("BTC", Payments.PaymentTypes.BTCLike)
|
||||||
|
: Payments.PaymentMethodId.Parse(historicalAddressInvoiceData.CryptoCode);
|
||||||
|
}
|
||||||
|
public static string GetAddress(this HistoricalAddressInvoiceData historicalAddressInvoiceData)
|
||||||
|
{
|
||||||
|
if (historicalAddressInvoiceData.Address == null)
|
||||||
|
return null;
|
||||||
|
var index = historicalAddressInvoiceData.Address.IndexOf("#", StringComparison.InvariantCulture);
|
||||||
|
if (index == -1)
|
||||||
|
return historicalAddressInvoiceData.Address;
|
||||||
|
return historicalAddressInvoiceData.Address.Substring(0, index);
|
||||||
|
}
|
||||||
|
public static HistoricalAddressInvoiceData SetAddress(this HistoricalAddressInvoiceData historicalAddressInvoiceData, string depositAddress, string cryptoCode)
|
||||||
|
{
|
||||||
|
historicalAddressInvoiceData.Address = depositAddress + "#" + cryptoCode;
|
||||||
|
historicalAddressInvoiceData.CryptoCode = cryptoCode;
|
||||||
|
return historicalAddressInvoiceData;
|
||||||
|
}
|
||||||
|
#pragma warning restore CS0618
|
||||||
|
}
|
||||||
|
}
|
16
BTCPayServer/Data/InvoiceDataExtensions.cs
Normal file
16
BTCPayServer/Data/InvoiceDataExtensions.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using BTCPayServer.Services.Invoices;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public static class InvoiceDataExtensions
|
||||||
|
{
|
||||||
|
public static InvoiceState GetInvoiceState(this InvoiceData invoiceData)
|
||||||
|
{
|
||||||
|
return new InvoiceState(invoiceData.Status, invoiceData.ExceptionStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
BTCPayServer/Data/PaymentRequestDataExtensions.cs
Normal file
32
BTCPayServer/Data/PaymentRequestDataExtensions.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using NBitcoin;
|
||||||
|
using NBXplorer;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using static BTCPayServer.Data.PaymentRequestData;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public static class PaymentRequestDataExtensions
|
||||||
|
{
|
||||||
|
public static PaymentRequestBlob GetBlob(this PaymentRequestData paymentRequestData)
|
||||||
|
{
|
||||||
|
var result = paymentRequestData.Blob == null
|
||||||
|
? new PaymentRequestBlob()
|
||||||
|
: JObject.Parse(ZipUtils.Unzip(paymentRequestData.Blob)).ToObject<PaymentRequestBlob>();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool SetBlob(this PaymentRequestData paymentRequestData, PaymentRequestBlob blob)
|
||||||
|
{
|
||||||
|
var original = new Serializer(Network.Main).ToString(paymentRequestData.GetBlob());
|
||||||
|
var newBlob = new Serializer(Network.Main).ToString(blob);
|
||||||
|
if (original == newBlob)
|
||||||
|
return false;
|
||||||
|
paymentRequestData.Blob = ZipUtils.Zip(newBlob);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
213
BTCPayServer/Data/StoreBlob.cs
Normal file
213
BTCPayServer/Data/StoreBlob.cs
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using BTCPayServer.Payments;
|
||||||
|
using BTCPayServer.JsonConverters;
|
||||||
|
using BTCPayServer.Payments.Changelly;
|
||||||
|
using BTCPayServer.Payments.CoinSwitch;
|
||||||
|
using BTCPayServer.Rating;
|
||||||
|
using BTCPayServer.Services.Mails;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Data
|
||||||
|
{
|
||||||
|
public class StoreBlob
|
||||||
|
{
|
||||||
|
public StoreBlob()
|
||||||
|
{
|
||||||
|
InvoiceExpiration = 15;
|
||||||
|
MonitoringExpiration = 1440;
|
||||||
|
PaymentTolerance = 0;
|
||||||
|
RequiresRefundEmail = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use NetworkFeeMode instead")]
|
||||||
|
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
|
public bool? NetworkFeeDisabled
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
|
||||||
|
public NetworkFeeMode NetworkFeeMode
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool RequiresRefundEmail { get; set; }
|
||||||
|
|
||||||
|
CurrencyPair[] _DefaultCurrencyPairs;
|
||||||
|
[JsonProperty("defaultCurrencyPairs", ItemConverterType = typeof(CurrencyPairJsonConverter))]
|
||||||
|
public CurrencyPair[] DefaultCurrencyPairs
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _DefaultCurrencyPairs ?? Array.Empty<CurrencyPair>();
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_DefaultCurrencyPairs = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetDefaultCurrencyPairString()
|
||||||
|
{
|
||||||
|
return string.Join(',', DefaultCurrencyPairs.Select(c => c.ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DefaultLang { get; set; }
|
||||||
|
[DefaultValue(60)]
|
||||||
|
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
||||||
|
public int MonitoringExpiration
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DefaultValue(15)]
|
||||||
|
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
||||||
|
public int InvoiceExpiration
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public decimal Spread { get; set; } = 0.0m;
|
||||||
|
|
||||||
|
[Obsolete]
|
||||||
|
public List<RateRule_Obsolete> RateRules { get; set; } = new List<RateRule_Obsolete>();
|
||||||
|
public string PreferredExchange { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(CurrencyValueJsonConverter))]
|
||||||
|
public CurrencyValue OnChainMinValue { get; set; }
|
||||||
|
[JsonConverter(typeof(CurrencyValueJsonConverter))]
|
||||||
|
public CurrencyValue LightningMaxValue { get; set; }
|
||||||
|
public bool LightningAmountInSatoshi { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(UriJsonConverter))]
|
||||||
|
public Uri CustomLogo { get; set; }
|
||||||
|
[JsonConverter(typeof(UriJsonConverter))]
|
||||||
|
public Uri CustomCSS { get; set; }
|
||||||
|
public string HtmlTitle { get; set; }
|
||||||
|
|
||||||
|
public bool RateScripting { get; set; }
|
||||||
|
|
||||||
|
public string RateScript { get; set; }
|
||||||
|
|
||||||
|
public bool AnyoneCanInvoice { get; set; }
|
||||||
|
|
||||||
|
public ChangellySettings ChangellySettings { get; set; }
|
||||||
|
public CoinSwitchSettings CoinSwitchSettings { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
string _LightningDescriptionTemplate;
|
||||||
|
public string LightningDescriptionTemplate
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _LightningDescriptionTemplate ?? "Paid to {StoreName} (Order ID: {OrderId})";
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_LightningDescriptionTemplate = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[DefaultValue(0)]
|
||||||
|
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
||||||
|
public double PaymentTolerance { get; set; }
|
||||||
|
|
||||||
|
public BTCPayServer.Rating.RateRules GetRateRules(BTCPayNetworkProvider networkProvider)
|
||||||
|
{
|
||||||
|
if (!RateScripting ||
|
||||||
|
string.IsNullOrEmpty(RateScript) ||
|
||||||
|
!BTCPayServer.Rating.RateRules.TryParse(RateScript, out var rules))
|
||||||
|
{
|
||||||
|
return GetDefaultRateRules(networkProvider);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rules.Spread = Spread;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public RateRules GetDefaultRateRules(BTCPayNetworkProvider networkProvider)
|
||||||
|
{
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
foreach (var network in networkProvider.GetAll())
|
||||||
|
{
|
||||||
|
if (network.DefaultRateRules.Length != 0)
|
||||||
|
{
|
||||||
|
builder.AppendLine($"// Default rate rules for {network.CryptoCode}");
|
||||||
|
foreach (var line in network.DefaultRateRules)
|
||||||
|
{
|
||||||
|
builder.AppendLine(line);
|
||||||
|
}
|
||||||
|
builder.AppendLine($"////////");
|
||||||
|
builder.AppendLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var preferredExchange = string.IsNullOrEmpty(PreferredExchange) ? "coinaverage" : PreferredExchange;
|
||||||
|
builder.AppendLine($"X_X = {preferredExchange}(X_X);");
|
||||||
|
|
||||||
|
BTCPayServer.Rating.RateRules.TryParse(builder.ToString(), out var rules);
|
||||||
|
rules.Spread = Spread;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use GetExcludedPaymentMethods instead")]
|
||||||
|
public string[] ExcludedPaymentMethods { get; set; }
|
||||||
|
|
||||||
|
[Obsolete("Use DerivationSchemeSettings instead")]
|
||||||
|
public Dictionary<string, string> WalletKeyPathRoots { get; set; }
|
||||||
|
|
||||||
|
public EmailSettings EmailSettings { get; set; }
|
||||||
|
public bool RedirectAutomatically { get; set; }
|
||||||
|
|
||||||
|
public IPaymentFilter GetExcludedPaymentMethods()
|
||||||
|
{
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
if (ExcludedPaymentMethods == null || ExcludedPaymentMethods.Length == 0)
|
||||||
|
return PaymentFilter.Never();
|
||||||
|
return PaymentFilter.Any(ExcludedPaymentMethods.Select(p => PaymentFilter.WhereIs(PaymentMethodId.Parse(p))).ToArray());
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsExcluded(PaymentMethodId paymentMethodId)
|
||||||
|
{
|
||||||
|
return GetExcludedPaymentMethods().Match(paymentMethodId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetExcluded(PaymentMethodId paymentMethodId, bool value)
|
||||||
|
{
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
var methods = new HashSet<string>(ExcludedPaymentMethods ?? Array.Empty<string>());
|
||||||
|
if (value)
|
||||||
|
methods.Add(paymentMethodId.ToString());
|
||||||
|
else
|
||||||
|
methods.Remove(paymentMethodId.ToString());
|
||||||
|
ExcludedPaymentMethods = methods.ToArray();
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class RateRule_Obsolete
|
||||||
|
{
|
||||||
|
public RateRule_Obsolete()
|
||||||
|
{
|
||||||
|
RuleName = "Multiplier";
|
||||||
|
}
|
||||||
|
public string RuleName { get; set; }
|
||||||
|
|
||||||
|
public double Multiplier { get; set; }
|
||||||
|
|
||||||
|
public decimal Apply(BTCPayNetworkBase network, decimal rate)
|
||||||
|
{
|
||||||
|
return rate * (decimal)Multiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,478 +0,0 @@
|
|||||||
using BTCPayServer.Models;
|
|
||||||
using BTCPayServer.Services.Invoices;
|
|
||||||
using NBitcoin;
|
|
||||||
using NBXplorer;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using BTCPayServer.Services.Rates;
|
|
||||||
using BTCPayServer.Payments;
|
|
||||||
using BTCPayServer.JsonConverters;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using BTCPayServer.Services;
|
|
||||||
using System.Security.Claims;
|
|
||||||
using BTCPayServer.Payments.Changelly;
|
|
||||||
using BTCPayServer.Payments.CoinSwitch;
|
|
||||||
using BTCPayServer.Security;
|
|
||||||
using BTCPayServer.Rating;
|
|
||||||
using BTCPayServer.Services.PaymentRequests;
|
|
||||||
using BTCPayServer.Services.Mails;
|
|
||||||
|
|
||||||
namespace BTCPayServer.Data
|
|
||||||
{
|
|
||||||
public class StoreData
|
|
||||||
{
|
|
||||||
public string Id
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<UserStore> UserStores
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
public List<AppData> Apps
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PaymentRequestData> PaymentRequests
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<InvoiceData> Invoices { get; set; }
|
|
||||||
|
|
||||||
[Obsolete("Use GetDerivationStrategies instead")]
|
|
||||||
public string DerivationStrategy
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use GetDerivationStrategies instead")]
|
|
||||||
public string DerivationStrategies
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
public IEnumerable<ISupportedPaymentMethod> GetSupportedPaymentMethods(BTCPayNetworkProvider networks)
|
|
||||||
{
|
|
||||||
networks = networks.UnfilteredNetworks;
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
bool btcReturned = false;
|
|
||||||
|
|
||||||
// Legacy stuff which should go away
|
|
||||||
if (!string.IsNullOrEmpty(DerivationStrategy))
|
|
||||||
{
|
|
||||||
btcReturned = true;
|
|
||||||
yield return DerivationSchemeSettings.Parse(DerivationStrategy, networks.BTC);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(DerivationStrategies))
|
|
||||||
{
|
|
||||||
JObject strategies = JObject.Parse(DerivationStrategies);
|
|
||||||
foreach (var strat in strategies.Properties())
|
|
||||||
{
|
|
||||||
var paymentMethodId = PaymentMethodId.Parse(strat.Name);
|
|
||||||
var network = networks.GetNetwork<BTCPayNetwork>(paymentMethodId.CryptoCode);
|
|
||||||
if (network != null)
|
|
||||||
{
|
|
||||||
if (network == networks.BTC && paymentMethodId.PaymentType == PaymentTypes.BTCLike && btcReturned)
|
|
||||||
continue;
|
|
||||||
if (strat.Value.Type == JTokenType.Null)
|
|
||||||
continue;
|
|
||||||
yield return
|
|
||||||
paymentMethodId.PaymentType.DeserializeSupportedPaymentMethod(network, strat.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetSupportedPaymentMethod(ISupportedPaymentMethod supportedPaymentMethod)
|
|
||||||
{
|
|
||||||
SetSupportedPaymentMethod(null, supportedPaymentMethod);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set or remove a new supported payment method for the store
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="paymentMethodId">The paymentMethodId</param>
|
|
||||||
/// <param name="supportedPaymentMethod">The payment method, or null to remove</param>
|
|
||||||
public void SetSupportedPaymentMethod(PaymentMethodId paymentMethodId, ISupportedPaymentMethod supportedPaymentMethod)
|
|
||||||
{
|
|
||||||
if (supportedPaymentMethod != null && paymentMethodId != null && paymentMethodId != supportedPaymentMethod.PaymentId)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Incoherent arguments, this should never happen");
|
|
||||||
}
|
|
||||||
if (supportedPaymentMethod == null && paymentMethodId == null)
|
|
||||||
throw new ArgumentException($"{nameof(supportedPaymentMethod)} or {nameof(paymentMethodId)} should be specified");
|
|
||||||
if (supportedPaymentMethod != null && paymentMethodId == null)
|
|
||||||
{
|
|
||||||
paymentMethodId = supportedPaymentMethod.PaymentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
JObject strategies = string.IsNullOrEmpty(DerivationStrategies) ? new JObject() : JObject.Parse(DerivationStrategies);
|
|
||||||
bool existing = false;
|
|
||||||
foreach (var strat in strategies.Properties().ToList())
|
|
||||||
{
|
|
||||||
var stratId = PaymentMethodId.Parse(strat.Name);
|
|
||||||
if (stratId.IsBTCOnChain)
|
|
||||||
{
|
|
||||||
// Legacy stuff which should go away
|
|
||||||
DerivationStrategy = null;
|
|
||||||
}
|
|
||||||
if (stratId == paymentMethodId)
|
|
||||||
{
|
|
||||||
if (supportedPaymentMethod == null)
|
|
||||||
{
|
|
||||||
strat.Remove();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strat.Value = PaymentMethodExtensions.Serialize(supportedPaymentMethod);
|
|
||||||
}
|
|
||||||
existing = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!existing && supportedPaymentMethod == null && paymentMethodId.IsBTCOnChain)
|
|
||||||
{
|
|
||||||
DerivationStrategy = null;
|
|
||||||
}
|
|
||||||
else if (!existing && supportedPaymentMethod != null)
|
|
||||||
strategies.Add(new JProperty(supportedPaymentMethod.PaymentId.ToString(), PaymentMethodExtensions.Serialize(supportedPaymentMethod)));
|
|
||||||
DerivationStrategies = strategies.ToString();
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
}
|
|
||||||
|
|
||||||
public string StoreName
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpeedPolicy SpeedPolicy
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string StoreWebsite
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] StoreCertificate
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
[Obsolete]
|
|
||||||
public string Role
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Claim[] GetClaims()
|
|
||||||
{
|
|
||||||
List<Claim> claims = new List<Claim>();
|
|
||||||
claims.AddRange(AdditionalClaims);
|
|
||||||
#pragma warning disable CS0612 // Type or member is obsolete
|
|
||||||
var role = Role;
|
|
||||||
#pragma warning restore CS0612 // Type or member is obsolete
|
|
||||||
if (role == StoreRoles.Owner)
|
|
||||||
{
|
|
||||||
claims.Add(new Claim(Policies.CanModifyStoreSettings.Key, Id));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(role == StoreRoles.Owner || role == StoreRoles.Guest || GetStoreBlob().AnyoneCanInvoice)
|
|
||||||
{
|
|
||||||
claims.Add(new Claim(Policies.CanCreateInvoice.Key, Id));
|
|
||||||
}
|
|
||||||
return claims.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HasClaim(string claim)
|
|
||||||
{
|
|
||||||
return GetClaims().Any(c => c.Type == claim && c.Value == Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] StoreBlob
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
[Obsolete("Use GetDefaultPaymentId instead")]
|
|
||||||
public string DefaultCrypto { get; set; }
|
|
||||||
public List<PairedSINData> PairedSINs { get; set; }
|
|
||||||
public IEnumerable<APIKeyData> APIKeys { get; set; }
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public List<Claim> AdditionalClaims { get; set; } = new List<Claim>();
|
|
||||||
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
public PaymentMethodId GetDefaultPaymentId(BTCPayNetworkProvider networks)
|
|
||||||
{
|
|
||||||
PaymentMethodId[] paymentMethodIds = GetEnabledPaymentIds(networks);
|
|
||||||
|
|
||||||
var defaultPaymentId = string.IsNullOrEmpty(DefaultCrypto) ? null : PaymentMethodId.Parse(DefaultCrypto);
|
|
||||||
var chosen = paymentMethodIds.FirstOrDefault(f => f == defaultPaymentId) ??
|
|
||||||
paymentMethodIds.FirstOrDefault(f => f.CryptoCode == defaultPaymentId?.CryptoCode) ??
|
|
||||||
paymentMethodIds.FirstOrDefault();
|
|
||||||
return chosen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PaymentMethodId[] GetEnabledPaymentIds(BTCPayNetworkProvider networks)
|
|
||||||
{
|
|
||||||
var excludeFilter = GetStoreBlob().GetExcludedPaymentMethods();
|
|
||||||
var paymentMethodIds = GetSupportedPaymentMethods(networks).Select(p => p.PaymentId)
|
|
||||||
.Where(a => !excludeFilter.Match(a))
|
|
||||||
.OrderByDescending(a => a.CryptoCode == "BTC")
|
|
||||||
.ThenBy(a => a.CryptoCode)
|
|
||||||
.ThenBy(a => a.PaymentType == PaymentTypes.LightningLike ? 1 : 0)
|
|
||||||
.ToArray();
|
|
||||||
return paymentMethodIds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetDefaultPaymentId(PaymentMethodId defaultPaymentId)
|
|
||||||
{
|
|
||||||
DefaultCrypto = defaultPaymentId.ToString();
|
|
||||||
}
|
|
||||||
#pragma warning restore CS0618
|
|
||||||
|
|
||||||
static Network Dummy = Network.Main;
|
|
||||||
|
|
||||||
public StoreBlob GetStoreBlob()
|
|
||||||
{
|
|
||||||
var result = StoreBlob == null ? new StoreBlob() : new Serializer(Dummy).ToObject<StoreBlob>(Encoding.UTF8.GetString(StoreBlob));
|
|
||||||
if (result.PreferredExchange == null)
|
|
||||||
result.PreferredExchange = CoinAverageRateProvider.CoinAverageName;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SetStoreBlob(StoreBlob storeBlob)
|
|
||||||
{
|
|
||||||
var original = new Serializer(Dummy).ToString(GetStoreBlob());
|
|
||||||
var newBlob = new Serializer(Dummy).ToString(storeBlob);
|
|
||||||
if (original == newBlob)
|
|
||||||
return false;
|
|
||||||
StoreBlob = Encoding.UTF8.GetBytes(newBlob);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class RateRule_Obsolete
|
|
||||||
{
|
|
||||||
public RateRule_Obsolete()
|
|
||||||
{
|
|
||||||
RuleName = "Multiplier";
|
|
||||||
}
|
|
||||||
public string RuleName { get; set; }
|
|
||||||
|
|
||||||
public double Multiplier { get; set; }
|
|
||||||
|
|
||||||
public decimal Apply(BTCPayNetworkBase network, decimal rate)
|
|
||||||
{
|
|
||||||
return rate * (decimal)Multiplier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum NetworkFeeMode
|
|
||||||
{
|
|
||||||
MultiplePaymentsOnly,
|
|
||||||
Always,
|
|
||||||
Never
|
|
||||||
}
|
|
||||||
public class StoreBlob
|
|
||||||
{
|
|
||||||
public StoreBlob()
|
|
||||||
{
|
|
||||||
InvoiceExpiration = 15;
|
|
||||||
MonitoringExpiration = 1440;
|
|
||||||
PaymentTolerance = 0;
|
|
||||||
RequiresRefundEmail = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use NetworkFeeMode instead")]
|
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
public bool? NetworkFeeDisabled
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
|
|
||||||
public NetworkFeeMode NetworkFeeMode
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RequiresRefundEmail { get; set; }
|
|
||||||
|
|
||||||
CurrencyPair[] _DefaultCurrencyPairs;
|
|
||||||
[JsonProperty("defaultCurrencyPairs", ItemConverterType = typeof(CurrencyPairJsonConverter))]
|
|
||||||
public CurrencyPair[] DefaultCurrencyPairs
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _DefaultCurrencyPairs ?? Array.Empty<CurrencyPair>();
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_DefaultCurrencyPairs = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetDefaultCurrencyPairString()
|
|
||||||
{
|
|
||||||
return string.Join(',', DefaultCurrencyPairs.Select(c => c.ToString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public string DefaultLang { get; set; }
|
|
||||||
[DefaultValue(60)]
|
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
|
||||||
public int MonitoringExpiration
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DefaultValue(15)]
|
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
|
||||||
public int InvoiceExpiration
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public decimal Spread { get; set; } = 0.0m;
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public List<RateRule_Obsolete> RateRules { get; set; } = new List<RateRule_Obsolete>();
|
|
||||||
public string PreferredExchange { get; set; }
|
|
||||||
|
|
||||||
[JsonConverter(typeof(CurrencyValueJsonConverter))]
|
|
||||||
public CurrencyValue OnChainMinValue { get; set; }
|
|
||||||
[JsonConverter(typeof(CurrencyValueJsonConverter))]
|
|
||||||
public CurrencyValue LightningMaxValue { get; set; }
|
|
||||||
public bool LightningAmountInSatoshi { get; set; }
|
|
||||||
|
|
||||||
[JsonConverter(typeof(UriJsonConverter))]
|
|
||||||
public Uri CustomLogo { get; set; }
|
|
||||||
[JsonConverter(typeof(UriJsonConverter))]
|
|
||||||
public Uri CustomCSS { get; set; }
|
|
||||||
public string HtmlTitle { get; set; }
|
|
||||||
|
|
||||||
public bool RateScripting { get; set; }
|
|
||||||
|
|
||||||
public string RateScript { get; set; }
|
|
||||||
|
|
||||||
public bool AnyoneCanInvoice { get; set; }
|
|
||||||
|
|
||||||
public ChangellySettings ChangellySettings { get; set; }
|
|
||||||
public CoinSwitchSettings CoinSwitchSettings { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
string _LightningDescriptionTemplate;
|
|
||||||
public string LightningDescriptionTemplate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _LightningDescriptionTemplate ?? "Paid to {StoreName} (Order ID: {OrderId})";
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_LightningDescriptionTemplate = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DefaultValue(0)]
|
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
|
||||||
public double PaymentTolerance { get; set; }
|
|
||||||
|
|
||||||
public BTCPayServer.Rating.RateRules GetRateRules(BTCPayNetworkProvider networkProvider)
|
|
||||||
{
|
|
||||||
if (!RateScripting ||
|
|
||||||
string.IsNullOrEmpty(RateScript) ||
|
|
||||||
!BTCPayServer.Rating.RateRules.TryParse(RateScript, out var rules))
|
|
||||||
{
|
|
||||||
return GetDefaultRateRules(networkProvider);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rules.Spread = Spread;
|
|
||||||
return rules;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public RateRules GetDefaultRateRules(BTCPayNetworkProvider networkProvider)
|
|
||||||
{
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
foreach (var network in networkProvider.GetAll())
|
|
||||||
{
|
|
||||||
if (network.DefaultRateRules.Length != 0)
|
|
||||||
{
|
|
||||||
builder.AppendLine($"// Default rate rules for {network.CryptoCode}");
|
|
||||||
foreach (var line in network.DefaultRateRules)
|
|
||||||
{
|
|
||||||
builder.AppendLine(line);
|
|
||||||
}
|
|
||||||
builder.AppendLine($"////////");
|
|
||||||
builder.AppendLine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var preferredExchange = string.IsNullOrEmpty(PreferredExchange) ? "coinaverage" : PreferredExchange;
|
|
||||||
builder.AppendLine($"X_X = {preferredExchange}(X_X);");
|
|
||||||
|
|
||||||
BTCPayServer.Rating.RateRules.TryParse(builder.ToString(), out var rules);
|
|
||||||
rules.Spread = Spread;
|
|
||||||
return rules;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use GetExcludedPaymentMethods instead")]
|
|
||||||
public string[] ExcludedPaymentMethods { get; set; }
|
|
||||||
|
|
||||||
[Obsolete("Use DerivationSchemeSettings instead")]
|
|
||||||
public Dictionary<string, string> WalletKeyPathRoots { get; set; }
|
|
||||||
|
|
||||||
public EmailSettings EmailSettings { get; set; }
|
|
||||||
public bool RedirectAutomatically { get; set; }
|
|
||||||
|
|
||||||
public IPaymentFilter GetExcludedPaymentMethods()
|
|
||||||
{
|
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete
|
|
||||||
if (ExcludedPaymentMethods == null || ExcludedPaymentMethods.Length == 0)
|
|
||||||
return PaymentFilter.Never();
|
|
||||||
return PaymentFilter.Any(ExcludedPaymentMethods.Select(p => PaymentFilter.WhereIs(PaymentMethodId.Parse(p))).ToArray());
|
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsExcluded(PaymentMethodId paymentMethodId)
|
|
||||||
{
|
|
||||||
return GetExcludedPaymentMethods().Match(paymentMethodId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetExcluded(PaymentMethodId paymentMethodId, bool value)
|
|
||||||
{
|
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete
|
|
||||||
var methods = new HashSet<string>(ExcludedPaymentMethods ?? Array.Empty<string>());
|
|
||||||
if (value)
|
|
||||||
methods.Add(paymentMethodId.ToString());
|
|
||||||
else
|
|
||||||
methods.Remove(paymentMethodId.ToString());
|
|
||||||
ExcludedPaymentMethods = methods.ToArray();
|
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user