remove CharacterData, minor adjustments to logging

This commit is contained in:
Stanley Dimant
2022-07-04 13:38:07 +02:00
parent 7a2fb8d594
commit 64f6380294
8 changed files with 214 additions and 66 deletions

View File

@@ -15,7 +15,6 @@ namespace MareSynchronosServer.Data
public DbSet<User> Users { get; set; } public DbSet<User> Users { get; set; }
public DbSet<FileCache> Files { get; set; } public DbSet<FileCache> Files { get; set; }
public DbSet<ClientPair> ClientPairs { get; set; } public DbSet<ClientPair> ClientPairs { get; set; }
public DbSet<CharacterData> CharacterData { get; set; }
public DbSet<ForbiddenUploadEntry> ForbiddenUploadEntries { get; set; } public DbSet<ForbiddenUploadEntry> ForbiddenUploadEntries { get; set; }
public DbSet<Banned> BannedUsers { get; set; } public DbSet<Banned> BannedUsers { get; set; }
@@ -25,14 +24,6 @@ namespace MareSynchronosServer.Data
modelBuilder.Entity<User>().ToTable("Users"); modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<FileCache>().ToTable("FileCaches"); modelBuilder.Entity<FileCache>().ToTable("FileCaches");
modelBuilder.Entity<ClientPair>().ToTable("ClientPairs"); modelBuilder.Entity<ClientPair>().ToTable("ClientPairs");
modelBuilder.Entity<CharacterData>()
.Property(b => b.CharacterCache)
.HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<CharacterCacheDto>(v));
modelBuilder.Entity<CharacterData>()
.ToTable("CharacterData")
.HasKey(k => new { k.UserId, k.JobId });
modelBuilder.Entity<ForbiddenUploadEntry>().ToTable("ForbiddenUploadEntries"); modelBuilder.Entity<ForbiddenUploadEntry>().ToTable("ForbiddenUploadEntries");
modelBuilder.Entity<Banned>().ToTable("BannedUsers"); modelBuilder.Entity<Banned>().ToTable("BannedUsers");
} }

View File

