From e70f564162ee99023f7d6b1cc58885425ecc88b9 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Tue, 12 Jul 2022 11:39:23 +0200 Subject: [PATCH] add database migration to limit UID and Hash max lengths --- .../MareSynchronosServer/Hubs/FilesHub.cs | 2 - .../20220712082237_SetMaxLengths.Designer.cs | 175 ++++++++++++++++++ .../20220712082237_SetMaxLengths.cs | 141 ++++++++++++++ .../Migrations/MareDbContextModelSnapshot.cs | 15 +- .../MareSynchronosServer/Models/FileCache.cs | 2 +- .../MareSynchronosServer/Models/User.cs | 1 + 6 files changed, 325 insertions(+), 11 deletions(-) create mode 100644 MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.Designer.cs create mode 100644 MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.cs diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs index d37981a..d7dd180 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs @@ -158,7 +158,6 @@ namespace MareSynchronosServer.Hubs await DbContext.Files.AddAsync(new FileCache() { Hash = file, - LastAccessTime = DateTime.Now, Uploaded = false, Uploader = DbContext.Users.Single(u => u.UID == userId) }); @@ -225,7 +224,6 @@ namespace MareSynchronosServer.Hubs await File.WriteAllBytesAsync(Path.Combine(BasePath, hash), uploadedFile.ToArray()); relatedFile = DbContext.Files.Single(f => f.Hash == hash); relatedFile.Uploaded = true; - relatedFile.LastAccessTime = DateTime.Now; await DbContext.SaveChangesAsync(); Logger.LogInformation("File " + hash + " added to DB"); } diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.Designer.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.Designer.cs new file mode 100644 index 0000000..4a89585 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.Designer.cs @@ -0,0 +1,175 @@ +// +using System; +using MareSynchronosServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace MareSynchronosServer.Migrations +{ + [DbContext(typeof(MareDbContext))] + [Migration("20220712082237_SetMaxLengths")] + partial class SetMaxLengths + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("MareSynchronosServer.Models.Banned", b => + { + b.Property("CharacterIdentification") + .HasColumnType("nvarchar(450)"); + + b.Property("Reason") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("CharacterIdentification"); + + b.ToTable("BannedUsers", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("AllowReceivingMessages") + .HasColumnType("bit"); + + b.Property("IsPaused") + .HasColumnType("bit"); + + b.Property("OtherUserUID") + .HasColumnType("nvarchar(10)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.Property("UserUID") + .HasColumnType("nvarchar(10)"); + + b.HasKey("Id"); + + b.HasIndex("OtherUserUID"); + + b.HasIndex("UserUID"); + + b.ToTable("ClientPairs", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => + { + b.Property("Hash") + .HasMaxLength(20) + .HasColumnType("nvarchar(40)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.Property("Uploaded") + .HasColumnType("bit"); + + b.Property("UploaderUID") + .HasColumnType("nvarchar(10)"); + + b.HasKey("Hash"); + + b.HasIndex("UploaderUID"); + + b.ToTable("FileCaches", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ForbiddenUploadEntry", b => + { + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("ForbiddenBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("Hash"); + + b.ToTable("ForbiddenUploadEntries", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.User", b => + { + b.Property("UID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CharacterIdentification") + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsModerator") + .HasColumnType("bit"); + + b.Property("SecretKey") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("UID"); + + b.ToTable("Users", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => + { + b.HasOne("MareSynchronosServer.Models.User", "OtherUser") + .WithMany() + .HasForeignKey("OtherUserUID"); + + b.HasOne("MareSynchronosServer.Models.User", "User") + .WithMany() + .HasForeignKey("UserUID"); + + b.Navigation("OtherUser"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => + { + b.HasOne("MareSynchronosServer.Models.User", "Uploader") + .WithMany() + .HasForeignKey("UploaderUID"); + + b.Navigation("Uploader"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.cs new file mode 100644 index 0000000..fc8c77a --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712082237_SetMaxLengths.cs @@ -0,0 +1,141 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MareSynchronosServer.Migrations +{ + public partial class SetMaxLengths : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "LastAccessTime", + table: "FileCaches"); + + migrationBuilder.DropForeignKey("FK_FileCaches_Users_UploaderUID", "FileCaches"); + migrationBuilder.DropForeignKey("FK_ClientPairs_Users_UserUID", "ClientPairs"); + migrationBuilder.DropForeignKey("FK_ClientPairs_Users_OtherUserUID", "ClientPairs"); + migrationBuilder.DropPrimaryKey("PK_FileCaches", "FileCaches"); + migrationBuilder.DropPrimaryKey("PK_Users", "Users"); + + migrationBuilder.AlterColumn( + name: "UploaderUID", + table: "FileCaches", + type: "nvarchar(10)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(450)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Hash", + table: "FileCaches", + type: "nvarchar(40)", + maxLength: 20, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "UserUID", + table: "ClientPairs", + type: "nvarchar(10)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(450)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "OtherUserUID", + table: "ClientPairs", + type: "nvarchar(10)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(450)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "UID", + table: "Users", + type: "nvarchar(10)", + maxLength: 10, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AddPrimaryKey("PK_Users", "Users", "UID"); + migrationBuilder.AddPrimaryKey("PK_FileCaches", "FileCaches", "Hash"); + migrationBuilder.AddForeignKey("FK_FileCaches_Users_UploaderUID", "FileCaches", "UploaderUID", "Users"); + migrationBuilder.AddForeignKey("FK_ClientPairs_Users_UserUID", "ClientPairs", "UserUID", "Users"); + migrationBuilder.AddForeignKey("FK_ClientPairs_Users_OtherUserUID", "ClientPairs", "UserUID", "Users"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey("FK_FileCaches_Users_UploaderUID", "FileCaches"); + migrationBuilder.DropForeignKey("FK_ClientPairs_Users_UserUID", "ClientPairs"); + migrationBuilder.DropForeignKey("FK_ClientPairs_Users_OtherUserUID", "ClientPairs"); + migrationBuilder.DropPrimaryKey("PK_FileCaches", "FileCaches"); + migrationBuilder.DropPrimaryKey("PK_Users", "Users"); + + migrationBuilder.AlterColumn( + name: "UID", + table: "Users", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldMaxLength: 10); + + migrationBuilder.AlterColumn( + name: "UploaderUID", + table: "FileCaches", + type: "nvarchar(450)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Hash", + table: "FileCaches", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(20)", + oldMaxLength: 20); + + migrationBuilder.AddColumn( + name: "LastAccessTime", + table: "FileCaches", + type: "datetime2", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AlterColumn( + name: "UserUID", + table: "ClientPairs", + type: "nvarchar(450)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "OtherUserUID", + table: "ClientPairs", + type: "nvarchar(450)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldNullable: true); + + migrationBuilder.AddPrimaryKey("PK_Users", "Users", "UID"); + migrationBuilder.AddPrimaryKey("PK_FileCaches", "FileCaches", "Hash"); + migrationBuilder.AddForeignKey("FK_FileCaches_Users_UploaderUID", "FileCaches", "UploaderUID", "Users"); + migrationBuilder.AddForeignKey("FK_ClientPairs_Users_UserUID", "ClientPairs", "UserUID", "Users"); + migrationBuilder.AddForeignKey("FK_ClientPairs_Users_OtherUserUID", "ClientPairs", "UserUID", "Users"); + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs index ebc28e7..bfcf123 100644 --- a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs @@ -55,7 +55,7 @@ namespace MareSynchronosServer.Migrations .HasColumnType("bit"); b.Property("OtherUserUID") - .HasColumnType("nvarchar(450)"); + .HasColumnType("nvarchar(10)"); b.Property("Timestamp") .IsConcurrencyToken() @@ -63,7 +63,7 @@ namespace MareSynchronosServer.Migrations .HasColumnType("rowversion"); b.Property("UserUID") - .HasColumnType("nvarchar(450)"); + .HasColumnType("nvarchar(10)"); b.HasKey("Id"); @@ -77,10 +77,8 @@ namespace MareSynchronosServer.Migrations modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => { b.Property("Hash") - .HasColumnType("nvarchar(450)"); - - b.Property("LastAccessTime") - .HasColumnType("datetime2"); + .HasMaxLength(20) + .HasColumnType("nvarchar(40)"); b.Property("Timestamp") .IsConcurrencyToken() @@ -91,7 +89,7 @@ namespace MareSynchronosServer.Migrations .HasColumnType("bit"); b.Property("UploaderUID") - .HasColumnType("nvarchar(450)"); + .HasColumnType("nvarchar(10)"); b.HasKey("Hash"); @@ -121,7 +119,8 @@ namespace MareSynchronosServer.Migrations modelBuilder.Entity("MareSynchronosServer.Models.User", b => { b.Property("UID") - .HasColumnType("nvarchar(450)"); + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); b.Property("CharacterIdentification") .HasColumnType("nvarchar(max)"); diff --git a/MareSynchronosServer/MareSynchronosServer/Models/FileCache.cs b/MareSynchronosServer/MareSynchronosServer/Models/FileCache.cs index 95c3297..b5a5e22 100644 --- a/MareSynchronosServer/MareSynchronosServer/Models/FileCache.cs +++ b/MareSynchronosServer/MareSynchronosServer/Models/FileCache.cs @@ -7,10 +7,10 @@ namespace MareSynchronosServer.Models public class FileCache { [Key] + [MaxLength(40)] public string Hash { get; set; } public User Uploader { get; set; } public bool Uploaded { get; set; } - public DateTime LastAccessTime { get; set; } [Timestamp] public byte[] Timestamp { get; set; } } diff --git a/MareSynchronosServer/MareSynchronosServer/Models/User.cs b/MareSynchronosServer/MareSynchronosServer/Models/User.cs index bca6496..5bc9a54 100644 --- a/MareSynchronosServer/MareSynchronosServer/Models/User.cs +++ b/MareSynchronosServer/MareSynchronosServer/Models/User.cs @@ -6,6 +6,7 @@ namespace MareSynchronosServer.Models public class User { [Key] + [MaxLength(10)] public string UID { get; set; } public string SecretKey { get; set; } public string CharacterIdentification { get; set; }