diff --git a/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs b/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs index 8c98456..a0b1668 100644 --- a/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs +++ b/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs @@ -15,7 +15,6 @@ namespace MareSynchronosServer.Data public DbSet Users { get; set; } public DbSet Files { get; set; } public DbSet ClientPairs { get; set; } - public DbSet CharacterData { get; set; } public DbSet ForbiddenUploadEntries { get; set; } public DbSet BannedUsers { get; set; } @@ -25,14 +24,6 @@ namespace MareSynchronosServer.Data modelBuilder.Entity().ToTable("Users"); modelBuilder.Entity().ToTable("FileCaches"); modelBuilder.Entity().ToTable("ClientPairs"); - modelBuilder.Entity() - .Property(b => b.CharacterCache) - .HasConversion( - v => JsonConvert.SerializeObject(v), - v => JsonConvert.DeserializeObject(v)); - modelBuilder.Entity() - .ToTable("CharacterData") - .HasKey(k => new { k.UserId, k.JobId }); modelBuilder.Entity().ToTable("ForbiddenUploadEntries"); modelBuilder.Entity().ToTable("BannedUsers"); } diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs index f80b0d5..35a57b7 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/FilesHub.cs @@ -47,7 +47,6 @@ namespace MareSynchronosServer.Hubs { Logger.LogInformation("User " + AuthenticatedUserId + " deleted all their files"); - DbContext.CharacterData.RemoveRange(DbContext.CharacterData.Where(c => c.UserId == AuthenticatedUserId)); await DbContext.SaveChangesAsync(); var ownFiles = await DbContext.Files.Where(f => f.Uploaded && f.Uploader.UID == AuthenticatedUserId).ToListAsync(); foreach (var file in ownFiles) @@ -140,7 +139,7 @@ namespace MareSynchronosServer.Hubs [HubMethodName(FilesHubAPI.InvokeSendFiles)] public async Task> SendFiles(List fileListHashes) { - fileListHashes = fileListHashes.Distinct().ToList(); + fileListHashes = fileListHashes.Where(f => !string.IsNullOrEmpty(f)).Distinct().ToList(); Logger.LogInformation("User " + AuthenticatedUserId + " sending files"); var forbiddenFiles = DbContext.ForbiddenUploadEntries.Where(f => fileListHashes.Contains(f.Hash)); var filesToUpload = new List(); diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/UserHub.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/UserHub.cs index 95b8788..57b2393 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/UserHub.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/UserHub.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Security.Cryptography; using System.Text; @@ -30,9 +29,6 @@ namespace MareSynchronosServer.Hubs string userid = AuthenticatedUserId; var userEntry = await DbContext.Users.SingleAsync(u => u.UID == userid); - var charData = DbContext.CharacterData.Where(u => u.UserId == userid); - DbContext.RemoveRange(charData); - await DbContext.SaveChangesAsync(); var ownPairData = DbContext.ClientPairs.Where(u => u.User.UID == userid); DbContext.RemoveRange(ownPairData); await DbContext.SaveChangesAsync(); @@ -50,7 +46,6 @@ namespace MareSynchronosServer.Hubs DbContext.RemoveRange(otherPairData); DbContext.Remove(userEntry); await DbContext.SaveChangesAsync(); - } [Authorize(AuthenticationSchemes = SecretKeyAuthenticationHandler.AuthScheme)] @@ -122,8 +117,6 @@ namespace MareSynchronosServer.Hubs .Where(u => otherUsers.Any(e => e == u.User) && u.OtherUser == user && !u.IsPaused).ToList(); await Clients.Users(otherEntries.Select(e => e.User.UID)).SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, user.CharacterIdentification); - var outdatedCharacterData = DbContext.CharacterData.Where(v => v.UserId == user.UID); - DbContext.RemoveRange(outdatedCharacterData); user.CharacterIdentification = null; await DbContext.SaveChangesAsync(); @@ -198,13 +191,13 @@ namespace MareSynchronosServer.Hubs { if (uid == AuthenticatedUserId) return; uid = uid.Trim(); - Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist"); var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); var existingEntry = await DbContext.ClientPairs.SingleOrDefaultAsync(p => p.User.UID == AuthenticatedUserId && p.OtherUser.UID == uid); if (otherUser == null || existingEntry != null) return; + Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist"); ClientPair wl = new ClientPair() { IsPaused = false, @@ -248,10 +241,10 @@ namespace MareSynchronosServer.Hubs public async Task SendPairedClientPauseChange(string uid, bool isPaused) { if (uid == AuthenticatedUserId) return; - Logger.LogInformation("User " + AuthenticatedUserId + " changed pause status with " + uid + " to " + isPaused); var user = DbContext.Users.Single(u => u.UID == AuthenticatedUserId); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); if (otherUser == null) return; + Logger.LogInformation("User " + AuthenticatedUserId + " changed pause status with " + uid + " to " + isPaused); ClientPair wl = await DbContext.ClientPairs.SingleOrDefaultAsync(w => w.User == user && w.OtherUser == otherUser); wl.IsPaused = isPaused; @@ -285,17 +278,17 @@ namespace MareSynchronosServer.Hubs { if (uid == AuthenticatedUserId) return; - Logger.LogInformation("User " + AuthenticatedUserId + " removed " + uid + " from whitelist"); - var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId); + var sender = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); if (otherUser == null) return; + Logger.LogInformation("User " + AuthenticatedUserId + " removed " + uid + " from whitelist"); ClientPair wl = - await DbContext.ClientPairs.SingleOrDefaultAsync(w => w.User == user && w.OtherUser == otherUser); + await DbContext.ClientPairs.SingleOrDefaultAsync(w => w.User == sender && w.OtherUser == otherUser); if (wl == null) return; DbContext.ClientPairs.Remove(wl); await DbContext.SaveChangesAsync(); var otherEntry = OppositeEntry(uid); - await Clients.User(user.UID) + await Clients.User(sender.UID) .SendAsync(UserHubAPI.OnUpdateClientPairs, new ClientPairDto() { OtherUID = otherUser.UID, @@ -305,18 +298,18 @@ namespace MareSynchronosServer.Hubs { if (!string.IsNullOrEmpty(otherUser.CharacterIdentification)) { - await Clients.User(user.UID) + await Clients.User(sender.UID) .SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, otherUser.CharacterIdentification); await Clients.User(otherUser.UID) - .SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, user.CharacterIdentification); + .SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, sender.CharacterIdentification); + await Clients.User(otherUser.UID).SendAsync(UserHubAPI.OnUpdateClientPairs, new ClientPairDto() + { + OtherUID = sender.UID, + IsPaused = otherEntry.IsPaused, + IsPausedFromOthers = false, + IsSynced = false + }, sender.CharacterIdentification); } - await Clients.User(uid).SendAsync(UserHubAPI.OnUpdateClientPairs, new ClientPairDto() - { - OtherUID = user.UID, - IsPaused = otherEntry.IsPaused, - IsPausedFromOthers = false, - IsSynced = false - }, user.CharacterIdentification); } } diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/20220704113233_RemoveCharacterData.Designer.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220704113233_RemoveCharacterData.Designer.cs new file mode 100644 index 0000000..ef7185a --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220704113233_RemoveCharacterData.Designer.cs @@ -0,0 +1,166 @@ +// +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("20220704113233_RemoveCharacterData")] + partial class RemoveCharacterData + { + 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.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(450)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.Property("UserUID") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("OtherUserUID"); + + b.HasIndex("UserUID"); + + b.ToTable("ClientPairs", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => + { + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("LastAccessTime") + .HasColumnType("datetime2"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.Property("Uploaded") + .HasColumnType("bit"); + + b.Property("UploaderUID") + .HasColumnType("nvarchar(450)"); + + 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.HasKey("Hash"); + + b.ToTable("ForbiddenUploadEntries", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.User", b => + { + b.Property("UID") + .HasColumnType("nvarchar(450)"); + + 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/20220704113233_RemoveCharacterData.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220704113233_RemoveCharacterData.cs new file mode 100644 index 0000000..d2b5ad1 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220704113233_RemoveCharacterData.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MareSynchronosServer.Migrations +{ + public partial class RemoveCharacterData : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "CharacterData"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "CharacterData", + columns: table => new + { + UserId = table.Column(type: "nvarchar(450)", nullable: false), + JobId = table.Column(type: "int", nullable: false), + CharacterCache = table.Column(type: "nvarchar(max)", nullable: true), + Hash = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CharacterData", x => new { x.UserId, x.JobId }); + }); + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs index b2eb236..e3b0c59 100644 --- a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs @@ -35,25 +35,6 @@ namespace MareSynchronosServer.Migrations b.ToTable("BannedUsers", (string)null); }); - modelBuilder.Entity("MareSynchronosServer.Models.CharacterData", b => - { - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.Property("JobId") - .HasColumnType("int"); - - b.Property("CharacterCache") - .HasColumnType("nvarchar(max)"); - - b.Property("Hash") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "JobId"); - - b.ToTable("CharacterData", (string)null); - }); - modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => { b.Property("Id") diff --git a/MareSynchronosServer/MareSynchronosServer/Models/CharacterData.cs b/MareSynchronosServer/MareSynchronosServer/Models/CharacterData.cs deleted file mode 100644 index 44b2abf..0000000 --- a/MareSynchronosServer/MareSynchronosServer/Models/CharacterData.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; -using MareSynchronos.API; - -namespace MareSynchronosServer.Models -{ - public class CharacterData - { - public string UserId { get; set; } - public int JobId { get; set; } - public CharacterCacheDto CharacterCache { get; set; } - public string Hash { get; set; } - } -} diff --git a/MareSynchronosServer/MareSynchronosServer/Program.cs b/MareSynchronosServer/MareSynchronosServer/Program.cs index 13a95e9..4eabcee 100644 --- a/MareSynchronosServer/MareSynchronosServer/Program.cs +++ b/MareSynchronosServer/MareSynchronosServer/Program.cs @@ -28,7 +28,6 @@ namespace MareSynchronosServer { user.CharacterIdentification = string.Empty; } - context.CharacterData.RemoveRange(context.CharacterData); var looseFiles = context.Files.Where(f => f.Uploaded == false); context.RemoveRange(looseFiles); context.SaveChanges();