@@ -47,7 +47,6 @@ namespace MareSynchronosServer.Hubs
{ {
Logger.LogInformation("User " + AuthenticatedUserId + " deleted all their files"); Logger.LogInformation("User " + AuthenticatedUserId + " deleted all their files");
DbContext.CharacterData.RemoveRange(DbContext.CharacterData.Where(c => c.UserId == AuthenticatedUserId));
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
var ownFiles = await DbContext.Files.Where(f => f.Uploaded && f.Uploader.UID == AuthenticatedUserId).ToListAsync(); var ownFiles = await DbContext.Files.Where(f => f.Uploaded && f.Uploader.UID == AuthenticatedUserId).ToListAsync();
foreach (var file in ownFiles) foreach (var file in ownFiles)
@@ -140,7 +139,7 @@ namespace MareSynchronosServer.Hubs
[HubMethodName(FilesHubAPI.InvokeSendFiles)] [HubMethodName(FilesHubAPI.InvokeSendFiles)]
public async Task<List<UploadFileDto>> SendFiles(List<string> fileListHashes) public async Task<List<UploadFileDto>> SendFiles(List<string> fileListHashes)
{ {
fileListHashes = fileListHashes.Distinct().ToList(); fileListHashes = fileListHashes.Where(f => !string.IsNullOrEmpty(f)).Distinct().ToList();
Logger.LogInformation("User " + AuthenticatedUserId + " sending files"); Logger.LogInformation("User " + AuthenticatedUserId + " sending files");
var forbiddenFiles = DbContext.ForbiddenUploadEntries.Where(f => fileListHashes.Contains(f.Hash)); var forbiddenFiles = DbContext.ForbiddenUploadEntries.Where(f => fileListHashes.Contains(f.Hash));
var filesToUpload = new List<UploadFileDto>(); var filesToUpload = new List<UploadFileDto>();

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
@@ -30,9 +29,6 @@ namespace MareSynchronosServer.Hubs
string userid = AuthenticatedUserId; string userid = AuthenticatedUserId;
var userEntry = await DbContext.Users.SingleAsync(u => u.UID == userid); 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); var ownPairData = DbContext.ClientPairs.Where(u => u.User.UID == userid);
DbContext.RemoveRange(ownPairData); DbContext.RemoveRange(ownPairData);
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
@@ -50,7 +46,6 @@ namespace MareSynchronosServer.Hubs
DbContext.RemoveRange(otherPairData); DbContext.RemoveRange(otherPairData);
DbContext.Remove(userEntry); DbContext.Remove(userEntry);
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
} }
[Authorize(AuthenticationSchemes = SecretKeyAuthenticationHandler.AuthScheme)] [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(); .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); 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; user.CharacterIdentification = null;
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
@@ -198,13 +191,13 @@ namespace MareSynchronosServer.Hubs
{ {
if (uid == AuthenticatedUserId) return; if (uid == AuthenticatedUserId) return;
uid = uid.Trim(); uid = uid.Trim();
Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist");
var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId); var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId);
var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid);
var existingEntry = var existingEntry =
await DbContext.ClientPairs.SingleOrDefaultAsync(p => await DbContext.ClientPairs.SingleOrDefaultAsync(p =>
p.User.UID == AuthenticatedUserId && p.OtherUser.UID == uid); p.User.UID == AuthenticatedUserId && p.OtherUser.UID == uid);
if (otherUser == null || existingEntry != null) return; if (otherUser == null || existingEntry != null) return;
Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist");
ClientPair wl = new ClientPair() ClientPair wl = new ClientPair()
{ {
IsPaused = false, IsPaused = false,
@@ -248,10 +241,10 @@ namespace MareSynchronosServer.Hubs
public async Task SendPairedClientPauseChange(string uid, bool isPaused) public async Task SendPairedClientPauseChange(string uid, bool isPaused)
{ {
if (uid == AuthenticatedUserId) return; 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 user = DbContext.Users.Single(u => u.UID == AuthenticatedUserId);
var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid);
if (otherUser == null) return; if (otherUser == null) return;
Logger.LogInformation("User " + AuthenticatedUserId + " changed pause status with " + uid + " to " + isPaused);
ClientPair wl = ClientPair wl =
await DbContext.ClientPairs.SingleOrDefaultAsync(w => w.User == user && w.OtherUser == otherUser); await DbContext.ClientPairs.SingleOrDefaultAsync(w => w.User == user && w.OtherUser == otherUser);
wl.IsPaused = isPaused; wl.IsPaused = isPaused;
@@ -285,17 +278,17 @@ namespace MareSynchronosServer.Hubs
{ {
if (uid == AuthenticatedUserId) return; if (uid == AuthenticatedUserId) return;
Logger.LogInformation("User " + AuthenticatedUserId + " removed " + uid + " from whitelist"); var sender = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId);
var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId);
var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid); var otherUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == uid);
if (otherUser == null) return; if (otherUser == null) return;
Logger.LogInformation("User " + AuthenticatedUserId + " removed " + uid + " from whitelist");
ClientPair wl = 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; if (wl == null) return;
DbContext.ClientPairs.Remove(wl); DbContext.ClientPairs.Remove(wl);
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
var otherEntry = OppositeEntry(uid); var otherEntry = OppositeEntry(uid);
await Clients.User(user.UID) await Clients.User(sender.UID)
.SendAsync(UserHubAPI.OnUpdateClientPairs, new ClientPairDto() .SendAsync(UserHubAPI.OnUpdateClientPairs, new ClientPairDto()
{ {
OtherUID = otherUser.UID, OtherUID = otherUser.UID,
@@ -305,18 +298,18 @@ namespace MareSynchronosServer.Hubs
{ {
if (!string.IsNullOrEmpty(otherUser.CharacterIdentification)) if (!string.IsNullOrEmpty(otherUser.CharacterIdentification))
{ {
await Clients.User(user.UID) await Clients.User(sender.UID)
.SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, otherUser.CharacterIdentification); .SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, otherUser.CharacterIdentification);
await Clients.User(otherUser.UID) 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);
} }
} }

View File

@@ -0,0 +1,166 @@
// <auto-generated />
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<string>("CharacterIdentification")
.HasColumnType("nvarchar(450)");
b.Property<string>("Reason")
.HasColumnType("nvarchar(max)");
b.HasKey("CharacterIdentification");
b.ToTable("BannedUsers", (string)null);
});
modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<bool>("AllowReceivingMessages")
.HasColumnType("bit");
b.Property<bool>("IsPaused")
.HasColumnType("bit");
b.Property<string>("OtherUserUID")
.HasColumnType("nvarchar(450)");
b.Property<byte[]>("Timestamp")
.IsConcurrencyToken()
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("rowversion");
b.Property<string>("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<string>("Hash")
.HasColumnType("nvarchar(450)");
b.Property<DateTime>("LastAccessTime")
.HasColumnType("datetime2");
b.Property<byte[]>("Timestamp")
.IsConcurrencyToken()
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("rowversion");
b.Property<bool>("Uploaded")
.HasColumnType("bit");
b.Property<string>("UploaderUID")
.HasColumnType("nvarchar(450)");
b.HasKey("Hash");
b.HasIndex("UploaderUID");
b.ToTable("FileCaches", (string)null);
});
modelBuilder.Entity("MareSynchronosServer.Models.ForbiddenUploadEntry", b =>
{
b.Property<string>("Hash")
.HasColumnType("nvarchar(450)");
b.Property<string>("ForbiddenBy")
.HasColumnType("nvarchar(max)");
b.HasKey("Hash");
b.ToTable("ForbiddenUploadEntries", (string)null);
});
modelBuilder.Entity("MareSynchronosServer.Models.User", b =>
{
b.Property<string>("UID")
.HasColumnType("nvarchar(450)");
b.Property<string>("CharacterIdentification")
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsAdmin")
.HasColumnType("bit");
b.Property<bool>("IsModerator")
.HasColumnType("bit");
b.Property<string>("SecretKey")
.HasColumnType("nvarchar(max)");
b.Property<byte[]>("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
}
}
}

View File

@@ -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<string>(type: "nvarchar(450)", nullable: false),
JobId = table.Column<int>(type: "int", nullable: false),
CharacterCache = table.Column<string>(type: "nvarchar(max)", nullable: true),
Hash = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CharacterData", x => new { x.UserId, x.JobId });
});
}
}
}

View File

@@ -35,25 +35,6 @@ namespace MareSynchronosServer.Migrations
b.ToTable("BannedUsers", (string)null); b.ToTable("BannedUsers", (string)null);
}); });
modelBuilder.Entity("MareSynchronosServer.Models.CharacterData", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<string>("CharacterCache")
.HasColumnType("nvarchar(max)");
b.Property<string>("Hash")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "JobId");
b.ToTable("CharacterData", (string)null);
});
modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")

View File

@@ -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; }
}
}

View File

@@ -28,7 +28,6 @@ namespace MareSynchronosServer
{ {
user.CharacterIdentification = string.Empty; user.CharacterIdentification = string.Empty;
} }
context.CharacterData.RemoveRange(context.CharacterData);
var looseFiles = context.Files.Where(f => f.Uploaded == false); var looseFiles = context.Files.Where(f => f.Uploaded == false);
context.RemoveRange(looseFiles); context.RemoveRange(looseFiles);
context.SaveChanges(); context.SaveChanges();