From cc24dc067e9d28b7abbd55cf2b5479edcff94bda Mon Sep 17 00:00:00 2001 From: azyges <229218900+azyges@users.noreply.github.com> Date: Mon, 27 Oct 2025 00:59:56 +0900 Subject: [PATCH 1/3] fix moderators + profiles --- .../Hubs/LightlessHub.Functions.cs | 3 ++- .../Hubs/LightlessHub.Groups.cs | 14 ++++++++++---- .../LightlessSyncServer/Utils/Extensions.cs | 3 ++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs index c5fd851..b0910f4 100644 --- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs +++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs @@ -211,7 +211,8 @@ public partial class LightlessHub if (isOwnerResult.ReferredGroup == null) return (false, null); - var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync(g => g.GroupGID == gid || g.Group.Alias == gid && g.GroupUserUID == UserUID).ConfigureAwait(false); + var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync( + g => (g.GroupGID == gid || g.Group.Alias == gid) && g.GroupUserUID == UserUID).ConfigureAwait(false); if (groupPairSelf == null || !groupPairSelf.IsModerator) return (false, null); return (true, isOwnerResult.ReferredGroup); diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs index 80f8d5f..25b09dd 100644 --- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs +++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs @@ -799,8 +799,8 @@ public partial class LightlessHub if (!hasRights) return; var groupProfileDb = await DbContext.GroupProfiles - .FirstOrDefaultAsync(g => g.Group.GID == dto.Group.GID || g.Group.Alias == dto.Group.GID, - cancellationToken) + .Include(g => g.Group) + .FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID, cancellationToken) .ConfigureAwait(false); ImageCheckService.ImageLoadResult profileResult = null; @@ -830,27 +830,33 @@ public partial class LightlessHub } } + var sanitizedProfileImage = profileResult?.Base64Image; + var sanitizedBannerImage = bannerResult?.Base64Image; + if (groupProfileDb == null) { groupProfileDb = new GroupProfile { GroupGID = dto.Group.GID, + Group = group, ProfileDisabled = false, IsNSFW = dto.IsNsfw ?? false, }; - groupProfileDb.UpdateProfileFromDto(dto, profileResult.Base64Image, bannerResult.Base64Image); + groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); await DbContext.GroupProfiles.AddAsync(groupProfileDb, cancellationToken).ConfigureAwait(false); } else { + groupProfileDb.Group ??= group; + if (groupProfileDb?.ProfileDisabled ?? false) { await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, "Your profile was permanently disabled and cannot be edited").ConfigureAwait(false); return; } - groupProfileDb.UpdateProfileFromDto(dto, profileResult.Base64Image, bannerResult.Base64Image); + groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); var userIds = await DbContext.GroupPairs .Where(p => p.GroupGID == groupProfileDb.GroupGID) diff --git a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs index e0d09d9..bc1d71e 100644 --- a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs +++ b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs @@ -45,7 +45,8 @@ public static class Extensions return new GroupProfileDto(Group: null, Description: null, Tags: null, PictureBase64: null, BannerBase64: null, IsNsfw: false, IsDisabled: false); } - var groupData = groupProfile.Group?.ToGroupData(); + var groupData = groupProfile.Group?.ToGroupData() + ?? (!string.IsNullOrWhiteSpace(groupProfile.GroupGID) ? new GroupData(groupProfile.GroupGID) : null); return new GroupProfileDto( groupData, From ae09d79577883a4347ea0c8acb280b4f3a53b41f Mon Sep 17 00:00:00 2001 From: cake Date: Sun, 26 Oct 2025 17:43:49 +0100 Subject: [PATCH 2/3] fix image results --- .../LightlessSyncServer/Hubs/LightlessHub.Groups.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs index 80f8d5f..4e9d757 100644 --- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs +++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs @@ -803,8 +803,8 @@ public partial class LightlessHub cancellationToken) .ConfigureAwait(false); - ImageCheckService.ImageLoadResult profileResult = null; - ImageCheckService.ImageLoadResult bannerResult = null; + ImageCheckService.ImageLoadResult profileResult = new(); + ImageCheckService.ImageLoadResult bannerResult = new(); //Avatar image validation if (!string.IsNullOrEmpty(dto.PictureBase64)) @@ -839,7 +839,7 @@ public partial class LightlessHub IsNSFW = dto.IsNsfw ?? false, }; - groupProfileDb.UpdateProfileFromDto(dto, profileResult.Base64Image, bannerResult.Base64Image); + groupProfileDb.UpdateProfileFromDto(dto, profileResult?.Base64Image, bannerResult?.Base64Image); await DbContext.GroupProfiles.AddAsync(groupProfileDb, cancellationToken).ConfigureAwait(false); } else @@ -850,7 +850,7 @@ public partial class LightlessHub return; } - groupProfileDb.UpdateProfileFromDto(dto, profileResult.Base64Image, bannerResult.Base64Image); + groupProfileDb.UpdateProfileFromDto(dto, profileResult?.Base64Image, bannerResult?.Base64Image); var userIds = await DbContext.GroupPairs .Where(p => p.GroupGID == groupProfileDb.GroupGID) From 8cde3b493308bf91b40a279c04e264a39e034f7a Mon Sep 17 00:00:00 2001 From: cake Date: Sun, 26 Oct 2025 18:59:20 +0100 Subject: [PATCH 3/3] Fixed image update from dto --- .../LightlessSyncServer/Utils/Extensions.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs index bc1d71e..3911ff0 100644 --- a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs +++ b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs @@ -17,22 +17,22 @@ public static class Extensions if (profile == null || dto == null) return; - profile.Base64GroupProfileImage = string.IsNullOrWhiteSpace(base64PictureString) ? null : base64PictureString; - profile.Base64GroupBannerImage = string.IsNullOrWhiteSpace(base64BannerString) ? null : base64BannerString; + if (base64PictureString != null) profile.Base64GroupProfileImage = base64PictureString; + if (base64BannerString != null) profile.Base64GroupBannerImage = base64BannerString; if (dto.Tags != null) profile.Tags = dto.Tags; if (dto.Description != null) profile.Description = dto.Description; if (dto.IsNsfw.HasValue) profile.IsNSFW = dto.IsNsfw.Value; } - public static void UpdateProfileFromDto(this UserProfileData profile, UserProfileDto dto, string? base64PictureString, string? base64BannerString = null) + public static void UpdateProfileFromDto(this UserProfileData profile, UserProfileDto dto, string? base64PictureString = null, string? base64BannerString = null) { ArgumentNullException.ThrowIfNull(profile); ArgumentNullException.ThrowIfNull(dto); if (profile == null || dto == null) return; - profile.Base64ProfileImage = string.IsNullOrWhiteSpace(base64PictureString) ? null : base64PictureString; - profile.Base64BannerImage = string.IsNullOrWhiteSpace(base64BannerString) ? null : base64BannerString; + if (base64PictureString != null) profile.Base64ProfileImage = base64PictureString; + if (base64BannerString != null) profile.Base64BannerImage = base64BannerString; if (dto.Tags != null) profile.Tags = dto.Tags; if (dto.Description != null) profile.UserDescription = dto.Description; if (dto.IsNSFW.HasValue) profile.IsNSFW = dto.IsNSFW.Value;