Merge pull request #1950 from btcpayserver/fixu2f-cascade

Make U2F devices cascade delete
This commit is contained in:
Nicolas Dorier 2020-10-08 12:00:30 +09:00 committed by GitHub
commit 83b28e0b00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 64 additions and 3 deletions

View file

@ -90,7 +90,8 @@ namespace BTCPayServer.Data
PullPaymentData.OnModelCreating(builder); PullPaymentData.OnModelCreating(builder);
PayoutData.OnModelCreating(builder); PayoutData.OnModelCreating(builder);
RefundData.OnModelCreating(builder); RefundData.OnModelCreating(builder);
U2FDevice.OnModelCreating(builder);
if (Database.IsSqlite() && !_designTime) if (Database.IsSqlite() && !_designTime)
{ {
// SQLite does not have proper support for DateTimeOffset via Entity Framework Core, see the limitations // SQLite does not have proper support for DateTimeOffset via Entity Framework Core, see the limitations

View file

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
namespace BTCPayServer.Data namespace BTCPayServer.Data
{ {
@ -18,5 +19,15 @@ namespace BTCPayServer.Data
public string ApplicationUserId { get; set; } public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; } public ApplicationUser ApplicationUser { get; set; }
internal static void OnModelCreating(ModelBuilder builder)
{
builder.Entity<U2FDevice>()
.HasOne(o => o.ApplicationUser)
.WithMany(i => i.U2FDevices)
.HasForeignKey(i => i.ApplicationUserId).OnDelete(DeleteBehavior.Cascade);
}
} }
} }

View file

@ -0,0 +1,47 @@
using BTCPayServer.Data;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
namespace BTCPayServer.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20201007090617_u2fDeviceCascade")]
public partial class u2fDeviceCascade : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
if (this.SupportDropForeignKey(migrationBuilder.ActiveProvider))
{
migrationBuilder.DropForeignKey(
name: "FK_U2FDevices_AspNetUsers_ApplicationUserId",
table: "U2FDevices");
migrationBuilder.AddForeignKey(
name: "FK_U2FDevices_AspNetUsers_ApplicationUserId",
table: "U2FDevices",
column: "ApplicationUserId",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
protected override void Down(MigrationBuilder migrationBuilder)
{
if (this.SupportDropForeignKey(migrationBuilder.ActiveProvider))
{
migrationBuilder.DropForeignKey(
name: "FK_U2FDevices_AspNetUsers_ApplicationUserId",
table: "U2FDevices");
migrationBuilder.AddForeignKey(
name: "FK_U2FDevices_AspNetUsers_ApplicationUserId",
table: "U2FDevices",
column: "ApplicationUserId",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
}
}
}

View file

@ -525,7 +525,8 @@ namespace BTCPayServer.Migrations
.HasColumnType("TEXT"); .HasColumnType("TEXT");
b.Property<string>("PullPaymentDataId") b.Property<string>("PullPaymentDataId")
.HasColumnType("TEXT"); .HasColumnType("TEXT")
.HasMaxLength(30);
b.HasKey("InvoiceDataId", "PullPaymentDataId"); b.HasKey("InvoiceDataId", "PullPaymentDataId");
@ -960,7 +961,8 @@ namespace BTCPayServer.Migrations
{ {
b.HasOne("BTCPayServer.Data.ApplicationUser", "ApplicationUser") b.HasOne("BTCPayServer.Data.ApplicationUser", "ApplicationUser")
.WithMany("U2FDevices") .WithMany("U2FDevices")
.HasForeignKey("ApplicationUserId"); .HasForeignKey("ApplicationUserId")
.OnDelete(DeleteBehavior.Cascade);
}); });
modelBuilder.Entity("BTCPayServer.Data.UserStore", b => modelBuilder.Entity("BTCPayServer.Data.UserStore", b =>